Difference between revisions of "E4rat (简体中文)"

From ArchWiki
Jump to navigation Jump to search
(update Pkg/AUR templates (https://github.com/lahwaacz/wiki-scripts/blob/master/update-package-templates.py))
 
(26 intermediate revisions by 5 users not shown)
Line 1: Line 1:
 
[[Category:Boot process (简体中文)]]
 
[[Category:Boot process (简体中文)]]
{{i18n|e4rat}}
+
[[en:E4rat]]
 +
[[es:E4rat]]
 +
[[it:E4rat]]
 +
[[ja:E4rat]]
 +
[[ru:E4rat]]
 +
{{Related articles start (简体中文)}}
 +
{{Related|Improve Boot Performance (简体中文)}}
 +
{{Related|Preload}}
 +
{{Related|Ext4 (简体中文)}}
 +
{{Related articles end}}
 +
{{TranslationStatus (简体中文)|E4rat|2012-07-11|212533}}
 +
[http://e4rat.sourceforge.net/ e4rat],“Ext4 - Reducing Access Times”(减少ext4访问次数)之略,是一款优化[[Ext4 (简体中文)|ext4]]文件系统、加速系统启动的工具。该项目由 Andreas Rid 和 Gundolf Kiefer 发起。[http://e4rat.sourceforge.net/ e4rat工具系列]包含e4rat-collect、e4rat-realloc、e4rat-preload。
  
{{Article summary start}}
+
目前最新版本是0.21。
{{Article summary text|How to drastically reduce boot and log-into-X time for ext4 file systems using [http://e4rat.sourceforge.net/ the e4rat range of tools].}}
 
{{Article summary heading|相关}}
 
{{Article summary wiki|Improve Boot Performance}}
 
{{Article summary wiki|Preload}}
 
{{Article summary wiki|Readahead}}
 
{{Article summary wiki|Ext4}}
 
{{Article summary heading|论坛讨论相关}}
 
{{Article summary link|Main discussion|https://bbs.archlinux.org/viewtopic.php?id=115976}}
 
{{Article summary link|Improved e4rat-preload|https://bbs.archlinux.org/viewtopic.php?id=117776}}
 
{{Article summary end}}
 
  
e4rat(ext4 reduced access time'的简写)是一款将 Ext4 文件系统上文件块优化排序以加快系统和应用程序启动速度的程序。
+
==机制==
项目主持人:Andreas Rid 和Gundolf Kiefer
+
如果你用[[Bootchart (简体中文)|bootchart]]监视开机过程,会发现CPU和磁盘均未全速运转。e4rat将改变这一状况,使系统启动时CPU和磁盘全速运转,从而加速启动过程。此优化包括三步:
The [http://e4rat.sourceforge.net/ the e4rat range of tools] are comprised of e4rat-collect, e4rat-realloc and e4rat-preload.
+
* '''e4rat-collect''' - 收集文件,在特定时间(默认120s,可调整)内收集文件信息
 
+
* '''e4rat-realloc''' - 文件再分配,在磁盘上整理文件
目前版本为 0.2.1
+
* '''e4rat-preload''' - 预读取文件
 
 
==步骤==
 
If you look at a classical [[bootchart]] you will notice that neither disk nor CPU are utilized fully during the boot process. e4rat changes this to make full use of both disk and CPU during boot process and thus reduce boot time drastically. It consists of three stages:
 
* '''e4rat-collect''' - collect files for a specified time (default 120 seconds but this can be adjusted)
 
* '''e4rat-realloc''' - reallocate files
 
* '''e4rat-preload''' - preload them
 
  
 
===对谁有效?===
 
===对谁有效?===
  
e4rat has proven to be extremely effective for typical single user set-ups which boot straight into X, perhaps even with a number of programs open. If you have a server set-up and boot only into the CLI your boot time decrease may not be as drastic. SSD drives do not benefit because there are no moving parts and thus (almost) no disk latency.
+
经证实,e4rat对一般用户——直接进入X图形界面——特别有效,但对于服务器用户——启动到命令行——效果不怎么明显。此外,此工具对SSD(固态磁盘)用户也没用,因为SSD基本没有读取延迟。[[Ureadahead]] 可能会有效。
  
The following might have been valid for version 0.20. We are now at version 0.21 - please report findings for the latest version.
+
{{Note|[http://e4rat.sourceforge.net/wiki/index.php/Main_Page#Ubuntu_and_ureadahead e4rat 官方手册] 声称 ureadahead 与 e4rat 冲突,在 Ubuntu 中确实这样,但是 Arch 中并无冲突,但有 ureadahead 的情况下,速度提升效果有限。}}
  
Caveat emptor: '''the current version of e4rat (0.20) will severely damage any partition that has been converted to ext4'''. This is likely because existing files are not converted to use extents, and e4rat has no built-in mechanism to detect this condition. Before using e4rat you should backup the affected partitions, reformat them as ext4 and then restore the backups. Given the current status and the nature of the program, it's a smart move to backup the system before attempting reallocation anyway.
+
为保险起见,请及时备份数据。
  
 
==安装==
 
==安装==
The {{Pkg|e4rat}} package can be found in the [community] repository:
+
[[pacman (简体中文)|安装]]位于[[Official repositories (简体中文)|官方软件仓库]]的 {{AUR|e4rat}}.
$ pacman -S e4rat
+
 
 +
==配置==
 +
现在进入正题。
  
==让其起作用==
 
Now for the nitty-gritty:
 
 
===e4rat-collect===
 
===e4rat-collect===
To have e4rat collect a list of files you will need to append the following to your linux line in your '''/boot/grub/menu.lst''' (grub legacy) or '''/boot/grub/grub.cfg''' (grub2) file:
+
首先,e4rat需要收集开机时预读的文件列表。添加如下内容到{{ic|/boot/grub/menu.lst}}(grub)启动项的{{ic|linux}}行末尾,或{{ic|/boot/grub/grub.cfg}}(grub2)启动项的{{ic|kernel}} 行:
 +
{{bc|1=kernel /vmlinuz0linux root=/dev/disk/by-label/ARCH init=/sbin/e4rat-collect ro 5}})
  
<pre>init=/sbin/e4rat-collect</pre>
+
由于该过程只需进行一次,所以我建议直接在grub命令行修改即可,而不必修改启动菜单文件。
  
This will only have to be done once so you may prefer to append this command on the grub command line itself.
+
启动后,e4rat-collect默认会监视系统120秒。所以请在两分钟内打开经常使用的程序,e4rat-collect会记录下来(译者注:我不建议预读太多东西,这样反而会拖慢开机速度)。可以在{{ic|/etc/e4rat.conf}}中修改默认的120秒收集时间({{ic|timeout 120}}这一行,去掉注释)。或者手动停止e4rat-collect:
 +
e4rat-collect -k
 +
或者:
 +
pkill e4rat-collect
  
Upon booting e4rat-collect will watch your system for a default of 120 seconds. So if you boot, log into X, open your favourite browser and email client all within 2 minutes, every one of those activities is logged. To change the default of 120 seconds edit '''/etc/e4rat.conf'''. To manually stop e4rat-collect type:
+
收集完成后,应该会出现这个文件:{{ic|/var/lib/e4rat/startup.log}}
  
<pre>e4rat-collect -k</pre>or<pre>pkill e4rat-collect</pre>
+
最后,不要忘记从{{ic|/boot/grub/grub.cfg}}或{{ic|/boot/grub/menu.lst}}中移除最开始添加的内容。
  
Upon successful boot and after having waited the allotted time you should see the following file: '''/var/lib/e4rat/startup.log'''
+
===e4rat-realloc===
 +
接着上一步进行文件再分配(通俗说就是磁盘整理)。先切换启动级别1:
 +
sudo init 1
 +
输入root密码,执行:
 +
e4rat-realloc  /var/lib/e4rat/startup.log
 +
根据{{ic|startup.log}}中文件的多少,或长或短要等一段时间。
  
Do not forget to remove the e4rat-collect command from your '''menu.lst''' or '''grub.cfg''' file (not necessary if you inserted it on the grub command line).
+
{{note|使用纯 [[systemd]] 的用户不需要修改 [[runlevels]],用 root 登陆后执行 ''e4rat-collect'' 即可。}}
  
===e4rat-realloc===
 
For the reallocation process change to init 1
 
<pre>sudo init 1</pre>
 
Log in as root and run:
 
<pre>e4rat-realloc  /var/lib/e4rat/startup.log</pre>
 
This can take a while depending on how many files you have your startup.log file.
 
 
===e4rat-preload===
 
===e4rat-preload===
Append the following permanently to your kernel line in your '''/boot/grub/menu.lst''' (grub legacy) or '''/boot/grub/grub.cfg''' (grub2) file:
+
永久性地,添加如下内容到{{ic|/boot/grub/grub.cfg}}(grub)启动项的{{ic|linux}}行末尾,或{{ic|/boot/grub/menu.lst}}(grub2)启动项的{{ic|kernel}}行:
 +
init=/sbin/e4rat-preload
 +
{{Note|1=如果你正在使用grub2,内核参数最好添加到{{Ic|/etc/default/grub}} - {{Ic|1=GRUB_CMDLINE_LINUX="..."}}}}
  
<pre>init=/sbin/e4rat-preload</pre>
+
===另一选择:e4rat-preload-lite===
  
===Alternative: e4rat-preload-lite===
+
论坛用户[https://bbs.archlinux.org/viewtopic.php?id=117776&p=1 jlindgren]提供了一个优化版本的preload程序,也许能帮你节约几秒的开机时间:
An alternative preload binairy has been developed by [https://bbs.archlinux.org/viewtopic.php?id=117776&p=1 jlindgren], it shaves a few extra seconds from your boot time.
 
  
The savings come from
+
优化之处在于:
* using pure C with no external library dependencies, which drops the number of linked .so files from 22 to 3, and
+
* 启动{{ic|/sbin/init}}前,只预读前100个文件(inode和文件内容),启动{{ic|/sbin/init}}后再并行地预读其他文件。
* preloading only the first 100 files (both inodes and file contents) before starting /sbin/init, then continuing to load the remaining files in parallel with the normal boot sequence.
 
  
You can install {{AUR|e4rat-preload-lite}} from the [[AUR]].
+
从[[AUR (简体中文)|AUR]]中安装该工具(译者注,不要卸载e4rat,该包只提供preload):{{AUR|e4rat-preload-lite}}{{Broken package link|{{aur-mirror|e4rat-preload-lite}}}}
  
Append (or replace) the following permanently to your kernel line in your '''/boot/grub/menu.lst''' (grub legacy) or '''/boot/grub/grub.cfg''' (grub2) file:
+
添加(或替换)如下内容到{{ic|/boot/grub/grub.cfg}}(grub)启动项的{{ic|linux}}行末尾,或{{ic|/boot/grub/menu.lst}}(grub2)启动项的{{ic|kernel}}行:
 +
init=/usr/sbin/e4rat-preload-lite
  
<pre>init=/usr/sbin/e4rat-preload-lite</pre>
+
重启即可。
  
Reboot and enjoy.
+
==其他 init 程序搭配 e4rat==
 +
e4rat-collect默认会使用{{ic|/sbin/init}}替换自己。如果使用其他init程序(比如 {{ic|/bin/systemd}}),修改{{ic|/etc/e4rat.conf}}中的{{ic|init}}参数,并去掉前面的分号(注释)即可。
  
==e4rat with different init system==
+
==启动流程图==
e4rat-collect defaults to replacing itself with /sbin/init upon completion. If you need to specify another PID 1, such as /bin/systemd, you can change this in /etc/e4rat.conf by setting the '''init''' parameter and uncommenting the line.
 
  
==启动监视图==
+
通过[[Bootchart (简体中文)|bootchart]]绘制使用e4rat前后的启动流程图,可以直观地看到巨大的优化。
 
 
<b>Note: 此部分尚开发中,欢迎提建议</b>
 
 
 
You will see a noticeable improvement but nothing can beat a nice [[Bootchart]]. Have it run before and after e4rat installation and gawk at the difference.
 
  
 
===bootchart 0.9-9===
 
===bootchart 0.9-9===
  
This version automatically stops logging as soon as ?dm comes up. Supposedly the following overrides that and continues logging but it doesn't work for me:
+
添加如下内容到{{ic|grub.cfg}}或{{ic|menu.lst}}的启动菜单项即可:
 +
init=/sbin/bootchartd bootchart_init=/sbin/e4rat-preload
  
To continue logging adjust your '''/etc/bootchartd.conf''' as follows:
+
该版本bootchart会在[[Display manager (简体中文)|登陆管理器]]启动后停止监视。
 
 
<pre>AUTO_STOP_LOGGER="no"</pre>
 
 
 
To stop it manually type:
 
 
 
<pre>~# bootchartd stop</pre>
 
 
 
To run both e4rat-preload and bootchart append the following to your grub kernel line:
 
 
 
<pre>init=/sbin/bootchartd bootchart_init=/sbin/e4rat-preload</pre>
 
  
 
===bootchart2===
 
===bootchart2===
  
To get bootchart2 working together with e4rat edit '''/sbin/bootchartd''' and replace the line init="/sbin/init" with "init="/sbin/e4rat-preload".
+
添加如下内容到{{ic|grub.cfg}}或{{ic|menu.lst}}的启动菜单项:
 +
init=/sbin/bootchartd
  
'''/etc/bootchartd.conf''' of bootchart2 is set up differently and the line
+
然后,手动修改{{ic|/sbin/bootchartd}}的{{ic|<nowiki>init="/sbin/init"</nowiki>}}这一行为{{ic|<nowiki>init="/sbin/e4rat-preload</nowiki>}}。(译者注:虽然程序说明上说,应该通过添加启动参数设置init,但我试了,不行。)
  
 +
{{ic|/etc/bootchartd.conf}}的{{ic|EXIT_PROC}}中可以设置哪些程序启动后停止监视:
 
  EXIT_PROC="kdm_greet xterm konsole gnome-terminal metacity mutter compiz ldm icewm-session enlightenment"
 
  EXIT_PROC="kdm_greet xterm konsole gnome-terminal metacity mutter compiz ldm icewm-session enlightenment"
  
can be adjusted or left empty for logging to be stopped manually rather than at a predetermined programme start.
+
留空的话,需要手动停止监视。
  
==常见问题==
+
==疑难解答==
  
If things do not work you may want to try the following.
+
如果出现问题,请参考以下内容。
  
===没有创建startup.log===
+
===startup.log 未创建===
  
*comment out auditd from your '''rc.conf'''
+
*在{{ic|/etc/rc.conf}}注释掉{{ic|auditd}}。
*check the following for any hints
+
*检查下列命令的输出:
 
  dmesg | grep e4rat
 
  dmesg | grep e4rat
*try to increase verbosity and loglevel to 31 in your '''e4rat.conf'''
+
*在{{ic|/etc/e4rat.conf}}设置{{ic|loglevel}}为{{ic|31}}获取详细调试信息。
  
===e4rat erroneously reports an ext2 files system===
+
===e4rat 错误地报告文件系统为 ext2===
  
*add the following to the kernel line in your '''grub.cfg''' or '''menu.lst'''
+
*添加如下内容到{{ic|/boot/grub/grub.cfg}}启动项的{{ic|linux}}行末尾,或{{ic|/boot/grub/menu.lst}}启动项的{{ic|kernel}}行末尾:
 
  rootfstype=ext4
 
  rootfstype=ext4
  
===无法对/var/lib/e4rat/startup.log进行操作===
+
===无法读取 startup.log===
 +
 
 +
*这说明你的{{ic|/var}}和根目录不在同一分区,因而开机时为挂载。可以修改{{ic|startup.log}}文件位置(比如{ic|/etc/startup.log}}),方法是修改{{ic|/etc/e4rat.conf}}:
 +
startup_log_file /etc/e4rat/startup.log
  
*this suggests that you have /var on a separate partition which is not yet mounted during boot. You need move your '''startup.log''' to an accessible partition (/etc/e4rat/ is just fine) and adjust your '''/etc/e4rat.conf''' to reflect this change:
+
===减少启动时的信息输出===
<pre>startup_log_file /etc/e4rat/startup.log</pre>
+
 +
在 {{ic|/etc/e4rat.conf}} 中将 {{ic|loglevel}} 减小到 1。

Latest revision as of 10:25, 20 August 2015

翻译状态: 本文是英文页面 E4rat翻译,最后翻译时间:2012-07-11,点击这里可以查看翻译后英文页面的改动。

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 可能会有效。

Note: e4rat 官方手册 声称 ureadahead 与 e4rat 冲突,在 Ubuntu 中确实这样,但是 Arch 中并无冲突,但有 ureadahead 的情况下,速度提升效果有限。

为保险起见,请及时备份数据。

安装

安装位于官方软件仓库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中文件的多少,或长或短要等一段时间。

Note: 使用纯 systemd 的用户不需要修改 runlevels,用 root 登陆后执行 e4rat-collect 即可。

e4rat-preload

永久性地,添加如下内容到/boot/grub/grub.cfg(grub)启动项的linux行末尾,或/boot/grub/menu.lst(grub2)启动项的kernel行:

init=/sbin/e4rat-preload
Note: 如果你正在使用grub2,内核参数最好添加到/etc/default/grub - GRUB_CMDLINE_LINUX="..."

另一选择:e4rat-preload-lite

论坛用户jlindgren提供了一个优化版本的preload程序,也许能帮你节约几秒的开机时间:

优化之处在于:

  • 启动/sbin/init前,只预读前100个文件(inode和文件内容),启动/sbin/init后再并行地预读其他文件。

AUR中安装该工具(译者注,不要卸载e4rat,该包只提供preload):e4rat-preload-liteAUR[broken link: archived in aur-mirror]

添加(或替换)如下内容到/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。