ZFSのミラーディスク交換

2017年5月1日FreeBSD,NAS

FreeBSDのファイルシステムにZFSを使っています。MirrorしたHDDを2セット連結して、大きなpool(次の図のupool)を作っています。

ZFSファイルシステム

1. ディスク故障〜交換

DEGRADED

なのですが、mirror-0の1つの片側のHDDが壊れてしまいました。UNAVAILとなっています。

# zpool status
  pool: rpool
 state: ONLINE
status: The pool is formatted using a legacy on-disk format.  The pool can
	still be used, but some features are unavailable.
action: Upgrade the pool using 'zpool upgrade'.  Once this is done, the
	pool will no longer be accessible on software that does not support feature
	flags.
  scan: scrub repaired 0 in 0h0m with 0 errors on Sat Feb 22 08:51:43 2014
config:

	NAME         STATE     READ WRITE CKSUM
	rpool        ONLINE       0     0     0
	  gpt/zroot  ONLINE       0     0     0

errors: No known data errors

  pool: upool
 state: DEGRADED
status: One or more devices could not be opened.  Sufficient replicas exist for
	the pool to continue functioning in a degraded state.
action: Attach the missing device and online it using 'zpool online'.
   see: http://illumos.org/msg/ZFS-8000-2Q
  scan: resilvered 599M in 0h1m with 0 errors on Sat Apr 22 00:51:30 2017
config:

	NAME                      STATE     READ WRITE CKSUM
	upool                     DEGRADED     0     0     0
	  mirror-0                DEGRADED     0     0     0
	    gpt/disk4             ONLINE       0     0     0  block size: 512B configured, 4096B native
	    10158680820546133657  UNAVAIL      0     0     0  was /dev/gpt/disk2
	  mirror-1                ONLINE       0     0     0
	    gpt/disk3             ONLINE       0     0     0
	    gpt/disk5             ONLINE       0     0     0  block size: 512B configured, 4096B native
	logs
	  gpt/zil                 ONLINE       0     0     0
	cache
	  gpt/l2arc               ONLINE       0     0     0

errors: No known data errors

  pool: ypool
 state: ONLINE
  scan: resilvered 42.8M in 0h0m with 0 errors on Sat Apr 22 01:15:54 2017
config:

	NAME           STATE     READ WRITE CKSUM
	ypool          ONLINE       0     0     0
	  mirror-0     ONLINE       0     0     0
	    gpt/disk0  ONLINE       0     0     0
	    gpt/disk1  ONLINE       0     0     0

errors: No known data errors

ディスク交換

まずいです。データが失われてしまいます。壊れたディスクを外して、新しいディスクを取り付けました。

[amazonjs asin="B01M0E8TRQ" locale="JP"]

使っているのは、2.5インチの2TBです。これは、15mm厚なので、通常のNotePCには入らないと思います。

gpart showで、状態を確認します。新しいディスクは、ada2につながっています。新しいといっても、実験で使っていたので、捨てても構わないデータが入っています。

# gpart show
=>        34  2930277101  ada0  GPT  (1.4T)
          34  2930277101     1  freebsd-zfs  (1.4T)

=>        34  2930277101  ada1  GPT  (1.4T)
          34  2930277101     1  freebsd-zfs  (1.4T)

=>        34  2930277101  ada3  GPT  (1.4T)
          34  2930277101     1  freebsd-zfs  (1.4T)

=>      34  62533229  ada4  GPT  (30G)
        34       128     1  freebsd-boot  (64K)
       162  16777216     2  freebsd-zfs  (8.0G)
  16777378  33554432     3  freebsd-zfs  (16G)
  50331810  12201453     4  freebsd-zfs  (5.8G)

=>        34  3907029101  ada5  GPT  (1.8T)
          34           6        - free -  (3.0K)
          40  3907029088     1  freebsd-zfs  (1.8T)
  3907029128           7        - free -  (3.5K)

=>        34  3907029101  ada6  GPT  (1.8T)
          34           6        - free -  (3.0K)
          40  3907029088     1  freebsd-zfs  (1.8T)
  3907029128           7        - free -  (3.5K)

=>         1  3907029167  ada2  MBR  (1.8T)
           1          39        - free -  (20K)
          40     1060250     1  linux-data  (518M)
     1060290           6        - free -  (3.0K)
     1060296     1060284     2  linux-data  (518M)
     2120580           4        - free -  (2.0K)
     2120584  3903891386     3  linux-data  (1.8T)
  3906011970           6        - free -  (3.0K)
  3906011976      996024     4  linux-data  (486M)
  3907008000       21168        - free -  (10M)

