Jump to content
From ArchWiki
Состояние перевода: На этой странице представлен перевод статьи E4rat. Дата последней синхронизации: 14 октября 2021. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.

Ссылки по теме

- Improve boot performance
- Preload
- Ext4

e4rat - проект Andreas Rid и Gundolf Kiefer, расшифровывается как e4 'reduced access time' (сокращение времени доступа), применяется только в файловой системе ext4. В набор утилит e4rat входит: e4rat-collect, e4rat-realloc и e4rat-preload.

Есть альтернативная реализация e4rat-lite, которая выглядит более живой и оптимизированный. Смотрите раздел #e4rat-lite.

## Описание

Если взглянуть на статистику bootchart, то можно заметить, что при загрузке системы ни жесткий диск, ни CPU не используются полностью. e4rat позволяет максимально задействовать жесткий диск и CPU, ускоряя таким образом процесс загрузки. Все проводится в три этапа:

- e4rat-collect - собирает статистику по используемым файлам в течении определенного времени (по умолчанию 120 секунд, но может быть скорректировано)
- e4rat-realloc - перераспределяет файлы из списка (помещает их в одну область диска)
- e4rat-preload - заранее загружает нужные файлы в память (используя несколько ядер CPU) для быстрой загрузки системы и приложений

### Кому это нужно, а кому нет

e4rat может быть полезной в системах с одним пользователем, использующим автозапуск Х-в, при этом также можно ускорить запуск нужных программ. На серверах или при загрузке в CLI - время загрузки системы может снизиться не на много. Для SSD-дисков вообще нет смысла использовать, поскольку у них отсутствуют движущиеся части и, как следствие, отсутствуют (почти) задержки.

Перед использованием e4rat рекомендуется сделать резервные копии изменяемых во избежание потери важных данных.

## Установка

Установите пакет e4ratAUR.

Примечание:

- Чтобы собрать его, нужно сперва пересобрать audit из ABS с включенной опцией `staticlibs`. Простая установка стандартного пакета audit приведёт к ошибке сборки.
- Audit нуждается в опциях ядра CONFIG_AUDIT и CONFIG_AUDITSYSCALL, смотрите Kernel (Русский)/Arch Build System (Русский). Возможно, понадобится добавить `audit=1` к параметрам ядра.

Совет:

- #e4rat-lite не требует пересборки audit, он нормально работает с версией из официальных репозиториев.

## Использование

Далее более подробно:

### e4rat-collect

Чтоб e4rat смог создать список файлов, необходимо добавить `init=/sbin/e4rat-collect` к параметрам ядра. Например:

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

Данное действие нужно будет выполнить один раз, поэтому также можно просто отредактировать нужную строку в меню grub на этапе загрузки из командной строки.

После загрузки, в течении 120 секунд, e4rat-collect будет собирать нужную информацию. Поэтому, в течении 2-х минут после загрузки, запустите X-ы, откройте любимый браузер или почтовую программу и т.д., при этом утилита зарегистрирует все запущенные программы и используемые файлы. При необходимости можно изменить стандартное время сбора статистики, для этого отредактируйте файл `/etc/e4rat.conf`. Чтобы вручную завершить работу e4rat-collect, выполните:

    e4rat-collect -k

или

    pkill e4rat-collect

После загрузки и успешного завершения работы e4rat-collect должен появиться файл: `/var/lib/e4rat/startup.log`

Теперь не забудьте удалить команду запуска e4rat-collect из настроек своего загрузчика (не обязательно, если вы ее добавляли из командной строки GRUB в процессе загрузки системы).

### e4rat-realloc

Для запуска процесса перемещения файлов, согласно созданному в предыдущем шаге списку, авторизуйтесь как root и выполните:

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

