有一段时间,我的启动过程花费了太长时间(几乎 1 分钟)。
systemd-analyze time
显示内核耗时 35.765s
看着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
不对应于任何设备。
我应该禁用恢复/暂停吗?以及如何做到这一点?
好的,感谢 Sudhanshu 的评论,我找到了解决方案。
问题是由于我的交换被加密了。所以
local-premount
initramfs 中的脚本一直在等待一个不可用的交换设备,直到它超时。相关消息是gave up waiting for suspend/resume device
。要禁用此功能(因为使用加密交换无法从交换恢复,而且我也不使用休眠),我修改了这个文件:
/etc/initramfs-tools/conf.d/resume
.在这个文件中,一行
(而不是此处的 UUID)将禁用等待恢复设备。
跑
应用更改。
系统现在正常启动。
我还在 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 找到并报告的第一个交换驱动器为您执行此操作:固定的简历文件应如下所示:
RESUME=/dev/mapper/mint--vg-swap_1
上面或其他地方的这些解决方案都没有为我解决,但我找到了一个解决方案,可以将我的启动时间从 2 分 10 秒减少到 40 秒。
我曾经创建和删除交换分区,并且这些日志以某种方式保留在 etc/fstab 文件中。所以我的系统试图挂载那些以前创建的不再存在的交换分区。所以请让我一步一步解释我做了什么。
我运行了这个命令
sudo blkid | grep swap
来找出我的交换分区。有两个但一个实际上不存在(它不引用我的任何分区)。所以我通过键入来编辑 /etc/fstab 文件
sudo gedit /etc/fstab
然后我意识到有很多交换文件我已经删除但不知何故恢复存在于这个文件中。所以我参考了步骤 1 并删除了不再存在的分区。
请看两个之前和之后的 /etc/fstab 文件截图。在这次清理之后,一切都正常工作。
这是未经编辑的 /etc/fstab 文件未经编辑的 /etc/fstab
在这里清除不存在的交换分区后清理 /etc/fstab
我在安装了 2 个不同的 Linux 发行版后遇到了这个问题。不知何故,在一个发行版上,交换分区得到了另一个 UUID 分配给它然后预期。我的解决方案是:首先,运行
sudo blkid
以获取交换分区的正确 UUID。复制交换的 UUID。把它粘贴进去,/etc/initramfs-tools/conf.d/resume
这样你就得到了RESUME=_the_correct_UUID_
. 现在运行sudo update-initramfs -u
以应用此更改。接下来,检查 /etc/fstab,并在必要时更改交换分区的 UUID。(我不得不)
/etc/initramfs-tools/conf.d/
就我而言,如其他答案中所述,在(with etc.)中添加配置文件RESUME=none
对我不起作用。Ubuntu 在启动时继续报告:对我有用的解决方案是更改
grub
配置/etc/default/grub
并从以下内容更改行:至
然后运行: