FreeBSD 9.1-RELEASEでSSDのTRIM命令を有効にする
新しい自宅サーバでは、起動ドライブにSSDを使ってみた。SSDはHDDといろいろと違うところがあるけど、そのうちの一つにTRIM命令がある。
SSDは、HDDと違っていわゆる上書きができないため、上書きする場合は、書き込まれているデータをいったん待避して、その領域をまっさらにしてから書き戻すことになる。ところで、一般的なファイルシステムでは、ファイルを削除した場合、管理データだけ削除してディスク上のデータはそのまま残しておく作りになっていることが多い。すると、削除したファイルが使っていた領域は、OSではすでに不要になっているのに、SSDとしては不要かどうか分からないので、上書きの際にいちいち待避することになる。
OSがファイルを削除した際に、SSDに対して「この領域はもう使いませんよ」と教えてあげることができたら、このような非効率は発生しない。そのための命令がTRIM命令というわけ。
FreeBSDでもしばらく前からTRIM命令をサポートしてる。ただし、デフォルトでは無効になっているので、必要なファイルシステムに対してtunefsの-tオプションを使って有効にしてやる必要がある。
-t enable | disable Turn on/off the TRIM enable flag. If enabled, and if the under‐ lying device supports the BIO_DELETE command, the file system will send a delete request to the underlying device for each freed block. The trim enable flag is typically set when the underlying device uses flash-memory as the device can use the delete command to pre-zero or at least avoid copying blocks that have been deleted.
実際にはこんな感じ。マウントされていると変更できないので、memstickとかLiveCDを使って起動して変更すべし。
# tunefs -t enable /dev/ada4p2
有効になっているかどうかは、dumpfsを使って確認できる。flagsにtrimが入っていれば有効。
# dumpfs /dev/ada4p2 省略 flags soft-updates+journal trim 省略
ついでに/etc/fstabでnoatimeを指定して、atimeを無効にしておいた。これで書き込みが少なくなって、SSDの寿命が延びるはず。