200 GBの空きディスク容量、16 GBのRAM(そのうち約1 GBはデスクトップとカーネルが占有)、6 GBのスワップがあります。
240 GBの外付けSSDがあり、70 GBが使用され1が残り、残りはディスクにバックアップする必要があります。
通常、dd if=/dev/sdb of=Desktop/disk.img最初にディスクを使用してから圧縮しますが、圧縮ステップにより空き領域が押しつぶされる場合でも、イメージを最初に作成することはオプションではありません。最終アーカイブはディスクに簡単に収まります。
ddデフォルトでSTDOUTに書き込みgzip、STDINから読み取ることができるため、理論的にはを書き込むことができますがdd if=/dev/sdb | gzip -9 -、gzipバイトddを生成するよりもバイトの読み取りにかなり時間がかかります。
からman pipe:
パイプの書き込み側に書き込まれたデータは、パイプの読み取り側から読み取られるまでカーネルによってバッファリングされます。
を|実際のパイプのように視覚化します。1つのアプリケーションがデータを押し込み、もう1つのアプリケーションがパイプのキューからデータをできるだけ早く取り出します。
左側のプログラムがパイプの反対側が処理を期待できるよりも多くのデータをより速く書き込むとどうなりますか?それは極端なメモリまたはスワップの使用を引き起こしますか、またはカーネルはディスク上にFIFOを作成しようとし、それによりディスクをいっぱいにしますか?それともSIGPIPE Broken pipe、バッファが大きすぎると失敗しますか?
基本的に、これは2つの質問に要約されます。
- 一度に読み取られるよりも多くのデータをパイプに押し込むことの意味と結果は何ですか?
- 圧縮されていないデータストリーム全体をディスクに配置せずに、データストリームをディスクに圧縮する信頼できる方法は何ですか?
注1:最初の70個の使用済みGBを正確にコピーすることはできません。断片化など、コンテンツ全体を完全に維持する必要があるため、動作中のシステムまたはファイルシステムを取得します。
lzop代わりに調べてくださいgzip。圧縮率がわずかに低いだけで、はるかに高速に圧縮されます。圧縮速度が本当のボトルネックになりかねないディスクイメージに理想的です。