更新9
我决定尝试一个实验。我从我的台式机上取下了SSD,暂时放到了我的戴尔Latitude笔记本电脑上。不可思议的是,它加载initrd
的速度快了一个数量级,启动时间缩短了6秒...
现在我有点困惑了...也许GRUB与我的主板芯片组有问题?
更新8
关于硬盘活动指示灯,我注意到了一些有趣的事情。在加载initrd
时,它几乎像是以10%的占空比进行PWM控制。这让我想知道,GRUB的读取是否没有经过优化,可能类似于每个字节都进行操作系统调用来读取,而不是将图像作为字节流进行读取?
更新 7
看起来加载初始ramdisk是问题的主要原因。
在GRUB中,我按下C进入手动命令提示符。然后,我逐行输入默认配置中的每一行(输入那些UUID真是痛苦!),并记录命令完成所需的时间。以下是我的发现:
- 大多数命令立即完成
- 加载内核的命令大约需要一秒钟
- 加载初始ramdisk的命令需要7秒钟
在输入配置文件中的所有行之后,我继续运行boot
命令。从我按下回车键到登录界面出现,大约需要7.5秒钟。
有趣的是,它加载的initrd镜像大小为36MB。所以如果加载需要7秒钟,那么读取速度只有5MB/秒!
我的机箱上的硬盘活动指示灯在整个7秒钟都亮着...
这里还有一个来自Wikipedia关于initrd页面的有趣片段:
其他Linux发行版(如Fedora和Ubuntu)生成更通用的initrd映像。它们仅以根文件系统的设备名称(或其UUID)开始,并且必须在引导时发现其他所有内容。在这种情况下,软件必须执行一系列复杂的任务来挂载根文件系统。
更新6
Nathan Osman在聊天中要求以单用户模式启动时间。
从我在GRUB中按下 F10 键到提示出现的时间为13秒。
此外,我在聊天中与Zanna和Rinzwind交谈,他们两个从按下电源按钮到启动时间只需8秒。我的20秒是从GRUB开始计算的。如果计算POST时间,会更长!
更新5
Ubuntu可以以最大速度550MB/sec读取我的SSD...
更新4
所以我从我的笔记本电脑的GRUB引导命令中删除了quiet splash $vt_handoff
参数(请记住,这台笔记本电脑没有SSD),并在启动序列中注意到了一件非常有趣的事情:
它在这一行停顿了15秒:
[ 4.374390] init: plymouth-upstart-bridge respawnng too fast, stopped
这是一张(低质量的)图片:
不确定那的意义是什么...
更新3
我测试了一台没有SSD的14.04运行的另一台机器的开机时间,从我在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问题,通过在GRUB中使用命令行将背景颜色设置为绿色来进行确认,可以通过在GRUB中按下C键访问命令行。
当我按下回车键后,我会看到一个空白的绿色屏幕,大约持续15秒钟,然后Ubuntu引导动画启动...
更新
我觉得问题在于GRUB加载内核映像的时间太长。
问题
我在我的Samsung 850 Pro 512GB固态硬盘上安装了Ubuntu 16.04,但是我无法理解为什么我的启动时间为20秒。(从我在GRUB中按下回车键开始计时)。请注意,这里的20秒指的是17秒到登录界面,然后再过3秒到达桌面。
另外,不确定以下内容是否相关:
- Ubuntu是以MBR模式安装的,因为我不喜欢UEFI。 - 我已安装了专有的Nvidia驱动程序。
看着由
systemd-analyze plot > bootimage2
生成的图像, 我的启动显然花了3秒钟?
看着 dmesg
,我的启动显然只花了4秒钟。但我用秒表计时却花了20秒钟!(不包括POST时间)请记住,我提到的20是指17秒到登录屏幕,然后再过3秒到达桌面。
以下是启动顺序:
- POST
- GRUB加载
- 我按下回车键时开始计时
- 我在一个空白的紫色屏幕上等待约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
这些人有同样的问题:
- [链接1](https://ubuntuforums.org/showthread.php?t=2325045) - [链接2](https://www.bleepingcomputer.com/forums/t/598260/booting-ubuntu-temporarily-stuck-on-a-purple-screen/) - 这个问题似乎连使用ARCH的人也遇到了...
有什么想法吗?
systemd-analyze blame
,我没有做任何特别的事情。奇怪的是,Grub 在“loading initial ram disk”上卡了大约10秒钟,而实际上应该只有几分之一秒,因为文件大小。然后延迟就消失了。也许这是一个内核更新的原因?或者是我对plymouthd
进行的更改,我不太确定。 - WinEunuuchs2Unix启动完成时间为2.344秒(内核)+ 8.799秒(用户空间)= 11.143秒
。 - oldfred