zfs HDD交換練習

ホストシステムのHDDがこわれた場合にそなえて、ゲストのFreeBSDで練習。

zpool status
  pool: zroot
 state: ONLINE
  scan: none requested
config: 
   zroot                                           ONLINE       0     0     0
     mirror-0                                      ONLINE       0     0     0
       gptid/b95e641d-bb87-11e4-ac2f-080027fc258b  ONLINE       0     0     0
       gptid/b9a2d715-bb87-11e4-ac2f-080027fc258b  ONLINE       0     0     0

errors: No known data errors

この状態からada0を外してみる。このディスクの実際のデバイス名は

glabel status | grep b95e641d-

とかでわかる。この場合ada0p3だった。 けど、VirtualBoxなので気にせずすこっと、ada0に相当するHDDを「除去」。

zpool status
  pool: zroot
 state: ONLINE
  scan: none requested
config: 
   NAME                                            STATE     READ WRITE CKSUM
   zroot                                           DEGRADED     0     0     0
     mirror-0                                      DEGRADED     0     0     0
       715453585861069460                          UNAVAIL      0     0     0  was /dev/gptid/b95e641d-bb87-11e4-ac2f-080027fc258b
       gptid/b9a2d715-bb87-11e4-ac2f-080027fc258b  ONLINE       0     0     0

errors: No known data errors

エラーが出た。was …… のほうを外す。

zpool offline zroot 715453585861069460

もう一度 zpool status すると UNAVAIL が OFFLINE に変わる。

新しいディスクを、もう一方と同じGPTにする。 まず生き残ってる方のHDD(ada1)を見る。

gpart show ada1
=>     34  8388541  ada1  GPT  (4.0G)
       34     1024     1  freebsd-boot  (512K)
     1058  4194304     2  freebsd-swap  (2.0G)
  4195362  4193213     3  freebsd-zfs  (2.0G)

ada0にこれと同じ状態を作る。

  1. GPTスキーム作成
    gpart create -s gpt ada0
    
  2. 3つのパーティションを追加
    gpart add -t freebsd-boot -s 512k ada0
    ada0p1 added
    gpart add -t freebsd-swap -s 2g ada0
    ada0p2 added
    gpart add -t freebsd-zfs ada0
    ada0p3 added
    
  3. 確認
    gpart show ada0
    =>     34  8388541  ada0  GPT  (4.0G)
           34     1024     1  freebsd-boot  (512K)
         1058  4194304     2  freebsd-swap  (2.0G)
      4195362  4193213     3  freebsd-zfs  (2.0G)
    
  4. bootcode書き込み
    gpart bootcode -b /boot/pmbr ada0
    bootcode written to ada0
    gpart bootcode -p /boot/gptzfsboot -i 1 ada0
    

これで同じ状態になったかな。zpoolの構成ディスクを置き換え。

zpool replace zroot 715453585861069460 ada0p3
(沈黙.....)
Make sure to wait until resilver is done before rebooting.

If you boot from pool 'zroot', you may need to update
boot code on newly attached disk 'ada0p3'.

Assuming you use GPT partitioning and 'da0' is your new boot disk
you may use the following command:

        gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 da0

resilver終わるまでrebootすんなって。確認。

zpool status
  pool: zroot
 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.
  scan: resilver in progress since Mon Feb 23 18:56:55 2015
        1.27G scanned out of 1.72G at 18.0M/s, 0h0m to go
        1.27G resilvered, 73.84% done
config:

  NAME                                            STATE     READ WRITE CKSUM
  zroot                                           DEGRADED     0     0     0
    mirror-0                                      DEGRADED     0     0     0
      replacing-0                                 OFFLINE      0     0     0
        715453585861069460                        OFFLINE      0     0     0  was /dev/gptid/b95e641d-bb87-11e4-ac2f-080027fc258b
        ada0p3                                    ONLINE       0     0     0  (resilvering)
      gptid/b9a2d715-bb87-11e4-ac2f-080027fc258b  ONLINE       0     0     0

しばらく待って同期完了。

zpool status
  pool: zroot
 state: ONLINE
  scan: resilvered 1.72G in 0h1m with 0 errors on Mon Feb 23 18:58:27 2015
config:

  NAME                                            STATE     READ WRITE CKSUM
  zroot                                           ONLINE       0     0     0
    mirror-0                                      ONLINE       0     0     0
      ada0p3                                      ONLINE       0     0     0
      gptid/b9a2d715-bb87-11e4-ac2f-080027fc258b  ONLINE       0     0     0

リブートして確認。大丈夫。さて、さらにもともと生き残りという想定の ada1を外してみよう。VirtualBoxでada1相当を「除去」してみる。 起動できた。

ちなみにもういっこ練習。調子悪くて外れたHDDを再度組み入れて再構築。 勝手に再構築始まってばっちり復活。gpartの使い方に慣れればなんとかなる感じ。 ファイルサーバは徐々にzfsにしてくかー。