web-dev-qa-db-ja.com

フルドライブイメージからパーティションをマウントできますか?

注:この質問は基本的に上記の質問の複製であることに同意しますが、@ alienthの回答(下記)はより簡潔であると思うので、他の質問に進む前にそれを確認することをお勧めします。

私は定期的にubuntuシステムドライブ全体を別のドライブにバックアップ/イメージ/クローンします:

dd if=/dev/sda of=/media/disk1/backup.iso

実験やドライブの故障などの後でドライブを復元する必要がある場合に非常に便利です。

ただし、その.iso内からパーティションをマウントしたいと思います(つまり、ドライブをddしたときの/ dev/sda1でした)。私がバックアップした場合:

dd if=/dev/sda1 of=/media/disk1/backup.iso

.isoは、ubuntuのマウントボリュームユーティリティを使用して簡単にマウントできます。ただし、ユーティリティはドライブ全体のISOでは機能しません。元のISOからsda1をマウントする方法はありますか?

4
Fred Hamilton

ディスクイメージのどこからパーティションを開始するかを決定する必要があります。これを行うには、以下を実行します。

Sudo parted /media/disk1/backup.iso unit s print

出力は次のようになります。

Model:  (file)
Disk /tmp/file: 200000s
Sector size (logical/physical): 512B/512B
Partition Table: msdos

Number  Start  End      Size     Type     File system  Flags
 1      2048s  199999s  197952s  primary

論理セクターサイズを取得して、マウントするパーティションのStartを掛ける必要があります。この場合、最初のパーティションをマウントする場合、位置は2048 * 512、または1048576になります。

次に、ループバックセットアップを使用してパーティションをマウントし、上で決定した値をoffsetパラメーターに差し込みます。

mount -o loop,offset=1048576 /media/disk1/backup.iso /mnt/mydisk

11
alienth

フルディスクイメージ内のパーティションテーブルを表示する方法があります。実際には2つ。

最初の方法:

# losetup /dev/loop0 /media/disk1/backup.iso
# fdisk /dev/loop0 # Be very careful with this!
Command: w

理想的には、/dev/loop0p1のパーティションに対してループデバイス/dev/loop0p2backup.isoなどを作成する必要があります。その後、これらを通常はループデバイスとしてマウントできます。バックアップを破損しないように、読み取り専用にすることをお勧めします。 fdiskpartprobeなど、kpartxを直接使用するよりもパーティションの読み取りをトリガーする安全な方法があると考えられます。しかし、私はそれらに関して信頼性の問題があり、fdiskが私が見つけた最良の方法です。

2番目の方法はより困難です。パーティションの開始を手動で読み取り(fdisk -l /dev/loop0)、次に適切な--offsetオプションを使用してlosetupを再実行し、パーティションの開始時にループデバイスを開始します。正確に渡す数値はfdiskからの出力によって異なりますが、これはバイト単位のオフセットであり、開始ブロックにブロックサイズを掛けたものに等しくなります。その時点で、/dev/loop0を直接マウントできます(ここでも、読み取り専用の方が賢明です)。

1
Tom Hunt