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の寿命が延びるはず。