有一段时间,我的启动过程花费的时间太长(将近 1 分钟)。
systemd-analyze time
显示内核耗时 35.765 秒
看一下dmesg
,似乎问题出在挂载文件系统上:
...
[ 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)
...
我的/etc/fstab
样子是这样的:
# <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
我该如何解决这个问题?
编辑:仔细查看启动消息(在删除 grub 中的 quiet 选项后),我发现了以下可疑行:
gave up waiting for suspend/resume device
我认为我的交换已加密,并且我还认为其中的 UUID/etc/initramfs/conf.d/resume
不对应任何设备。
我应该禁用恢复/暂停吗?以及如何做到这一点?
答案1
好的,我找到了解决方案,感谢 Sudhanshu 的评论。
问题是由于我的交换设备被加密。因此local-premount
initramfs 中的脚本一直在等待不可用的交换设备,直到超时。相关消息是gave up waiting for suspend/resume device
。
为了禁用此功能(因为使用加密交换无法从交换恢复,而且我不使用休眠模式),我修改了这个文件:/etc/initramfs-tools/conf.d/resume
。
在此文件中,有一行
RESUME=none
(而不是这里的 UUID)将禁用等待恢复设备。
跑步
sudo update-initramfs -u
应用更改。
系统现在正常启动。
答案2
我也在 Linux Mint(基于 Ubuntu)中看到了这个问题,并花了一些时间找出问题所在。
如果您的系统安装在 LVM 上并使用 LVM 卷作为交换磁盘,就会发生这种情况。
有一个长期存在的、反复出现的错误,其中恢复文件错误地具有 UUID(对于 LVM 无效)而不是它应该具有的设备路径。请参阅https://bugs.launchpad.net/ubuntu/+source/initramfs-tools/+bug/1768230
您可以通过编辑文件/etc/initramfs-tools/conf.d/resume
并将 UUID 替换为交换驱动器的设备路径来修复此问题。以下命令片段将使用 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'
修复后的简历文件看起来应该是这样的:
RESUME=/dev/mapper/mint--vg-swap_1
答案3
上述或其他地方的解决方案都不适用于我,但我找到了一个解决方案,可以将我的启动时间从 2 分 10 秒缩短到 40 秒。
我曾经创建和删除交换分区,但不知何故这些日志仍留在 etc/fstab 文件中。所以我的系统试图挂载那些以前创建的不再存在的交换分区。所以请让我一步步解释我做了什么。
我运行此命令
sudo blkid | grep swap
来查找我的交换分区。有两个,但其中一个实际上并不存在(它不涉及我的任何分区)。所以我通过输入来编辑 /etc/fstab 文件
sudo gedit /etc/fstab
然后我意识到有这么多交换文件,我删除了,但不知何故又恢复存在于这个文件中。所以我参考了步骤 1 并已删除不再存在的分区。
请查看 /etc/fstab 文件前后的截图。清理后,一切正常。
这是未编辑的 /etc/fstab 文件未编辑的 /etc/fstab
然后清除不存在的交换分区清理 /etc/fstab
答案4
就我而言,按照其他答案中所述,在/etc/initramfs-tools/conf.d/
(with RESUME=none
etc.) 中添加配置文件对我来说不起作用。Ubuntu 在启动时继续报告:
放弃等待暂停/恢复设备
对我有用的解决方案是更改grub
配置/etc/default/grub
并更改如下所示的行:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash resume=UUID=7f6bbc71-07d2-46db-946c-03e47368706c"
到
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash noresume"
然后运行:
sudo update-grub