=>         1  3907029167  diskid/DISK-84IJPY67T  MBR  (1.8T)
           1          39                         - free -  (20K)
          40     1060250                      1  linux-data  (518M)
     1060290           6                         - free -  (3.0K)
     1060296     1060284                      2  linux-data  (518M)
     2120580           4                         - free -  (2.0K)
     2120584  3903891386                      3  linux-data  (1.8T)
  3906011970           6                         - free -  (3.0K)
  3906011976      996024                      4  linux-data  (486M)
  3907008000       21168                         - free -  (10M)

2. GPTにパーティションを切り直す

ディスク初期化

GPTディスクの準備は、以前やりました。基本的に、同じ方法でできます。

ZFSで既存ディスクをミラー化する

まずは、初期化です。使いかけのディスクだったので、-Fオプションをつけて強制消去します。

# gpart destroy ada2
gpart: Device busy
# gpart destroy -F ada2
ada2 destroyed

GPTパーティション作成

# gpart create -s gpt ada2
ada2 created
# gpart show
=>        34  2930277101  ada0  GPT  (1.4T)
          34  2930277101     1  freebsd-zfs  (1.4T)

=>        34  2930277101  ada1  GPT  (1.4T)
          34  2930277101     1  freebsd-zfs  (1.4T)

=>        34  2930277101  ada3  GPT  (1.4T)
          34  2930277101     1  freebsd-zfs  (1.4T)

=>      34  62533229  ada4  GPT  (30G)
        34       128     1  freebsd-boot  (64K)
       162  16777216     2  freebsd-zfs  (8.0G)
  16777378  33554432     3  freebsd-zfs  (16G)
  50331810  12201453     4  freebsd-zfs  (5.8G)

=>        34  3907029101  ada5  GPT  (1.8T)
          34           6        - free -  (3.0K)
          40  3907029088     1  freebsd-zfs  (1.8T)
  3907029128           7        - free -  (3.5K)

=>        34  3907029101  ada6  GPT  (1.8T)
          34           6        - free -  (3.0K)
          40  3907029088     1  freebsd-zfs  (1.8T)
  3907029128           7        - free -  (3.5K)

=>        34  3907029101  ada2  GPT  (1.8T)
          34  3907029101        - free -  (1.8T)

=>        34  3907029101  diskid/DISK-84IJPY67T  GPT  (1.8T)
          34  3907029101                         - free -  (1.8T)

3. ZFSとしてフォーマットし、ラベルを付ける

“disk6″と言う名前をつけました。

# gpart add -t freebsd-zfs -l disk6 ada2
ada2p1 added
root@freebsd:~ # gpart show
=>        34  2930277101  ada0  GPT  (1.4T)
          34  2930277101     1  freebsd-zfs  (1.4T)

=>        34  2930277101  ada1  GPT  (1.4T)
          34  2930277101     1  freebsd-zfs  (1.4T)

=>        34  2930277101  ada3  GPT  (1.4T)
          34  2930277101     1  freebsd-zfs  (1.4T)

=>      34  62533229  ada4  GPT  (30G)
        34       128     1  freebsd-boot  (64K)
       162  16777216     2  freebsd-zfs  (8.0G)
  16777378  33554432     3  freebsd-zfs  (16G)
  50331810  12201453     4  freebsd-zfs  (5.8G)

=>        34  3907029101  ada5  GPT  (1.8T)
          34           6        - free -  (3.0K)
          40  3907029088     1  freebsd-zfs  (1.8T)
  3907029128           7        - free -  (3.5K)

=>        34  3907029101  ada6  GPT  (1.8T)
          34           6        - free -  (3.0K)
          40  3907029088     1  freebsd-zfs  (1.8T)
  3907029128           7        - free -  (3.5K)

=>        34  3907029101  ada2  GPT  (1.8T)
          34           6        - free -  (3.0K)
          40  3907029088     1  freebsd-zfs  (1.8T)
  3907029128           7        - free -  (3.5K)

=>        34  3907029101  diskid/DISK-84IJPY67T  GPT  (1.8T)
          34           6                         - free -  (3.0K)
          40  3907029088                      1  freebsd-zfs  (1.8T)
  3907029128           7                         - free -  (3.5K)

ディスクの切断と接続

次のウェブページに記載されています。ZFSを使う人は、必ずお世話になるページだと思います。

