« RAID5の危険性 | メイン | やり過ぎ感 »

2007年10月02日

リビルド

さて.
崩壊したRAID5アレイの復旧顛末,です.

前回Mac mini のデータ復旧に取りかかるところまできていました.
この後,サルベージ作業はせず,放置しておいたら,Disk3が読めないのが原因で,ハングアップします.
そして,再起動すると,再度リビルドがスタートします.
このリビルド中なら,データを読み出すことができます.
もちろん,Disk3の破損領域は読めないんだけどね.
でも,何度もリトライすることで,読めるデータもある,という感じ.
ただ,サルベージ作業,相当の忍耐が要ります.
エラー領域のファイルをロードしようとすると,途端にレスポンスがなくなり,http経由のアクセス(設定画面など)も受け付けない始末.
しかもその時ロードしようとしたファイル数が多ければ多いほど,レスポンスが返らない時間が長くなります.
なので,基本的にはディレクトリ単位でちまちまコピーするしかない,という状態.

正直どうかなりそうな作業なので,拷問を続ける前に,状況を整理して考えてみました.

・Disk1,2は健全で,NASに接続状態
・Disk3は,NASに接続状態だが,破損
・手元には健全なDisk4(チェック済)
・新規ディスクを,Disk4のポートに接続済み
・再起動すると,Disk1~3を使ってDisk4をリビルド開始
・何度再起動しても,リビルドは再開される
・追加したディスクと,既存ディスクはメーカーが違う
・ディスクはXFS形式のソフトRAID5と思われる
・OSはDebianかFreeBSDと予想
・Disk4を抜いた後,データが更新されたかは不明
・手動では読み込みしかしていない
・OS,アプリが勝手に書き込んでいる可能性がある

この状態で,理想的なデータ復旧方法は,Disk1,2,4のデータをDebianやFreeBSDを使ってマウントし,RAIDアレイとしてデータを吸い出す,というもの.
ただし,そういうことができるかも不明だし,(OSはなんとかなるにしても)データをバックアップしたりする領域を用意しようと思うと,数万はかかってしまう.
また,Disk1,2と,Disk4の間でデータ整合性がとれていない可能性があるため,ロストするデータもあると予想できる.
とにかく手間も時間もお金もかかりそう,という判断.
なので,ちょっと無理そうです.
ここで更にNASを観察すると,

・リビルドは,Disk1~3を読んで,Disk4に書き込んでいる様子
・なのでDisk3さえ読めれば,Disk4は復旧できそう
・Disk1~3は,上書きなどはされていない様子

という事が分かりました.
なので,実はDisk3を外して,そこにNASから外したDisk4を接続すれば,Disk1,2,4によるリビルドできるかもしれない,と思いました.
これに関するリスク(不確定情報)を検討してみると,

・HDD自身はOSから区別していない?
・OSはデバイスファイルでDiskにアクセスしている?
・リビルドコマンドは,デバイスファイルで修復先を指定している?
・パリティデータは,保存ディスクがどれかまでは管理してない?

というものがあります.
これに対する答えがすべてYesであれば,Disk3と4を入れ替えるだけで,復旧しそうです.
#もちろん,Disk1,2と4の間に不整合がある可能性はある.
Linuxなどの常識からすると,OSは,HDDの接続ポート単位でデバイスファイル(物理デバイスをファイルという形に仮想化して扱えるようになっている)としてストレージデバイスを管理しているはずなので,接続ポートの違い(デバイスファイル名の違い)はあっても,つながっているHDD自体は区別していないと思われます.
もちろん種々のAPIで情報取得はできるでしょうし,最終的には区別する必要もあるのだけど,データ構造が一致しているRAIDアレイディスクだと問題にならないのでは?と予想しました.
さらに,リビルドコマンドについても,最初のディスク入れ替え時に,「リビルド対象となる新規ディスクを指定した」という事実から察するに,これはデバイスファイルを指定している,ということに他ならないと思われます.
ここまでの検討,仮定などをふまえると,おおむねなんとかなりそうな気がしてきました.
もちろん,これ以上考えるのも面倒だというのもあって,もう実際に試してみることにしました.

ただ,大事を取ってDisk4の内容を,もう1台のスペアディスクに複製しておきました.

そして,いざDisk3とDisk4を交換してみたのでした.
ここで重要なのは,接続ポートをDisk4のポートでなく,Disk3のポートにすること,です.
理由は前述の通り,リビルドコマンド自体がデバイスファイルを指定している可能性が高いため,です.
またDisk4をそのまま使った理由は,スペアディスクのメーカーが違うためです.
最悪,このスペアディスクからDisk4へデータを復元する事もできるので,このような判断になりました.

そして再起動.

果たして,アレイのリビルドは無事に始まり,データにもアクセスできるようになったのでした.
ただ,リビルド完了後に,やっぱりRAIDパリティエラーが検出されている様子.
おそらく,Disk1,2と4の間でデータの不整合があった模様.
やっぱりデータを吸い出して,アレイを再構築しないとダメっぽいですなぁ.
といった辺りで,次回へ続く.

投稿者 chimaki : 2007年10月02日 03:27

トラックバック

このエントリーのトラックバックURL:
http://blog.projectmd.com/cgi-bin/mt/mt-tb.cgi/571