2006年2月26日日曜日

壊れたハードディスクをgpartで修復

(2006/3/1追記) こちらに続きを書きました。





パーティションテーブル以外にも徹底的に壊れたときの最終手段は、こちらを試すといいかもしれません。





(2008/2/21追記) パーティションテーブルを復活させたい場合、gpartよりも、TestDiskというツールの方がお手軽な場合もあります。



               


☆ ☆ ☆ ☆ ☆ 



いよいよ明日です。いつもよりも、5割増しくらいで、年甲斐も無く興奮気味なんですが・・・
あqwせdrftgyふじこlp



倉田ねじまき堂~女主人のSmile for you~



公式情報はこちら
http://yuki-kura.web.infoseek.co.jp/top.htm



というわけで、興奮した気持ちを抑えるために???、先週壊れたハードディスクを直すことにしました。ここ1年ほど、パソコンが壊れるのは日常茶飯事だったのですが、最近はあまりなかったので、すっかり安心しきっていました。



さてさて、壊れたといっても、「パソコンを落として、中身が飛び出してきちゃった~」というように、機械的に壊れてしまったものは、直すのは難しいですが、ハードディスクにおかしなデータが書き込まれてしまって、整合性がとれなくなってしまった、というケースなら、



運がよければ



直すことができます。



今回も、たぶん、パーティションテーブルがとんでしまっただけのようでした。まあ言わば、大百科事典の目次がどっかにいっちゃって(のび太がページをやぶって鼻をかんだ、とか)、データがどこにあるのかわけがわからなくなってしまった、みたいな壊れ方でしょうか。



たぶん直るだろうな・・・と予想して、とりあえずNorton DiskDoctorを実行したら、

直りませんでした・・・

ちょっとあせってきました。



そこで、今回はじめて、FreeBSDのportsをさがしたところ、/usr/ports/sysutils/gpartにあった、gpartというツールを試してみました。



これは、ディスクの中を、さささーと探して、パーティションらしき部分を見つけ出してくれるツールです。まさに、今回の壊れ方にぴったりのツールではないでしょうか。



壊れたディスクが、FreeBSDで/dev/ad3の場合に、

gpart -dd /dev/ad3  間違えました



gpart -vv /dev/ad3

とかやると、数秒後(早い!?)、こんな情報を表示してくれました。



** Error: invalid extended ptbl found at sector(16384063).



dev(/dev/ad3) mss(512) chs(0/16/63) #s(0) size(0mb)
Primary partition(1)
   type: 011(0x0B)(DOS or Windows 95 with 32 bit FAT)
   size: 8000mb #s(16384000) s(63-16384062)
   chs:  (0/1/1)-(1019/219/31)d (0/1/1)-(16254/0/31)r
   hex:  00 01 01 00 0B DB DF FB 3F 00 00 00 00 00 FA 00



Primary partition(2)
   type: 015(0x0F)(Extended DOS, LBA)
   size: 109246mb #s(223737665) s(16384063-240121727)
   chs:  (1019/219/32)-(610/225/63)d (16254/0/32)-(238215/15/63)r
   hex:  00 DB E0 FB 0F E1 BF 62 3F 00 FA 00 41 F7 55 0D



   Logical partition
Primary partition(3)
   type: 000(0x00)(unused)
   size: 0mb #s(0) s(0-0)
   chs:  (0/0/0)-(0/0/0)d (0/0/0)-(0/0/0)r
   hex:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00



Primary partition(4)
   type: 000(0x00)(unused)
   size: 0mb #s(0) s(0-0)
   chs:  (0/0/0)-(0/0/0)d (0/0/0)-(0/0/0)r
   hex:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00



Begin scan...
Possible partition(DOS FAT), size(8000mb), offset(0mb)
   type: 011(0x0B)(DOS or Windows 95 with 32 bit FAT)
   size: 8000mb #s(16384000) s(63-16384062)
   chs:  (0/1/1)-(1023/15/63)d (0/1/1)-(16254/0/31)r
   hex:  00 01 01 00 0B 0F FF FF 3F 00 00 00 00 00 FA 00



