btrfs check and replace

btrfsでraid-1で運用しているメイン機に、ふと気が付くとdmesgや/var/log/messagesにエラーメッセージが表示されている。
パーティションをunmountして、btrfs check /dev/sdd2などと順番に確認。
一つはrescueの指示が表示されたので、従う。
btrfs rescue fix-drive-size /dev/sdd2
もう一つは、Space cache generation (????) does not match inode (????)
よくわからないが、mountして、scrubで回復した。
btrfs scrub start /mnt
btrfs scrub status /mnt
サイズがでかいので、3時間かかったが、エラーは修正された。
smartctl -a /dev/sdd; で確認ではエラーは起こっていない雰囲気。
btrfs device stat -z /mnt; でエラーカウントをリセットして様子をみる。

様子を見ていたら、エラーが多発。さっそくHDDを入れ替えることにする。
なんとかマウントできるので、replaceで対応。
btrfs replace /dev/sdd1 /dev/sda1 /mnt
時間がかかるので、btrfs replace status -1 /mntやbtrfs fi show /mntなどで進展状況を確認。
replaceの途中でsdd1が脱落したためか、replace後もbtrfs fi showで、下記のようなエラーが表示される。
WARNING: adding device /dev/sdd1 gen xx but found an existing device /dev/sda1 gen xx
ERROR: cannot scan /dev/sdd1: File exists
btrfs device remove /dev/sdd1 /mnt; としても、下記のようなエラーでよくわからない。
unable to go below two devices on raid1
結局、/dev/sdd1にbtrfsが残っていることが原因のよう。gdiskでzapしてもパーティションを再作成すると復活するので、mkntfs -Q /dev/sdd1で上書きフォーマットして、解決。でも再利用しようとすると、mkfs.btrfs -f /dev/sdd1でも受け付けてくれなので、時間はかかったが、mkfsで再フォーマットした。よく調べると、wipefsというのがあるようだ。

smartを調べてもHDDには問題なさそうなので、ATAのケーブルかコネクタの異常が疑わしい
smartctl -A /dev/sdd
smartctl -l error /dev/sdd
smartctl -H /dev/sdd
smartctl -t short /dev/sdd
smartctl -t long /dev/sdd
smartctl -l selftest /dev/sdd

コメント