故障したディスクを GNU ddrescue でコピーしましたが、何か見落としているのでしょうか?

故障したディスクを GNU ddrescue でコピーしましたが、何か見落としているのでしょうか?

私が何か間違ったことを言ったら皆さんに教えてもらえるように、私の考えを説明させてください。

外付けハードドライブが 2 つあり、そのうち 1 つは故障しており (Windows は、再度使用するにはフォーマットするように指示します)、2 つ目は空で容量がかなり大きいため、故障したもののコピーに使用しました。最初は、使用Testdisk経験があるため、 を使用することを考えました。ただし、修復ツールを試す前に、故障したディスクの完全なコピーが必要でした。そこで を見つけましたGNU ddrescue。そこで、 でコピーを作成しGNU ddrescue、そのTestdiskコピーで使用することを計画しています。

そこで、 を使用して完全なコピーを作成しましたGNU ddrescue - GUI version。 リカバリが完了すると、選択できる 3 つのオプションが表示されました。1. リセット 2. ドライブのマウント 3. 終了。 に関しては初心者なのでGNU ddrescue、リセットやマウントを行わずにプログラムを終了するのが最善だと思いました (マウントによってドライブが実際にどうなるかはわかりません、申し訳ありません)。

Testdisk次に、複製を使用して失われたパーティションを回復する予定です。

しかし、先に進む前に、この 2 つのプログラムを一緒に使用することが本当に正しいのか、あるいはその過程で何か失敗したのかを知りたいと思います。新しいドライブが古いドライブの完全な複製になったと考えるのは正しいでしょうか?

編集:

/dev/sdd/ ... 古くて故障したハードドライブ

/dev/sde/ ... 新しいハードドライブ

root@PartedMagic:~# sudo gdisk -l /dev/sdd

GPT fdisk (gdisk) version 1.0.3

Partition table scan:
  MBR: MBR only
  BSD: not present
  APM: not present
  GPT: not present


***************************************************************
Found invalid GPT and valid MBR; converting MBR to GPT format
in memory. 
***************************************************************

