ddを使用したLinuxイメージの複製

ddを使用したLinuxイメージの複製

ddユーティリティを使用してLinuxイメージを複製する場合、dd if=/dev/SDX of=/dev/SDYSDXはLinuxイメージが格納されている内部ストレージデバイス、SDYはコピーする外部ストレージデバイスです。

ただし、別のストレージデバイスに複製せずに同じ内部ストレージデバイスを使用せずにこれを実行すると(たとえばdd if=/dev/SDX of=/home/my_dir/my_image.img)、実際のイメージを持つ同じ内部ストレージデバイスにイメージファイルが作成されます。これは私にとってうまくいくようです。しかし、どのくらいうまくいくのですか? /home/my_dir/内部に/dev/SDXどちらを複製していますか?

ベストアンサー1

実際に〜らしい仕事はうまくいきます - 「見えるもの」に焦点を当てます。

説明を簡単にするために、ロギングのない古いファイルシステム(ext2など)を想定してください。このファイルは
ddの起動時にmy_image.img作成されます。ファイルの存在に関する情報とどこそれ物理ディスクに常駐し、ファイルシステムのインデックスに保存されます(「ディレクトリ」と見なされます)。ファイルの最終サイズは不明なので、最小のデフォルトサイズを占めます(通常はユーザーアプリケーションには公開されません)。
データがファイルに書き込まれると、データが増え、インデックスが定期的に更新されます。ただし、インデックスはディスクにも存在します。 dd がインデックスをコピーすると、コピーのインデックスは更新されなくなります。実際にそのコピーを使用しようとすると不完全であることがわかります。

もちろん、これはすべて学術的なものです。なぜなら、ddは(ある種の圧縮を使用しない限り)その中に完全なイメージファイルを置くことができないからです。

次のコマンドを使用して直接試すことができます。

dd if=/dev/zero of=demo.raw bs=1M count=256 # create a dummy "partition" for demonstration
mkfs.ext4 demo.raw # create ext4 filesystem
target=$(mktemp -d) # create a temporary mountpoint
sudo mount demo.raw $target # mount the filesystem
sudo chown $USER $target # make filesystem root writable for current user
dd if=demo.raw of=$target/inner.raw bs=1M # copy fileystem into itself – error as expected (no space left on device)
rm $target/inner.raw
dd if=demo.raw bs=1M | gzip -c > $target/inner.raw.gz # copy fileystem into itself, using compression
gzip -c $target/inner.raw.gz > inner.raw # decompress image
sudo mount inner.raw /mnt # mount inner copy – error as expected (copy is an incomplete file)
sudo umount $target
rm demo.raw inner.raw

おすすめ記事