如何進行 Linux 啟動時間優化

2020-02-11 23:36:00

快速啟動嵌入式裝置或電信裝置,對於時間要求緊迫的應用程式是至關重要的,並且在改善使用者體驗方面也起著非常重要的作用。這個文章給予一些關於如何增強任意裝置的啟動時間的重要技巧。

快速啟動或快速重新啟動在各種情況下起著至關重要的作用。為了保持所有服務的高可用性和更好的效能,嵌入式裝置的快速啟動至關重要。設想有一台執行著沒有啟用快速啟動的 Linux 作業系統的電信裝置,所有依賴於這個特殊嵌入式裝置的系統、服務和使用者可能會受到影響。這些裝置維持其服務的高可用性是非常重要的,為此,快速啟動和重新啟動起著至關重要的作用。

一台電信裝置的一次小故障或關機,即使只是幾秒鐘,都可能會對無數網際網路上的使用者造成破壞。因此,對於很多對時間要求嚴格的裝置和電信裝置來說,在它們的裝置中加入快速啟動的功能以幫助它們快速恢復工作是非常重要的。讓我們從圖 1 中理解 Linux 啟動過程。

圖 1:啟動過程

監視工具和啟動過程

在對機器做出更改之前,使用者應注意許多因素。其中包括計算機的當前啟動速度,以及佔用資源並增加啟動時間的服務、進程或應用程式。

啟動圖

為監視啟動速度和在啟動期間啟動的各種服務,使用者可以使用下面的命令來安裝:

sudo apt-get install pybootchartgui

你每次啟動時,啟動圖會在紀錄檔中儲存一個 png 檔案,使使用者能夠檢視該 png 檔案來理解系統的啟動過程和服務。為此,使用下面的命令:

cd /var/log/bootchart

使用者可能需要一個應用程式來檢視 png 檔案。Feh 是一個面向控制台使用者的 X11 影象檢視器。不像大多數其它的影象檢視器,它沒有一個精緻的圖形化使用者介面,但它只用來顯示圖片。Feh 可以用於檢視 png 檔案。你可以使用下面的命令來安裝它:

sudo apt-get install feh

你可以使用 feh xxxx.png 來檢視 png 檔案。

圖 2:啟動圖

圖 2 顯示了一個正在檢視的引導圖 png 檔案。

systemd-analyze

但是,對於 Ubuntu 15.10 以後的版本不再需要引導圖。為獲取關於啟動速度的簡簡訊息,使用下面的命令:

systemd-analyze

圖 3:systemd-analyze 的輸出

圖表 3 顯示命令 systemd-analyze 的輸出。

命令 systemd-analyze blame 用於根據初始化所用的時間列印所有正在執行的單元的列表。這個資訊是非常有用的,可用於優化啟動時間。systemd-analyze blame 不會顯示服務型別為簡單(Type=simple)的服務,因為 systemd 認為這些服務應是立即啟動的;因此,無法測量初始化的延遲。

圖 4:systemd-analyze blame 的輸出

圖 4 顯示 systemd-analyze blame 的輸出。

下面的命令列印時間關鍵的服務單元的樹形鏈條:

command systemd-analyze critical-chain

圖 5 顯示命令 systemd-analyze critical-chain 的輸出。

圖 5:systemd-analyze critical-chain 的輸出

減少啟動時間的步驟

下面顯示的是一些可以減少啟動時間的各種步驟。

BUM(啟動管理器)

BUM 是一個執行級設定編輯器,允許在系統啟動或重新啟動時設定初始化服務。它顯示了可以在啟動時啟動的每個服務的列表。使用者可以開啟和關閉各個服務。BUM 有一個非常清晰的圖形化使用者介面,並且非常容易使用。

在 Ubuntu 14.04 中,BUM 可以使用下面的命令安裝:

sudo apt-get install bum

為在 15.10 以後的版本中安裝它,從連結 http://apt.ubuntu.com/p/bum 下載軟體包。

以基本的服務開始,禁用掃描器和印表機相關的服務。如果你沒有使用藍牙和其它不想要的裝置和服務,你也可以禁用它們中一些。我強烈建議你在禁用相關的服務前學習服務的基礎知識,因為這可能會影響計算機或作業系統。圖 6 顯示 BUM 的圖形化使用者介面。

圖 6:BUM

編輯 rc 檔案

要編輯 rc 檔案,你需要轉到 rc 目錄。這可以使用下面的命令來做到:

cd /etc/init.d

然而,存取 init.d 需要 root 使用者許可權,該目錄基本上包含的是開始/停止指令碼,這些指令碼用於在系統執行時或啟動期間控制(開始、停止、重新載入、啟動啟動)守護行程。

init.d 目錄中的 rc 檔案被稱為執行控制run control指令碼。在啟動期間,init 執行 rc 指令碼並行揮它的作用。為改善啟動速度,我們可以更改 rc 檔案。使用任意的檔案編輯器開啟 rc 檔案(當你在 init.d 目錄中時)。

