2008-02-18/Linux RAID の faulty ドライバ(続) †前回の続き. grow メジャーモード †前回の説明で故障周期を設定し,RAID の動作を確かめるところまではできるようになった. が,例えば「RAID5 で1つの子ボリュームが故障して degrade (縮退)モードに移行,ボリュームを交換し rebuild に入ったところで故障させたい」という場合を考えてみよう. 確かに故障周期の設定でこの状態を作るのは不可能ではないだろう. が,かなりの試行錯誤が必要になるだろう. 実は,faulty ドライバではボリューム作成後に手動で故障モードを切り替えることができるのである. それがこの節のタイトルの grow メジャーモードである. 以下,操作例で説明する. まず,faulty ボリュームを作成する. ここでは故障モードには none を指定し,「故障しない faulty ボリューム」とする. # mdadm --build --level=faulty --layout=none --raid-devices=1 /dev/md0 /dev/loop0 mdadm: array /dev/md0 built and started. ここで,/dev/md0 に対し連続的に read アクセスをさせる. # dd if=/dev/md0 of=/dev/null bs=1 別端末で # mdadm --grow --level=faulty --layout=read-transient /dev/md0 と実行する. すると dd を実行していた端末で dd: reading `/dev/md0': 入力/出力エラーです 10862592+0 records in 10862592+0 records out 10862592 bytes (11 MB) copied, 49.5164 seconds, 219 kB/s とエラーが発生する. つまり,故障のタイミングを手動で制御できたことになる. というわけで,先の例の「RAID5 での rebuild 中の故障」もこの方法でシミュレートすることができるだろう. しかし,--layout オプションといい,--grow オプションといい,faulty ドライバを使う際は非直感的なオプションを指定することが多い. RAID の枠組みを借用しているのでしかたがないのだろうが,せめてもっとわかりやすい同義語のオプションを作ることができないんだろうか. |