画像を作成し、同じデバイスの新しいファイル/dev/sda
に出力を書き込もうとします。.iso
新しいイメージファイルを除いて出力が自己入力にならないようにするにはどうすればよいですか?ご覧のとおり、使用可能なスペースがなくなるまで、ある種の無限フィードバックループ(ウロボロスなど)が生成されます。
root@linux:~# df /dev/sda1
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda1 303569136 4313624 283812008 2% /
root@linux:~# dd if=/dev/sda of=/root/image.iso
306419534336 bytes (306 GB, 285 GiB) copied, 10098.4 s, 30.3 MB/s
dd: writing to '/root/image.iso': No space left on device
598483361+0 records in
598483360+0 records out
306423480320 bytes (306 GB, 285 GiB) copied, 10099.5 s, 30.3 MB/s
root@linux:~# df /dev/sda1
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda1 303569136 303552756 0 100% /
root@linux:~# ls -sh /root/
total 286G
286G image.iso
答え1
ここではそこに行くことはできません。
代わりに、あなたがしたいことをすることはできません。覚えておいてください。 dd はブロックを読み書きするだけです。
ディスクに断片化がまったくないことを確認し、すべてのデータが連続していることを確認し、ブロックが多すぎる(データをインポートするがその場所に到達する前に停止する場合)、これを行うことができます。あなたはそれを書きたいと思います)。 ddのbs(ブロックサイズ)とcountパラメータを確認してください。
あなたに役立つ方法は、十分なサイズの空のファイルを作成し、ここにファイルシステムを書き込んでマウントし、rsyncを使用してデータを新しいファイルシステムにコピーすることです。その後、スパースファイルをアンマウントすると、すべてのデータを含むファイルシステムの「イメージ」が作成されます。
答え2
ddにファイルの内容ではなく、デバイスのブロックを読み取るように依頼しています。ファイルシステムデータを読み取るには、ダンプユーティリティのいずれかを使用できます。 extの場合、dump
XFSなどの他のユーティリティにはxfs_
プレフィックスがあります。
デフォルトでできることは、LVMまたはZFSを使用してスナップショットを作成することです。これは、複製しないかのように明確な方法でデータを消費せず、代わりに基本データが変更された場合にのみ複製(書き込み用にコピー)のみを行います。
実行される作業は、dd
ブロック0から始まり、最後のシリンダーに到達するまでデバイス全体を探索し続け、元のデータよりも少ないスペースに元のデータを保存することはできません。ディスクが最初にゼロで満たされている場合:
dd if=/dev/zero of=/root/space_hog
その後、ファイルを削除して圧縮ツールを使用してすぐに追加できます。
dd if=/dev/sda | gzip > /root/image.iso.gz
ランダムデータ圧縮(このデバイスにスワップがありますか?)は難しい作業なので、時間がかかります。