В зависимости от того, сколько файлов перечислено в `startup.log`, процесс может затянуться на продолжительное время. Переход в однопользовательский режим с помощью `systemctl isolate rescue` (systemd (Русский)#Соответствие уровней SysV целям systemd) позволит переместить блоки, которые не получилось бы переместить в multiuser.target.

Примечание: Возможно, перед выходом или перезагрузкой стоит повторить перемещение несколько раз, чтобы уменьшить фрагментацию. Просто запустите эту команду ещё — число фрагментов может уменьшиться. Это абсолютно безопасно и не приводит ни к каким проблемам при загрузке.
Примечание: При использовании SysV-style систем инициализации нужно перейти в runlevel 1 с помощью команды `sudo init 1` перед запуском `e4rat-realloc`

### e4rat-preload

Добавьте `init=/sbin/e4rat-preload` к параметрам ядра навсегда.

Перезагружайтесь и наслаждайтесь.

Примечание: После обновления системы может понадобиться выполнить заново все описанные для #e4rat-collect, #e4rat-realloc и #e4rat-preload действия

## e4rat и различные системы инициализации

По умолчанию e4rat-collect после завершения будет заменена на /sbin/init. Если вам нужно указать другой PID 1, например `/usr/bin/busybox`, отредактируйте файл `/etc/e4rat.conf`, раскомментировав в нем строку с нужным параметром init:

    init /usr/bin/busybox

Это позволяет запустить `e4rat-preload` и `bootchart` в одной и той же загрузке.

## e4rat-lite

Альтернатива e4rat с некоторыми улучшениями. Также ожидается, что он позволит обойти некоторые проблемы, которые могут возникнуть при использовании оригинального пакета e4rat. Устанавливается с помощью пакета e4rat-lite-gitAUR.

Примечание: Пакет e4rat-lite-gitAUR конфликтует с ureadahead, так что невозможно установить их одновременно — но это всё равно не принесло бы пользы. Смотрите также: #Кому это нужно, а кому нет.

### Использование e4rat-lite

Команды e4rat-lite работают почти идентично e4rat. Смотрите README проекта. В целом:

collect: `init=/usr/bin/e4rat-lite-collect` - стандартный лимит также 120 секунд, вы можете остановить процесс сборки с помощью:

    # e4rat-lite-collect -k

realloc: `/usr/bin/e4rat-lite-realloc` - рекомендуется переключение в runlevel 1, в systemd заранее выполните это:

    # systemctl isolate rescue.target

preload: `init=/usr/bin/e4rat-lite-preload`

startup.log: `/var/lib/e4rat-lite/startup.log`

файл настроек: `/etc/e4rat-lite.conf` - для systemd измените опцию init_file на:

    init_file=/usr/lib/systemd/systemd

## Bootchart

Bootchart можно использовать для построения графика запуска системы, что удобно для оценки использования процессора и диска. С помощью Bootchart можно сравнить процесс загрузки до и после e4rat.

### bootchart

Важно: Официальный пакет bootchart, по-видимому, устарел, в нём нет команды bootchart-render, необходимой для генерации графика. Рекомендуется использовать bootchart2 как альтернативу.

В этой версии журнал ведется только до запуска экранного менеджера. Для обхода данного ограничения можно попробовать выполнить следующее (работает не у всех):

В файле `/etc/bootchartd.conf` установите:

    AUTO_STOP_LOGGER="no"

Когда будет нужно остановить работу сервиса - выполните:

    # bootchartd stop

Для запуска e4rat-preload и bootchart добавив в параметры загрузки ядра:

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

### bootchart2

Для совместного использования bootchart2AUR с e4rat отредактируйте `/sbin/bootchartd` и заменить строку `init="/sbin/init"` на `init="/sbin/e4rat-preload"`.

`/etc/bootchartd.conf` от bootchart2 устроен иначе, а строка

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

может быть скорректирована таким образом, что можно будет либо завершать программу вручную (если оставить строку пустой), либо, при запуске указанной в строке программы, bootchart2 будет остановлен автоматически.

Для генерации графика используйте команду `pybootchartgui -i`

## Устранение неполадок

Если что-то не работает - можно попробовать следующее.

### startup.log не создается

- отключите службу auditd
- изучите все сообщения из

    # dmesg | grep e4rat

- в `e4rat.conf` увеличите значения verbose и loglevel до 31.
- попробуйте e4rat-lite вместо e4rat

### e4rat ошибочно сообщает о файловой системе ext2

Добавьте `rootfstype=ext4` к параметрам ядра.

### /var/lib/e4rat/startup.log не доступен

- это говорит о том, что /var расположен на отдельном разделе и при загрузке еще не был смонтирован. Вам нужно переместить `startup.log` на раздел который доступен (лучше всего в /etc/e4rat/) и, для сохранения изменений, перенастроить `/etc/e4rat.conf`:

    startup_log_file /etc/e4rat/startup.log

### Удалить раздражающее сообщение, которое мешает сообщениям загрузки

Если вас раздражает сообщение e4rat-preload во время загрузки, уменьшите verbose до 1 в файле `/etc/e4rat.conf`

## Смотрите также

- Основное обсуждение на форуме
- Улучшенный e4rat-preload - тема на форуме

Category:

- Boot process (Русский)