(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上でこの壊れたディスクにアクセスすると、ほぉ~ら、
あれ???読めないよ・・・
おかしいなぁ。実は、このパーティションは、もともと拡張パーティション内に作った論理パーティションだったのですが、FreeBSDのfdiskコマンドでは、論理パーティションをいじくることができなかった???みたいで、基本パーティション(primary partition)として作ったのです。そのために、うまく復旧できなかったのでしょうか???
幸運なことに、このパーティション、FreeBSDでマウントできました。
mount_ntfs -C eucJP /dev/ad3s3 /mnt
とかやると、ちゃーんと、日本語のファイル名もちゃんと読めました。こうして見えるようになったファイルを、もう1台のWindowsパソコンでFTPクライアントの「FFFTP」を使ってダウンロードすることで、無事、復旧することができました。
教訓。
データのバックアップは大事。まじで。
☆ ☆ ☆ ☆ ☆
本当は、ディスクのデータ復旧作業をするとき、まず最初に、ディスクのすべての内容を、別のディスクへコピーしておき、コピー先のディスクに対して、修復作業を試みます。
論理的な故障だけでなく、物理的な故障に対しても、同様です。
復旧操作に失敗したり、物理的障害の程度が進んだりして、壊れたディスクに、さらなるダメージを与えたり、致命傷を与えたりするのを防ぐためです。