web-dev-qa-db-ja.com

再起動後にfstrimがmdraidミラーのすべての空き領域をトリミングするのはなぜですか?

SSDが2つあるサーバーがあります。

Model Family:     Intel 520 Series SSDs
Device Model:     INTEL SSDSC2BW240A3F
Firmware Version: 400i
User Capacity:    240,057,409,536 bytes [240 GB]
Sector Size:      512 bytes logical/physical

それらには、EXT4ファイルシステムでフォーマットされた3つのmdraidミラーデバイス(md0,1,2)があります。 mbr(gptではない)パーティションテーブルを使用しています。 3つのファイルシステムはすべてdiscardマウントオプションでマウントされます。

/dev/md0 on / type ext4 (rw,discard,errors=remount-ro)
/dev/md2 on /vservers type ext4 (rw,discard)
/dev/md1 on /var type ext4 (rw,discard)

問題は、サーバーを再起動するたびに、fstrim -v/any_mountpointが、未使用のスペースをすべてトリミングする必要があると言っていることです。ファイルシステムの完全なfstrimを実行すると、次の再起動まですべてが期待どおりに機能します。再起動後にfstrimを再度実行すると、ファイルシステム全体がトリミングされます。

誰かが私が間違っていることを私に説明できますか? ext4はファイルシステムのすでにトリミングされた部分を覚えていると思いました(1 ssdのデスクトップではそうです)。これは、3.13.0-23-genericカーネルを搭載したUbuntu14.04にあります。

2
umataro

少し前に非常によく似た質問をしました--- パーティションがdiscardでマウントされていても、fstrimはパーティションサイズの半分以上をトリミングします 。この質問で何が起こるかについてのより詳細な説明/議論がありますが、基本的にはfstrim(および基になるFITRIMioctl)でトリミングされたものの記録が保持されますカーネルメモリ内にあり、ディスクには書き込まれません。再起動後にfstrimが実行されるたびに、可能な範囲のFITRIMioctlsがすべて発行されます。

1
Graeme