ZFSに参加するHDDが壊れたので換装した
はじめに
3TのHDD4本でRAIDZ1(ZFS RAID5相当)を組んでいたところ、0はじまりで2番目のハードディスク(左から3個目)がぶっとびましたので、換装しました。HDDが壊れてから放置したためか、回復不能のエラーが結構出ました(削除で対応)。
HDD換装自体は問題ないのでパス。新HDDをZFSに参加させるところからのメモです。
パーティション等
https://boiledorange73.hatenablog.com/entry/2014/10/01/000000あたりを参照して下さい。p0にブートコード、p1にキャッシュファイルを保存するためのUFS、p2にZFS、としています。
換装直後
ハードディスクデバイスがどのように見えているかを確認します。
% gpart show => 34 5860533101 mfisyspd0 GPT (2.7T) 34 128 1 freebsd-boot (64K) 162 16384 2 freebsd-ufs (8.0M) 16546 5860516589 3 freebsd-zfs (2.7T) ... => 34 5860533101 mfisyspd2 GPT (2.7T) 34 5860533101 - free - (2.7T)
mfisyspd2は完全フリーになっています。
freebsd-boot, freebsd-ufs, frrebsd-zfs を順次追加していきます
gpart create -s gpt /dev/mfisyspd2
ブートパーティション作成とブートコード書き込みます。
gpart add -s 64K -t freebsd-boot /dev/mfisyspd2 gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 /dev/mfisyspd2
キャッシュ保存用ファイルシステムを作成し、disk0から複製します。
gpart add -s 8M -t freebsd-ufs /dev/mfisyspd2 newfs /dev/mfisyspd2p2 mkdir /tmp/cachefile/disk2 mount /dev/mfisyspd2p2 /tmp/cachefile/disk2 mkdir /tmp/cachefile/disk0 mount /dev/mfisyspd0p2 /tmp/cachefile/disk0 cp /tmp/cachefile/disk0/rpool.cache /tmp/cachefile/disk2/
gpart add -t freebsd-zfs -l disk2 /dev/mfisyspd2
zpool replace rpool gpt/disk2
ここで、リシルバー(resilver)がはじまり、かなりな時間放置しておきます。
リシルバーが終わると次のようなかんじになります。
% zpool status ... config: NAME STATE READ WRITE CKSUM rpool DEGRADED 0 0 47 raidz1-0 DEGRADED 0 0 214 gpt/disk0 ONLINE 0 0 0 gpt/disk1 ONLINE 0 0 0 replacing-2 DEGRADED 0 0 0 10647845673521159683 UNAVAIL 0 0 0 was /dev/gpt/disk2/old gpt/disk2 ONLINE 0 0 0 gpt/disk3 ONLINE 47 0 0 errors: 52 data errors, use '-v' for a list
UNAVAILなものはdetachで排除しました。
% zpool detach rpool 10647845673521159683
なお、de-touchではありません。
回復不能なエラーがいっぱいでている
実は今回は、回復不能なエラーがいっぱい出てました。
% zpool status pool: rpool state: DEGRADED status: One or more devices has experienced an error resulting in data corruption. Applications may be affected. action: Restore the file in question if possible. Otherwise restore the entire pool from backup. see: http://illumos.org/msg/ZFS-8000-8A scan: resilvered 337G in 12h1m with 52 errors config: ...
エラーが52個も出ていることに対応します。
zpool status -v rpool
これで壊れたファイル一覧がずらっと出ます。なお、catなりでファイルを開こうとしたらI/Oエラーで失敗しました。
幸運なことに、ファイルは上書きしてOKなものだったので、ファイルを削除して、エラーは上書きすれば消えてしまいました。
あらためて様子を見てみましょう。
% zpool status status: One or more devices has experienced an error resulting in data corruption. Applications may be affected. action: Restore the file in question if possible. Otherwise restore the entire pool from backup. see: http://illumos.org/msg/ZFS-8000-8A scan: resilvered 337G in 12h1m with 52 errors ... errors: List of errors unavailable (insufficient privileges)
…なおactionセクションが出ています。
問題はクリアされた(強制リセットみたいなかんじでしたが)ので、どうにかしたい。
zpool clear rpool
これでエラーがクリアされるはずだけどダメ。
困った末、結局、次のコマンドでクリアされました。
reboot
リブートで良かったのか…。