BtrfsのRAIDは使ってはいけない

Created on 2018-04-22
Modified on 2018-04-24
Published on 2018-04-24


このメモを書いている時点では、btrfsのデバイス管理機能の実装が不十分らしい [1]。 故障したドライブのreplace中に何らかのエラーが発生すると、デバイスが削除できなくなってしまうかも。

参考

蛇足

先日、メイン機のドライブのreplace中に誤ってSATAケーブルが抜けかかった状態にしてしまい、replaceが失敗してしまった。 デバイスが追加された状態のままになっていた(うろ覚え)が、デバイスが削除できない状態になってしまった。

$ sudo btrfs dev del /dev/sde1 /home
ERROR: error removing device '/dev/sde1': unable to go below two devices on raid1

上記の問題を回避するためには、single (RAID 0相当) に戻してからデバイスを削除し、もう一度RAID1の設定にする必要がある。 これとは別に、degradedモードでないとマウントできない問題の原因も明らかにする必要がある。

これ以上時間を使いたくなかったため、外部ストレージにfull backupした後、fsを再作成してしまった。 このときに、一緒にbtrfsのRAIDからmdadmに切り替えた。

「btrfsのRAID1は安定している。ただし、実運用できるだけの機能が備わっているとは言ってない。」という状態だと認識している。 btrfsのRAIDくらいの柔軟性がほしいなら、あまり冒険せずにbtrfs on LVM on mdadmで運用したほうが良さそう。 トラブルが発生すると時間食われる。あんまり冒険しちゃいけない。


追記

今から考えてみれば、replaceが途中で固まってしまった状態だったのかもしれない。

btrfs replace statusを実行すると、replaceの進捗が確認できる。 この問題発生時には、replaceの進捗状況が表示されていたので、replace処理は行われていたのだろう。 replaceが行われていない状態なら、このコマンドは”Never started”を返すはずである。 けれども、replaceしている気配がない。replaceを一時停止/再開する手段も無さそう・・・。

もしかしたら、btrfs replace cancelを実行すればdegradedモードでなくてもマウントできたかも? 時間ができたら検証してみたい。