Help us understand the problem. What is going on with this article?

btrfs wikiに書いてないハマりどころメモ (RAID5障害・拡張)

More than 1 year has passed since last update.

btrfs raid5なNASを数年来運用してきて今ハマっているところをいくつかメモ。

4.20.6-200.fc29.x86_64で確認した挙動がベース。悲しいかな、英語力がないのでbtrfs wikiには上げていない・ML追い切れていない。

degraded状態のマウント

障害ドライブを抜いた場合自動マウントできなくなり、fstabにnoauto,degradedマウントオプションなどをつけてブート続行させることになる。

このとき、
* 同一パーティションのfstabエントリ(subvolとか)があり
* noautoでマウントされないfstabエントリがある

場合、mountしたパーティションはそれを即座にsystemdがアンマウントしてくれる。noautoでsystemd管理下なんだからユーザーが手動でマウントしてもumountすべし。systemdの気遣い溢れるsystemd-mount使え。

btrfs replace

btrfs replaceコマンドはreplace先のパーティション(ないしドライブ)がreplace元のパーティションより大きくないと弾かれる。素直にbtrfs device deleteしてからbtrfs device addすること。

btrfs replace後のresize

btrfs replaceはreplace先のパーティションに大きなパーティションを要求するのに、maxにリサイズしてくれない。
btrfs resize $DEVID:max /mntで拡張を忘れずに。

btrfs balanceのフィルタ

追加したドライブにraid5を伸ばす(3xData+Parityから4xData+Parityなど)ために使うフィルタは以下のようになる。

btrfs balance start -dstripes=1..$(($DRIVES-1)),convert=raid5 /mnt

stripesを変えて試したところ、btrfsはstripeとしてデータだけでなく、パリティもカウントする方式。そのためRAID5ではドライブ数-1を対象に取る必要がある。

convert=raid5は冗長に見えるが必要。これがないと元のstripe数を増やしてはくれない。
なぜドライブ増やしたのにD:P比率変わらないのか?と思ったらこれが原因だったようだ。

subvolは削除

balanceの実行時間は現状subvol数にO(n)以上で依存しているらしい。

CPU性能が制限されているNAS環境では影響が大きいので直ぐに必要ないsubvolはbtrfs sendで固めて削除しておいたほうがいい。

deadlineスケジューラ

HDDかつR/W並行で必要なNAS用途ではcfqにしている。が、cfqだと自環境ではbalance/scrubスループットがかなり下がるようで、deadline/noopにすることで何割かbalance速度が向上した。

noopとdeadlineは見えるほど変わらなかったためdeadlineに。

ビット破損時は inspect logical

scrubを怠ってクラッシュ繰り返していたりするとビット腐敗している場合があり、破損データ部分でbalanceが止まってしまう。

BTRFS info (device sda2): relocating block group 23021619249152 flags data|raid5
BTRFS warning (device sda2): csum failed root -9 ino 2152 off 440008704 csum 0xc2427410 expected csum 0x4cb01ad5 mirror 1

対応するファイルパスはbtrfs inspect-internal logicalで取得できる場合がある。blockgroup + offsetで論理アドレスが得られるようだ。

対象ファイルをすべてのsubvolから削除してsyncし、同じinspect logicalでinodeエラーが返るようになれば、対象アドレスを含むextentを除去できている可能性が高い。balanceが通ればOK。

btrfs scrubしよう

scrub時30MB/sしかでなくても泣かないで頑張る。

ko-zu
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away