最近どうも起動やシャットダウンに要する時間が増えているように感じる Ubuntu 18.04 メインPC、apt updateしていたら initramfs 絡みでエラー警告が挙がったので、調べて解決を試みました。
1. /etc/initramfs-tools/conf.d/resume内のswap領域UUID訂正
そもそもの発端はシャットダウン時に出て来るこの表記、ここでしばらく待たされるのが不思議でして。
1 |
[ *** ] A stop job is running for Session 2 of user user (1min 6s / 1min 30s) |
調べてみるとAskUbuntuのこのQ&Aに興味深いやり取りがありました。
そこでsystemd-analyzeという、起動に要した時間を分析してくれるツールを知ったので、早速現状把握してみると、
1 2 3 |
$ systemd-analyze Startup finished in 38.211s (kernel) + 27.513s (userspace) = 1min 5.724s graphical.target reached after 27.507s in userspace |
正常時の数値と比べないと速いか遅いか判断出来ませんが、どうもあまり速くはなさそう。また、当該Q&Aの質問者自身による回答の中で挙げられていたページは、
そこで述べられているのは起動時の話なのですが、このマシンはswapをUSBストレージに移設しているのがちょっと気になり、ハイバネーションに関するinitramfsの設定を見てみます。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
$ cat /etc/initramfs-tools/conf.d/resume RESUME=UUID=20009866-d3d2-4f75-9e9f-75d9202d5cf8 $ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 931.5G 0 disk ├─sda1 8:1 0 125.9G 0 part / └─sda2 8:2 0 339.9G 0 part /home sdb 8:16 0 931.5G 0 disk └─sdb1 8:17 0 931.5G 0 part /str500 sdc 8:32 1 3.7G 0 disk └─sdc1 8:33 1 3.7G 0 part [SWAP] $ sudo blkid /dev/sdc1 /dev/sdc1: UUID="91efa7b1-8f61-4fab-8338-03dd84a28b54" TYPE="swap" PARTUUID="374a9294-01" |
と見事に古いままでした。ハイバネーションやスリープは使わないのですが、気持ちの良いことではないので、管理者権限で現在のswap領域のUUIDに書き換えておきます。書き換え後はイメージの更新が必要です。
1 2 3 4 5 6 7 8 9 10 11 12 |
$ sudo nano /etc/initramfs-tools/conf.d/resume $ sudo update-initramfs -u -k all update-initramfs: Generating /boot/initrd.img-version WARNING: missing /lib/modules/version Ensure all necessary drivers are built into the linux image! depmod: ERROR: Bad version passed version dropbear: WARNING: Invalid authorized_keys file, remote unlocking of cryptroot via SSH won't work! depmod: ERROR: Bad version passed version update-initramfs: Generating /boot/initrd.img-4.15.0-52-generic dropbear: WARNING: Invalid authorized_keys file, remote unlocking of cryptroot via SSH won't work! update-initramfs: Generating /boot/initrd.img-4.15.0-51-generic dropbear: WARNING: Invalid authorized_keys file, remote unlocking of cryptroot via SSH won't work! |
何やら他にも問題がありそうです。
2. missing /lib/modules/version
次のこのエラー、原因は「/lib/modules/ 」ではなく、initramfs更新時に参照する「/var/lib/initramfs-tools/」にありました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
$ ls -la /var/lib/initramfs-tools -rw-r--r-- 1 root root 77 Sep 23 11:08 4.15.0-51-generic -rw-r--r-- 1 root root 77 Sep 23 11:08 4.15.0-52-generic -rw-r--r-- 1 root root 67 Sep 23 11:07 version $ cat /var/lib/initramfs-tools/version 7079106dc1434f63e85cc4e14ed3056e031c0a21 /boot/initrd.img-version $ ls /lib/modules 4.15.0-24-generic 4.15.0-29-generic 4.15.0-35-generic 4.15.0-42-generic 4.15.0-48-generic 4.15.0-25-generic 4.15.0-30-generic 4.15.0-36-generic 4.15.0-43-generic 4.15.0-49-generic 4.15.0-26-generic 4.15.0-32-generic 4.15.0-37-generic 4.15.0-45-generic 4.15.0-50-generic 4.15.0-27-generic 4.15.0-33-generic 4.15.0-38-generic 4.15.0-46-generic 4.15.0-51-generic 4.15.0-28-generic 4.15.0-34-generic 4.15.0-39-generic 4.15.0-47-generic 4.15.0-52-generic $ ls -la /boot -rw------- 1 root root 4051495 May 15 2019 System.map-4.15.0-51-generic -rw------- 1 root root 4051528 Jun 5 2019 System.map-4.15.0-52-generic -rw-r--r-- 1 root root 217278 May 15 2019 config-4.15.0-51-generic -rw-r--r-- 1 root root 217278 Jun 5 2019 config-4.15.0-52-generic drwxr-xr-x 5 root root 4096 Aug 26 08:01 grub -rw------- 1 root root 55016843 Sep 23 11:37 initrd.img-4.15.0-51-generic -rw------- 1 root root 55016865 Sep 23 11:36 initrd.img-4.15.0-52-generic -rw------- 1 root root 12700533 Sep 23 11:24 initrd.img-version -rw-r--r-- 1 root root 182704 Jan 28 2016 memtest86+.bin -rw-r--r-- 1 root root 184380 Jan 28 2016 memtest86+.elf -rw-r--r-- 1 root root 184840 Jan 28 2016 memtest86+_multiboot.bin -rw------- 1 root root 8294136 May 15 2019 vmlinuz-4.15.0-51-generic -rw------- 1 root root 8294136 Jun 5 2019 vmlinuz-4.15.0-52-generic |
本来ならばバージョン番号が入る変数の中身が単にversionになってしまったようなので、管理者権限でこのゴミファイルと生成されたゴミイメージ、「/boot/initrd.img-version」を削除します。
1 2 |
$ sudo rm /var/lib/initramfs-tools/version $ sudo rm /boot/initrd.img-version |
3. dropbear: WARNING: Invalid authorized_keys file
最後のこのエラー、実はこのPCには諸般の事情でdropbearを敢えて入れているのですが、OpenSSHとの関係をきちんとさせていないために発せられる警告のようで、sshサービス自身に支障は無い為に今まで気づきませんでした。
ユーザ自身の公開鍵「~/.ssh/id_rsa.pub」を「/etc/dropbear-initramfs/authorized_keys」に追記すれば良いとのことで、authorized_keysが無かったので新規作成しました。
1 2 3 4 5 6 7 |
$ ls -la /etc/dropbear-initramfs -rw-r--r-- 1 root root 556 Nov 22 2017 config -rw------- 1 root root 460 Feb 13 2019 dropbear_dss_host_key -rw------- 1 root root 242 Feb 13 2019 dropbear_ecdsa_host_key -rw------- 1 root root 805 Feb 13 2019 dropbear_rsa_host_key $ sudo cp ~/.ssh/id_rsa.pub /etc/dropbear-initramfs/authorized_keys |
以上で、挙がったエラーは全て対応しました。initramfsの更新をして確認してみましょう。
1 2 3 |
$ sudo update-initramfs -u -k all update-initramfs: Generating /boot/initrd.img-4.15.0-52-generic update-initramfs: Generating /boot/initrd.img-4.15.0-51-generic |
実際に再起動させてみますが、シャットダウン時の待たされもなく、起動も速くなった印象です。分析ツールでもカーネル部分に要する時間を短縮させることが出来ています。
1 2 3 |
$ systemd-analyze Startup finished in 5.877s (kernel) + 25.365s (userspace) = 31.242s graphical.target reached after 25.355s in userspace |
このsystemd-analyzeにはもっと詳細な分析の出来るオプションが用意されて、トラブルシューティングに使えそうです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
$ systemd-analyze blame 13.074s dev-sda1.device 10.537s systemd-journal-flush.service 10.433s keyboard-setup.service 9.238s systemd-modules-load.service 7.310s systemd-tmpfiles-setup-dev.service 6.977s systemd-random-seed.service 6.024s snapd.service 4.613s fwupd.service 3.219s NetworkManager.service 3.065s vmware-USBArbitrator.service 2.897s ModemManager.service 2.555s postfix@-.service 2.468s udisks2.service 2.279s grub-common.service 2.276s ufw.service 2.143s vmware.service ... $ systemd-analyze critical-chain The time after the unit is active or started is printed after the "@" character. The time the unit takes to start is printed after the "+" character. graphical.target @24.149s └─multi-user.target @24.149s └─postfix.service @24.147s +1ms └─postfix@-.service @21.591s +2.555s └─network-online.target @21.589s └─NetworkManager-wait-online.service @20.951s +637ms └─NetworkManager.service @17.727s +3.219s └─dbus.service @17.019s └─basic.target @16.772s └─sockets.target @16.771s └─snapd.socket @16.760s +10ms └─sysinit.target @16.758s └─snapd.apparmor.service @16.718s +40ms └─apparmor.service @16.172s +544ms └─local-fs.target @16.171s └─run-user-124.mount @24.093s └─swap.target @15.891s └─dev-disk-by\x2duuid-91efa7b1\x2d8f61\x2d4fab\x2d8338\x2d03dd84a28b54.swap @15.843s +47ms └─dev-disk-by\x2duuid-91efa7b1\x2d8f61\x2d4fab\x2d8338\x2d03dd84a28b54.device @15.842s |
ユーザスペース分の起動時間がまだ長く感じるので少し調べてみます。「NetworkManager-wait-online」はその名の通り、ネットワークがオンラインになるまで待つ機能で、以前よりよくパフォーマンス問題のやり玉に挙げられてることが多いサービスで、実際に無効化してしまう例も多いので、試してみます。
1 2 3 4 5 |
$ sudo systemctl disable NetworkManager-wait-online.service Removed /etc/systemd/system/network-online.target.wants/NetworkManager-wait-online.service. $ sudo systemctl mask NetworkManager-wait-online.service Created symlink /etc/systemd/system/NetworkManager-wait-online.service → /dev/null. $ sudo systemctl stop NetworkManager-wait-online.service |
これで勇んで再起動してみますが、どうもNetworkManagerがコケてしまったようで、I/Fがローカルのみになってしまいました。起動時間にも改善が見られないので、今回は有意にならずと判断して元に戻しました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
$ systemd-analyze Startup finished in 5.572s (kernel) + 24.510s (userspace) = 30.083s graphical.target reached after 24.505s in userspace $ ifconfig lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 loop txqueuelen 1000 (ローカルループバック) RX packets 66 bytes 29018 (29.0 KB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 66 bytes 29018 (29.0 KB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 $ sudo systemctl unmask NetworkManager-wait-online.service Removed /etc/systemd/system/NetworkManager-wait-online.service. $ sudo systemctl enable NetworkManager-wait-online.service Created symlink /etc/systemd/system/network-online.target.wants/NetworkManager-wait-online.service → /lib/systemd/system/NetworkManager-wait-online.service. $ sudo systemctl start NetworkManager-wait-online.service |