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 は古いもののごく一般的な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 のウェアレベリングや性能に影響があるため、今後は時間に余裕があるときに手動で実行する。