web-dev-qa-db-ja.com

新しいパーティションテーブルを書き込むと、最初の512バイト以外のものが変更されます

NASから取り外した1TBドライブからデータを回復しようとしていますが、fdisk -lu /dev/sdbを実行すると、有効なパーティションテーブルがないというメッセージが表示されます。

私が理解していることから、パーティションテーブルはディスクの最初の512バイト内にあるので、現時点ではパーティションテーブルがないので、新しいパーティションテーブルを作成して損傷を与えることはありますか?

Testdiskは3つのパーティションを検出しました。ドライブのセクターをスキャンすると、このパーティションテーブルをディスクに書き込むと、最初の512バイトにしか影響しないと思いますか?それらが正しくないことが判明した場合、私は何も失いませんでした、私のデータはすべてディスクの残りの部分でまだ無傷ですよね?

ディスク上の他に何も変更しない限り、パーティションテーブルを必要なだけ書き換えることはできませんか?最初の512バイトをブラッティングし続けてから、Testdiskを再度実行すると、スキャンによって、ディスク上の元の場所にある3つの元のパーティションが検出されますか?

最初の512バイト以外のディスク上の実際のデータに影響を与える場合は、そのパーティションテーブルをディスクに書き込むことを続行するのは気が進まない。

任意のガイダンスをいただければ幸いです。

よろしくリッチ

4
HuggieRich

いくつかの簡単なテストの後、仮想環境でTestDiskとsfdiskを使用した場合のみ(fdiskやgpartedなどで新しいパーティションテーブルを作成してもそのままになるかどうかは確認できません)、パーティションテーブルを作成して、いいえと言いたくなります。最初の512バイト以外には影響しません。

以下はテスト手順です...

100MBのハードドライブを作成し、次のようにパーティション化しました。

My virtual second drive

次に、最初の512バイトを消去する前に、各パーティションにファイルをマウントして追加しました

Sudo dd if=/dev/zero bs=1 count=512 conv=notrunc of=/dev/sdb

Fdiskで簡単にチェックすると、これが消去されたことがわかります

richard@mint14 ~/Disktests $ Sudo fdisk -lu /dev/sdb

Disk /dev/sdb: 104 MB, 104857600 bytes
255 heads, 63 sectors/track, 12 cylinders, total 204800 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

Disk /dev/sdb doesn't contain a valid partition table

そこで、ドライブをスキャンしてパーティションを正常に検出するTestDiskを実行し、それらをディスクに書き込みました。

この後、sfdiskを使用してパーティションテーブルをダンプしました

richard@mint14 ~/Disktests $ Sudo sfdisk -d /dev/sdb > sdb_partitions.out
Warning: extended partition does not start at a cylinder boundary.
DOS and Linux will interpret the contents differently.

richard@mint14 ~/Disktests $ cat sdb_partitions.out 
# partition table of /dev/sdb
unit: sectors

/dev/sdb1 : start=     2048, size=    20480, Id=83, bootable
/dev/sdb2 : start=    22528, size=    61440, Id=83
/dev/sdb3 : start=    83968, size=    61440, Id= 5
/dev/sdb4 : start=   145408, size=    59392, Id= 7
/dev/sdb5 : start=    86016, size=    59392, Id=83

このファイルのコピーを作成し、手動で編集して単一の20MBパーティションを作成したので、2番目のパーティションとオーバーラップしてドライブに書き戻しました。

richard@mint14 ~/Disktests $ Sudo sfdisk /dev/sdb < sdb_partitions.out_modified
Checking that no-one is using this disk right now ...
OK

Disk /dev/sdb: 12 cylinders, 255 heads, 63 sectors/track

sfdisk: ERROR: sector 0 does not have an MSDOS signature
 /dev/sdb: unrecognised partition table type
Old situation:
No partitions found
New situation:
Warning: The partition table looks like it was made
  for C/H/S=*/173/42 (instead of 12/255/63).
For this listing I'll assume that geometry.
Units = sectors of 512 bytes, counting from 0

   Device Boot    Start       End   #sectors  Id  System
/dev/sdb1   *      2048     43007      40960  83  Linux
        start: (c,h,s) expected (0,48,33) found (0,32,33)
        end: (c,h,s) expected (5,158,42) found (2,172,42)
/dev/sdb2             0         -          0   0  Empty
/dev/sdb3             0         -          0   0  Empty
/dev/sdb4             0         -          0   0  Empty
Warning: partition 1 does not end at a cylinder boundary
Successfully wrote the new partition table

Re-reading the partition table ...

Fdiskを使用した別のクイックチェックは、このパーティションテーブルがディスクに正常に書き込まれたことを示しています

richard@mint14 ~/Disktests $ Sudo fdisk -lu /dev/sdb

Disk /dev/sdb: 104 MB, 104857600 bytes
173 heads, 42 sectors/track, 28 cylinders, total 204800 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1   *        2048       43007       20480   83  Linux

最後に、sfdiskを使用して元のパーティションテーブルを置き換えます

richard@mint14 ~/Disktests $ Sudo sfdisk --force /dev/sdb < sdb_partitions.out 
Checking that no-one is using this disk right now ...
OK

Disk /dev/sdb: 12 cylinders, 255 heads, 63 sectors/track

sfdisk: ERROR: sector 0 does not have an MSDOS signature
 /dev/sdb: unrecognised partition table type
Old situation:
No partitions found
New situation:
Units = sectors of 512 bytes, counting from 0

   Device Boot    Start       End   #sectors  Id  System
/dev/sdb1   *      2048     22527      20480  83  Linux
/dev/sdb2         22528     83967      61440  83  Linux
/dev/sdb3         83968    145407      61440   5  Extended
/dev/sdb4        145408    204799      59392   7  HPFS/NTFS/exFAT
/dev/sdb5         86016    145407      59392  83  Linux

次に、これらをそれぞれ再度マウントし、ファイルが正常に存在することを確認しました。

2
HuggieRich