例如,通過輸入 vim rc ,你可以更改 CONCURRENCY=noneCONCURRENCY=shell。後者允許某些啟動指令碼同時執行,而不是依序執行。

在最新版本的核心中,該值應該被更改為 CONCURRENCY=make?le

圖 7 和圖 8 顯示編輯 rc 檔案前後的啟動時間比較。可以注意到啟動速度有所提高。在編輯 rc 檔案前的啟動時間是 50.98 秒,然而在對 rc 檔案進行更改後的啟動時間是 23.85 秒。

但是,上面提及的更改方法在 Ubuntu 15.10 以後的作業系統上不工作,因為使用最新核心的作業系統使用 systemd 檔案,而不再是 init.d 檔案。

圖 7:對 rc 文件進行更改之前的啟動速度

圖 8:對 rc 文件進行更改之後的啟動速度

E4rat

E4rat 代表 e4 減少存取時間reduced access time(僅在 ext4 檔案系統的情況下)。它是由 Andreas Rid 和 Gundolf Kiefer 開發的一個專案。E4rat 是一個通過碎片整理來幫助快速啟動的應用程式。它還會加速應用程式的啟動。E4rat 使用物理檔案的重新分配來消除尋道時間和旋轉延遲,因而達到較高的磁碟傳輸速度。

E4rat 可以 .deb 軟體包形式獲得,你可以從它的官方網站 http://e4rat.sourceforge.net/ 下載。

Ubuntu 預設安裝的 ureadahead 軟體包與 e4rat 衝突。因此必須使用下面的命令安裝這幾個軟體包:

sudo dpkg purge ureadahead ubuntu-minimal

現在使用下面的命令來安裝 e4rat 的依賴關係:

sudo apt-get install libblkid1 e2fslibs

開啟下載的 .deb 檔案,並安裝它。現在需要恰當地收集啟動資料來使 e4rat 工作。

遵循下面所給的步驟來使 e4rat 正確地執行並提高啟動速度。

  • 在啟動期間存取 Grub 選單。這可以在系統啟動時通過按住 shift 按鍵來完成。
  • 選擇通常用於啟動的選項(核心版本),並按 e
  • 查詢以 linux /boot/vmlinuz 開頭的行,並在該行的末尾新增下面的程式碼(在句子的最後一個字母後按空格鍵):init=/sbin/e4rat-collect or try - quiet splash vt.handsoff =7 init=/sbin/e4rat-collect
  • 現在,按 Ctrl+x 來繼續啟動。這可以讓 e4rat 在啟動後收集資料。在這台機器上工作,並在接下來的兩分鐘時間內開啟並關閉應用程式。
  • 通過轉到 e4rat 資料夾,並使用下面的命令來存取紀錄檔檔案:cd /var/log/e4rat
  • 如果你沒有找到任何紀錄檔檔案,重複上面的過程。一旦紀錄檔檔案就緒,再次存取 Grub 選單,並對你的選項按 e
  • 在你之前已經編輯過的同一行的末尾輸入 single。這可以讓你存取命令列。如果出現其它選單,選擇恢復正常啟動(Resume normal boot)。如果你不知為何不能進入命令提示字元,按 Ctrl+Alt+F1 組合鍵。
  • 在你看到登入提示後,輸入你的登入資訊。
  • 現在輸入下面的命令:sudo e4rat-realloc /var/lib/e4rat/startup.log。此過程需要一段時間,具體取決於機器的磁碟速度。
  • 現在使用下面的命令來重新啟動你的機器:sudo shutdown -r now
  • 現在,我們需要設定 Grub 來在每次啟動時執行 e4rat。
  • 使用任意的編輯器存取 grub 檔案。例如,gksu gedit /etc/default/grub
  • 查詢以 GRUB CMDLINE LINUX DEFAULT= 開頭的一行,並在引號之間和任何選項之前新增下面的行:init=/sbin/e4rat-preload 18
  • 它應該看起來像這樣:GRUB CMDLINE LINUX DEFAULT = init=/sbin/e4rat- preload quiet splash
  • 儲存並關閉 Grub 選單,並使用 sudo update-grub 更新 Grub 。
  • 重新啟動系統,你將發現啟動速度有明顯變化。

圖 9 和圖 10 顯示在安裝 e4rat 前後的啟動時間之間的差異。可注意到啟動速度的提高。在使用 e4rat 前啟動所用時間是 22.32 秒,然而在使用 e4rat 後啟動所用時間是 9.065 秒。

圖 9:使用 e4rat 之前的啟動速度

圖 10:使用 e4rat 之後的啟動速度

一些易做的調整

使用很小的調整也可以達到良好的啟動速度,下面列出其中兩個。

SSD

使用固態裝置而不是普通的硬碟或者其它的儲存裝置將肯定會改善啟動速度。SSD 也有助於加快檔案傳輸和執行應用程式方面的速度。

禁用圖形化使用者介面

圖形化使用者介面、桌面圖形和視窗動畫佔用大量的資源。禁用圖形化使用者介面是獲得良好的啟動速度的另一個好方法。