Ubuntu开机启动加速

2025-11-09 13:51:19

日常使用Linux工作,随着时间增长,开机启动速度逐渐下降,Ubuntu这个发行版包含Snap,更是拖慢了启动速度。虽然开机启动速度大部分由硬件配置决定,但后天的软件环境配置优化,保持好的使用习惯也很重要。

下面是我搜查出来的常用加快开机速度的方法:

1. GRUB_TIMEOUT 设置

意思为多少秒后grub菜单消失,默认5s,为了兼顾可配置性和速度,我选择2s,0就是直接跳过走到下一步了。英文解释如下:

‘GRUB_TIMEOUT’

Boot the default entry this many seconds after the menu is displayed, unless a key is pressed. The default is ‘5’. Set to ‘0’ to boot immediately without displaying the menu, or to ‘-1’ to wait indefinitely.

1➜ ~ egrep -v '^#|^$' /etc/default/grub

2GRUB_DEFAULT="0"

3GRUB_TIMEOUT_STYLE="menu"

4GRUB_TIMEOUT=2

5GRUB_DISTRIBUTOR="`lsb_release -i -s 2> /dev/null || echo Debian`"

6GRUB_CMDLINE_LINUX_DEFAULT=""

7GRUB_CMDLINE_LINUX=""

8GRUB_GFXMODE="1920x1440x32"

9export GRUB_COLOR_NORMAL="light-gray/black"

10export GRUB_COLOR_HIGHLIGHT="magenta/black"

11GRUB_THEME="/boot/grub/themes/ubuntu-/theme.txt"

每次修改grub后要运行 sudo update-grub 使其生效。

请注意,任何时候改动grub都要十分小心,不了解的更要谨慎,因为有可能进入了不了系统,修复较为麻烦,高手除外。

2. systemd-analyze 分析系统服务启动

根据下面的命令判定哪个程序导致的启动慢,无用的sudo systemctl disable xxx.service停用掉。

systemd-analyze 打印启动时间信息

systemd-analyze blame 服务启动耗时从大到小排序(参考)

systemd-analyze critical-chain 拖累启动速度的致命链(真正需要关心的)

systemd-analyze plot > ~/boot.svg 生成一张启动详细信息矢量图(彩图关注红色的部分)

1➜ ~ systemd-analyze

2Startup finished in 7.103s (firmware) + 4.614s (loader) + 19.164s (kernel) + 8.308s (userspace) = 39.191s

3graphical.target reached after 7.992s in userspace.

4➜ ~ systemd-analyze blame | head -n 10

51.860s systemd-udev-settle.service

61.686s zfs-volume-wait.service

71.683s zfs-mount.service

8 680ms lm-sensors.service

9 605ms accounts-daemon.service

10 553ms dnsmasq.service

11 490ms systemd-logind.service

12 480ms udisks2.service

13 427ms ModemManager.service

14 341ms systemd-udev-trigger.service

15➜ ~ systemd-analyze critical-chain

16The time when unit became active or started is printed after the "@" character.

17The time the unit took to start is printed after the "+" character.

18

19graphical.target @7.992s

20└─multi-user.target @7.989s

21 └─kerneloops.service @7.952s +33ms

22 └─nss-lookup.target @7.948s

23 └─dnsmasq.service @7.392s +553ms

24 └─network.target @7.339s

25 └─NetworkManager.service @7.146s +191ms

26 └─dbus.service @6.989s +103ms

27 └─basic.target @6.956s

28 └─sockets.target @6.955s

29 └─virtlogd-admin.socket @6.954s

30 └─virtlogd.socket @6.953s

31 └─sysinit.target @6.926s

32 └─systemd-timesyncd.service @6.809s +116ms

33 └─systemd-tmpfiles-setup.service @6.753s +46ms

34 └─local-fs.target @6.743s

35 └─zfs-mount.service @5.059s +1.683s

