btrfsで単一ファイルの圧縮を設定するには?

btrfsで単一ファイルの圧縮を設定するには?

私は3TBのドライブイメージを作成するためにGNUを使用していますが、ターゲットddrescueドライブに比べて大きすぎることに気づきました。 (空のスペースは0x00ではなく0xAAで埋められているので、スパース出力ファイルの代わりにスパース出力ファイルを使用します。)実際に圧縮する必要があります)。

出力ファイルはファイル固有の圧縮をサポートするbtrfsファイルシステムにありますが、どのような方法を使用しますか?

  1. https://wiki.archlinux.org/index.php/Btrfs#compression説明する:

既存のファイルに圧縮を適用するには、isまたはこのコマンドを使用します。たとえば、zstd を使用してファイルシステム全体を再圧縮するには、次のコマンドを実行します。btrfs filesystem defragment -calgalgzliblzozstd

  # btrfs filesystem defragment -r -v -czstd /

これは既存のファイルを再圧縮しますが、個々のファイルではなくファイルフォルダ用のようですか?

  1. また、次のように言います。

ヒント:マウントオプションを使用せずにファイルごとに圧縮を有効にすることもできますcompress。これは chattr +cそのファイルに対して機能します。ディレクトリに適用すると、新しいファイルが表示されると自動的に圧縮されます。

しかし、これが既存のファイルを再圧縮するかどうかはわかりません。

  1. https://btrfs.wiki.kernel.org/index.php/Compression#Can_I_force_compression_on_a_file_without_using_the_compress_mount_option.3F説明する

btrfs property set <file> compression <zlib|lzo|zstd>willを使用してファイルの圧縮プロパティを設定する指定されたアルゴリズムを使用してファイルを圧縮します。

これは圧縮可能なデータが少ないため、通常は圧縮されていないファイルを強制的に圧縮するために行われているようです。

ボリューム内の他のファイルの圧縮を変更せずに、既存のファイル全体を(デフォルトのLZO)圧縮に変換し、後でそのファイルに書き込まれた追加データを圧縮し続けるには、どのコマンドを使用しますか?

ベストアンサー1

# btrfs filesystem defragment -r -v -czstd /

これは既存のファイルを再圧縮しますが、個々のファイルではなくファイルフォルダ用のようですか?

単一ファイルでも動作します。

(ディレクトリの場合はこのフラグが必要です-r。そうしないと、ディレクトリが属するサブボリュームのメタデータを最適化します。)

chattr +c

しかし、これが既存のファイルを再圧縮するかどうかはわかりません。

そうではありません。

btrfs property set <file> compression <zlib|lzo|zstd>

これは圧縮可能なデータが少ないため、通常は圧縮されていないファイルを強制的に圧縮するために行われているようです。

ファイルが圧縮可能かどうかを検出し、とにかく圧縮するメカニズムを無効にします。
私はそれが少なくともある程度圧縮可能であれば、より具体的に圧縮されたデータが元のIIRCよりも大きくない場合にのみ圧縮ファイルを保存すると信じています。

さらに、この検出メカニズムはあまり洗練されておらず、時には圧縮可能ファイルの圧縮を無効にすることもできます。

ボリューム内の他のファイルの圧縮を変更せずに、既存のファイル全体を(デフォルトのLZO)圧縮に変換し、後でそのファイルに書き込まれた追加データを圧縮し続けるには、どのコマンドを使用しますか?

btrfs filesystem defragment -clzo /path/to/file

(注:これにより、ファイルは強制的に圧縮されます。)

おすすめ記事