實(shí)踐 | 如何進(jìn)行Linux啟動(dòng)時(shí)間優(yōu)化
快速啟動(dòng)嵌入式設(shè)備或電信設(shè)備,對(duì)于時(shí)間要求緊迫的應(yīng)用程序是至關(guān)重要的,并且在改善用戶體驗(yàn)方面也起著非常重要的作用。這個(gè)文章給予一些關(guān)于如何增強(qiáng)任意設(shè)備的啟動(dòng)時(shí)間的重要技巧。
快速啟動(dòng)或快速重啟在各種情況下起著至關(guān)重要的作用。為了保持所有服務(wù)的高可用性和更好的性能,嵌入式設(shè)備的快速啟動(dòng)至關(guān)重要。設(shè)想有一臺(tái)運(yùn)行著沒(méi)有啟用快速啟動(dòng)的 Linux 操作系統(tǒng)的電信設(shè)備,所有依賴于這個(gè)特殊嵌入式設(shè)備的系統(tǒng)、服務(wù)和用戶可能會(huì)受到影響。這些設(shè)備維持其服務(wù)的高可用性是非常重要的,為此,快速啟動(dòng)和重啟起著至關(guān)重要的作用。
一臺(tái)電信設(shè)備的一次小故障或關(guān)機(jī),即使只是幾秒鐘,都可能會(huì)對(duì)無(wú)數(shù)互聯(lián)網(wǎng)上的用戶造成破壞。因此,對(duì)于很多對(duì)時(shí)間要求嚴(yán)格的設(shè)備和電信設(shè)備來(lái)說(shuō),在它們的設(shè)備中加入快速啟動(dòng)的功能以幫助它們快速恢復(fù)工作是非常重要的。讓我們從圖 1 中理解 Linux 啟動(dòng)過(guò)程。
圖 1:?jiǎn)?dòng)過(guò)程
監(jiān)視工具和啟動(dòng)過(guò)程
在對(duì)機(jī)器做出更改之前,用戶應(yīng)注意許多因素。其中包括計(jì)算機(jī)的當(dāng)前啟動(dòng)速度,以及占用資源并增加啟動(dòng)時(shí)間的服務(wù)、進(jìn)程或應(yīng)用程序。
啟動(dòng)圖
為監(jiān)視啟動(dòng)速度和在啟動(dòng)期間啟動(dòng)的各種服務(wù),用戶可以使用下面的命令來(lái)安裝:
sudo apt-get install pybootchartgui
你每次啟動(dòng)時(shí),啟動(dòng)圖會(huì)在日志中保存一個(gè) png 文件,使用戶能夠查看該 png 文件來(lái)理解系統(tǒng)的啟動(dòng)過(guò)程和服務(wù)。為此,使用下面的命令:
cd /var/log/bootchart
用戶可能需要一個(gè)應(yīng)用程序來(lái)查看 png 文件。Feh 是一個(gè)面向控制臺(tái)用戶的 X11 圖像查看器。不像大多數(shù)其它的圖像查看器,它沒(méi)有一個(gè)精致的圖形用戶界面,但它只用來(lái)顯示圖片。Feh 可以用于查看 png 文件。你可以使用下面的命令來(lái)安裝它:
sudo apt-get install feh
你可以使用 feh xxxx.png
來(lái)查看 png 文件。
圖 2:?jiǎn)?dòng)圖
圖 2 顯示了一個(gè)正在查看的引導(dǎo)圖 png 文件。
systemd-analyze
但是,對(duì)于 Ubuntu 15.10 以后的版本不再需要引導(dǎo)圖。為獲取關(guān)于啟動(dòng)速度的簡(jiǎn)短信息,使用下面的命令:
systemd-analyze
圖 3:systemd-analyze 的輸出
圖表 3 顯示命令 systemd-analyze
的輸出。
命令 systemd-analyze blame
用于根據(jù)初始化所用的時(shí)間打印所有正在運(yùn)行的單元的列表。這個(gè)信息是非常有用的,可用于優(yōu)化啟動(dòng)時(shí)間。systemd-analyze blame
不會(huì)顯示服務(wù)類型為簡(jiǎn)單(Type=simple
)的服務(wù),因?yàn)?systemd 認(rèn)為這些服務(wù)應(yīng)是立即啟動(dòng)的;因此,無(wú)法測(cè)量初始化的延遲。
圖 4:systemd-analyze blame 的輸出
圖 4 顯示 systemd-analyze blame
的輸出。
下面的命令打印時(shí)間關(guān)鍵的服務(wù)單元的樹(shù)形鏈條:
command systemd-analyze critical-chain
圖 5 顯示命令 systemd-analyze critical-chain
的輸出。
圖 5:systemd-analyze critical-chain 的輸出
減少啟動(dòng)時(shí)間的步驟
下面顯示的是一些可以減少啟動(dòng)時(shí)間的各種步驟。
BUM(啟動(dòng)管理器)
BUM 是一個(gè)運(yùn)行級(jí)配置編輯器,允許在系統(tǒng)啟動(dòng)或重啟時(shí)配置初始化服務(wù)。它顯示了可以在啟動(dòng)時(shí)啟動(dòng)的每個(gè)服務(wù)的列表。用戶可以打開(kāi)和關(guān)閉各個(gè)服務(wù)。BUM 有一個(gè)非常清晰的圖形用戶界面,并且非常容易使用。
在 Ubuntu 14.04 中,BUM 可以使用下面的命令安裝:
sudo apt-get install bum
為在 15.10 以后的版本中安裝它,從鏈接 http://apt.ubuntu.com/p/bum 下載軟件包。
以基本的服務(wù)開(kāi)始,禁用掃描儀和打印機(jī)相關(guān)的服務(wù)。如果你沒(méi)有使用藍(lán)牙和其它不想要的設(shè)備和服務(wù),你也可以禁用它們中一些。我強(qiáng)烈建議你在禁用相關(guān)的服務(wù)前學(xué)習(xí)服務(wù)的基礎(chǔ)知識(shí),因?yàn)檫@可能會(huì)影響計(jì)算機(jī)或操作系統(tǒng)。圖 6 顯示 BUM 的圖形用戶界面。
圖 6:BUM
編輯 rc 文件
要編輯 rc 文件,你需要轉(zhuǎn)到 rc 目錄。這可以使用下面的命令來(lái)做到:
cd /etc/init.d
然而,訪問(wèn) init.d
需要 root 用戶權(quán)限,該目錄基本上包含的是開(kāi)始/停止腳本,這些腳本用于在系統(tǒng)運(yùn)行時(shí)或啟動(dòng)期間控制(開(kāi)始、停止、重新加載、啟動(dòng)啟動(dòng))守護(hù)進(jìn)程。
在 init.d
目錄中的 rc
文件被稱為運(yùn)行控制腳本。在啟動(dòng)期間,init
執(zhí)行 rc
腳本并發(fā)揮它的作用。為改善啟動(dòng)速度,我們可以更改 rc
文件。使用任意的文件編輯器打開(kāi) rc
文件(當(dāng)你在 init.d
目錄中時(shí))。
例如,通過(guò)輸入 vim rc
,你可以更改 CONCURRENCY=none
為 CONCURRENCY=shell
。后者允許某些啟動(dòng)腳本同時(shí)執(zhí)行,而不是依序執(zhí)行。
在最新版本的內(nèi)核中,該值應(yīng)該被更改為 CONCURRENCY=makefile
。
圖 7 和圖 8 顯示編輯 rc
文件前后的啟動(dòng)時(shí)間比較??梢宰⒁獾絾?dòng)速度有所提高。在編輯 rc
文件前的啟動(dòng)時(shí)間是 50.98 秒,然而在對(duì) rc
文件進(jìn)行更改后的啟動(dòng)時(shí)間是 23.85 秒。
但是,上面提及的更改方法在 Ubuntu 15.10 以后的操作系統(tǒng)上不工作,因?yàn)槭褂米钚聝?nèi)核的操作系統(tǒng)使用 systemd 文件,而不再是 init.d
文件。
圖 7:對(duì) rc 文件進(jìn)行更改之前的啟動(dòng)速度
圖 8:對(duì) rc 文件進(jìn)行更改之后的啟動(dòng)速度
E4rat
E4rat 代表 e4 減少訪問(wèn)時(shí)間(僅在 ext4 文件系統(tǒng)的情況下)。它是由 Andreas Rid 和 Gundolf Kiefer 開(kāi)發(fā)的一個(gè)項(xiàng)目。E4rat 是一個(gè)通過(guò)碎片整理來(lái)幫助快速啟動(dòng)的應(yīng)用程序。它還會(huì)加速應(yīng)用程序的啟動(dòng)。E4rat 使用物理文件的重新分配來(lái)消除尋道時(shí)間和旋轉(zhuǎn)延遲,因而達(dá)到較高的磁盤傳輸速度。
E4rat 可以 .deb 軟件包形式獲得,你可以從它的官方網(wǎng)站 http://e4rat.sourceforge.net/ 下載。
Ubuntu 默認(rèn)安裝的 ureadahead 軟件包與 e4rat 沖突。因此必須使用下面的命令安裝這幾個(gè)軟件包:
sudo dpkg purge ureadahead ubuntu-minimal
現(xiàn)在使用下面的命令來(lái)安裝 e4rat 的依賴關(guān)系:
sudo apt-get install libblkid1 e2fslibs
打開(kāi)下載的 .deb 文件,并安裝它?,F(xiàn)在需要恰當(dāng)?shù)厥占瘑?dòng)數(shù)據(jù)來(lái)使 e4rat 工作。
遵循下面所給的步驟來(lái)使 e4rat 正確地運(yùn)行并提高啟動(dòng)速度。
- 在啟動(dòng)期間訪問(wèn) Grub 菜單。這可以在系統(tǒng)啟動(dòng)時(shí)通過(guò)按住
shift
按鍵來(lái)完成。 - 選擇通常用于啟動(dòng)的選項(xiàng)(內(nèi)核版本),并按
e
。 - 查找以
linux /boot/vmlinuz
開(kāi)頭的行,并在該行的末尾添加下面的代碼(在句子的最后一個(gè)字母后按空格鍵):init=/sbin/e4rat-collect or try - quiet splash vt.handsoff =7 init=/sbin/e4rat-collect
。 - 現(xiàn)在,按
Ctrl+x
來(lái)繼續(xù)啟動(dòng)。這可以讓 e4rat 在啟動(dòng)后收集數(shù)據(jù)。在這臺(tái)機(jī)器上工作,并在接下來(lái)的兩分鐘時(shí)間內(nèi)打開(kāi)并關(guān)閉應(yīng)用程序。 - 通過(guò)轉(zhuǎn)到 e4rat 文件夾,并使用下面的命令來(lái)訪問(wèn)日志文件:
cd /var/log/e4rat
。 - 如果你沒(méi)有找到任何日志文件,重復(fù)上面的過(guò)程。一旦日志文件就緒,再次訪問(wèn) Grub 菜單,并對(duì)你的選項(xiàng)按
e
。 - 在你之前已經(jīng)編輯過(guò)的同一行的末尾輸入
single
。這可以讓你訪問(wèn)命令行。如果出現(xiàn)其它菜單,選擇恢復(fù)正常啟動(dòng)(Resume normal boot)。如果你不知為何不能進(jìn)入命令提示符,按Ctrl+Alt+F1
組合鍵。 - 在你看到登錄提示后,輸入你的登錄信息。
- 現(xiàn)在輸入下面的命令:
sudo e4rat-realloc /var/lib/e4rat/startup.log
。此過(guò)程需要一段時(shí)間,具體取決于機(jī)器的磁盤速度。 - 現(xiàn)在使用下面的命令來(lái)重啟你的機(jī)器:
sudo shutdown -r now
。 - 現(xiàn)在,我們需要配置 Grub 來(lái)在每次啟動(dòng)時(shí)運(yùn)行 e4rat。
- 使用任意的編輯器訪問(wèn) grub 文件。例如,
gksu gedit /etc/default/grub
。 - 查找以
GRUB CMDLINE LINUX DEFAULT=
開(kāi)頭的一行,并在引號(hào)之間和任何選項(xiàng)之前添加下面的行:init=/sbin/e4rat-preload 18
。 - 它應(yīng)該看起來(lái)像這樣:
GRUB CMDLINE LINUX DEFAULT = init=/sbin/e4rat- preload quiet splash
。 - 保存并關(guān)閉 Grub 菜單,并使用
sudo update-grub
更新 Grub 。 - 重啟系統(tǒng),你將發(fā)現(xiàn)啟動(dòng)速度有明顯變化。
圖 9 和圖 10 顯示在安裝 e4rat 前后的啟動(dòng)時(shí)間之間的差異。可注意到啟動(dòng)速度的提高。在使用 e4rat 前啟動(dòng)所用時(shí)間是 22.32 秒,然而在使用 e4rat 后啟動(dòng)所用時(shí)間是 9.065 秒。
圖 9:使用 e4rat 之前的啟動(dòng)速度
圖 10:使用 e4rat 之后的啟動(dòng)速度
一些易做的調(diào)整
使用很小的調(diào)整也可以達(dá)到良好的啟動(dòng)速度,下面列出其中兩個(gè)。
SSD
使用固態(tài)設(shè)備而不是普通的硬盤或者其它的存儲(chǔ)設(shè)備將肯定會(huì)改善啟動(dòng)速度。SSD 也有助于加快文件傳輸和運(yùn)行應(yīng)用程序方面的速度。
禁用圖形用戶界面
圖形用戶界面、桌面圖形和窗口動(dòng)畫(huà)占用大量的資源。禁用圖形用戶界面是獲得良好的啟動(dòng)速度的另一個(gè)好方法。