UbuntuでSSDのTRIMを有効にする方法

2つのNVMe SSDカードの写真

ソリッドステートドライブ(SSD)を使用している場合、デフラグメンテーションや空きスペースの統合ソフトウェアを実行すべきではないことを知っておくべきです。それでは、SSDをクリーンアップして空きスペースを解放するにはどうすればよいでしょうか?TRIMは、OSにクリーンアップ作業を通知するために使用するコマンドです。Windows 11では、fsutilコマンドを介して手動でTRIMを実行できます。しかし、Ubuntuではどうでしょうか?UbuntuでSSDのTRIMを有効にするにはどうすればよいでしょうか?

注意: 以下の手順は、パーティションを暗号化している場合は機能しません。

目次

  • SSD用のTRIM Cronジョブの作成
  • fstabでのDiscardオプションの使用
  • よくある質問

SSD用のTRIM Cronジョブの作成

  1. コンピュータのSSDがTRIMをサポートしているか確認するため、ターミナルを開き、次のコマンドを入力します:
sudo hdparm -I /dev/sda

hdparmコマンドの出力を示すターミナルウィンドウ

UbuntuがSSDの最初のパーティションにインストールされていない場合は、sdaをUbuntuが存在するパーティションに反映させるよう変更します。lsblkを実行することで行えます。

マシンに接続されたすべてのディスクを示すターミナルウィンドウ

  1. リストを下にスクロールし、「Enabled Supported」セクションを見つけます。さらに下にスクロールし、「 Data Set Management TRIM supported (limit 8 blocks)」のような表記があれば、SSDはTRIMをサポートしています。

デモ用SSDのTRIMフラグを示すターミナルウィンドウ

  1. UbuntuでTRIM機能が動作しているかテストします。ターミナルで次のように入力します:
sudo fstrim -v /

これにより、SSDのルートパーティションがクリーンアップされます。成功すれば、次の画像に似た出力が表示されるはずです。

SSDの最初のfstrimコマンドを示すターミナルウィンドウ

  1. OSがTRIMコマンドを毎日1回送信するためのcronジョブを設定します。
sudo nano /etc/cron.daily/trim
  1. 空欄に以下のコードを貼り付けます:
#!/bin/sh  
fstrim -v /
  1. HOMEディレクトリが別のパーティションにある場合、上記のコードの最後に以下の行を追加できます:
fstrim -v /home >> $LOG
  1. 出力をログファイルに保存したい場合、代わりに次のコードを使用します:
#!/bin/sh  
LOG=/var/log/trim.log  
echo "* $(date -R) *" >> $LOG  
fstrim -v / >> $LOG  
fstrim -v /home >> $LOG

fstrimの完全なcronスクリプトを示すターミナルウィンドウ

  1. 保存 (Ctrl + O) して終了 (Ctrl + X)します。

  2. cronジョブを実行可能にします:

sudo chmod a+x /etc/cron.daily/trim

正しい権限ビットを持つトリムスクリプトを示すターミナルウィンドウ

知っておくと良いこと: cronは、Linuxでタスクを自動化するのに役立つ素晴らしいユーティリティです。どのように機能するのか、あなた自身のプログラムにどのように使用できるかを学んでみましょう。

fstabでのDiscardオプションの使用

手動でfstrimを呼び出すことに加えて、システムを構成してディスク上の未使用の空きスペースを継続的に「破棄」することもできます。これは、ノートパソコンを使用しており、コンピュータを常にオンにしたくない場合に役立ちます。

  1. ルートパーティションのUUID値を確認します:
ls -l /dev/disk/by-uuid

UUIDとSSDのパーティション間のシンボリックリンクを示すターミナルウィンドウ

  1. お気に入りのテキストエディタを使用して「/etc/fstab」ファイルを開きます。今回はGNU Nanoを使用しています:
sudo nano /etc/fstab
  1. Ctrl + Wを押してルートパーティションの「/etc/fstab」を見つけ、そのUUID値を入力します。

デモシステムのデフォルトの/etc/fstabファイルを示すターミナルウィンドウ

  1. ルートパーティションのエントリに移動し、「errors=remount-ro」オプションの前にdiscard,noatime,と入力します。例えば、私の「/etc/fstab」ファイルには以下のルートパーティションエントリがあります:
#   
UUID=xxx    /    ext4    discard,noatime,errors=remount-ro    0 1  
[...]

修正された/etc/fstabファイルを示すターミナルウィンドウ

  1. Ctrl + Oを押して新しい「/etc/fstab」ファイルを保存し、Ctrl + Xで終了します。

GNU Nanoの保存プロンプトを示すターミナルウィンドウ

  1. 最後に、マシンを再起動して新しい設定を適用します。

デモシステムの再起動コマンドを示すターミナルウィンドウ

参考情報: TRIMはSSDの空きスペースを削除しますが、それだけではデータ復旧プログラムから保護されるわけではありません。シンプルなコマンドラインツールだけでデータを安全に消去する方法を学びましょう。

よくある質問

SSDでfstrimとdiscardを同時に使用できますか?

はい。ただし、それを行っても目立った改善は得られず、SSDの寿命を延ばすことにもなりません。fstrimとdiscardは、未使用の空きブロックを削除する際に似たようなTRIMルーチンを使用します。

そのため、fstrimとdiscardは1つの重要な点で異なります:頻度。前者は「解放」する前に未使用のブロックをすべて蓄積しますが、後者は未使用になった途端にブロックを「解放」します。つまり、discardは常にfstrimよりも多くのシステムリソースとディスクIOを消費します。

/etc/fstabファイルにルートパーティションのUUIDがありません。

これは、システムがハードウェアRAIDカードまたは論理ボリューム管理(LVM)ユーティリティを使用しているための可能性があります。デフォルトでは、TRIMは伝統的なディスクパーティションやファイルシステム(例:ext4)を使用するシステムでのみ機能します。

それでも、いくつかのLVMプログラムにはTRIMを行うための便利なオプションが用意されています。Ubuntuでは、「/etc/lvm/lvm.conf」ファイルにissue_discards = 1を追加して、未使用の空きブロックを自動的にTRIMすることができます。

fstrimコマンドの頻度を変更することは可能ですか?

はい。デフォルトでは、Linuxはfstrimを使用したいタイミングを細かく調整するための複数のタイマーファイルを提供しています。例えば、sudo mv /etc/cron.daily/trim /etc/cron.weekly/trimを実行することで、TRIMの頻度を毎日から毎週に変更できます。

画像クレジット: Unsplash。すべての変更とスクリーンショットはRamces Redによるものです。