btrfs の RAID5/6 コードはまだ安定していないため、mdadm raid6 上で btrfs を実行する設定にしています。この方法なら、スナップショットとチェックサムの利点を、いくつかの追加のハードルを乗り越えて得られると考えていましたが、実際にそれらのハードルを乗り越えなければならなくなり、いくつかの問題に直面しています。
今朝、dmesg で次の問題が発生しました:
BTRFS error (device md2): bad tree block start, want 28789209759744 have 7611175298055105740
BTRFS info (device md2): read error corrected: ino 0 off 28789209759744 (dev /dev/md2 sector 55198191488)
BTRFS info (device md2): read error corrected: ino 0 off 28789209763840 (dev /dev/md2 sector 55198191496)
BTRFS info (device md2): read error corrected: ino 0 off 28789209767936 (dev /dev/md2 sector 55198191504)
BTRFS info (device md2): read error corrected: ino 0 off 28789209772032 (dev /dev/md2 sector 55198191512)
これは、btrfs を使用していなければ気づかずに通り過ぎていた可能性のある種類のものなので、少なくとも私にとっては役立ちました...これで、どのディスクに問題があるかを特定して交換できるはずですよね?
まあ、mdadm は raid6check ツールを使用して障害のあるディスクを特定することのみをサポートしているようです。Debian で動作させるにはソースからビルドする必要がありましたが、ビルドした後は問題なく動作しているようです。
ここでの唯一の難点は、このツールが非常に遅いようで、1000 ストライプをスキャンするのに 3 分以上かかることです。つまり、私のアレイを構成する 15261512 ストライプをスキャンするには 31 日以上かかることになります。できれば、これを避けたいです。mdadm チェック/修復ははるかに高速で、約 3 日しかかかりませんが、どのディスクが原因であるかに関する有用な情報は生成されないため、あまり使いたくありません。
raid6check ツールはストライプ番号の受け入れをサポートしているようですが、どのストライプ番号を渡すかを計算して、ディスクの関連部分を直接チェックできるかどうか疑問に思っています。
参考までに、raid6check 情報を次に示します。
layout: 2
disks: 8
component size: 8001427603456
total stripes: 15261512
chunk size: 524288
ありがとうございます。どんなアイデアでも歓迎します。
答え1
さて、Freenode の #linux-raid で JyZyXEL と話し合った後、これを実行するためのある程度機能する方法を見つけました。
raid6check はストライプの合計を報告するので、完全なテストを実行せずに基本情報を確認するには次のように実行します。
./raid6check /dev/md0 0 1
次のようなものが表示されます:
layout: 2
disks: 8
component size: 8001427603456
total stripes: 15261512
chunk size: 524288
fdisk -l /dev/md0 を使用して RAID の合計セクター数を確認します。
Disk /dev/md2: 43.7 TiB, 48008565620736 bytes, 93766729728 sectors
次にストライプあたりのセクターを計算します。
total sectors / total stripes = 93766729728 / 15261512 = 6144
ここで、エラーのあるセクターをストライプあたりのセクター数で割ります。
error sector = 55198191488/6144 = 8984080
ここで、raid6check を実行します。正確ではないと思われるので、周囲の領域を含めるようにしてください。
raid6check /dev/md0 8984000 1000
私の場合、これによりすぐに多くの関連エラーが発生し、すべてが同じディスクに障害が発生している可能性があることを示しています。
Error detected at stripe 8984078, page 100: possible failed disk slot 1: 4 --> /dev/sdj1
Error detected at stripe 8984081, page 76: possible failed disk slot 4: 4 --> /dev/sdj1
この時点から、ディスクを交換したり、SMART テストを実行したり、raid6check の自動修復を使用したりなど、適切な対応を取ることができます。
これは最も正確な方法ではないかもしれませんが、他に誰もより良いアイデアを思いつかず、将来誰かが同じ方法を探している場合に備えて投稿します。