Slow boot, long kernel load time, due to wrong resume device
For some time, my boot process is taking too long (almost 1 min.).
systemd-analyze time
shows that kernel is taking 35.765s
Looking at dmesg
, it seems that the problem is with mounting file systems:
...
[ 2.186084] sdb: sdb1 sdb9
[ 2.186919] sd 2:0:0:0: [sdb] supports TCG Opal
[ 2.186922] sd 2:0:0:0: [sdb] Attached SCSI disk
[ 2.499795] ata5: SATA link down (SStatus 0 SControl 300)
[ 2.844320] clocksource: Switched to clocksource tsc
[ 35.670493] EXT4-fs (dm-0): mounted filesystem with ordered data mode. Opts: (null)
[ 35.782128] ip_tables: (C) 2000-2006 Netfilter Core Team
[ 35.803610] systemd[1]: systemd 237 running in system mode. (+PAM +AUDIT +SELINUX +IMA +APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ +LZ4 +SECCOMP +BLKID +ELFUTILS +KMOD -IDN2 +IDN -PCRE2 default-hierarchy=hybrid)
...
My /etc/fstab
looks like this:
# <file system> <mount point> <type> <options> <dump> <pass>
/dev/mapper/ubuntu--vg-root / ext4 errors=remount-ro 0 1
# /boot/efi was on /dev/sda1 during installation
UUID=3996-2381 /boot/efi vfat umask=0077 0 1
#/dev/mapper/ubuntu--vg-swap_1 none swap sw 0 0
/dev/mapper/cryptswap1 none swap sw 0 0
How can I troubleshoot this ?
EDIT: looking closely at the boot messages (after removing the quiet option in grub), I spotted this suspicious line:
gave up waiting for suspend/resume device
I think my swap is encrypted, and I also think the UUID in /etc/initramfs/conf.d/resume
does not correspond to any device.
Should I disable resume/suspend? and how to do that?
Ok, I found the solution, thanks to Sudhanshu's comment.
The problem was due to my swap being encrypted. So the local-premount
script in initramfs was waiting for a swap device that was not available, until it timed out. The relevant message was gave up waiting for suspend/resume device
.
To disable this (as resuming from swap is not possible with an encrypted swap, and I don't use hibernation anyway), I modified this file: /etc/initramfs-tools/conf.d/resume
.
In this file, a line with
RESUME=none
(instead of the UUID that was here) will disable waiting for a resume device.
Run
sudo update-initramfs -u
to apply the changes.
System now boots normally.
I also saw this in Linux Mint (based on Ubuntu), and spent some time working out what was going wrong.
This happens if your system is installed on LVM and is using an LVM volume as the swap disk.
There is a long-standing, recurring bug where the resume file incorrectly has a UUID (which is invalid for LVM) instead of the device path that it should have. See https://bugs.launchpad.net/ubuntu/+source/initramfs-tools/+bug/1768230
You can fix it by editing the /etc/initramfs-tools/conf.d/resume
file and replacing the UUID with the device path of the swap drive.
The following command snippet will do this for you, using the first swap drive found and reported by blkid:
sudo bash -c 'mv /etc/initramfs-tools/conf.d/resume /tmp/resume.bak; echo RESUME=$(blkid | \grep -i swap | head -n 1 | cut -d : -f 1) > /etc/initramfs-tools/conf.d/resume'
The fixed resume file should look something like this:
RESUME=/dev/mapper/mint--vg-swap_1
None of those solutions above or elsewhere worked out for me but I have found a solution which reduces my boot time to 40 seconds from 2 minutes and 10 seconds.
I used to create and remove swap partitions and somehow these logs stayed in etc/fstab file. So my system was trying to mount those previously created swap partitions which no longer exists. So please let me explain what I did step by step.
I ran this command
sudo blkid | grep swap
to find out my swap partitions. There was two but one does not actually exist (it does not refer to any of my partitions).So I went to edit /etc/fstab file by typing
sudo gedit /etc/fstab
Then I realized there are so many swap files which I had deleted but somehow resumed existing in this file. So I referred to step 1 and deleted partitions which no longer exist.
Please see two before & after /etc/fstab file screenshots. After this cleanout everything's working as normal.
This is unedited /etc/fstab file unedited /etc/fstab
and here after wiping out non-existing swap partitions clean /etc/fstab