注:この質問は基本的に上記の質問の複製であることに同意しますが、@ 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をマウントする方法はありますか?
ディスクイメージのどこからパーティションを開始するかを決定する必要があります。これを行うには、以下を実行します。
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
フルディスクイメージ内のパーティションテーブルを表示する方法があります。実際には2つ。
最初の方法:
# losetup /dev/loop0 /media/disk1/backup.iso
# fdisk /dev/loop0 # Be very careful with this!
Command: w
理想的には、/dev/loop0p1
のパーティションに対してループデバイス/dev/loop0p2
、backup.iso
などを作成する必要があります。その後、これらを通常はループデバイスとしてマウントできます。バックアップを破損しないように、読み取り専用にすることをお勧めします。 fdisk
やpartprobe
など、kpartx
を直接使用するよりもパーティションの読み取りをトリガーする安全な方法があると考えられます。しかし、私はそれらに関して信頼性の問題があり、fdisk
が私が見つけた最良の方法です。
2番目の方法はより困難です。パーティションの開始を手動で読み取り(fdisk -l /dev/loop0
)、次に適切な--offset
オプションを使用してlosetup
を再実行し、パーティションの開始時にループデバイスを開始します。正確に渡す数値はfdisk
からの出力によって異なりますが、これはバイト単位のオフセットであり、開始ブロックにブロックサイズを掛けたものに等しくなります。その時点で、/dev/loop0
を直接マウントできます(ここでも、読み取り専用の方が賢明です)。