フォールトトレランスを得るために RAID を使う予定があり、またそれが本当に動作するかどうかを調べるために設定をテストしたいかもしれませんね。では、どのようにディスク故障をシミュレーションしたらよいでしょうか?
はっきり言って、正常動作しているディスクで故障をシミュレーションするのは無理な話です。ドライブが死んだら何が起こるかを知ることはできません。電気的にバスを乗っ取って、バス上の全てのドライブをアクセス不能にするかもしれません。私はこれまでそういうことが起こったことは聞いたことがありません。ドライブは SCSI/IDE レイヤに読込み・書込みのエラーを報告するかもしれません。そうしてくれれば RAID レイヤは状況を素直に扱うことができるのです。ま、だいたいは期待通りに動いてくれると思います。
ドライブ故障をシミュレーションしたいのなら、ドライブを外すことです。その場合は必ず電源を落としてからにしてください。ディスク数を減らしてデータが生き残るかどうかについて調べたいならば、システムを停止してディスクを抜き、再起動すれば良いのです。
syslog と /proc/mdstat
で RAID がどうなっているかを見ます。うまく動いていますか?
ディスク故障を乗り切るには、RAID-{1,4,5} を走らせていなければなりません。デバイスが見つからないとき、リニアモードと RAID-0 は完全に破綻します。
ディスクを再接続(もちろん電源が落ちている状態で接続するのを忘れずに)した場合は、raidhotadd
命令で再び「新しい」デバイスを RAID に加えることができます。
RAID(ハードでもソフトでも)では、書き込み時にエラーが返らないと成功とみなされます。したがって、ディスクがエラーを返すことなくデータが壊れたら、結局、データは破壊されるわけです。もちろんこれは起こりそうにないことですが、皆無ではありません。そして結果としてファイルシステムをも破壊することになるのです。
RAID はメディア上のデータ破壊に対する保護は想定していません。したがって RAID システムがどうするのかを見ようとして、ディスクに故意に不正なデータを書き込む(例えば dd
を使って)ようなことは意味のないことです。RAID レイヤは破壊を検出しないでしょうが(RAID のスーパーブロックを破壊しない限り)、RAID デバイス上のファイルシステムは破壊されます。
これは当然のことです。RAID はデータの完全性に対する保証ではありません。ディスクが死んだ時にデータを守ってくれるものです(もちろん RAID レベル 1 以上)。