Linuxの起動がものすごく遅い.10分ぐらい掛かる.そういう質問を受けたので原因調査の手順と解決法をまとめます.
起動時のログを見る方法
systemdにはシステム起動時のログを分析する機能があります.使い方も簡単
まずは systemd-analyze を実行します
$ systemd-analyze
Startup finished in 3.328s (kernel) + 9min 57.615s (userspace) = 10min 944ms
graphical.target reached after 1min 36.168s in userspace
起動には10分944ミリ秒かかっていて,そのうち userspace の処理で 9分57秒も掛かっていることが解ります.たしかに遅い.
より詳細なログを見ます.systemd-analyze に blame オプションを付けます.
$ systemd-analyze blame
以下のような表示がでました.
9min 56.696s cron-weekly.service
5min 2.388s cron-daily.service
20.106s ssh.service
5.000s networking.service
1.018s ifupdown-wait-online.service
632ms vmware-USBArbitrator.service
548ms ifupdown-pre.service
487ms udisks2.service
438ms NetworkManager-wait-online.service
426ms apt-daily.service
403ms vmware.service
366ms logrotate.service
354ms ModemManager.service
351ms apt-daily-upgrade.service
242ms swap.swap.swap
241ms systemd-logind.service
209ms dev-sda2.device
157ms avahi-daemon.service
以下省略
問題があるのは先頭の2行
9min 56.696s cron-weekly.service
5min 2.388s cron-daily.service
この部分です. cron weekly と daily が猛烈に遅いようです.
cron-weekly の中身を調べます
$ ls /etc/cron.weekly/
man-db systemd-cron
2つスクリプトがあります.man-db と systemd-cron です.
man-db は man page のデータベースを再構築する処理です.どうもこの処理に時間がかかっているようです
原因
このLinuxは,ストレージにSSDを使っていますが,SSDの空き容量がほぼゼロになっていました.
その結果ディスクの書き込みに時間が掛かる状態になっていて,man-db のデータベース再構築に9分ちかくかかっていました.
対処
不要なファイルを削除して SSD の空き容量を増やしました.これだけで解決しました.
まとめ
- 起動時のログは systemd-analyze で確認できる
- 詳細なログは systemd-analyze blame で確認できる
- SSD は空き容量が不足するとディスクへの書き込みアクセスが劇的に遅くなる (2019年11月25日表現をあらためました)
ディクスアクセスが劇的に遅くなる
SSDの空き容量は常に確認しておくべきですね.