Possible partition(*BSD disklabel), size(7993mb), offset(8001mb)
   type: 165(0xA5)(FreeBSD/NetBSD/386BSD)
   size: 7993mb #s(16370235) s(16386300-32756534)
   chs:  (1023/15/63)-(1023/15/63)d (16256/4/1)-(32496/8/63)r
   hex:  00 0F FF FF A5 0F FF FF FC 08 FA 00 3B CA F9 00



Possible partition(Windows NT/W2K FS), size(49999mb), offset(15994mb)
   type: 007(0x07)(OS/2 HPFS, NTFS, QNX or Advanced UNIX)
   size: 49999mb #s(102398240) s(32756598-135154837)
   chs:  (1023/15/63)-(1023/15/63)d (32496/10/1)-(134082/2/56)r
   hex:  00 0F FF FF 07 0F FF FF 76 D3 F3 01 20 79 1A 06



Possible partition(Windows NT/W2K FS), size(51246mb), offset(65993mb)
   type: 007(0x07)(OS/2 HPFS, NTFS, QNX or Advanced UNIX)
   size: 51246mb #s(104952576) s(135154908-240107483)
   chs:  (1023/15/63)-(1023/15/63)d (134082/4/1)-(238201/13/57)r
   hex:  00 0F FF FF 07 0F FF FF DC 4C 0E 08 00 73 41 06



End scan.



Checking partitions...



* Warning: partition(DOS or Windows 95 with 32 bit FAT) starts beyond disk end.



* Partition invalid(invalid partition entry (see comments above)):
   type: 011(0x0B)(DOS or Windows 95 with 32 bit FAT)
   size: 8000mb #s(16384000) s(63-16384062)
   chs:  (0/1/1)-(1023/15/63)d (0/1/1)-(16254/0/31)r
   hex:  00 01 01 00 0B 0F FF FF 3F 00 00 00 00 00 FA 00



* Warning: partition(FreeBSD/NetBSD/386BSD) starts beyond disk end.



* Partition invalid(invalid partition entry (see comments above)):
   type: 165(0xA5)(FreeBSD/NetBSD/386BSD)
   size: 7993mb #s(16370235) s(16386300-32756534)
   chs:  (1023/15/63)-(1023/15/63)d (16256/4/1)-(32496/8/63)r
   hex:  00 0F FF FF A5 0F FF FF FC 08 FA 00 3B CA F9 00



* Warning: partition(OS/2 HPFS, NTFS, QNX or Advanced UNIX) starts beyond disk end.



* Partition invalid(invalid partition entry (see comments above)):
   type: 007(0x07)(OS/2 HPFS, NTFS, QNX or Advanced UNIX)
   size: 49999mb #s(102398240) s(32756598-135154837)
   chs:  (1023/15/63)-(1023/15/63)d (32496/10/1)-(134082/2/56)r
   hex:  00 0F FF FF 07 0F FF FF 76 D3 F3 01 20 79 1A 06



* Warning: partition(OS/2 HPFS, NTFS, QNX or Advanced UNIX) starts beyond disk end.



* Partition invalid(invalid partition entry (see comments above)):
   type: 007(0x07)(OS/2 HPFS, NTFS, QNX or Advanced UNIX)
   size: 51246mb #s(104952576) s(135154908-240107483)
   chs:  (1023/15/63)-(1023/15/63)d (134082/4/1)-(238201/13/57)r
   hex:  00 0F FF FF 07 0F FF FF DC 4C 0E 08 00 73 41 06



Partition(DOS or Windows 95 with 32 bit FAT): invalid primary
   type: 011(0x0B)(DOS or Windows 95 with 32 bit FAT)
   size: 8000mb #s(16384000) s(63-16384062)
   chs:  (0/1/1)-(1023/15/63)d (0/1/1)-(16254/0/31)r
   hex:  00 01 01 00 0B 0F FF FF 3F 00 00 00 00 00 FA 00



Partition(FreeBSD/NetBSD/386BSD): invalid primary
   type: 165(0xA5)(FreeBSD/NetBSD/386BSD)
   size: 7993mb #s(16370235) s(16386300-32756534)
   chs:  (1023/15/63)-(1023/15/63)d (16256/4/1)-(32496/8/63)r
   hex:  00 0F FF FF A5 0F FF FF FC 08 FA 00 3B CA F9 00



