原色奈良阪

MBR/EPBR(Master/Extended Partition Boot Record)上にあるパーティションテーブルを読んでパーティションを表示するスクリプト。MBRクラッシュ時などに。いわば読み出し専用でPBRからも読めるfdisk。

説明

コマンドラインツールddに依存する低レベル作業をするスクリプトです。

サポートとかはありませんので自己責任でお願いします(バグは直すかもしれません)。

趣旨

うちのHDDが不良セクタ激増してクラッシュしたので。

しかも運悪く不良セクタがMBRにかかっててさあ大変。全パーティションがもろとも闇の中へと葬られかねない事態になった。

しかしこのHDDはもともと基本第一がFAT16(FreeDOS)、第二がFAT32(SYSLINUX)、第三がext3(GRUB)、第四が拡張で、 拡張第一がNTFS、第二がext4(ArchLinux)、第三がNTFSという訳のわからないパーティションの切り方をしていたので、 幸いにしてMBRが読めなくなってもEPBRを読めればLinuxのmountで直にoffsetを指定してパーティションをマウントorGRUBからchainloadなどすることが可能な構成だった。

なんとかHDD復旧ソフトでデータを保存している2つのNTFSパーティションをみつけたはいいが、 Linuxのext4パーティション(ただしパーティションテーブルのフラグはSYSLINUX使用によりFAT32)はみつからず。

よってHDD復旧ソフトで見つけ出された第一拡張パーティションの先頭位置の情報からほかの拡張パーティションの情報を読むことで、 残されたLinuxのパーティションを探すことにした (HDD復旧ソフトで見つけ出された第一拡張パーティションのファイルシステム先頭位置から2セクタ戻ったところに第一拡張パーティションのEPBRがあったのでよかった。 場合によってはもっと戻るかもしんない。)。

使い方

Perl5.6以上とddコマンドが必要です。ddはUNIX系は多分大体もとからはいってるけど、Windowsはdd for windowsをダウンロード推奨。

HDD復旧ソフト(ファイナルデータ特別復元版は体験版でも物理ドライブの中のパーティション位置をスキャンとかまで出来るらしいのでOK。 フリーでは無料ファイル復元・データ復旧ソフト一覧 - フリーソフト100等を探す?) などを使いつつEPBRの先頭位置を見つけたらスクリプトファイル中の変数$first_offsetにそのセクタ数をセットしてあとてきとうに設定して実行。

MBRも形式上EPBRの一種と言えるので$first_offset = 0;にしたらMBRから読めますが、あまり意味ないです。

注意

バグの可能性は捨てきれません。

へんなパーティション作成ツール使って標準外のフォーマットになってるとかも知りません。

復旧

パーティションテーブル飛んだだけならテーブルがわかった後の一般の復元ソフトは不必要に読み出しが遅いだけの不要ソフトです。

パーティションの先頭をこのスクリプトなどで割り出したら、 Linuxなどでmount -o loop,offset=1044286 /dev/sda /mnt/partition (offsetはセクタ数ではなくbyte数(セクタ数*512) ddで作成したHDDイメージをマウントする等参照) のようにしてふつうにパーティションが読み出せるようになります。 こちらの方がコピーもはやいし操作もしやすいです。

ループバックデバイスがないとかいわれたらmknod -m 0600 /dev/loop1 b 7 1 (ループデバイスを増やす等参照)とかやって作ってください。

参考サイト:ブートとハードディスクのすべて/マスターブートレコードの解析

ダウンロード

ご使用は自己責任で。制作者がこのスクリプトによって 使用者に生じたあらゆる不利益への責任をとらないことに 同意してからお使いください。ライセンスはThe MIT Licenseとします。

最新版

2012年9月22日分
ZIP