web-dev-qa-db-ja.com

コマンドpvを使用すると、ドライブのクローンを作成できます。どのようにマウントしますか?

次のコマンドを使用してドライブをバックアップできました。

pv -EE /dev/sda > disk-image.img

これはすべて順調ですが、このコマンドを使用しない限り、ファイルを表示する方法がありません。

pv disk-image.img > /dev/sda

もちろん、これはディスクにデータを書き戻しますが、これは私がやりたいことではありません。私の質問は、単にディスクに書き戻すのではなく、.imgファイル自体をマウントする方法を教えてください。


ループを使用してマウントしようとしましたが、無効なNTFSについて不満があるようです。

$ mount -o loop disk-image.img
mount: disk-image.img: can't find in /etc/fstab.
$ mount -o loop disk-image.img /mnt/disk-image/
NTFS signature is missing.
Failed to mount '/dev/loop32': Invalid argument
The device '/dev/loop32' doesn't seem to have a valid NTFS.
Maybe the wrong device is used? Or the whole disk instead of a
partition (e.g. /dev/sda, not /dev/sda1)? Or the other way around?
6
tisaconundrum

マウントできるsimpleパーティションではなく、MBR(512バイト)を含むディスク全体をバックアップしたため、MBRをスキップする必要があります。

試してみてください:

Sudo losetup -o 512 /dev/loop0 disk-image.img
Sudo mount -t ntfs-3g /dev/loop0 /mnt 

編集: @grawityの提案どおり:

Sudo losetup --partscan /dev/loop0 disk-image.img
Sudo mount -t ntfs-3g /dev/loop0 /mnt 
10

他の人がすでに指摘したように

Sudo losetup /dev/loop0 /path/to/disk-image.img

ファイルへのアクセスに使用できる仮想ブロックデバイスがセットアップされますが、パーティションに簡単にアクセスできません。

ただし、その後に手動でパーティションオフセットを計算せずに、ディスクイメージファイル内のすべてのパーティションにアクセスするために使用できる別のコマンドがあります。

Sudo kpartx -a /dev/loop0

これにより、ディスクイメージ内のパーティションテーブルが読み取られ、すべてのパーティションに対して/dev/mapper/loop0p1/dev/mapper/loop0p2などのデバイスが作成されます。それらを使用して、パーティションを通常どおりマウントできます。

(各パーティションが何であるかを覚えていない場合は、fdisk -l /dev/loop0を使用してディスクイメージ内のパーティションテーブルを表示できます。fdiskの多くのバージョンには、パーティションデバイスの名前が表示されることに注意してください。この状況では少し変わっています。)

ディスクイメージへのアクセスが完了したら、マウントしたパーティションをアンマウントし、次の2つのコマンドを使用して、この設定を元に戻すことができます。

Sudo kpartx -d /dev/loop0   # remove the /dev/mapper/loop0pN partition mappings
Sudo losetup -d /dev/loop0  # disconnect the image file from the loop device

kpartxコマンドは、もともとマルチパスデバイス用のツールとして開発されました(SANストレージシステムで使用))が、ディスクイメージでも完全に使用できます。

2
telcoM