有一段时间,我的启动过程花费的时间太长(几乎 1 分钟)。
systemd-analyze time
Run Code Online (Sandbox Code Playgroud)
显示内核需要 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)
...
Run Code Online (Sandbox Code Playgroud)
我的/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
Run Code Online (Sandbox Code Playgroud)
我该如何解决这个问题?
编辑:仔细查看启动消息(在删除 grub 中的 quiet 选项后),我发现了这个可疑的行:
gave up waiting for suspend/resume device
Run Code Online (Sandbox Code Playgroud)
我认为我的交换是加密的,我也认为 UUID 中的 UUID/etc/initramfs/conf.d/resume
不对应任何设备。
我应该禁用恢复/暂停吗?以及如何做到这一点?
alc*_*lci 90
好的,我找到了解决方案,感谢 Sudhanshu 的评论。
问题是由于我的交换被加密了。所以local-premount
initramfs 中的脚本正在等待一个不可用的交换设备,直到它超时。相关信息是gave up waiting for suspend/resume device
。
为了禁用它(因为加密交换无法从交换中恢复,而且我也不使用休眠),我修改了这个文件:/etc/initramfs-tools/conf.d/resume
.
在这个文件中,一行
RESUME=none
Run Code Online (Sandbox Code Playgroud)
(而不是此处的 UUID)将禁用等待恢复设备。
跑
sudo update-initramfs -u
Run Code Online (Sandbox Code Playgroud)
应用更改。
系统现在可以正常启动。
我也在 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'
Run Code Online (Sandbox Code Playgroud)
固定的简历文件应该是这样的:
RESUME=/dev/mapper/mint--vg-swap_1