Disk /dev/sdd: 976773168 sectors, 465.8 GiB
Model: Portable        
Sector size (logical/physical): 512/512 bytes
Disk identifier (GUID): A6D24F7F-47D5-4FAA-8595-5E56582C1DB1
Partition table holds up to 128 entries
Main partition table begins at sector 2 and ends at sector 33
First usable sector is 34, last usable sector is 976773134
Partitions will be aligned on 8-sector boundaries
Total free space is 5099 sectors (2.5 MiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1              63       976768064   465.8 GiB   0700  Microsoft basic data

root@PartedMagic:~# sudo gdisk -l /dev/sde

GPT fdisk (gdisk) version 1.0.3

Partition table scan:
  MBR: MBR only
  BSD: not present
  APM: not present
  GPT: not present


***************************************************************
Found invalid GPT and valid MBR; converting MBR to GPT format
in memory. 
***************************************************************


Warning! Secondary partition table overlaps the last partition by
244209734 blocks!
You will need to delete this partition or resize it in another utility.
Disk /dev/sde: 732558336 sectors, 2.7 TiB
Model: Elements 10B8   
Sector size (logical/physical): 4096/4096 bytes
Disk identifier (GUID): E797BEEA-722B-4903-8086-B2A84B5E741C
Partition table holds up to 128 entries
Main partition table begins at sector 2 and ends at sector 5
First usable sector is 6, last usable sector is 732558330
Partitions will be aligned on 8-sector boundaries
Total free space is 57 sectors (228.0 KiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1              63       976768064   3.6 TiB     0700  Microsoft basic data

出力sudo blkid

root@PartedMagic:~# sudo blkid
/dev/sdd1: LABEL="Expansion Drive" UUID="3C148148148105DC" TYPE="ntfs" PARTUUID="3df9d654-01"

sudo blkid/dev/sdeX/ には言及されていない

明確にするために:/dev/sdd/は障害が発生する前にはパーティションが1つしかありませんでした

答え1

これはそう簡単にはうまくいきません。

新しいディスクの論理セクター サイズは です4096が、古いディスクは を使用します512。パーティション テーブル内の数字は同じままですが、新しいセクターは 8 倍大きいため、クローン内のパーティション テーブル全体は意味をなさなくなります。

場合によっては、これらの数字を翻訳することが可能です(私のこの答え) しかし、ここでは(古い)パーティションは63*512バイトのオフセットから始まり、これは4096で割り切れません。つまり、ファイルシステムはどこかで始まることになります。内部より大きなセクター(セクターの先頭から開始する必要があります)なので、パーティション テーブルがないとすぐには機能しません。

次に何をすべきでしょうか? 以下にいくつかのアイデアを示します。続行する前に、古いディスクを (念のため) 取り外してください。


(現在は無効になっている) パーティション テーブルに関係なく、ファイル システムのマウントを試みることができます。

mount -o ro,offset=$((63*512)) /dev/sde /some/mountpoint

ファイルシステムが正常であれば、これは機能するはずです。あなたの場合、ファイルシステムが破損しているためにコマンドが失敗する可能性があります。しかし、おそらく機能し、重要なデータをすべて取り出すことができるでしょう。


ディスク全体を、セクター サイズを報告するループ デバイスにマップできます512

losetup -f --show /dev/sde       # 512 is the default value

これにより、 のようなノードが出力されるはずです/dev/loop7。このデバイスのコンテキストでは、パーティション テーブルは有効です。パーティション テーブルを必要とするツールは、デバイスで動作するはずです (ただし、/dev/loop7p1パーティションで動作するために 、 を必要とするツールもありますkpartx。役立つかもしれませんが、まず次のアイデアを検討してください)。

注: ノードは で破棄しますlosetup -d /dev/loop7


実際のパーティションをループ デバイスにマップできます。

losetup -f --show --offset $((63*512)) --sizelimit $(( (976768064+1-63)*512 )) /dev/sde

この場合も、 のようなノードが出力されるはずです/dev/loop8。(破損している可能性のある) ファイルシステムはこのデバイスの最初から始まるため、ファイルシステムを分析する回復ツールは、パーティション テーブルなしでファイルシステム (または少なくともその中のファイル) を見つけることができるはずです。


パーティションを別のオフセットにコピーできるので、パーティションテーブルはできる修正する必要があります。これは少し難しいです。すべての数値を正しく計算する必要があります。これまでの方法のいずれかで十分だった場合は、気にする必要はありません。

古いディスクは 465.8 GiB でしたが、新しいディスクは 2.7 TiB なので、十分なスペースがあります。ファイルシステムをディスクの末尾にコピーしましょう。

古いパーティションは、セクター番号 63 から (976768064 を含む) までの 512 バイト セクター、合計 976768002 セクターを占めていました。つまり、少なくとも 122096001 の大きい (4096 バイト) セクターが必要です。

4096 バイトのセクターでは、開始と終了は 7 (部分的に使用) と 122096008 (これも部分的に使用) に変換されます。

ディスクには 732558336 セクターが保持されています。122096001 セクター分 (GPT を使用する場合はそれ以上) 戻す必要があります。開始セクターが 610459648 であれば問題ないようです。これにより、最後にセカンダリ GPT 用のスペースが残ります (32 MiB 境界に揃えられますが、あまり問題にはなりません)。これで、新しいパーティションの最後のセクターは少なくとも 732555648 になります (セクターのサイズを 8 で割り切れるようにしたい場合は 732555655 で、一部のツールではこれで十分です。パーティションが十分大きいと、ファイルシステムに影響しません。ファイルシステムは自身のサイズを認識します)。

パーティション テーブルを編集し、古い (無効な) エントリを破棄して、計画どおりに新しいエントリを作成します。

  • 第一セクター 610459648
  • 最終セクター 73​​2555655
  • NTFSに適したコードまたはタイプ

512 バイトのセクターを持つこのような大容量ディスクには、MBR パーティション テーブルではなく GPT が必要です。4096 バイトのセクターでは、GPT または MBR が機能するはずです。

その後 ( の後でpartprobe、パーティション分割プログラムが暗黙的に呼び出さない場合は)、新しいパーティションにアクセスできるようになります。

(上記で作成した)データを/dev/loop8新しいパーティションにコピーします。

dd if=/dev/loop8 of=/dev/sdeN bs=32M
# or better use ddrescue again

コマンドが約 465.8 GiB をコピーした後、ファイルシステムはパーティション内で適切に配置されます (セクターの中央ではなく、先頭から始まります)。以前のアイデアはやや「ハッキー」でしたが、このアイデアではかなり標準的なセットアップが提供されます。


必要に応じて、復元したデータ用にさらに別のパーティションを作成できます。ddrescue最初に書き込んだファイルシステムは、セクター 122096008 で終わります。新しいコピー (作成する場合) は、610459648 から始まります。いずれにしても、その間にあるものはすべて使用できます。

関連情報