# E4rat (日本語)

関連記事

- ブートパフォーマンスの向上
- Preload
- Ureadahead
- Ext4

e4rat は e4 'reduced access time' (ext4 ファイルシステムのみ) の略語で、Andreas Rid と Gundolf Kiefer によるプロジェクトです。e4rat range of tools は e4rat-collect, e4rat-realloc, e4rat-preload から成り立っています。

現在のバージョンは 0.2.3 です。

## プロセス

古典的な bootchart を見ると、ブートプロセスの間にディスクも CPU も完全には使われていないことに気づくかもしれません。e4rat はブートプロセスでディスクと CPU をフルに使うようにして、起動時間を劇的に縮めます。3つの段階に分かれています:

- e4rat-collect - 特定時間ファイルを収集します (デフォルトは120秒ですが変更することも可能です)
- e4rat-realloc - ファイルを再配置します
- e4rat-preload - ファイルをプリロードします

### 利益を得る人、得ない人

X を起動して、多数のプログラムを開くような、典型的なシングルユーザーセットアップで e4rat は大変効果があることが証明されています。サーバーセットアップで CLI で起動するような場合、起動時間の短縮はあまり効果があらわれないでしょう。SSD ドライブを使っている場合も利益はあまりありません、可動部がないためディスクの遅延が（ほとんど）ないためです - Ureadahead はチェックする価値があるかもしれません。

Note: (ureadahead のユーザーへ) e4rat の公式マニュアル には ureadahead が e4rat と衝突すると書かれています。この記述は Ubuntu では正しいですが、Arch Linux では e4rat と ureadahead を一緒に使っても問題なく動作します。ただし起動時間はあまり短縮されません。

備えあれば憂いなし。パーティションに入っているデータを消失したくないのならばバックアップを取っておきましょう。

## インストール

AUR から e4rat をインストールしてください。

Note: ビルドするために、最初に `staticlibs` オプションを明示的に有効にして audit を ABS からリビルドする必要があります。デフォルトの audit パッケージをインストールするだけではビルドエラーが発生します。

## 使用方法

それでは本題に入ります:

### e4rat-collect

To have e4rat collect a list of files you will need to append `init=/sbin/e4rat-collect` to your kernel parameters. For example:

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

This will only have to be done once so you may prefer to append this command on the grub command line itself.

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:

    e4rat-collect -k

or

    pkill e4rat-collect

Upon successful boot and after having waited the allotted time you should see the file `/var/lib/e4rat/startup.log`.

Do not forget to remove the e4rat-collect command from your boot loader configuration file (not necessary if you inserted it on the grub command line).

### e4rat-realloc

For the reallocation process change to init 1

    sudo init 1

Note: Users who have switched to a pure systemd setup do not have to change runlevels. Simply login as root once e4rat-collect has finished to run the `e4rat-realloc` utility however, switching to rescue mode in systemd with `systemctl rescue` may allow for more inodes/blocks to be reallocated as some may not be free while in multiuser.target

Log in as root and run:

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

This can take a while depending on how many files you have in your startup.log file.

Note: It may be worthwhile to repeat the reallocation step multiple times before exiting or rebooting in order to further reduce the fragmentation count. Simply re-run the command a few times to see if this is possible on the your setup. If so you'll see the count number reduced after a few runs. This is perfectly safe and shouldn't cause any issues with booting.

### e4rat-preload

Append `init=/sbin/e4rat-preload` permanently to your kernel parameters.

### Alternative: e4rat-preload-lite

An alternative preload binary has been developed by jlindgren, it saves 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

Note: Current [0.2.3] version of e4rat-preload is linked against 5 .so libraries, including libc, libm, libpthread ! So there is not much of a difference here.

- 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 e4rat-preload-lite from the AUR.

Append (or replace) `init=/usr/sbin/e4rat-preload-lite` permanently to your kernel parameters. Reboot and enjoy.

## e4rat と init システム

e4rat-collect defaults to replacing itself with `/sbin/init` upon completion. If you need to specify another process with PID 1, such as /usr/lib/systemd/systemd, you can change this in `/etc/e4rat.conf` by setting the init parameter:

    init /usr/lib/systemd/systemd

This allows to launch both e4rat-preload and bootchart in the same boot sequence.

## Bootchart

Warning: This has not worked for and is still in development - any suggestions welcome

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

This version of bootchart automatically stops logging as soon as a display manager comes up. Supposedly the following overrides that and continues logging but it does not work for me:

To continue logging adjust your `/etc/bootchartd.conf` as follows:

    AUTO_STOP_LOGGER="no"

To stop it manually type:

    # bootchartd stop

To run both e4rat-preload and bootchart append the following to your grub kernel line:

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

### bootchart2

To get bootchart2 working together with e4rat edit `/sbin/bootchartd` and replace the line where it says

    init="/sbin/init"

with

    init="/sbin/e4rat-preload"

This will allow you to measure your boot time with the fine informations that Bootchart2 provides.

It's easy to set up when to stop bootchart2 (on opposite to bootchat) by editing its configuration file `/etc/bootchartd.conf`. Simply adjust the line

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

with any program you want Bootchart2 stop logging when it launches, or rather left it empty for logging to be stopped manually.

## トラブルシューティング

If things do not work you may want to try the following.

### startup.log が作られない

- Disable auditd service
- Check the following for any hints

    dmesg | grep e4rat

- Try to increase verbosity and loglevel to 31 in your `e4rat.conf`

### e4rat が誤って ext2 ファイルシステムと認識する

Add `rootfstype=ext4` to kernel parameters from your bootloader.

### /var/lib/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:

    startup_log_file /etc/e4rat/startup.log

### うるさいブートメッセージを削除する

If you are annoyed by the e4rat-preload message during boot, decrease verbose to 1 in `/etc/e4rat.conf`

## 参照

- Main discussion on the forum
- Improved e4rat-preload - forum thread

Category:

- Boot process (日本語)