Ubuntu开机启动加速

日常使用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'软件,删除掉不必要的开启启动软件,只保留必须的,轻装上路跑得快啊。

Startup Applications

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

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

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

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

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

另外,谈到Linux的启动不得不说下 plymouth-quit-wait.serviceapt-daily.service, 其实这两个服务都不影响启动速度,分别参考这2个链接 plymouthapt-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工作的美国工程师,美国工程师用美国典故,没毛病。

移民石图片:

Plymouth rock

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

变动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

最后修改于: Monday, August 28, 2023
欢迎关注微信公众号,留言交流。

相关文章:

翻译: