Ubuntu 16.04在Samsung 850 Pro上启动缓慢。

更新9

我决定尝试一个实验。我从我的台式机上取下了SSD,暂时放到了我的戴尔Latitude笔记本电脑上。不可思议的是,它加载initrd的速度快了一个数量级,启动时间缩短了6秒...

现在我有点困惑了...也许GRUB与我的主板芯片组有问题?

更新8

关于硬盘活动指示灯,我注意到了一些有趣的事情。在加载initrd时,它几乎像是以10%的占空比进行PWM控制。这让我想知道,GRUB的读取是否没有经过优化,可能类似于每个字节都进行操作系统调用来读取,而不是将图像作为字节流进行读取?

enter image description here

更新 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...

enter image description here

更新4

所以我从我的笔记本电脑的GRUB引导命令中删除了quiet splash $vt_handoff参数(请记住,这台笔记本电脑没有SSD),并在启动序列中注意到了一件非常有趣的事情:

它在这一行停顿了15秒:

[    4.374390] init: plymouth-upstart-bridge respawnng too fast, stopped

这是一张(低质量的)图片:

enter image description here

不确定那的意义是什么...


更新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秒钟?

enter image description here

看着 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的人也遇到了...
有什么想法吗?

评论不适合进行长时间的讨论;此对话已被移至聊天室 - Thomas Ward
我也在慢启动的问题上发了一个帖子,但是从29秒减少到15秒,对于一个慢速的Kingfast mSata III SSD在Sata II总线上来说已经可以接受了:http://askubuntu.com/questions/864277/is-initrd-img-grubs-loading-initial-ramdisk-slowing-down-my-boot - WinEunuuchs2Unix
@WinEunuuchs2Unix - 你是如何让GRUB告诉你何时完成加载initramfs的? - You'reAGitForNotUsingGit
@AndroidDev 除了设置启动图表和使用 systemd-analyze blame,我没有做任何特别的事情。奇怪的是,Grub 在“loading initial ram disk”上卡了大约10秒钟,而实际上应该只有几分之一秒,因为文件大小。然后延迟就消失了。也许这是一个内核更新的原因?或者是我对 plymouthd 进行的更改,我不太确定。 - WinEunuuchs2Unix
你有没有试过降低一下普利茅斯的速度?SSD可能太快了;^) 请参考http://www.unrelatedshit.com/2014/07/30/kvm-too-fast-for-plymouth-upstart-bridge/ - ubfan1
@ubfan1 - 我会看一下并回报给你。 - You'reAGitForNotUsingGit
@ubfan1 - 嗯,我在我的16.04安装上没有那个文件。还要记住,在你的链接中提到的错误只发生在我的笔记本电脑上,并非是讨论的那台电脑。 - You'reAGitForNotUsingGit
我在我的250GB三星SSD 850上使用UEFI/gpt。systemd-analyze 启动完成时间为2.344秒(内核)+ 8.799秒(用户空间)= 11.143秒 - oldfred
@oldfred - 如果你用秒表计时,从你在GRUB中按下回车键输入“Ubuntu”到登录界面出现需要多长时间? - You'reAGitForNotUsingGit
大概接近11秒或者更少。在UEFI中有3秒的延迟,在grub中也有3秒的延迟,当新内核下载完成后重新启动并回到工作状态则需要约20秒。 - oldfred
@oldfred 所以这意味着你实际的启动时间是5秒,因为11减去3再减去3等于5... - You'reAGitForNotUsingGit
11不包括UEFI,因为那是在系统启动之前,我经常在Grub出现之前的3秒内按下回车键。但引导很快。我仍然在日志中看到一些可能可以解决以加快速度的问题,但目前并不是非常感兴趣去研究这些问题。 - oldfred
1个回答

如果GRUB不在SSD上(如果在安装过程中正确配置的话),那么只有将SSD放在那里,GRUB才会花时间识别它,但这并不会以任何方式减少启动时间,实际上恰恰相反。你应该做的是通过更改BIOS启动顺序使计算机从SSD启动。请注意,您还必须在SSD上重新安装GRUB。尽管在像我的笔记本电脑这样的情况下,您无法从BIOS中选择SSD作为启动设备,那么您只能选择从HDD启动,加载RAM,然后转到SSD。
此外,这是我认为会发生的事情,但我不完全了解您的笔记本电脑或台式机配置,所以这就是我能提供的全部帮助。
希望对您有所帮助。 :)

GRUB安装在SSD上。 - You'reAGitForNotUsingGit