如何诊断/修复Ubuntu 18.04启动非常缓慢的问题

SSD有很长一段时间没有任何动作。

  • 我该如何找到故障并修复它?
  • 已经检查了/etc/fstab,没有交换分区或其他问题(32GB的内存,没有交换分区)

[    2.173492] usb 2-1.6: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[    2.173497] usb 2-1.6: Product: DW375 Bluetooth Module
[    2.173501] usb 2-1.6: Manufacturer: Dell Computer Corp
[    2.173511] usb 2-1.6: SerialNumber: 7CE9D3C0713B
[    2.323728] ata4: SATA link down (SStatus 0 SControl 300)
[    2.441062] input: AlpsPS/2 ALPS GlidePoint as /devices/platform/i8042/serio1/input/input6
[    2.640309] ata5: SATA link down (SStatus 0 SControl 300)
[    2.954947] ata6: SATA link down (SStatus 0 SControl 300)
[    3.068090] clocksource: Switched to clocksource tsc
[   36.584826] EXT4-fs (sda1): mounted filesystem with ordered data mode. Opts: (null)
[   36.726117] ip_tables: (C) 2000-2006 Netfilter Core Team
[   36.732610] systemd[1]: systemd 237 running in system mode. (+PAM +AUDIT +SELINUX +IMA +APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +AC
L +XZ +LZ4 +SECCOMP +BLKID +ELFUTILS +KMOD -IDN2 +IDN -PCRE2 default-hierarchy=hybrid)
[   36.751996] systemd[1]: Detected architecture x86-64.
[   36.753867] systemd[1]: Set hostname to <latitude-e5520>.
[   36.868561] systemd[1]: Started Forward Password Requests to Wall Directory Watch.
[   36.868594] systemd[1]: Reached target Remote File Systems.
[   36.868751] systemd[1]: Created slice User and Session Slice.
[   36.868869] systemd[1]: Created slice System Slice.
[   36.868948] systemd[1]: Listening on udev Control Socket.
[   36.868957] systemd[1]: Reached target Slices.
[   36.868996] systemd[1]: Listening on udev Kernel Socket.
[   36.895156] EXT4-fs (sda1): re-mounted. Opts: errors=remount-ro
[   36.898185] lp: driver loaded but no devices found
[   36.903941] ppdev: user-space parallel port driver

