由于错误的恢复设备,启动速度慢,内核加载时间长

由于错误的恢复设备,启动速度慢,内核加载时间长

有一段时间,我的启动过程花费的时间太长(将近 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-premountinitramfs 中的脚本一直在等待不可用的交换设备,直到超时。相关消息是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 文件中。所以我的系统试图挂载那些以前创建的不再存在的交换分区。所以请让我一步步解释我做了什么。

  1. 我运行此命令sudo blkid | grep swap来查找我的交换分区。有两个,但其中一个实际上并不存在(它不涉及我的任何分区)。

  2. 所以我通过输入来编辑 /etc/fstab 文件sudo gedit /etc/fstab

  3. 然后我意识到有这么多交换文件,我删除了,但不知何故又恢复存在于这个文件中。所以我参考了步骤 1 并已删除不再存在的分区

请查看 /etc/fstab 文件前后的截图。清理后,一切正常。

这是未编辑的 /etc/fstab 文件未编辑的 /etc/fstab

然后清除不存在的交换分区清理 /etc/fstab

答案4

就我而言,按照其他答案中所述,在/etc/initramfs-tools/conf.d/(with RESUME=noneetc.) 中添加配置文件对我来说不起作用。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

相关内容