web-dev-qa-db-ja.com

圧縮が有効な場合、btrfsは既存のファイルを自動的に圧縮しますか?

Ubuntu 12.04 LTSインストーラーで/ファイルシステムの形式としてbtrfsを選択しました。インストールが完了した後、compress=lzoのマウントオプションに/etc/fstabを追加して再起動しました。

現在、既存のファイルは自動的に圧縮されますか、それともそれを引き起こすために明示的に何かをしなければなりませんか?

25
ændrük

既存のデータを強制的に再圧縮するには、btrfs fi defragmentを実行する必要があります。それ以外の場合、新しいデータのみが圧縮されます。

FAQ から:

...-o compressで再マウントを検討し、特定のファイルをインプレースで書き換えるか、btrfs fi defragmentを実行してすべてを再圧縮します。これは時間がかかる場合があります。

27

Norbert Fabritiusが言ったことを作りましたが、既存のファイルの圧縮に気付きませんでした-df -h /beforebtrfs fi defragment= 658MB | df -h /afterbtrfs fi defragment = 658MB。新しいファイルは問題ありません。少し検索すると、この引用が表示されます。

これを実行する:

# btrfs filesystem defragment ~/stuff

ディレクトリのコンテンツを最適化しません。

これは仕様です。 btrfs fi defragは、itに渡される単一のファイルシステムオブジェクトで動作します。これは、コマンドがディレクトリのコンテンツではなく、ディレクトリオブジェクトによって保持されているメタデータのみを最適化することを意味します。ディレクトリのコンテンツをデフラグしたい場合、次のようなものがより便利です:

# find -xdev -type f -exec btrfs fi defrag '{}' \;

この後、私の/それは656MBを占有しています-巨大なものはありませんが、確かに圧縮があります。

ソース: https://btrfs.wiki.kernel.org/index.php/Problem_FAQ#Defragmenting_a_directory_doesn.27t_work

この助けを願っています。

すみません、私の英語。

10
J. Neto

Oracleのドキュメントによると、-c、-clzo、または-czlibオプションを使用して各ファイルを最適化することにより、既存のオンラインファイルシステム上の既存のファイルを圧縮できます。速度のためにLZOをお勧めします。

find / -xdev \( -type f -o -type d \) -exec btrfs filesystem defragment -v -clzo -- {} +

これは、findコマンドを使用して、ルートファイルシステム内のすべてのファイルでbtrfsデフラグツールを実行します(先頭の「find」コマンドの直後にスラッシュが付いています)。他のサブボリュームがある場合は、単一のスラッシュの代わりに、サブボリュームのパス(たとえば、/ homeに1つあります)で再度使用できます。

これにはルート権限が必要なので、必要に応じて前面にSudoを追加します。

見る:

8
Geoff

ArchWiki によると:

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

非常に素晴らしい!ゴッドブレスBTRFS!

また、 BTRFS wiki から:

compressマウントオプションを使用せずにファイルを強制的に圧縮できますか?

はい。ユーティリティ chattr は、新しく書き込まれたデータを圧縮するためにiノードをマークするファイル属性cの設定をサポートします。

2
Geremia

https://btrfs.wiki.kernel.org/index.php/Mount_options#List_of_options に従って、以下の圧縮アルゴリズムが利用可能です:

compress,compress-force
Enable compression. Starting with kernel 2.6.38 you can choose the algorithm for compression:

 - compress=zlib - Better compression ratio. It's the default and safe for olders kernels.
 - compress=lzo - Faster compression.
 - compress=no - Disables compression (starting with kernel 3.6). 

compress-force= - Enable compression even for files that don't compress well, like videos and dd images of disks. The options compress-force=zlib and compress-force=lzo works for kernels >2.6.38.

Note that old (before 2012) btrfs-progs versions will probably fail some operations (e.g. fsck) on filesystems with LZO compression. 

注:この投稿は、以下で尋ねられた圧縮アルゴリズムの種類についての追加の質問に対する回答です...だから私を責めないでください。

2