3这是一个全新安装吗?使用了逻辑卷管理(LVM)吗?也许是这个bug:https://bugs.launchpad.net/ubuntu/+source/ubiquity/+bug/1768230? - pim
要看到“警告:无法连接到lvmetad。回退到设备扫描。”的消息,您应该禁用spash/quiet启动(参见:https://askubuntu.com/a/289/454520)。 - pim
这是关于长网络服务启动的问题。这个答案提供的解决方案对我很有帮助。 - gyr9i
我删除了SWAP分区,导致出现了同样的错误。为了解决这个问题,我重新生成了INITRAMFS:sudo update-initramfs -u - Anderson
6个回答

我今天升级到了18.04版本,并遇到了相同的问题。幸运的是,我成功通过在引导内核时添加noresume参数来修复了这个问题。
和您一样,我也没有交换空间。在升级过程中,initramfs配置文件被修改,添加了一行指向不存在的交换分区的代码。启动缓慢是因为系统一直在寻找这个分区,然后在30秒后超时。
要更新GRUB以便它在启动时自动传递此选项给内核,请按照以下步骤操作:
  1. 编辑文件/etc/default/grub,将字符串noresume添加到GRUB_CMDLINE_LINUX_DEFAULT行中,例如:

    GRUB_CMDLINE_LINUX_DEFAULT="quiet splash noresume"
    
  2. 运行以下命令更新GRUB:

    sudo update-grub
    
  3. 重新启动计算机


3noresume修复了它,在initramfs中没有任何奇怪的东西。 - user105939
2我昨天升级到了18.04版本,遇到了同样的问题(启动时间长达52秒)。但是在设置了"noresume"参数之后,启动时间缩短至21秒。 - Erol
2你可以在已经不错的回答中加入更新grub的步骤,这样会进一步提升它的质量。 - WinEunuuchs2Unix
13请注意,这只是一个解决方法,因为它会阻止恢复休眠的系统。 - pim
5我担心这可能会阻止我使用休眠功能。然而,这个方法对我有效:https://askubuntu.com/questions/1013830/slow-boot-long-kernel-load-time-due-to-wrong-resume-device(编辑/etc/initramfs-tools/conf.d/resume,将RESUME=none从UUID改为正确的值,并运行update-initramfs -u)。 - Grey Panther
我正在使用Oracle VirtualBox,甚至无法登录Ubuntu实例 - 我该如何解决"lvmetad尚未激活"的问题?我的完整问题已在此处发布:https://stackoverflow.com/questions/56431425/windows-virtual-box-with-ubuntu-unable-to-boot - Roger Dodger
我删除了SWAP分区,导致出现了相同的错误。为了解决这个问题,我重新生成了INITRAMFS:sudo update-initramfs -u - Anderson

$ systemd-analyze blame

查看哪些进程占用了启动过程中最多的时间。

9systemd-analyze blame 不会显示内核时间,对于这个问题。systemd-analyse time 将显示是内核在搜索文件系统时卡住了。 - pim
2好的提示,但是最长的过程只花了1.6秒,所以这个工具没有起到帮助的作用。 - user105939
6@Pim systemd-analyse time 有一个拼写错误,应该加上一个 z - Rob Audenaerde
2systemd-analyze critical-chainblame更好。 - user535733
以下是 blame 的输出...现在我该如何改善运行时间最长的作业?systemd-analyze blame 22.866秒 systemd-journal-flush.service 22.844秒 dev-sda1.device 16.689秒 ufw.service 16.041秒 systemd-modules-load.service 15.367秒 keyboard-setup.service 13.714秒 systemd-tmpfiles-setup-dev.service 9.229秒 NetworkManager-wait-online.service 7.599秒 snapd.service 其余均少于6秒。请指导,我是个新手 - EetSandhu


工作得很好。对我来说,似乎比在GRUB中添加“noresume”内核参数更清洁(这也起作用)。 - hackerb9

我从16.04升级到了18.04。启动时间超过了10分钟。
为了找出启动时哪些进程花费了最多的时间,我尝试了从“无启动画面到内核”进行调试。
A start job is running for Raise network interfaces (1min 26s / 5min 24s)

为了节省启动时间,我们需要缩短这个过程的时间。为此,你需要进行编辑。
sudo nano /etc/systemd/system/network-online.target.wants/networking.service

找到
TimeoutStartSec=5min

改为
TimeoutStartSec=5s

重启

1这就是我花了很多时间烧掉我的靴子的地方,所以这个解决方案对我有效。+1 - Gnawme
1这是我的情况...只是我需要在/etc/systemd/system/network-online.target.wants/NetworkManager-wait-online.service文件中,在[Service]下插入一行,因为它之前没有。我使用的是Lubuntu 20.04。谢谢 - funder7

您可以配置“启动作业”和“停止作业”的超时时间。
以提升的权限编辑“/etc/systemd/system.conf”,并将两行默认情况下注释为90秒的代码更改/添加为5秒(或您喜欢的其他值),然后取消注释。
#DefaultTimeoutStartSec=90s
#DefaultTimeoutStopSec=90s 

给:
DefaultTimeoutStartSec=5s
DefaultTimeoutStopSec=5s

然后,通过以下命令重新构建您的initramfs来应用更改:
sudo update-initramfs -u

这个解决了我的问题,在SSD驱动器上进行Gparted重新分区操作后,否则启动时间明显变长。 - doctorate
不总是有效。相反,系统需要在恢复模式下重新启动并重新执行更改。 - Julien Chau

我尝试了不同的方法,但都没有起作用。后来我发现是图形驱动程序的问题。我通过使用额外的驱动程序解决了这个问题,对我来说是Nvidia。
步骤如下:打开“软件和更新” -> 选择列出的图形驱动程序 -> 应用更改。
注意:我正在使用内核版本4.18.0-25-generic。