フラット表示 | 前のトピック | 次のトピック |
投稿者 | スレッド |
---|---|
webadm | 投稿日時: 2011-9-11 19:45 |
Webmaster 登録日: 2004-11-7 居住地: 投稿: 3086 |
増設ドライブも復活できた パーティションテーブルが完全にrapeされて情報が失われていた増設ドライブの方も下記の手順で復活できた
(1)温存されているNTFSパーティションからボリュームサイズを知る 増設ドライブの先頭からhdでダンプするとNTFSボリュームの先頭にある'NTFS'の文字列が識別できることから、NTFSパーティションの内容は温存されていることを確認。あとはそのボリュームのサイズがわかればパーティションテーブルをそれに基づいて作り直せばよいことになる。 Googleでntfs.hを検索して、NTFSボリュームヘッダの構造を調べた #define NTFS_BBID "NTFS " #define NTFS_BBIDLEN 8 struct bootfile { u_int8_t reserved1[3]; /* asm jmp near ... */ u_int8_t bf_sysid[8]; /* 'NTFS ' */ u_int16_t bf_bps; /* bytes per sector */ u_int8_t bf_spc; /* sectors per cluster */ u_int8_t reserved2[7]; /* unused (zeroed) */ u_int8_t bf_media; /* media desc. (0xF8) */ u_int8_t reserved3[2]; u_int16_t bf_spt; /* sectors per track */ u_int16_t bf_heads; /* number of heads */ u_int8_t reserver4[12]; u_int64_t bf_spv; /* sectors per volume */ cn_t bf_mftcn; /* $MFT cluster number */ cn_t bf_mftmirrcn; /* $MFTMirr cn */ u_int8_t bf_mftrecsz; /* MFT record size (clust) */ /* 0xF6 inducates 1/4 */ u_int32_t bf_ibsz; /* index buffer size */ u_int32_t bf_volsn; /* volume ser. num. */ }; 上のsectors per voulmeフィールドの値からNTFSボリュームのサイズがわかる。 NTFSボリューム先頭セクタをダンプすると root@lenny:~# hd /dev/sdb|more 00007e00 eb 52 90 4e 54 46 53 20 20 20 20 00 02 08 00 00 |.R.NTFS .....| 00007e10 00 00 00 00 00 f8 00 00 3f 00 ff 00 3f 00 00 00 |........?...?...| 00007e20 00 00 00 00 80 00 80 00 81 6e 85 4a 00 00 00 00 |.........n.J....| 00007e30 00 00 0c 00 00 00 00 00 e8 56 a8 04 00 00 00 00 |.........V......| 00007e40 f6 00 00 00 01 00 00 00 85 81 1a 3c aa 1a 3c 9a |...........<..<.| 00007e50 00 00 00 00 fa 33 c0 8e d0 bc 00 7c fb b8 c0 07 |.....3.....|....| 上の3行目にある 81 6e 85 4a 00 00 00 00 が64bitのNTFSボリュームサイズ(セクタ数)である。little endianなので16進数に直すと4a856e81ということになる。これを10進数に変換すると、1250258561ということでこれを憶えておく。 (2)壊れたパーティションテーブルを作り直す 変なエラーメッセージテキストで上書きされてしまったパーティションテーブルの内容はもう使い物にならないので、消して新しくNTFSパーティションだけを復活させるためのテーブルをfdiskで作成する。 root@lenny:~# fdisk /dev/sdb Command (m for help): u Changing display/entry units to sectors Command (m for help): o Command (m for help): n Command action e extended p primary partition (1-4) p Partition number (1-4): 1 First sector (63-1250263727, default 63): Using default value 63 Last sector or +size or +sizeM or +sizeK (63-1250263727, default 1250263727): Using default value 1250263727 なんとさっき調べたNTFボリュームサイズはぼぼ全体と同じサイズだった。全部使ってたのね。これはデフォルトの全部使うでよしとしよう。 Command (m for help): p Disk /dev/sdb: 640.1 GB, 640135028736 bytes 255 heads, 63 sectors/track, 77825 cylinders, total 1250263728 sectors Units = sectors of 1 * 512 = 512 bytes Disk identifier: 0xe9a1e50b Device Boot Start End Blocks Id System /dev/sdb1 63 1250263727 625131832+ 83 Linux linux上で新しいパーティションを作るとtypeがLinuxになってしまう。NTFSに変える。 Command (m for help): t Selected partition 1 Hex code (type L to list codes): 7 Changed system type of partition 1 to 7 (HPFS/NTFS) Command (m for help): p Disk /dev/sdb: 640.1 GB, 640135028736 bytes 255 heads, 63 sectors/track, 77825 cylinders, total 1250263728 sectors Units = sectors of 1 * 512 = 512 bytes Disk identifier: 0xe9a1e50b Device Boot Start End Blocks Id System /dev/sdb1 63 1250263727 625131832+ 7 HPFS/NTFS これであとはパーティションテーブルを書き込むだけ。 Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. Syncing disks. 変更されたパーティションが反映されているはずなので確認すると root@lenny:~# cat /proc/partitions major minor #blocks name 8 0 488386584 sda 8 1 134206978 sda1 8 2 80469585 sda2 8 3 273709956 sda3 8 16 625131864 sdb 8 17 625131832 sdb1 OKぽ 試しにlinux上からNTFSパーティションをmountしてみる root@lenny:~# mount /dev/sdb1 /mnt できたじゃないか。ほんとうかどうか確かめる root@lenny:~# mount /dev/sda2 on / type ext3 (rw,errors=remount-ro) tmpfs on /lib/init/rw type tmpfs (rw,nosuid,mode=0755) proc on /proc type proc (rw,noexec,nosuid,nodev) sysfs on /sys type sysfs (rw,noexec,nosuid,nodev) procbususb on /proc/bus/usb type usbfs (rw) udev on /dev type tmpfs (rw,mode=0755) tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev) devpts on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=620) nfsd on /proc/fs/nfsd type nfsd (rw) /dev/sdb1 on /mnt type ntfs (rw) ちゃんとntfsでmountされている。復活ぽ。 実はその前にbootドライブの第3パーティションが怪しいので、調べたところ、拡張パーティションらしく、パーティション先頭セクタにパーティションテーブルがあるのを確認。ならばパーティションタイプを拡張パーティション(05)に変更すればいいのではと思ってやってみたら、怒られた。linuxパーティションタイプをExtendedタイプには変更できないらしい。パーティションタイプだけ変更したいだけなのに。そうおもって、一度Linux Extended(85)に変更する方法があることを知ってやってみたら、パーティション先頭にあったはずの拡張パーティションテーブルが初期化されて消えていたorz ということでメモってなかったので拡張パーティション情報は失われた模様。まあ、確かUbuntuしか入れてなかったし、使ってなかったから第3パーティションは更地に戻すことに決定。 とりあえずNTFSボリュームが二つとも温存されていて復活できたのが幸い。それに新しいHDDを買う費用も節約できたのでよかった。 |
フラット表示 | 前のトピック | 次のトピック |
題名 | 投稿者 | 日時 |
---|---|---|
ALIENWARE | webadm | 2011-2-6 5:02 |
メインのデスクトップPCも壊れた | webadm | 2011-9-10 17:51 |
なんとかbootドライブから起動できるようになった | webadm | 2011-9-11 17:56 |
» 増設ドライブも復活できた | webadm | 2011-9-11 19:45 |
まだ伏兵がいた | webadm | 2011-9-11 21:09 |
最近のLenovoのThinkpad | webadm | 2012-9-2 21:33 |
Re: 最近のLenovoのThinkpad | webadm | 2015-5-26 18:14 |
投稿するにはまず登録を | |