それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

debian で ssd の trim をする設定

サーバーのストレージを ssd にしました。

SSDに変えると気になるのが trim の実行タイミングです。 ナニも考えたくないので、自動でtrim されるようにします。

trim 対応かどうか調べる

takuya@:~$ sudo hdparm -I /dev/sdb | grep -i trim
       *    Data Set Management TRIM supported (limit 8 blocks)
       *    Deterministic read ZEROs after TRIM

fstab で dscard する。

fstab のマウントオプションにdiscard を書くだけ。

# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system>                            <mount point>   <type>  <options>       <dump>  <pass>
# / was on /dev/sdb6 during installation
UUID=xxxxxxxxxxxxxxxxxxxxxxxxx /                  ext4    noatime,nodiratime,discard 0       1
UUID=yyyyyyyyyyyyyyyyyyyyyyyy /home           ext4    noatime,nodiratime,discard 0       2

これは1番簡単な方法。

マニュアルでtrimをするには

fstrim コマンドを使います。

takuya@:~$ sudo fstrim -v  /
/: 25.6 GiB (27524313088 バイト) を discard しました
takuya@:~$ sudo fstrim -v  /home
/home: 21.3 GiB (22891864064 バイト) を discard しました

discard してマウントしてますが、マニュアルでdiscardすると、結果は0バイトじゃないんですよね。

定期的に cron で fstrim したほうが良さそうです。

2016-10-20 追記

ArchLinux の記事を読むと

Warning: Unfortunately, there are wide quality gaps of SSD's bios' to perform continuous TRIM, which is also why using the discard mount flag is recommended against generally by filesystem developer Theodore Ts'o. If in doubt about your hardware, apply #Periodic TRIM instead.

SSD のチップに乗ってるBIOSによって discard によるTRIM命令実行にすごく差異があり、そのためとりあえず、mount discard をしておくのが無難だとファイルシステム作成者がブログで書いてたらしい。もしSSDのメーカー実装に疑念があるなら定期的なfstrim をした方がいいよ。

ってことらしい。また、古い世代のssdだとまた実装が異なるらしい。あとSATA3.1 以前のモデルはtrimがデバイスへsync される同期実行なので、trim中はプチフリするよ。って書いてあった。

なので、discard をしておいて、SSDのメーカ実装に任せたほうが無難ってことなのでしょうね。

ArchLinuxの記事に他には、定期的な実行はsystemdのjobにしてるとも書いてた。今時はcronじゃないんだね。

参考資料

https://def-4.com/debian_ssd_trim/