Partition(OS/2 HPFS, NTFS, QNX or Advanced UNIX): invalid primary
   type: 007(0x07)(OS/2 HPFS, NTFS, QNX or Advanced UNIX)
   size: 49999mb #s(102398240) s(32756598-135154837)
   chs:  (1023/15/63)-(1023/15/63)d (32496/10/1)-(134082/2/56)r
   hex:  00 0F FF FF 07 0F FF FF 76 D3 F3 01 20 79 1A 06



Partition(OS/2 HPFS, NTFS, QNX or Advanced UNIX): invalid primary
   type: 007(0x07)(OS/2 HPFS, NTFS, QNX or Advanced UNIX)
   size: 51246mb #s(104952576) s(135154908-240107483)
   chs:  (1023/15/63)-(1023/15/63)d (134082/4/1)-(238201/13/57)r
   hex:  00 0F FF FF 07 0F FF FF DC 4C 0E 08 00 73 41 06



Ok.



Guessed primary partition table:
Primary partition(1)
   type: 000(0x00)(unused)
   size: 0mb #s(0) s(0-0)
   chs:  (0/0/0)-(0/0/0)d (0/0/0)-(0/0/0)r
   hex:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00



Primary partition(2)
   type: 000(0x00)(unused)
   size: 0mb #s(0) s(0-0)
   chs:  (0/0/0)-(0/0/0)d (0/0/0)-(0/0/0)r
   hex:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00



Primary partition(3)
   type: 000(0x00)(unused)
   size: 0mb #s(0) s(0-0)
   chs:  (0/0/0)-(0/0/0)d (0/0/0)-(0/0/0)r
   hex:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00



Primary partition(4)
   type: 000(0x00)(unused)
   size: 0mb #s(0) s(0-0)
   chs:  (0/0/0)-(0/0/0)d (0/0/0)-(0/0/0)r
   hex:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00





うーむ・・・これ、わかる人にしかわからない情報ですなぁ・・・



とりあえず、私が欲しかったのは、ココです。

Possible partition(Windows NT/W2K FS), size(49999mb), offset(15994mb)
   type: 007(0x07)(OS/2 HPFS, NTFS, QNX or Advanced UNIX)
   size: 49999mb #s(102398240) s(32756598-135154837)
   chs:  (1023/15/63)-(1023/15/63)d (32496/10/1)-(134082/2/56)r
   hex:  00 0F FF FF 07 0F FF FF 76 D3 F3 01 20 79 1A 06



Possible partition(Windows NT/W2K FS), size(51246mb), offset(65993mb)
   type: 007(0x07)(OS/2 HPFS, NTFS, QNX or Advanced UNIX)
   size: 51246mb #s(104952576) s(135154908-240107483)
   chs:  (1023/15/63)-(1023/15/63)d (134082/4/1)-(238201/13/57)r
   hex:  00 0F FF FF 07 0F FF FF DC 4C 0E 08 00 73 41 06

この、007、32756598、102398240といった値を、FreeBSDのfdiskコマンドで、書き込んでいって、パーティションテーブルを復活させてやります。



そして、Windows上でこの壊れたディスクにアクセスすると、ほぉ~ら、



20060225



あれ???読めないよ・・・



おかしいなぁ。実は、このパーティションは、もともと拡張パーティション内に作った論理パーティションだったのですが、FreeBSDのfdiskコマンドでは、論理パーティションをいじくることができなかった???みたいで、基本パーティション(primary partition)として作ったのです。そのために、うまく復旧できなかったのでしょうか???



幸運なことに、このパーティション、FreeBSDでマウントできました。

mount_ntfs -C eucJP /dev/ad3s3 /mnt

とかやると、ちゃーんと、日本語のファイル名もちゃんと読めました。こうして見えるようになったファイルを、もう1台のWindowsパソコンでFTPクライアントの「FFFTP」を使ってダウンロードすることで、無事、復旧することができました。





教訓。



データのバックアップは大事。まじで。



☆ ☆ ☆ ☆ ☆



本当は、ディスクのデータ復旧作業をするとき、まず最初に、ディスクのすべての内容を、別のディスクへコピーしておき、コピー先のディスクに対して、修復作業を試みます。



論理的な故障だけでなく、物理的な故障に対しても、同様です。



復旧操作に失敗したり、物理的障害の程度が進んだりして、壊れたディスクに、さらなるダメージを与えたり、致命傷を与えたりするのを防ぐためです。





0 件のコメント:

コメントを投稿