いくつかのパーティションがあるSSDディスクがあります。それらの1つは、ecryptfsホームディレクトリを保持する/home
としてマウントされた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
Ecryptfsのマウントが追加されているため、fstrimは/home
ツリーで2回実行されているようです。これは問題ありません(特定のマウントポイントでfstrimを実行することで回避できます)。問題は、各実行で同じ量のデータが検出されてトリミングされるため、トリミング/home
が期待どおりに機能しないことです。
これは、さらに実行することで示されます。
$ fstrim -v /
(これは問題ありません):
/: 0 B (0 bytes) trimmed
$ fstrim -v /home
(これは問題ありません):
/home: 286,4 GiB (307478061056 bytes) trimmed
Sda2(/home
)トリミングの実行には時間がかかるため、実際に何かを実行していることに注意してください。
Fstrimによって報告されるサイズについて心配することはよくある誤解です。
実際には何の意味もありません。無視してください。
fstrim
は適切なioctl
を発行するだけで、それ以外はすべてファイルシステムの決定であり、ファイルシステムの動作は大きく異なります。たとえば、ext4
は同じものを何度もトリミングしないようにするため、0 bytes trimmed
が表示されます。 xfs
は無料のすべてを気にせずトリミングするため、常に<roughly free space> bytes trimmed
が表示されます。他のファイルシステムは他のことをするかもしれません、それが実装されているとしても、それはすべてファイルシステムがFITRIM
システムコールロジックを実装することをどのように選択したかに依存します。
トリミングされるデータの量が空き領域を超えない限り、fstrim
(実際にはファイルシステム)が何を報告するかに関係なく、問題はありません。
結局、SSD自体だけが、現在トリミングされているものとされていないものを実際に認識しています。すでにトリミングされたブロックをトリミングしても、害はありません。
fstrim
によって報告されたx bytes trimmed
に基づいて結論を出さないでください。
データがトリミングされたことを確認する場合は、ディスク上の生データを確認する必要があります。 ( https://unix.stackexchange.com/a/85880/30851 )しかし、その方法はbtrfsでは機能しない可能性があり、私は試したことがありません。