Ubuntu 20.04の起動がたまに非常に遅いのでfstrimを無効にした

Ubuntu 20.04 の起動がたまに遅いことがあった。 PCはAMD B450チップセットのそこそこ新しい構成で、特に思い当たるところがなく原因不明で困っていた。 この際、HDD のアクセスランプが点灯しっぱなしになっているので、何らかの原因でI/Oがたくさん起きて、起動プロセスが非常に遅くなっている模様。 本日、起動が遅いときにCtrl+Alt+F3 で仮想コンソールを切り替えたところログインできて、ここでtopを実行したところfstrimがずっと動いていることがわかった。

fstrimは、ファイルシステムの使っていないブロックを Solid-State Drive (SSD)のFlash Translation Layer (FTL) に返すコマンドを発行するプログラムだ。 これが起動時に定期的に動くため、たまに遅いという挙動になっていた模様。 同じ状況で困っている人がいるようで、その解決策 [askubuntu.com]をもとにfstrimが定期的に動かないようにした (2020-05-27)。

証拠

journalctlでログを確認すると、実際fstrimの実行に3分ほどかかっている。 fstrim実行中は多数のI/Oが発生するため、起動全体が遅くなる。

$ journalctl -o short-iso -u fstrim
-- Reboot --
2020-05-27T20:23:33+0900 dorothy systemd[1]: Starting Discard unused blocks on filesystems from /etc/fstab...
2020-05-27T20:26:42+0900 dorothy fstrim[875]: /boot/efi: 503.2 MiB (527675392 bytes) trimmed on /dev/sdb1
2020-05-27T20:26:42+0900 dorothy fstrim[875]: /: 135 GiB (144982937600 bytes) trimmed on /dev/sdb2
2020-05-27T20:26:42+0900 dorothy systemd[1]: fstrim.service: Succeeded.
2020-05-27T20:26:42+0900 dorothy systemd[1]: Finished Discard unused blocks on filesystems from /etc/fstab.

SSD種類

SSD は古いもののごく一般的なSerial ATA接続のIntel SSDSC2CT240A4で、ファームウェアも最新の335uになっている。

$ sudo smartctl -a /dev/sdb
…
Model Family:     Intel 330/335 Series SSDs
Device Model:     INTEL SSDSC2CT240A4
…
Firmware Version: 335u
User Capacity:    240,057,409,536 bytes [240 GB]
…

対応

上記記事にある通りの方法でfstrimを無効化した。

$ sudo rm /var/lib/systemd/timers/stamp-fstrim.timer
$ sudo systemctl stop fstrim.service fstrim.timer
$ sudo systemctl disable fstrim.service fstrim.timer
Removed /etc/systemd/system/timers.target.wants/fstrim.timer.
$ sudo systemctl mask fstrim.service fstrim.timer
Created symlink /etc/systemd/system/fstrim.service → /dev/null.
Created symlink /etc/systemd/system/fstrim.timer → /dev/null.

結論

Ubuntu 20.04 でたまに起動が遅いと不便なのでfstrimを無効にした。 fstrimが実行されないことでSSD のウェアレベリングや性能に影響があるため、今後は時間に余裕があるときに手動で実行する。