web-dev-qa-db-ja.com

BTRFSに圧縮を永続的に設定する方法はありますか?

USBHDDを持っています。

圧縮を有効にしてマウントしたい。システムのfstabで、またはudevルールを使用して実行できます。問題は、USBHDDを自分のコンピューターだけにマウントしないことです。これまでは、端末を取り付けるたびに端末をトリガーしていました。

その後、chattr +cを発見しました。これは非常にうまく機能していますしかし ZLIBの代わりにLZOを使用したいと思います。より具体的に圧縮アルゴリズムを一度だけ定義する方法はありますか?

7
user21228

btrfsは、以下を使用すると、マウントされてから変更されたすべてのファイルを圧縮します。

_mount -o compress-force=lzo /dev/btrfsdev /mnt/btrfsmnt
_

すべてのファイルがこのように圧縮されることを確認したい場合は、それを行うために作成した小さなスクリプトがあります...

_du -ht +$((1024*1024)) "$HOME" |\
    sed -rn 's/^[^/]*(.*)/btrfs fi defrag -fvclzo "\1"/p' |\
        Sudo sh -n
_

上記は私の_$HOME_ディレクトリでのみ機能しますが、好きなように何にでも使用できます。また、_-n_オペランドがshにそのまま供給されるため、自分で確認できます。 shは現在not削除する前に何をしていますかそれをするように言うために。

とにかく、最初にdu_human-readable_形式のファイルを照会します(とにかく次のステップでそれを取り除くので、おそらくここでは冗長です)_1MB_または$((1024*1024)).

It_|pipes_その情報をsedに送信し、先頭の_/, "quotes"_ファイル名、_btrfs filesystem defragment -verbose -flush-to-disk -compress-lzo \filename_コマンドを作成し、_|pipe_から_Sudo sh_を実行します。

繰り返しになりますが、_sh --no-execute_が有効である限り、何も実行されません。

一部のvery最近のbtrfsユーザースペースツールビルドは、ディレクトリ全体を再帰的に最適化すると思いますが、そうであれば、かなりきれいです新しいことなので、私はいつもこのようなことをしなければなりませんでした。

4
mikeserv

私が読んだことから、サブボリュームのルートにcompressionプロパティを設定して、この[0、1]を実現できます。

Sudo btrfs property set /mnt/your-subvolume compression lzo

Sudo btrfs filesystem show /mnt/your-subvolumeを使用してBtrfsサブボリュームUUIDを取得した後、LZO圧縮機能が現在有効になっていることを検証できます。

cat /sys/fs/btrfs/<UUID>/features/compress_lzo

有効になっている場合は1を返す必要があります。

[0] https://btrfs.wiki.kernel.org/index.php/Compression

[1] https://www.berthon.eu/2016/setting-shared-folder-compression-on-synology-nas-btrfs/

0
user30747