web-dev-qa-db-ja.com

ddで作成されたディスクイメージを、マウントされた外部USB hdd上のディレクトリにマウントすることは可能ですか?

「dd」コマンドを使用して作成したホーム(/dev/sda3)パーティションのイメージがあります。

dd if=/dev/sda3 of=/path/to/disk.img

/dev/rootパーティションを拡大するために、gpartedを介してホームパーティションを削除しました。次に、イメージにバックアップしたパーティションよりもサイズが小さい/dev/sda3パーティションを再作成しました。

2TBの外付けHDDを持っているので、バックアップしたイメージを外付けHDDにマウントして、ファイルを/homeディレクトリにコピーすることは可能でしょうか。外付けHDDはすでに「マウントされた状態」になっているので、マウントされたデバイスにマウントするのが良い考えかどうかはわかりません。

  • Slackware 13.37(64ビット)を実行しています。
  • すべてのパーティションでext4を使用しました。
  • gparted livecdでルートパーティションのサイズを変更しました。

私はもう試した:

mount -t ext4 /path/to/disk.img /mng/image -o loop

それは私にfsエラーを与えました(間違ったfsタイプ、悪いオプション、dev/loop/0の悪いスーパーブロック)

それから私はしました

dmesg | tail

出力:

EXT4-fs(loop0):不正なジオメトリ:ブロック数29009610が欠損のサイズ(1679229ブロック)を超えています

どうすればよいかわかりません。バックアップしたイメージから/homeデータを復元したいと思います。

[更新]:* disk.imageはUSB16GBフラッシュドライブにあります。画像サイズは約6GBです。イメージは約100GBの削除されたパーティションから作成されましたが、現在は約80GBに削減されています。

[更新]:今日これを試しました: LQWiki:いくつかのddの例 言います:

大きなドライブから小さなドライブにパーティションテーブルを書き込むことによって、ドライブが実際よりも大きいことを伝えたくありません。ドライブの最初の63セクターは、セクター1、MBRを除いて空です。

dd if=/dev/sda skip=2 of=/dev/sdb seek=2 bs=4k conv=noerror

次に、/dev/sda3/homeにマウントしようとしました。 dmesg | tailは、「グループ記述子が破損しています!」というエラーを出力します。

それから私は試しました:

fsck.ext4 -y -f /dev/sda3

大量の修正された問題と数百万の数値が光速で出力されます。

その後、/dev/sda3/homeに正常にマウントしましたが、ホームディレクトリにデータがありませんでした。 「lost + found」という名前の一部のディレクトリのみが空です。

3
Keeper Hood

どうしてですか:

Sudo losetup /dev/loop0 /path/to/disk.img
mkdir /mnt/image
Sudo mount /dev/loop0 /mnt/image
5
MichaelC

これは古い質問だと思いますが、2日前に同じ問題に遭遇し、問題をある程度解決することができました。

この問題は基本的に、何らかの理由でext2/3/4ファイルシステムイメージがイメージファイルに完全にコピーされておらず、本質的にデータのチャンクが最後から欠落している場合に発生します。このため、何らかの奇跡によって画像の欠落部分にファイルデータが保存されていない限り、元の画像に存在していたすべてのファイルを復元することはできません。

私の場合、イメージをマウントできませんでしたが、ext2/3/4ファイルシステムイメージをスキャンし、見つかったすべてのファイルを指定された場所にダンプするユーティリティがあります。

bash$ losetup -f ./corrupted.img # mounts to /dev/loop0
bash$ Sudo debugfs -c /dev/loop0
debugfs: rdump / /path/to/dump/files/
debugfs: quit

rdumpコマンドは2つの引数を取ります:path insideファイルを再帰的にスキャンするための破損したイメージとネイティブファイルシステム上のパスファイルをに保存します。回復できなかったファイルは、0バイトのサイズで作成されます。

Debugfsはrootとして実行されるため、おそらくファイルをchownする必要があります。

0
Gogeta70

ファイルをブロック数を超えるまで切り捨ててから、再マウントしてください。
あなたの状況では:

EXT4-fs(loop0):不正なジオメトリ:ブロック数2900961欠陥のサイズ(1679229ブロック)を超えています

truncate -o -s 29009610 /path/to/disk.img 
mount -o loop /path/to/disk.img /mng/image

フラビオ

0
Flavio Suligoi