にちょこっと書いたのは、2台のパソコンを使って修復する方法でしたが、VMware Playerと、IDEをUSBに変換するアダプタを使うことで、1台のWindowsパソコンだけでもできそうです。ちょっと気になるところはありましたが・・・
注意
- 直せるのは、MBRなどパーティションテーブルが壊れてしまった場合だけです。
- カッコン、カッコンと、異音がするようなハードディスクは、物理的故障ですので、この方法では無理です。
- 電源をいれてもうんともすんともいわないハードディスクは(中のお皿が回っていないわけでして)、この方法では直せません。ちなみに回らないディスクは、絶妙なタイミングで適度な衝撃を与えると、再び回りだすことがあります(経験と勘によりますので、その筋の達人に頼みましょう)
- ハードディスクにアクセスしようとすると、パソコンがだんまり状態になってしまったり、やたらと時間がかかるようなケースも、たぶん無理っす
- 作業には、それなりに高度な知識を必要とします。マウスクリックするだけで直るようなことはありません。ヘマして事態を最悪にしたとしても、私には責任をとれません。あしからず
参考
(VMware) FreeBSD 6.0-RELEASEのインストール
- VMware Playerを使ってFreeBSDをインストールする手順について。ちなみに今回はFreeBSD 6.0ではなく、5.5-PRERELEASEを使ってます。uname -aはこんな。
FreeBSD freebsd.vmware.local 5.5-PRERELEASE-20060212-JPSNAP
FreeBSD 5.5-PRERELEASE-20060212-JPSNAP #0: Sun Feb 12 02:35:57 UTC 2006 root@ushi.jp.freebsd.org:/usr/obj/usr/src/sys/GENERIC i386
(VMware) USB接続のHDDにFreeBSDをインストール
- USB接続のHDDをVMwareで使う方法についてです。
- ごく簡単なports利用方法の紹介
- portsを最新版へ更新する方法です
- ある時期のportsnapがバグってます、という話
■ gpartのインストール
portsで楽々インストール。「cd ほにゃらら」して「make install clean」だけです。
freebsd# cd /usr/ports/sysutils/gpart/
freebsd# make install clean
===> Vulnerability check disabled, database not found
=> gpart-0.1h.tar.gz doesn't seem to exist in /usr/ports/distfiles/.
=> Attempting to fetch from ftp://ftp2.jp.freebsd.org/pub/FreeBSD/ports/distfile
s/.
gpart-0.1h.tar.gz 100% of 51 kB 286 kBps
===> Extracting for gpart-0.1h_1
=> MD5 Checksum OK for gpart-0.1h.tar.gz.
=> SHA256 Checksum OK for gpart-0.1h.tar.gz.
===> Patching for gpart-0.1h_1
===> Applying FreeBSD patches for gpart-0.1h_1
===> gpart-0.1h_1 depends on executable: gmake - found
===> Configuring for gpart-0.1h_1
===> Building for gpart-0.1h_1
(以下略)
■ ハードディスクをVMwareなFreeBSDに接続
IDEなハードディスクを、USB接続で使えるようにするアダプタを使いました。
USBコネクタをさして、VMware Playerの上のほうにあるUSBのボタンを押してやれば、ゲストOS側で、そのUSBデバイスが認識されます。
で、ですが・・・なぜか、USB1.1って認識してるみたいなんですよね・・・
カーネルのリコンフィグをすると、USB2.0になるんでしょうか???
■ パーティションとは何のこと?
googleしてみたら、ものすごく詳しく説明してくれているページがありました。
http://nobumasa-web.hp.infoseek.co.jp/partition/partition.html
すごく参考になります。
■ gpartを実行する
今回USBで接続したハードディスクは、/dev/da0というデバイス名で認識されているので、
freebsd# gpart -vv /dev/da0
となります。
しばらく待っていれば、
に示したような結果が表示されます。
出力結果をファイルに保存したければ、
freebsd# gpart -vv /dev/da0 |& tee /tmp/gpart-da0.log
とかやれば、/tmp/gpart-da0.logに保存されます。
ところで、ディスクを接続したときにFreeBSDのログにでていたとおり、どうも、USB1.1並の転送速度になっているみたいです。ここで書いた方法では、gpartでディスクからデータを抽出するのに、数分程度かかりました。120GBのHDDの場合です(ディスク全領域を読み出しているわけではないらしい)。ちなみにUSBではなく、直接接続した場合は、数秒でした。
■ gpartの結果の読み方
FreeBSDのfdiskコマンドで、パーティション(スライス)を切れる人なら、たぶんすぐわかるでしょうが・・・まあ、ここでそんな話の説明もするわけにもいかないので、ハードディスクのパーティションに関する詳細はgoogleしてみるか、上の「パーティションとは何のこと?」であげたページを参考にしてください。
行方不明になってしまったパーティションの情報は、
Begin scan...
というところから後に表示されます。
で、私の場合、なくなってしまったパーティションの情報が、運良くみつかって、そのうちの1つが、こういうかんじでした。
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
パーティション情報を、どこかのファイルに保存したり、メモってあれば、gpartを使わなくてもよかったんですけどねぇ。
■ fdiskコマンドでパーティション情報を書き込む
FreeBSDのfdiskコマンドを使いましたが、パーティション情報を編集するツールなら、同様な感じでできるかと思います。私のお気に入りのブートセレクタの「MBM」でも、パーティション情報を書き換えることができたような気がします。
「fdisk -i ディスク」というコマンドで、fdiskを実行します。
freebsd# fdisk -i da0
******* Working on device /dev/da0 *******
parameters extracted from in-core disklabel are:
cylinders=14946 heads=255 sectors/track=63 (16065 blks/cyl)Figures below won't work with BIOS for partitions not in cyl 1
parameters to be used for BIOS calculations are:
cylinders=14946 heads=255 sectors/track=63 (16065 blks/cyl)Do you want to change our idea of what BIOS thinks ? [n]
BIOS用のジオメトリ情報を変更する?みたいなことを聞いてくるので、この場合、変更しなくていいと思うので、nと答えます。
Media sector size is 512
Warning: BIOS sector numbering starts with sector 1
Information from DOS bootblock is:
The data for partition 1 is:
sysid 11 (0x0b),(DOS or Windows 95 with 32 bit FAT)
start 63, size 16384062 (8000 Meg), flag 0
beg: cyl 0/ head 1/ sector 1;
end: cyl 1023/ head 15/ sector 63
Do you want to change it? [n]
1つめのパーティションの情報を変更する?と聞かれます。この情報が正しければ、つまりこのパーティションが正常にアクセスできているのなら、nと答えます。うその値が書き込まれていて修復する必要があるのならyと答えます。
これ、あってますので、nでつぎにすすみます。
もう修復しちゃったので、正しそうな値が入力されているのですが、例として、以下の3番目のパーティションの情報を修正する手順を示します。
The data for partition 3 is:
sysid 7 (0x07),(OS/2 HPFS, NTFS, QNX-2 (16 bit) or Advanced UNIX)
start 32756598, size 102398240 (49999 Meg), flag 0
beg: cyl 1023/ head 15/ sector 63;
end: cyl 1023/ head 15/ sector 63
Do you want to change it? [n]
yと答えます。
Supply a decimal value for "sysid (165=FreeBSD)" [0]
これにはパーティションのsysidを入力します。NTFSのパーティションなら7番なので、7と入力します。FreeBSDのパーティションなら165です。
さきほどのgpartのログをみると、typeのところに、入力すべき値が示されています。
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
007、つまり、7ですね。
先ほどのページにも、ID(パーティションタイプ)の一覧表がのっていました。
http://nobumasa-web.hp.infoseek.co.jp/partition/partition.html
ただ、このページでは16進数で表記されていますが、fdiskで入力するのは10進数です。16進数のA5は10進数で165です。16進を10進に変換するのは、たとえばFreeBSDのprintfコマンドでもできます。こんな感じです。16進数には0xをつけてね。
freebsd# printf '%d\n' 0xA5
165
とりあえず、7と入力しました。
Supply a decimal value for "sysid (165=FreeBSD)" [0] 7
Supply a decimal value for "start" [0]
今度は、パーティションの先頭セクタ番号を入力します。これは、gpartの「s(数字-数字)」のところの、1つめの数字になります。
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
というわけで、「32756598」と入力します。
Supply a decimal value for "start" [0] 32756598
Supply a decimal value for "size" [0]
今度は、パーティションのサイズをセクタ数で入力します。これは、gpartの「#s(数字)」のところの値になります。
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
というわけで、102398240と入力します。
Supply a decimal value for "size" [0] 102398240
fdisk: WARNING: partition does not end on a cylinder boundary
fdisk: WARNING: this may confuse the BIOS or some operating systems
Correct this automatically? [n]
シリンダ境界にそろってないよ、とのWARNINGメッセージがでますが、そろわなものは仕方がないので、そろわないままにしておきます。つまりnと答えます。
Correct this automatically? [n] n
Explicitly specify beg/end address ? [n]
次ですが・・・よくわかんないのですが、とりあえずyと答えました。
Explicitly specify beg/end address ? [n] y
Supply a decimal value for "beginning cylinder" [0]
gpartで「chs: (1023/15/63)-(1023/15/63)d」と表示されているなかの、1つ目の数字、1023が該当すると思われます。
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 06Supply a decimal value for "beginning cylinder" [0] 1023
Supply a decimal value for "beginning head" [0]
つぎは、「chs: (1023/15/63)-(1023/15/63)d」と表示されているなかの、2つ目の数字、15が該当すると思われます。
Supply a decimal value for "beginning head" [0] 15
Supply a decimal value for "beginning sector" [0]
つぎは、「chs: (1023/15/63)-(1023/15/63)d」と表示されているなかの、3つ目の数字、63が該当すると思われます。
Supply a decimal value for "beginning sector" [0] 63
Supply a decimal value for "ending cylinder" [0]
つぎは、「chs: (1023/15/63)-(1023/15/63)d」と表示されているなかの、4つ目の数字、1023が該当すると思われます。
Supply a decimal value for "ending cylinder" [0] 1023
Supply a decimal value for "ending head" [0]
つぎは、「chs: (1023/15/63)-(1023/15/63)d」と表示されているなかの、5つ目の数字、15が該当すると思われます。
Supply a decimal value for "ending head" [0] 15
Supply a decimal value for "ending sector" [0]
つぎは、「chs: (1023/15/63)-(1023/15/63)d」と表示されているなかの、6つ目の数字、63が該当すると思われます。
Supply a decimal value for "ending sector" [0] 63
sysid 7 (0x07),(OS/2 HPFS, NTFS, QNX-2 (16 bit) or Advanced UNIX)
start 32756598, size 102398240 (49999 Meg), flag 0
beg: cyl 1023/ head 15/ sector 63;
end: cyl 1023/ head 15/ sector 63
Are we happy with this entry? [n]
これでよければyと答えます。
4番目のパーティションについて回答したあとは、
Do you want to change the active partition? [n]
と聞かれます。ようするにどのパーティションからブートするかを変更するか?って聞いてます。とりあえずnと答えます。必要なら変更してください。
Do you want to change the active partition? [n] n
We haven't changed the partition table yet. This is your last chance.
parameters extracted from in-core disklabel are:
cylinders=14946 heads=255 sectors/track=63 (16065 blks/cyl)
Figures below won't work with BIOS for partitions not in cyl 1
parameters to be used for BIOS calculations are:
cylinders=14946 heads=255 sectors/track=63 (16065 blks/cyl)
Information from DOS bootblock is:
1: sysid 11 (0x0b),(DOS or Windows 95 with 32 bit FAT)
start 63, size 16384062 (8000 Meg), flag 0
beg: cyl 0/ head 1/ sector 1;
end: cyl 1023/ head 15/ sector 63
2: sysid 165 (0xa5),(FreeBSD/NetBSD/386BSD)
start 16386300, size 16370235 (7993 Meg), flag 0
beg: cyl 1023/ head 15/ sector 63;
end: cyl 1023/ head 15/ sector 63
3: sysid 7 (0x07),(OS/2 HPFS, NTFS, QNX-2 (16 bit) or Advanced UNIX)
start 32756598, size 102398240 (49999 Meg), flag 0
beg: cyl 1023/ head 15/ sector 63;
end: cyl 1023/ head 15/ sector 63
4: sysid 7 (0x07),(OS/2 HPFS, NTFS, QNX-2 (16 bit) or Advanced UNIX)
start 135154908, size 104952576 (51246 Meg), flag 0
beg: cyl 1023/ head 15/ sector 63;
end: cyl 1023/ head 15/ sector 63
Should we write new partition table? [n]
最後に、この情報でパーティションテーブルに書き込んでいいですか?と確認してきます。本当によければyと答えます。
以上のようなかんじで、FreeBSDのfdiskコマンドで、パーティション情報を手入力で直すことができます。
これで直るかと思ったのですが、
に書いたように、なぜかWindowsからは、どうも読めてませんでした。あ、フォーマットしちゃ、ぜったいダメですよ。ぜったい!
というわけで、なぜかFreeBSDではNTFSをマウントできたので、FTPで吸い出した、という次第です。
つづきはまた明日。
■ 関連記事
(2008/2/21追記) パーティションテーブルを復活させたい場合、gpartよりも、TestDiskというツールの方がお手軽な場合もあります。
0 件のコメント:
コメントを投稿