DebianでSSDを使うならTrimを有効にしよう

2015/03/01[公開] 2019/11/14[最終更新]

  自宅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通りあるようです。

  1. /etc/fstabのマウントオプションにdiscardを追加する方法。これはファイル消去と同時に都度Trimを実行する方法。
  2. 定期的に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使いならお察しですね。

参考にさせて頂いたサイト(順不同):

スポンサー リンク

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です