E4rat

出自 Arch Linux 中文维基

本文內容或本節內容已經過期。

原因: 請提供模板的第一個位置參數以概括原因。 (在Talk:E4rat討論)

這篇文章或章節的翻譯不反映原文。

原因:Last updated in 2012(在 Talk:E4rat# 中討論)

e4rat,「Ext4 - Reducing Access Times」(減少ext4訪問次數)之略,是一款優化ext4文件系統、加速系統啟動的工具。該項目由 Andreas Rid 和 Gundolf Kiefer 發起。e4rat工具系列包含e4rat-collect、e4rat-realloc、e4rat-preload。

目前最新版本是0.21。

機制[編輯 | 編輯原始碼]

如果你用bootchart監視開機過程,會發現CPU和磁碟均未全速運轉。e4rat將改變這一狀況,使系統啟動時CPU和磁碟全速運轉,從而加速啟動過程。此優化包括三步:

  • e4rat-collect - 收集文件,在特定時間(默認120s,可調整)內收集文件信息
  • e4rat-realloc - 文件再分配,在磁碟上整理文件
  • e4rat-preload - 預讀取文件

對誰有效?[編輯 | 編輯原始碼]

經證實,e4rat對一般用戶——直接進入X圖形界面——特別有效,但對於伺服器用戶——啟動到命令行——效果不怎麼明顯。此外,此工具對SSD(固態磁碟)用戶也沒用,因為SSD基本沒有讀取延遲。Ureadahead 可能會有效。

注意: e4rat 官方手冊 聲稱 ureadahead 與 e4rat 衝突,在 Ubuntu 中確實這樣,但是 Arch 中並無衝突,但有 ureadahead 的情況下,速度提升效果有限。

為保險起見,請及時備份數據。

安裝[編輯 | 編輯原始碼]

AUR 安裝軟體包 e4ratAUR.

配置[編輯 | 編輯原始碼]

現在進入正題。

e4rat-collect[編輯 | 編輯原始碼]

首先,e4rat需要收集開機時預讀的文件列表。添加如下內容到/boot/grub/menu.lst(grub)啟動項的linux行末尾,或/boot/grub/grub.cfg(grub2)啟動項的kernel 行:

kernel /vmlinuz0linux root=/dev/disk/by-label/ARCH init=/sbin/e4rat-collect ro 5

)

由於該過程只需進行一次,所以我建議直接在grub命令行修改即可,而不必修改啟動菜單文件。

啟動後,e4rat-collect默認會監視系統120秒。所以請在兩分鐘內打開經常使用的程序,e4rat-collect會記錄下來(譯者註:我不建議預讀太多東西,這樣反而會拖慢開機速度)。可以在/etc/e4rat.conf中修改默認的120秒收集時間(timeout 120這一行,去掉注釋)。或者手動停止e4rat-collect:

e4rat-collect -k

或者:

pkill e4rat-collect

收集完成後,應該會出現這個文件:/var/lib/e4rat/startup.log

最後,不要忘記從/boot/grub/grub.cfg/boot/grub/menu.lst中移除最開始添加的內容。

e4rat-realloc[編輯 | 編輯原始碼]

接著上一步進行文件再分配(通俗說就是磁碟整理)。先切換啟動級別1:

sudo init 1

輸入root密碼,執行:

e4rat-realloc  /var/lib/e4rat/startup.log

根據startup.log中文件的多少,或長或短要等一段時間。

注意: 使用純 systemd 的用戶不需要修改 runlevels,用 root 登錄後執行 e4rat-collect 即可。

e4rat-preload[編輯 | 編輯原始碼]

永久性地,添加如下內容到/boot/grub/grub.cfg(grub)啟動項的linux行末尾,或/boot/grub/menu.lst(grub2)啟動項的kernel行:

init=/sbin/e4rat-preload
注意: 如果你正在使用grub2,內核參數最好添加到/etc/default/grub - GRUB_CMDLINE_LINUX="..."

另一選擇:e4rat-preload-lite[編輯 | 編輯原始碼]

論壇用戶jlindgren提供了一個優化版本的preload程序,也許能幫你節約幾秒的開機時間:

優化之處在於:

  • 啟動/sbin/init前,只預讀前100個文件(inode和文件內容),啟動/sbin/init後再並行地預讀其他文件。

AUR中安裝該工具(譯者注,不要卸載e4rat,該包只提供preload):e4rat-preload-liteAUR[損壞的連結:package not found]

添加(或替換)如下內容到/boot/grub/grub.cfg(grub)啟動項的linux行末尾,或/boot/grub/menu.lst(grub2)啟動項的kernel行:

init=/usr/sbin/e4rat-preload-lite

重啟即可。

其他 init 程序搭配 e4rat[編輯 | 編輯原始碼]

e4rat-collect默認會使用/sbin/init替換自己。如果使用其他init程序(比如 /bin/systemd),修改/etc/e4rat.conf中的init參數,並去掉前面的分號(注釋)即可。

啟動流程圖[編輯 | 編輯原始碼]

通過bootchart繪製使用e4rat前後的啟動流程圖,可以直觀地看到巨大的優化。

bootchart 0.9-9[編輯 | 編輯原始碼]

添加如下內容到grub.cfgmenu.lst的啟動菜單項即可:

init=/sbin/bootchartd bootchart_init=/sbin/e4rat-preload

該版本bootchart會在登錄管理器啟動後停止監視。

bootchart2[編輯 | 編輯原始碼]

添加如下內容到grub.cfgmenu.lst的啟動菜單項:

init=/sbin/bootchartd

然後,手動修改/sbin/bootchartdinit="/sbin/init"這一行為init="/sbin/e4rat-preload。(譯者註:雖然程序說明上說,應該通過添加啟動參數設置init,但我試了,不行。)

/etc/bootchartd.confEXIT_PROC中可以設置哪些程序啟動後停止監視:

EXIT_PROC="kdm_greet xterm konsole gnome-terminal metacity mutter compiz ldm icewm-session enlightenment"

留空的話,需要手動停止監視。

疑難解答[編輯 | 編輯原始碼]

如果出現問題,請參考以下內容。

startup.log 未創建[編輯 | 編輯原始碼]

  • /etc/rc.conf注釋掉auditd
  • 檢查下列命令的輸出:
dmesg | grep e4rat
  • /etc/e4rat.conf設置loglevel31獲取詳細調試信息。

e4rat 錯誤地報告文件系統為 ext2[編輯 | 編輯原始碼]

  • 添加如下內容到/boot/grub/grub.cfg啟動項的linux行末尾,或/boot/grub/menu.lst啟動項的kernel行末尾:
rootfstype=ext4

無法讀取 startup.log[編輯 | 編輯原始碼]

  • 這說明你的/var和根目錄不在同一分區,因而開機時為掛載。可以修改startup.log文件位置(比如{ic|/etc/startup.log}}),方法是修改/etc/e4rat.conf
startup_log_file /etc/e4rat/startup.log

減少啟動時的信息輸出[編輯 | 編輯原始碼]

/etc/e4rat.conf 中將 loglevel 減小到 1。