如何在 Ubuntu 18.04 上诊断/修复非常慢的启动

use*_*939 60 boot 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
Run Code Online (Sandbox Code Playgroud)

小智 75

我今天升级到 18.04 并遇到了同样的问题。我能够通过使用noresume参数启动内核来修复它。

和你一样,我也没有交换空间。在升级过程中的某个时刻,initramfs 配置被修改,添加了一行指向不存在的交换分区。启动缓慢是因为它正在寻找这个分区,然后在 30 秒后超时。

更新 GRUB 使其在启动时自动将此选项传递给内核:

  1. 编辑文件/etc/default/grub文件,使字符串noresume包含GRUB_CMDLINE_LINUX_DEFAULT在行中,例如:

    GRUB_CMDLINE_LINUX_DEFAULT="quiet splash noresume"
    
    Run Code Online (Sandbox Code Playgroud)
  2. 运行以下命令来更新 GRUB:

    sudo update-grub
    
    Run Code Online (Sandbox Code Playgroud)
  3. 重新启动计算机

  • 请注意,这是一种解决方法,因为它会阻止恢复休眠的系统。 (12认同)
  • 我担心这可能会阻止我使用休眠。但是这对我有用:https://askubuntu.com/questions/1013830/slow-boot-long-kernel-load-time-due-to-wrong-resume-device(编辑 /etc/initramfs-tools/conf.d ) d/resume,从 UUID 更改 RESUME=none 并运行 update-initramfs -u) (4认同)
  • noresume 修复了它,在 initramfs 中没什么奇怪的。 (3认同)
  • 我昨天升级到 18.04,我遇到了同样的问题(启动需要 52 秒)。设置“noresume”参数后,耗时21秒。 (2认同)
  • 您可以通过更新 grub 的说明来改进已经很好的答案。 (2认同)

小智 27

$ systemd-analyze blame
Run Code Online (Sandbox Code Playgroud)

查看哪些进程在引导过程中占用的时间最多。

  • `systemd-analyze blame` 不会显示内核时间,对于这个问题。`systemd-analysis time` 将显示是内核在搜索文件系统。 (9认同)
  • @Pim `systemd-analysis time` 有一个错字,它应该有一个 `z` (5认同)
  • 很好的提示,但最长的过程只用了 1.6 秒,所以这个工具没有帮助。 (2认同)
  • `systemd-analyze critical-chain` 甚至比 `blame` 更好 (2认同)

小智 14

对我有用的是运行,sudo rm /etc/initramfs-tools/conf.d/resume然后是sudo update-initramfs -u. 这似乎是升级的回归(请参阅https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=861151)。


kri*_*ige 10

我从 16.04 升级到 18.04。开机时间超过10分钟。
尝试从“没有启动屏幕到内核”来查找哪些进程花费最多的启动时间。

A start job is running for Raise network interfaces (1min 26s / 5min 24s)
Run Code Online (Sandbox Code Playgroud)

因此,我们需要减少此过程的时间以节省启动时间。为此,

你必须编辑,

sudo nano /etc/systemd/system/network-online.target.wants/networking.service
Run Code Online (Sandbox Code Playgroud)

TimeoutStartSec=5min
Run Code Online (Sandbox Code Playgroud)

改成

TimeoutStartSec=5s
Run Code Online (Sandbox Code Playgroud)

并重新启动


mar*_*com 6

您可以配置启动作业和停止作业的超时时间。

/etc/systemd/system.conf使用提升的权限进行编辑并更改/添加默认情况下从 90 秒到 5(或任何您喜欢的)注释的两行并取消注释:

从:

#DefaultTimeoutStartSec=90s
#DefaultTimeoutStopSec=90s 
Run Code Online (Sandbox Code Playgroud)

到:

DefaultTimeoutStartSec=5s
DefaultTimeoutStopSec=5s
Run Code Online (Sandbox Code Playgroud)

之后,通过使用以下命令重建 initramfs 来应用更改:

sudo update-initramfs -u
Run Code Online (Sandbox Code Playgroud)