fstrimがbtrfs(+ecrypts)でブロックを切り捨てないように見えるのはなぜですか?

fstrimがbtrfs(+ecrypts)でブロックを切り捨てないように見えるのはなぜですか?

複数のパーティションを持つSSDディスクがあります。そのうちの1つは、/homeecryptfsホームディレクトリを含むとしてマウントされたbtrfsボリュームがあることです。

ボリュームをクリーンアップすると、fstrimはそのボリュームのデータブロックをクリーンアップしないようです。なぜですか?以下に、私が説明に従ったプロセスと設定に関するすべての情報を見ることができます。

$ cat /etc/fstab:

UUID=xxx /               ext4    errors=remount-ro 0       1
UUID=yyy /media/vfio     ext4    defaults          0       2
UUID=zzz /home           btrfs   defaults          0       2

$ mount | grep sda:

/dev/sda5 on / type ext4 (rw,relatime,errors=remount-ro,data=ordered)
/dev/sda1 on /media/vfio type ext4 (rw,relatime,stripe=32721,data=ordered)
/dev/sda2 on /home type btrfs (rw,relatime,ssd,space_cache,subvolid=5,subvol=/)

$ ls -la /home /home/myuser/.Private # summary:

/home:
.ecryptfs
myuser

/home/myuser/.Private -> /home/.ecryptfs/myuser/.Private

$ df -h:

Filesystem              Size  Used Avail Use% Mounted on
/dev/sda5                16G   11G  4,7G  69% /
/dev/sda1                93G   52G   36G  60% /media/vfio
/dev/sda2               828G  542G  286G  66% /home
/home/myuser/.Private   828G  542G  286G  66% /home/myuser

初めてすべてのボリュームでfstrimを実行しました。

$ fstrim -va:

/home/myuser: 286,4 GiB (307518836736 bytes) trimmed
/home: 286,4 GiB (307485450240 bytes) trimmed
/media/vfio: 40,4 GiB (43318886400 bytes) trimmed
/: 5,4 GiB (5822803968 bytes) trimmed

/home追加のecryptfsマウントが原因で、fstrimがツリーで2回実行されるようです。これは問題ではありません(特定のマウントポイントでfstrimを実行するとこれを防ぐことができます)。問題は、/home実行ごとに同じ量のデータが見つかってクリーンアップされるため、クリーンアップが期待どおりに機能しないことです。

さらなる実行はこれを示しました。

$ fstrim -v /(いいね):

/: 0 B (0 bytes) trimmed

$ fstrim -v /home(これは機能しません):

/home: 286,4 GiB (307478061056 bytes) trimmed

sda2( /home) 剪定は実行に時間がかかるため、実際に何かをしていることに注意してください。

答え1

fstrimが報告したサイズについて心配するのは一般的な誤解です。

本当に言わない。 ただ無視してください。

fstrim適切なものを発行すると、ioctl他のすべてはファイルシステムの決定であり、ファイルシステムは非常に異なる動作をします。たとえば、ext4同じ内容を継続して見ることができるようにトリミングしないでください0 bytes trimmed。他のファイルシステムは他のタスクを実行できます。これは、ファイルシステムがシステムコールロジックを実装するために選択する方法によって異なります(まったく実装している場合)。xfs<roughly free space> bytes trimmedFITRIM

クリーンアップするデータの量が利用可能なスペースよりも大きくない場合(実際にはファイルシステムで)、報告する内容に関係なくfstrim問題はありません。

結局、SSD自体だけが現在整理されている内容と整理されていない内容を実際に知ることができます。すでに整理されているブロックを切り取っても問題にはなりません。

x bytes trimmedレポートに基づいて結論を出さないでくださいfstrim

データがクリーンアップされたことを確認するには、ディスク上のソースデータを確認する必要があります。 (https://unix.stackexchange.com/a/85880/30851)しかし、その方法はbtrfsでは動作しないかもしれません。私はそれを試したことがありません。

関連情報