2009-02-01

ZFS mirror デバイス交換

なんと、年末に買ったSSD、半月でエラーが出始めやがった。

Jan 17 01:34:02 kamui root: ZFS: checksum mismatch, zpool=tank path=/dev/ad6s1d offset=28516061184 size=4608
Jan 17 01:34:26 kamui root: ZFS: checksum mismatch, zpool=tank path=/dev/ad6s1d offset=28516051968 size=512

こういうのがドヨドヨと。zpool statusするとCKSUMが上ってる。

$ zpool status
Checking status of zfs pools:
 pool: tank
state: ONLINE
status: One or more devices has experienced an unrecoverable error.  An
        attempt was made to correct the error.  Applications are unaffected.
action: Determine if the device needs to be replaced, and clear the errors
        using 'zpool clear' or replace the device with 'zpool replace'.
  see: http://www.sun.com/msg/ZFS-8000-9P
scrub: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        tank        ONLINE       0     0     0
          mirror    ONLINE       0     0     0
            ad4s1d  ONLINE       0     0     0
            ad6s1d  ONLINE       0     0    28

errors: No known data errors

以後、この数字は順調に増え、今朝のdaily reportでは171になっていた。なんだかな。確かにkamuiのad6にしたディスクは、4個中1個だけ容量が2MB少ないとか、妙な特徴があったわけだけど、やっぱりハズレだったんだなぁと納得。ということで、交換用のディスクを買ってきた。同じ機種にしたのは、あれこれ調べるのが面倒だったから。

まずは、障害の出たad6s1dをOFFLINEにする。

# zpool offline tank ad6s1d

この後、物理的にディスクを交換するわけだが、SATAなんだからホットスワップできるはず。だけど、FreeBSDでどうやっていいのか思いつかず。atacontrol(8)にそれらしきサブコマンドも見つからず。面倒なのでshutdownして交換した。情けない。

$ dmesg | grep 'ad[46]'
ad4: FAILURE - SET_MULTI status=51<READY,DSC,ERROR> error=4<ABORTED>
ad4: 30520MB <MTRON MSD-SATA3525 0.19R1H2> at ata2-master UDMA100
ad6: FAILURE - SET_MULTI status=51<READY,DSC,ERROR> error=4<ABORTED>
ad6: 30520MB <MTRON MSD-SATA3525 0.19R1> at ata3-master UDMA100

こんどは容量が同じ。んでも、ロットが違うからか「H2」が付いてないな。古くなったかな?

スライス切りとパーティションを作成。予備のブートパーティションad6s1aの作り直しは後回しにして、zpoolの再構成を。

# zpool status
  pool: tank
 state: DEGRADED
status: One or more devices has been taken offline by the administrator.
        Sufficient replicas exist for the pool to continue functioning in a
        degraded state.
action: Online the device using 'zpool online' or replace the device with
        'zpool replace'.
 scrub: resilver completed with 0 errors on Sun Feb  1 20:23:36 2009
config:

        NAME        STATE     READ WRITE CKSUM
        tank        DEGRADED     0     0     0
          mirror    DEGRADED     0     0     0
            ad4s1d  ONLINE       0     0     0
            ad6s1d  OFFLINE      0     0     0

errors: No known data errors

この起動後の状態表示はzpool offline直後のものと変わらない。それでは、交換したデバイスをONLINEに。

# zpool online tank ad6s1d
Bringing device ad6s1d online

こいつは、ちょこっと時間がかかった。これで、初期化されてないことがzfsにも伝わり、状態はこんなことに。

# zpool status
  pool: tank
 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://www.sun.com/msg/ZFS-8000-D3
 scrub: resilver in progress, 0.96% done, 0h10m to go
config:

        NAME        STATE     READ WRITE CKSUM
        tank        DEGRADED     0     0     0
          mirror    DEGRADED     0     0     0
            ad4s1d  ONLINE       0     0     0
            ad6s1d  UNAVAIL      0     0     0  cannot open

errors: No known data errors

で、zpool replace を実施。このコマンドは一瞬にして返ってきた。

# sudo zpool replace tank ad6s1d
# zpool status
  pool: tank
 state: DEGRADED
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.
 scrub: resilver in progress, 0.06% done, 12h50m to go
config:

        NAME              STATE     READ WRITE CKSUM
        tank              DEGRADED     0     0     0
          mirror          DEGRADED     0     0     0
            ad4s1d        ONLINE       0     0     0
            replacing     DEGRADED     0     0     0
              ad6s1d/old  UNAVAIL      0     0     0  cannot open
              ad6s1d      ONLINE       0     0     0

errors: No known data errors

同じディスク番号だと、こんな感じでreplace作業をする。mirror構成なので、データのコピーをしてるんでしょう。残りが13時間弱とか出てるけど、この数字は瞬く間に減って、残り数分となり、残り0h4mからが長かったが、最後はこのように完了。

# zpool status
  pool: tank
 state: ONLINE
 scrub: resilver completed with 0 errors on Sun Feb  1 21:07:49 2009
config:

        NAME        STATE     READ WRITE CKSUM
        tank        ONLINE       0     0     0
          mirror    ONLINE       0     0     0
            ad4s1d  ONLINE       0     0     0
            ad6s1d  ONLINE       0     0     0

errors: No known data errors

ログを調べると、replaceが完了するのに、およそ30分かかっていたことがわかる。

# zpool history | grep ad6
2008-12-28.00:57:18 zpool create tank mirror ad4s1d ad6s1d
2009-02-01.20:13:01 zpool offline tank ad6s1d
2009-02-01.20:36:02 zpool online tank ad6s1d
2009-02-01.20:36:35 zpool replace tank ad6s1d

0 件のコメント:

コメントを投稿