更新 9
我决定尝试一下。我从台式机上卸下 SSD,暂时将其放入我的 Dell Latitude 笔记本电脑中。瞧,它的加载速度initrd
提高了一个数量级,比6 秒关闭开机时间...
我现在有点困惑...也许 GRUB 与我的主板芯片组有问题?
更新 8
所以我注意到硬盘活动指示灯有些有趣。加载时initrd
,指示灯几乎就像以 10% 占空比或其他方式进行 PWM 控制。这让我怀疑 GRUB 的读取是否未优化,也许是它正在执行 OS 调用来读取每个字节,而不是将图像作为字节流读取?
更新 7
看起来,加载初始 ramdisk 是问题的主要部分。
在 GRUB 中,我按下了C手动命令提示符。然后我继续逐行输入默认配置中的每一行(输入这些 UUID 很痛苦!),并记录了命令完成所用的时间。以下是我发现的内容:
- 大多数命令立即完成
- 加载内核的命令大约需要一秒钟
- 加载初始 ramdisk 的命令耗时 7 秒
输入配置文件中的所有行后,我继续运行boot
。从我按下回车键到登录屏幕出现,大约花了 7.5 秒。
有趣的是,它加载的 initrd 映像大小为 36MB。因此,如果加载需要 7 秒,那么它的读取速度就只有 5MB/秒!
我的塔上的磁盘活动灯持续亮了整整 7 秒......
这里还有一个有趣的片段有关 initrd 的 Wikipedia 页面:
其他 Linux 发行版(例如 Fedora 和 Ubuntu)会生成更通用的 initrd 映像。这些映像仅以根文件系统的设备名称(或其 UUID)启动,并且必须在启动时发现其他所有内容。在这种情况下,软件必须执行一系列复杂的任务才能挂载根文件系统
更新 6
Nathan Osman 在聊天中请求单用户模式下的启动时间。
从我进入F10GRUB到出现提示符,一共花了13秒。
另外,我在聊天中与 Zanna 和 Rinzwind 交谈,从按下电源按钮开始,他们的启动时间都是 8 秒。我的 20 秒来自 GRUB。如果我算上 POST 时间,时间会更长!
更新 5
Ubuntu 可以以最高 550MB/秒的速度读取我的 SSD......
更新 4
所以我quiet splash $vt_handoff
从笔记本电脑的 GRUB 中的启动命令中删除了这些参数(请记住,这台笔记本电脑没有 SSD),并在启动过程中注意到一个非常有趣的事情:
它在这条线路上挂起 15 秒:
[ 4.374390] init: plymouth-upstart-bridge respawnng too fast, stopped
这是一张(低质量的)图片:
不确定那有什么意义...
更新 3
我对另一台运行 14.04 的机器的启动进行了计时(请记住,这台机器没有 SSD),从我按下 GRUB 中的回车键直到登录屏幕出现,一共花了 40 秒。
按下回车键后,它会在同一个空白紫色屏幕上停留 20 秒,然后 Ubuntu 动画加载,并再过 20 秒才到达登录屏幕。
我查看了输出dmesg
,但我不能完全分辨它在哪里完成了启动。我认为它在 25 秒时结束。以下是最后几行:
[ 24.916824] wlan0: associated
[ 24.916852] IPv6: ADDRCONF(NETDEV_CHANGE): wlan0: link becomes ready
[ 25.215550] init: kdm main process (869) killed by TERM signal
[ 25.441216] vboxdrv: module verification failed: signature and/or required key missing - tainting kernel
[ 25.445587] vboxdrv: Found 2 processor cores.
[ 25.446142] vboxdrv: fAsync=0 offMin=0x18c offMax=0x960
[ 25.446228] vboxdrv: TSC mode is 'synchronous', kernel timer mode is 'normal'.
[ 25.446230] vboxdrv: Successfully loaded version 4.3.36_Ubuntu (interface 0x001a000b).
[ 25.476940] vboxpci: IOMMU not found (not registered)
[ 33.174926] init: plymouth-upstart-bridge main process ended, respawning
[ 36.495811] init: anacron main process (933) killed by TERM signal
如果我理解正确的话,这似乎是一个普遍的 GRUB 问题。
更新 2
我确认这是 GRUB 问题C通过在 GRUB 中按下 访问的命令行将 GRUB 的背景颜色设置为绿色。
当我按下回车键时,在 Ubuntu 启动动画加载之前,我看到一个空白的绿屏约 15 秒...
更新
我认为问题在于 GRUB 花费了很长时间来加载内核映像。
问题
我已经在三星 850 Pro 512GB SSD 上安装了 Ubuntu 16.04,但我不明白为什么我的启动时间是 20 秒。(从我在 GRUB 中按下回车键开始)。请记住,我引用的 20 是 17 到登录屏幕,然后另外 3 到桌面)
此外,不确定这是否相关,但是:
- Ubuntu是以MBR模式安装的,因为我鄙视UEFI。
- 我安装了专有的 Nvidia 驱动程序
看着生成的图像systemd-analyze plot > bootimage2
,我的启动显然花了 3 秒钟?
看一下dmesg
,我的启动显然花了 4 秒。但是我用秒表计时,花了20秒!(不包括 POST 时间)再次提醒,请记住,我引用的 20 是 17 到登录屏幕,然后另外 3 到桌面)
启动顺序如下:
- 邮政
- GRUB 加载
- 我按下 ENTER 键启动秒表
- 我看到了大约 15 秒的空白紫屏
- 我看到了 Ubuntu 启动动画两秒钟
- 我进入登录界面
- 我停下秒表
- 我输入密码,按回车键,然后再次启动秒表。
- 3 秒后我进入桌面
- 我再次停下秒表。
以下是完整的输出dmesg
: http://paste.ubuntu.com/23955108/
下面是输出的第一行systemd-analyze blame
:
365ms dev-sda5.device
327ms networking.service
287ms accounts-daemon.service
286ms ModemManager.service
233ms systemd-logind.service
216ms apport.service
213ms grub-common.service
209ms ondemand.service
200ms irqbalance.service
183ms speech-dispatcher.service
178ms apparmor.service
160ms gpu-manager.service
148ms thermald.service
148ms pppd-dns.service
146ms systemd-user-sessions.service
142ms alsa-restore.service
140ms console-setup.service
137ms rsyslog.service
105ms NetworkManager.service
104ms upower.service
102ms avahi-daemon.service
100ms systemd-udev-trigger.service
这些人面临着同样的问题:
- https://ubuntuforums.org/showthread.php?t=2325045
- https://www.bleepingcomputer.com/forums/t/598260/booting-ubuntu-temporarily-stuck-on-a-purple-screen/
- 而且似乎患有 ARCH 的人也存在这个问题……
有任何想法吗?
答案1
如果 GRUB 不在 SSD 上(如果在安装过程中正确配置,它应该在 SSD 上),那么仅仅让 SSD 在那里就需要 GRUB 时间来识别它,但这不会以任何方式减少启动时间,实际上恰恰相反。您应该做的是通过更改 BIOS 启动顺序让计算机从 SSD 启动。请注意,您还必须在 SSD 上重新安装 GRUB。虽然在某些情况下(例如我的笔记本电脑),您无法从 BIOS 选择 SSD 作为启动设备,那么您只能转到 HDD,加载 RAM,然后转到 SSD。
这也是我认为会发生的情况,但我不完全了解您的笔记本电脑或台式机的配置,所以这是我所能提供的全部帮助。
希望这可以帮助。 :)