
以前、部分的にいっぱいになったパーティションのバックアップを で作成しましたdd if=/dev/sda1 | gzip -5 > file.gz
。しばらくして、パーティションの空き領域が少なくなったときに、同じコマンドでイメージ ファイルを再度作成したところ、出力ファイルは少し小さくなりました。
どちらの場合も、同じバージョンの dd と gzip、同じパラメーター、同じハードウェア、同じパーティションを使用し、入出力レコードの量とコピーされたバイト数について、dd から同じ出力 (時間と速度を除く) が得られました。
原因は何で、どのように説明できますか? いずれかのイメージ ファイルが無効であると仮定して、どのイメージ ファイルが無効であるかを確認するにはどうすればよいでしょうか? 検出されないデータ損失を引き起こした HDD の破損、または圧縮に関する何らかの問題に関連する差異のどちらがより可能性が高いでしょうか?
答え1
これは圧縮の性質です。圧縮の有効性は入力データによって異なります。毎回異なるデータを圧縮するため、圧縮前のサイズは同じでも、圧縮後のサイズは異なります。
答え2
空き領域の方が圧縮率が高いとお考えのようですが、そのようなルールはありません。
一般的なファイルシステムは、空き領域を空きとしてマークするだけで、ゼロなどで上書きすることはありません。古いデータは、新しいデータで上書きされるまでそのまま残ります。(補足: これが、削除されたファイルを回復できる場合がある理由です)。
dd
すべてを読み取りますが、ファイルシステムや、ファイルシステムが空き領域と見なすものについては何も知りません。次に、gzip
圧縮率の良し悪しが問われる「空き領域」内の古いデータを含め、すべてを圧縮します。このコンテキストでは空き領域はなく、処理するデータ ストリームのみがあります。
空き領域としてマークされた古い「圧縮率の低い」データが、新しい「圧縮率の高い」ファイルに置き換えられた可能性があります。その場合、新しいアーカイブには、有用であると考えられる実際のデータや既存のデータがより多く含まれているにもかかわらず、新しいアーカイブは古いアーカイブよりも小さくなります。これが、発生した問題の主な原因である可能性があります。
参照してくださいハードディスクから使用中の領域のみをクローンする、 そして私の答えは「準備」ステップでは、空きスペースをゼロで上書きするため、圧縮率が非常に高くなります。各バックアップの前にこれを実行した場合、結果として得られるアーカイブのサイズは、おそらく直感どおりになるはずです。
「おそらく」、なぜならあなたの質問に対するもう一つの答え一般的には正しいです。すべては入力データに依存します。空き領域をゼロにした後でも、60% 使用されているファイルシステムは、内部のファイルが異なる場合、50% 使用されている同じ大きさのファイルシステムよりも小さいアーカイブに圧縮される可能性があります。