Ubuntu で SSD を使う
この記事では、Ubuntu 24.04 LTS および 26.04 LTS で SSD をマウントし、設定を確認・調整する手順を説明します。これらのバージョンでは SSD 向けの基本的な設定は済んでおり、TRIM とマウントオプションを確認することが中心になります。
SSD のマウントと基本的な考え方
SSD でも、パーティションの作成、ファイルシステム(EXT4 が一般的)でのフォーマット、マウントという手順はハードディスクドライブと同じです。SSD の性能と寿命に関わるのは、TRIM とマウントオプションの設定です。
SSD ではデフラグ(デフラグメンテーション)を実行しないでください。SSD はデータの物理的な配置による読み書き速度の差がないため効果がなく、書き込みが増えるだけです。Ubuntu は SSD に対して自動デフラグを行いません。手動で e4defrag などを実行しないようにします。
TRIM 機能について
TRIM は、ファイルが削除されて不要になったブロックを OS が SSD コントローラに通知する仕組みです。SSD はこの情報をもとに内部のガベージコレクションを効率よく行えるため、書き込み速度の低下と書き込み回数の増加を抑えられます。
TRIM の実行方式は 2 種類あります。
- バッチ TRIM:
fstrimコマンドをタイマーで定期実行する方式。 - オンライン TRIM: マウントオプション
discardを指定し、ファイル削除のたびに TRIM を送る方式。
Ubuntu 24.04 LTS および 26.04 LTS では、バッチ TRIM が既定で有効です。
既定の TRIM 設定: fstrim.timer(バッチ TRIM)
Ubuntu 24.04 LTS および 26.04 LTS では、fstrim を週に 1 回実行する fstrim.timer が既定で有効です。対象は /etc/fstab に記載されたマウント済みファイルシステムです。
有効かどうかは、次のコマンドで確認します。ターミナルを開き、次のコマンドを実行してください。
systemctl status fstrim.timer
systemctl list-timers fstrim.timer
無効になっている場合は、ターミナルを開き、次のコマンドを実行して有効化します。
sudo systemctl enable --now fstrim.timer
手動で今すぐ TRIM を実行して結果を確認する場合は、ターミナルを開き、次のコマンドを実行します。
sudo fstrim -av
週 1 回より頻繁に実行したい場合は、タイマーの設定を変更します。ターミナルを開き、次のコマンドを実行してください。エディタが開いたら、以下の内容を記述して保存します。
sudo systemctl edit fstrim.timer
[Timer]
OnCalendar=
OnCalendar=daily
保存後、ターミナルで次のコマンドを実行して設定を反映します。
sudo systemctl daemon-reload
sudo systemctl restart fstrim.timer
オンライン TRIM(discard オプション)について
/etc/fstab に discard を指定すると、ファイル削除のたびに TRIM コマンドが送られます。この方式は削除処理のたびに待ち時間が発生するため、書き込みが多い環境では性能が低下することがあります。EXT4 では、TRIM を非同期で発行する discard=async を指定することでこの影響を抑えられます。
オンライン TRIM を使う場合は、fstrim.timer を無効化します。ターミナルを開き、次のコマンドを実行してください。
sudo systemctl disable --now fstrim.timer
/etc/fstab の設定例
システム起動時に SSD を自動マウントする /etc/fstab の記述例です。fstrim.timer を使う前提で、書き込みを減らす noatime を指定しています。
まず、マウントポイントを作成します。ターミナルを開き、次のコマンドを実行してください。
sudo mkdir -p /mnt/my_ssd
次に、対象パーティションのデバイス名と UUID を確認します。ターミナルを開き、次のコマンドを実行してください。
lsblk -f
sudo blkid
確認した UUID を使い、/etc/fstab に次の 1 行を追加します。デバイス名はディスクの接続順で変わることがあるため、UUID で指定します。
# <file system> <mount point> <type> <options> <dump> <pass>
UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx /mnt/my_ssd ext4 defaults,noatime 0 2
UUID=...: 対象パーティションの UUID(sudo blkidで確認した値に置き換えます)。/mnt/my_ssd: マウントポイントのディレクトリ。ext4: ファイルシステムのタイプ。defaults,noatime: マウントオプション。defaults:rw,suid,dev,exec,auto,nouser,asyncをまとめて指定します。noatime: アクセス時刻(atime)の更新を行いません。Linux カーネルの既定動作はrelatime(更新頻度を抑えた atime 更新)であり、noatimeはこれをさらに減らして書き込み回数を下げます。atime を参照する一部のアプリケーション(mutt など)では動作に影響することがあります。
0: dump の対象とするかどうかの設定。2: fsck(ファイルシステムチェック)の順序。ルートファイルシステム(/)は 1、それ以外は 2 を指定します。
オンライン TRIM を使う場合は、オプション部分を defaults,noatime,discard=async と記述し、fstrim.timer を無効化します。
記述後、設定に誤りがないか確認します。ターミナルを開き、次のコマンドを実行してください。エラーが表示されなければ、記述は正しく解釈されています。
sudo mount -a
findmnt /mnt/my_ssd