web-dev-qa-db-ja.com

losetupとddを使用して、ファイルシステムイメージをデプロイする準備をします

前書き

Ddを使用すると、ディスクのMBRとパーティションテーブルを簡単にバックアップできます。それは次のように簡単です:dd if=/dev/disk2 of=~/Desktop/disk2_mbr bs=512 count=1

パーティション全体をバックアップすることもできます:dd if=/dev/disk2s1 of=~/Desktop/disk2_partition1

逆の方法も機能します。dd if=~/Desktop/disk2_mbr of=/dev/disk3を使用すると、別のディスクMBRとパーティションテーブルを置き換えることができます(注意、disk3でのデータ損失)。

次に、最初のパーティションを復元するには、次のようにします。dd if=~/Desktop/disk2_partition1 of=/dev/disk3s1

(MBRとパーティションを別々にddすることのポイントは、ディスク全体をddする必要がないことです。パーティションが小さい場合は、はるかに高速になります。)

いいでしょう、このddの魔法はすべて私にとって素晴らしい働きをします。それはどんなハードドライブでもどんなシステムからでもバックアップと復元をとても簡単にします。

ループデバイス

仮想システムイメージの作成もうまく機能します。

新しい空のメディアイメージ(30 GB)を作成するには、次の操作を実行できます。dd if=/dev/zero of=/my-media-image bs=1k count=30240000

次に、メディアをループバックデバイスに割り当てるには:losetup /dev/loop0 /my-media-image

メディアイメージ上にファイルシステムを作成するには、次のようにします。Sudo mkfs -t ext3 -L MYVIRTUALFS -M /media/MYVIRTUALFS -I 128 -m 0 -b 4096 -O sparse_super -T largefile4 /dev/loop0

その後、メディアをマウントできます:Sudo mkdir /media/MYVIRTUALFS && mount /dev/loop0 /media/MYVIRTUALFS

問題

私が理解していないのは、ディスクをアンマウントして(Sudo umount /media/MYVIRTUALFS)、ループバックデバイスを削除すると(Sudo losetup -d /dev/loop0)、元のメディア(/my-media-image)だと思っていたということです。 /dev/loop0のddクローンとまったく同じものになります

どうやらそうではありません。dd if=/my-media-image of=/dev/disk4注意してください。disk4)でデータが失われると、disk4が破損し、マウントできなくなります。

どうして?

Linuxマシンから、パーティションテーブルやデータなどを備えた仮想ファイルシステムを作成し、メディアイメージ(私の例では/my-media-image)を別のシステム(私の場合はMacintosh)にコピーすることができます。 )、実際のハードドライブに展開する準備ができています。 dd用のGUIを備えたWindowsでも動作するはずです。

何が足りないのですか?

4
MichaelC

キラーミストが述べたように、エラーは、ファイルシステムを作成する前にパーティションを作成するのを忘れていたということでした。質問の手順は正しく、完全に有効なディスクイメージを作成します。必要なのは、ループデバイスをマウントした直後、ファイルシステムを作成する直前にパーティションを作成することだけです。
つまり、正しい順序は次のとおりです。
losetup....
parted --script /dev/loop0 mktable msdos mkpart primary 2048s 100%
Sudo mkfs...

3
MichaelC