自宅PCサーバーをSSDにしたので、DebianのSSD対応の設定を調べながらやっています。今回はパフォーマンス維持のためのTrim設定についての備忘録です。
利用バージョン:Debian GNU/Linux Wheezy 7.8 /カーネル3.2.0-4-amd64 /ファイルシステムはext4を利用。
このページの目次
Trimを使おう
Trimとは、ファイルを削除したときの処理がHDDとSSDでは違うために徐々に起こる「SSDの速度低下」を抑えてくれる機能のひとつです。Windowsでは7以降にTrim機能がOS標準でサポートされ、これがSSDを利用するならwindows7以降が良いと言われている理由のひとつです。スマホやタブレットでもAndoroid4.3以降でサポートされたようです。ウチのDebian でも利用したいですね。
Trim機能を使うにはハードウェアとOSの両方の対応が必要です。
ハードウェア側のTrim対応
いまどきのSSDならばTrim機能対応あたりまえと思われます。ファームウェア更新で対応するSSDもあるので最新のファームにしておきましょう。
あとはマザーボードのBiosでSATAがAHCIモードになっていればハードウェア側の準備は万全です。これも最近なら標準でAHCIモードになっているはずです。
私は利用していませんが、RAIDを使っている場合はRAIDコントローラーもTrim対応の最新のモノが必要みたいです。
念のためにハードウェアでTrimがサポートされているか確認します。
hdparm -I /dev/sda |grep TRIM
私の場合は、先にhdparmをインストールする必要ありでした。
aptitude install hdparm
# hdparm -I /dev/sda |grep TRIM * Data Set Management TRIM supported (limit 8 blocks)
「Data Set Management TRIM supported」と出たらハードウェア的にはサポートされています。
Debian 側でTrimを利用設定
OS側でTrimを利用する方法は2通りあるようです。
- /etc/fstabのマウントオプションにdiscardを追加する方法。これはファイル消去と同時に都度Trimを実行する方法。
- 定期的にfstrimコマンドを実行してTrimを行う方法。手動でコマンドを打つか、cronに登録して定期的に実行させる。
ネットを見ると1の方法は非推奨と書いてあったり、まずは1の方法を試すべきだという情報もあります。これは意見が分かれるところですね。成長真っ只中のデバイスですので、どれが正解かわかりません。
悩んでも仕方ないので、私の勝手な推論でどっちにするか選びました。winodwsでは1の方法と同じく都度Trimを行っているのだから理想としては1の方法が最善なのですが、それはPCパーツの世界がWindows中心に動いているから最適化されているのであって、Linuxでそれが上手く動く保証はないワケです。ましてやSSD「も」いけますよ的なファイルシステムext4で利用するわけで、SSD「が」最適ですという次世代ファイルシステムが安定版になるまでは、方法2のfstrimコマンドの安全策で行くことにしました。
cronで定期的にfstrimコマンドを実行する方法
毎日深夜3時にfstrimコマンドを実行する設定をしました。まずはスクリプトファイルを作ります。
nano /usr/local/sbin/fstrim.sh
次の記述をコピペして保存します。
#!/bin/sh LOG=/var/log/fstrim.log echo "*** $(date -R) ***" >> $LOG fstrim -v / >> $LOG
このファイルに実行権限を与えないと実行されません。
chmod +x /usr/local/sbin/fstrim.sh
/etc/crontabファイルに実行時間を指定した記述を追加します。
nano /etc/crontab
リストに一行加えます。追加したのは15行目です。
# m h dom mon dow user command 17 * * * * root cd / && run-parts --report /etc/cron.hourly 25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily ) 47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly ) 52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly ) 00 3 * * * root /usr/local/sbin/fstrim.sh #
念のためcronサービスを再起動します。
/etc/init.d/cron restart
確認
一晩寝ると/var/log/fstrim.logができているはずです。その中身を確認します。
*** Sun, 01 Mar 2015 03:00:01 +0900 *** /: 1209831424 bytes were trimmed *** Mon, 02 Mar 2015 03:00:01 +0900 *** /: 44843008 bytes were trimmed
こんな感じでTrimされた数値がログされていれば成功です。
最後にひとこと
ここまで設定して気づきました。オートマチックなdiscardよりも、マニュアル操作のfstrimのほうがrecommendされるはずです。Linux使いならお察しですね。
参考にさせて頂いたサイト(順不同):