36 └─boot.mount @5.034s +17ms

37 └─local-fs-pre.target @2.816s

38 └─systemd-tmpfiles-setup-dev.service @2.794s +20ms

39 └─systemd-sysusers.service @2.773s +19ms

40 └─systemd-remount-fs.service @2.641s +111ms

41 └─systemd-journald.socket @2.523s

42 └─system.slice @2.485s

43 └─-.slice @2.485s

值得一提的是snap的软件通常会启动很多loopxx.device的服务,特别拖累启动速度,我反正不用snap的软件,直接删除。

1sudo apt-get purge snapd

3. 开机启动软件核对

按键盘的'win'键(左下角ctrl和alt之间),搜索启动'Startup Applications'软件,删除掉不必要的开启启动软件,只保留必须的,轻装上路跑得快啊。

4. 去掉非必要enabled的开机启动服务

列出系统中enabled的,挨个查看,根据自身状况,明确不要的去掉

1systemctl list-unit-files --state=enabled

比如这个打印机相关的,我的工作电脑不需要(公司是云打印的)可关掉 sudo systemctl disable cups-browsed.service

这样一通操作下来后,一般能够优化不少启动时间,有人可能要说,我是做嵌入式相关,可以自己裁剪内核,各种优化启动,这个不在本文的讨论范围内(此文受众是普通Linux桌面用户)。

另外,谈到Linux的启动不得不说下 plymouth-quit-wait.service 和 apt-daily.service, 其实这两个服务都不影响启动速度,分别参考这2个链接 plymouth 和 apt-daily

验证方法:

1systemctl list-dependencies plymouth-quit-wait.service

2systemctl list-dependencies --reverse apt-daily

接着,来说下这个plymouth,很多次看到这个名字的时都很迷惑,直到深入挖掘才知这背后的故事非常有趣。一开始我以为是 ply + mouth偶尔疑惑(ply是什么的缩写 + 嘴),其实它是英国的海港城市Plymouth(普利茅斯) ^_^.

为什么Plymouth和Linux的启动有关系呢?维基百科的解释:

Plymouth is a free application which provide bootsplash for Linux, The program is named after Plymouth Rock, a name which symbolizes the program's role as a first point of entry for users to interact with a computer system.

意思说,Plymouth就是Linux的启动动画程序(类比Windows、Mac等品牌Logo闪耀登场的那段动画效果),Plymouth的典故来自Plymouth Rock叫普利茅斯岩,又叫移民石,现在是美国的一个人文景点,新大陆的第一快落脚石类比第一个给用户交互的计算机程序。

移民石背景故事:

了解美国历史的人都知道,美国历史是由一群英国来的清教徒开始的,普利茅斯就是他们落脚的第一块土地。普利茅斯位于美国马萨诸塞州,距离波士顿约一小时车程。

1620年9月,一些英国清教徒因不堪忍受当时欧洲大陆的宗教压迫,从英国普利茅斯乘坐渔船离开英国前往美洲殖民地,为的是追求更自由的信仰。这些清教徒只凭借有限的航海知识横渡大西洋,长时间的漂泊加上捉摸不定的天气因素,其他船都沉了,只有“五月花号”成功登陆了新英格兰的土地。他们把这块土地命名为他们离开的地方——普利茅斯,美国的历史从此被写下。第一个寒冬,尚未开垦的土地上资源十分有限,这批清教徒很多都死于疾病和饥饿。危急关头印第安人送来了火鸡等食物,让剩下的人勉强撑了下来,幸运的是第二年他们就获得了大丰收。为了感谢上帝赐予的丰收和印第安人的馈赠,举行了狂欢活动,这也正是感恩节的雏形。

为了纪念登陆,他们用一块刻著1620的礁石在当年登陆的土地上。如今这片土地已经被美国作为国家公园保护起来,工作人员全都穿著17世纪的衣服,以逼真的中世纪方言与腔调和你交谈。在这里看到的所有事物,几乎都是17世纪风格的完整翻版