既存ディスクをdetach

detachします。

# zpool detach upool 10158680820546133657
root@freebsd:~ # zpool status
  pool: rpool
 state: ONLINE
status: The pool is formatted using a legacy on-disk format.  The pool can
	still be used, but some features are unavailable.
action: Upgrade the pool using 'zpool upgrade'.  Once this is done, the
	pool will no longer be accessible on software that does not support feature
	flags.
  scan: scrub repaired 0 in 0h0m with 0 errors on Sat Feb 22 08:51:43 2014
config:

	NAME         STATE     READ WRITE CKSUM
	rpool        ONLINE       0     0     0
	  gpt/zroot  ONLINE       0     0     0

errors: No known data errors

  pool: upool
 state: ONLINE
status: One or more devices are configured to use a non-native block size.
	Expect reduced performance.
action: Replace affected devices with devices that support the
	configured block size, or migrate data to a properly configured
	pool.
  scan: resilvered 599M in 0h1m with 0 errors on Sat Apr 22 00:51:30 2017
config:

	NAME           STATE     READ WRITE CKSUM
	upool          ONLINE       0     0     0
	  gpt/disk4    ONLINE       0     0     0  block size: 512B configured, 4096B native
	  mirror-1     ONLINE       0     0     0
	    gpt/disk3  ONLINE       0     0     0
	    gpt/disk5  ONLINE       0     0     0  block size: 512B configured, 4096B native
	logs
	  gpt/zil      ONLINE       0     0     0
	cache
	  gpt/l2arc    ONLINE       0     0     0

errors: No known data errors

  pool: ypool
 state: ONLINE
  scan: resilvered 42.8M in 0h0m with 0 errors on Sat Apr 22 01:15:54 2017
config:

	NAME           STATE     READ WRITE CKSUM
	ypool          ONLINE       0     0     0
	  mirror-0     ONLINE       0     0     0
	    gpt/disk0  ONLINE       0     0     0
	    gpt/disk1  ONLINE       0     0     0

errors: No known data errors

既存ディスクにattachして、ミラー化

# zpool attach upool gpt/disk4 gpt/disk6
root@freebsd:~ # zpool status
  pool: rpool
 state: ONLINE
status: The pool is formatted using a legacy on-disk format.  The pool can
	still be used, but some features are unavailable.
action: Upgrade the pool using 'zpool upgrade'.  Once this is done, the
	pool will no longer be accessible on software that does not support feature
	flags.
  scan: scrub repaired 0 in 0h0m with 0 errors on Sat Feb 22 08:51:43 2014
config:

	NAME         STATE     READ WRITE CKSUM
	rpool        ONLINE       0     0     0
	  gpt/zroot  ONLINE       0     0     0

errors: No known data errors

  pool: upool
 state: ONLINE
status: One or more devices is currently being resilvered.  The pool will
	continue to function, possibly in a degraded state.
action: Wait for the resilver to complete.
  scan: resilver in progress since Fri Apr 28 05:35:40 2017
        6.23M scanned out of 2.18T at 532K/s, (scan is slow, no estimated time)
        3.16M resilvered, 0.00% done
config:

	NAME           STATE     READ WRITE CKSUM
	upool          ONLINE       0     0     0
	  mirror-0     ONLINE       0     0     0
	    gpt/disk4  ONLINE       0     0     0  block size: 512B configured, 4096B native
	    gpt/disk6  ONLINE       0     0     0  block size: 512B configured, 4096B native  (resilvering)
	  mirror-1     ONLINE       0     0     0
	    gpt/disk3  ONLINE       0     0     0
	    gpt/disk5  ONLINE       0     0     0  block size: 512B configured, 4096B native
	logs
	  gpt/zil      ONLINE       0     0     0
	cache
	  gpt/l2arc    ONLINE       0     0     0

errors: No known data errors

  pool: ypool
 state: ONLINE
  scan: resilvered 42.8M in 0h0m with 0 errors on Sat Apr 22 01:15:54 2017
config:

	NAME           STATE     READ WRITE CKSUM
	ypool          ONLINE       0     0     0
	  mirror-0     ONLINE       0     0     0
	    gpt/disk0  ONLINE       0     0     0
	    gpt/disk1  ONLINE       0     0     0

errors: No known data errors

コピーが始まりました。後は終了を待つだけです。

今になってきなったんだけれど、最初に入っていたデータって、なんだったんだろう。

Posted by お市のかた