モーグルとカバとパウダーの日記

モーグルやカバ(EXカービング)山スキー(BC)などがメインの日記でした。今は仕事のコンピュータ系のネタが主になっています。以前はスパム対策関連が多かったのですが最近はディープラーニング関連が多めです。

自宅ファイルサーバHDD復活!

ほぼ1月前に書いた、自宅ファイルサーバのHDD障害の件、やっとこさ復旧できたのでそのレポートです。


家庭内ファイルサーバを、3Ware 3w-7000-2RT を利用してRAID1で運用していました。
120Gx2の構成だったのですが、手狭になったので250Gx2に変更するため、HDDを新規購入し

IDE直結
40G (OS Windows2000用)
120G (今までのデータディスク)
120G (今までのデータディスク)

RAIDカード経由
250G (新規ディスク)
250G (新規ディスク)

として接続して起動しました。


てっきり、RAID経由で利用していたディスクも、IDE直結ですぐに見えると思いこんでいたのです。
しかし、そのままではマウントされてこなかったため、ディスクマネージャを起動させると、ウィザードが動き、新しいディスクがいくつか繋がってるけど認識させても良い?という感じのことを聞いてきたので、なにも考えずにその処理をさせてしまったのです…

それでディスク自体はWindowsから見えるようになったものの、中を見ようとするとフォーマットされてないよ、フォーマットする?と言われて、えええっ?とここでやっとこヤバイことになったことを理解しました。
もちろんすぐにRAID経由に繋ぎ直したのですが、こちらでも接続できず。
もう目の前が真っ暗、という感じです。
どうせ繋ぐにしても、なんで1台だけにしなかったんだ… とかいろいろと後悔しましたが、後の祭りです。


そこで、なんとかするために、まずは2chRAIDスレに質問を書いて助言をあおぎました。

IDE/SATA RAIDカードあれこれ 17枚目
http://pc7.2ch.net/test/read.cgi/jisaku/1127221153/


これは、id:teleskierさんも書いてたんですが、どうも3wareのカードは何セクタかずれてデータが書かれているため、そのままIDEで繋いでもだめで、他が壊れていなければ、そのずれてるぶんをずらして書き込んでやればIDEで認識されそうなことがわかりました。
また、ディスクマネージャのウィザードが言ってくる署名って、FDISKみたいなもんらしく、ディスク先頭部分にブートローダとか書き込むため、RAIDコンフィギュレーションデータが上書きされて壊されるので、そのまま戻しても復帰しないとのことでした。


とりあえず、2chでもらった助言は非常に参考になるものがいくつもあったものの、助言の内容そのままでテストしてみてもうまくいかなかったため、参考にして地道に自力で調査していくことにしました。

まずはRAID1で250Gを構築し、そこにテスト用データを書き込み、IDE直結しました。
その後の、先に元のディスクでやった手順と同じ失敗をなぞりました。

  • IDE直結ではそのままマウントされず
  • ディスクマネージャから「ディスクのアップグレードと署名ウィザード」でディスクに署名
  • ディスクが「未割り当て」で表示
  • ボリュームの作成で「このボリュームをフォーマットしない」でシンプルボリュームを作成
  • ディスクは「正常」で表示
  • ローカルディスク表示
  • フォーマットされていないため「今すぐフォーマットしますか?」を「いいえ」

その後、再構築(Create RAID)を試しました。

  • RAIDカード(3Ware 3w-7000-2RT)経由で接続するがマウントされず
  • RAIDBIOS(Alt-3キーで起動)から2ドライブ選択し「Create Array」
  • 「Done」(F8)
  • メッセージ「Data on the following drives will be destroyed」
  • ディスクマネージャからディスクに署名
  • マウントできないのでパーティション作成しマウント

これを各状態毎にKNOPPIX

# dd if=/dev/hda of=ide_fdisk.dd bs=512 count=2100

といった感じでイメージを作っていき、

> od -xa -A x ide_fdisk.dd > ide_fdisk.dump

でもってテキストに変換して、それぞれのdiff取って比較し、なにするとどのへんにどんなことを書き込むのか、を調べていくという原始時代的な方式。


それで、「NTFS ...」というテキストを検索したところ、RAID1では002200から始っているのに対して、IDE直結の場合08A000から始っており、これがセクタサイズを512byteとすると、1087=1024+63セクタだけずれている事がわかりました。
1024はまあ良いとして、63は結構マジックナンバーで、IBMの決めたディスクの管理サイズかなんかが63なので、どうやらこれはほんとっぽい感じです。

そこでKNOPPIXで起動して

# dd if=/dev/hda of=/dev/hdb bs=512 skip=1087

でRAID1経由だった旧ディスクの先頭1087セクタ分を飛ばして、新規HDDにコピーし接続したところ、あっさりと認識されました。

最初はそれだけじゃ動かないだろうと、コピーした後gpart使ってパーティション情報を調べたら、全部0が出てきて、ああ今回もダメだったか、と思ってとりあえずファイル復旧ソフトでどのくらい拾えるか試すか、とWin2Kから見てみようとしたら、そのままマウントされて中身が見れたという。

対処法がわかってしまえばほんと簡単に戻せるのですが、長かった orz(結論だけ書いてるのであっさりしてますが、いろいろと紆余曲折あり)
まあこれが参考になる人はあまりいないと思いますが、誰かの役に立てば。


今回他に、友人からいろいろと助言もらったりして、知らなかったツールとかについても知識を得ました。

LinuxのLiveCDはKNOPPIXが有名ですが、このKNOPPIXをベースにディスクのサルベージ用に特化したディストリビューションで、
HELIX
http://www.e-fense.com/helix/
というのがある。これはいろいろと必要なツールが最初から入ってておすすめ。

あと、パーティションテーブル調べて、どんな形式のパーティションがどこからどこまであるのか、得ることが出来るツール。
gpart
http://www.stud.uni-hannover.de/user/76201/gpart/

ディスクの物理障害の場合、なるべく元のディスクはさわりたくないので一旦コピーして、そこからサルベージするが、それ専用のツール
dd_rescue


今回いろいろといじくってみて、なんかddは恐い印象があった(実際恐い。一気に全データを完膚無きまでに破壊出来るから)のが、なんか一気に身近になったです。