Plymouth的作者是Ray Strode,是一个在RedHat工作的美国工程师,美国工程师用美国典故,没毛病。

移民石图片:

最后,有人喜欢开机动画,有人不喜欢,怎么设置不显示开机动画呢?不显示开机动画的话,就是命令行显示开机启动过程,我个人喜欢,每天看几眼或许能发现潜在问题。

变动grub配置文件/etc/default/grub:

修改前:

1GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"

修改后:

1GRUB_CMDLINE_LINUX_DEFAULT=""

文件示例:

1➜ ~ egrep -v '^#|^$' /etc/default/grub

2GRUB_DEFAULT="0"

3GRUB_TIMEOUT_STYLE="menu"

4GRUB_TIMEOUT=2

5GRUB_DISTRIBUTOR="`lsb_release -i -s 2> /dev/null || echo Debian`"

6GRUB_CMDLINE_LINUX_DEFAULT=""

7GRUB_CMDLINE_LINUX=""

8GRUB_GFXMODE="1920x1440x32"

9export GRUB_COLOR_NORMAL="light-gray/black"

10export GRUB_COLOR_HIGHLIGHT="magenta/black"

11GRUB_THEME="/boot/grub/themes/ubuntu-/theme.txt"

GRUB_GFXMODE="1920x1440x32" 这个控制启动终端分辨率,后面的参数来自(每个人的情况不同):

1➜ ~ sudo hwinfo --framebuffer

2[sudo] password for mephisto:

302: None 00.0: 11001 VESA Framebuffer

4 [Created at bios.459]

5 Unique ID: rdCR.jB2oURqGEo2

6 Hardware Class: framebuffer

7 Model: "Intel(R) SKL Mobile/Desktop Graphics Controller"

8 Vendor: "Intel Corporation"

9 Device: "Intel(R) SKL Mobile/Desktop Graphics Controller"

10 SubVendor: "Intel(R) SKL Mobile/Desktop Graphics Chipset Accelerated VGA BIOS"

11 SubDevice:

12 Revision: "Hardware Version 0.0"

13 Memory Size: 31 MB + 960 kB

14 Memory Range: 0x00000000-0x01feffff (rw)

15 Mode 0x033c: 1920x1440 (+1920), 8 bits

16 Mode 0x034d: 1920x1440 (+3840), 16 bits

17 Mode 0x035c: 1920x1440 (+7680), 24 bits

18 Mode 0x033a: 1600x1200 (+1600), 8 bits

19 Mode 0x034b: 1600x1200 (+3200), 16 bits

20 Mode 0x035a: 1600x1200 (+6400), 24 bits

21 Mode 0x0307: 1280x1024 (+1280), 8 bits

22 Mode 0x031a: 1280x1024 (+2560), 16 bits

23 Mode 0x031b: 1280x1024 (+5120), 24 bits

24 Mode 0x0305: 1024x768 (+1024), 8 bits

25 Mode 0x0317: 1024x768 (+2048), 16 bits

26 Mode 0x0318: 1024x768 (+4096), 24 bits

27 Mode 0x0312: 640x480 (+2560), 24 bits

28 Mode 0x0314: 800x600 (+1600), 16 bits

29 Mode 0x0315: 800x600 (+3200), 24 bits

30 Mode 0x0301: 640x480 (+640), 8 bits

31 Mode 0x0303: 800x600 (+832), 8 bits

32 Mode 0x0311: 640x480 (+1280), 16 bits

33 Mode 0x037d: 0x0 (+0), 8 bits

34 Mode 0x037e: 0x0 (+0), 16 bits

35 Mode 0x037f: 0x0 (+0), 24 bits

36 Config Status: cfg=new, avail=yes, need=no, active=unknown

再次提醒,修改grub配置要小心,改动后要运行 sudo update-grub。

舰队工坊