btrfs圧縮による潜在的な省スペースを計算する方法は?

btrfs圧縮による潜在的な省スペースを計算する方法は?

現在、btrfs形式のディスクで圧縮を使用していませんが、これを有効にすると、どのくらいのスペースを節約できるかを知りたいです。ディスク上で実際に圧縮を有効にし、前後の空き容量を比較せずにこれを推定する方法はありますか(または干渉が少ないがリソース集約的で、すべてのデータを圧縮が有効な他のbtrfs形式のディスクにコピー)、特定の圧縮アルゴリズムとレベルのために保存されますか? btrfsツールがこれを実行できない場合、圧縮テストのために私のシステム上のすべてのファイルを繰り返してbtrfs自体がスキップできる同じ非圧縮ファイルをすべてスキップできるサードパーティ製ツールはありますか?

答え1

btrfsはgzip、lzo、zstdの3つのコンプレッサーをサポートしています。 gzipを使用したくない場合はほぼ確実です(他の選択肢と比較して圧縮が遅く、効率が低い)。 LZOとZSTDは通常、高速設定で非常に似ています。

したがって、以下を実行してくださいzstd。 btrfsでは、zstdのデフォルトの圧縮レベルは3ですが、レベル1〜15も使用できます。zstd -3 -v < infile > /dev/nullこのファイルをレベル3で圧縮したときの圧縮率を表示します。31から15までの値を置き換えて、速度/圧縮率のバランスを把握します(これはシングルスレッドで行われます。カーネルbtrfsコンプレッサーは実際にマルチスレッドになる可能性があるため、圧縮設定を追加して-T0コアが多いほど速度がどれだけ速くなるか確認してください。

これはcat、圧縮を有効にしてファイルの内容を新しいファイルに変換するよりも「スマート」ではありません。 btrfsはすべての既存のファイルを自動的に圧縮せず、新しいファイルのみを圧縮します。

あなたが使用するファイルシステムには注意を払います。たとえば、GRUBのbtrfsドライバが圧縮ファイルの読み取りをサポートしているかどうかは不明です。そして、過去には、btrfsであまり一般的に使用されていないディスクフォーマットオプションが原因でデータ破損が発生しました(たとえば、ユーザースペースツールではこれを警告しませんが、btrfs-internal RAID 5を使用したくない場合があります)。したがって、高い読み取りパフォーマンスが必要な場合、またはスペースが小さくてもファイルが圧縮可能でファイルが互いに重複しない場合は、圧縮を試みますが、バックアップがあるファイルで実行してください。

答え2

圧縮オプションが有効になっている新しいbtrfsにサンプル(10%以上)をコピーすることをお勧めします。これにより、ツールcompsize(通常はというパッケージに含まれていますbtrfs-compsize)が特定のファイルまたはディレクトリの圧縮統計を表示します。

以下は、(tokyabinet)ファイルg.tchの出力例です。

Processed 1 file, 4863847 regular extents (4863847 refs), 0 inline
Type       Perc     Disk Usage   Uncompressed Referenced
TOTAL      11%       67G         593G         593G
zstd       11%       67G         593G         593G

関連情報