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

相關文章:

翻譯: