Оптимизация загрузки cистемы

Эта статья рассказывает об оптимизаторе загрузки системы e4rat.

Внимание: статья предназначена только для разделов системы отформатированных в ext4. Возможно будет работать на других файловых системах если не использовать e4rat-realloc. Это предположение нуждается в проверке.
e4rat («Ext4 — Reducing Access Times») перемещает файлы, задействованные во время инициализации системы, в одну область диска, оптимизируя работу механизма упреждающего чтения файловой системы Ext4. Он состоит из трех компонентов:

e4rat-collect запускается во время «обучающей» загрузки ОС и составляет список нужных для инициализации ОС файлов.
e4rat-realloc перераспределяет блоки файлов, попавших в список так, чтобы они располагались в одной области жесткого диска.
e4rat-preload заранее помещает файлы в память для ускорения загрузки (это аналог ureadahead, он также способствует ускорению загрузки, но совсем не обязателен для применения
Для работы эти компоненты требуют, чтобы ОС была установлена на файловую систему Ext4, так как только она поддерживает онлайн-дефрагментацию (начиная с ядра версии 2.6.31). При этом вариант с конвертированной Ext3 не пройдет, ФС должна быть создана, что называется, с нуля.

Пакет e4rat можно собрать из исходников или установить штатный пакетным менеджером. Заметьте, что e4rat конфликтует с ureadahead.

e4rat-collect

Для сбора информации нужно добавить строку real_init=/sbin/e4rat-collect в параметры загрузки ядра в /boot/grub/grub.cfg. e4rat-collect будет собирать статистику ровно 2 минуты, все файлы, которые будут загружены за это время, попадут в список /var/lib/e4rat/startup.log, который будет использован для переразмещения этих файлов в одну область диска. Время сбора статистики можно изменить в файле /etc/e4rat.conf.

Теперь нужно перезагрузиться, чтобы e4rat мог собрать статистику. Завершить сбор статистики можно командой

e4rat-collect -k

или

pkill e4rat-collect

После окончания работы e4rat-collect собранные данные можно посмотреть в файле /var/lib/e4rat/startup.log и в случае необходимости вручную подкорректировать его. real_init=/sbin/e4rat-collect из параметров загрузки ядра можно убрать.

e4rat-realloc

Далее необходимо перейти в runlevel 1, чтобы запустить e4rat-realloc:

init 1

Авторизуемся и вводим команду:

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

Теперь начнется перемещение блоков файлов из сформированного в прошлом шаге списка.
Оно может продолжаться достаточно долго, поэтому терпеливо ждем и ни в коем случае не прерываем этот процесс (иначе потеряем файлы).

e4rat-preload

В параметры загрузки ядра нужно добавить real_init=/sbin/e4rat-preload. Данная функция схожа с readahead.

Чтобы после установки нового ядра не слетала строка инициализации е4rat-preload добавьте ее в /etc/default/grub в переменную GRUB_CMDLINE_LINUX.

После проведенной оптимизации старт моей системы уменьшился с 50сек до 35 сек. Внизу прикреплены графики старта системы без е4rat и с ним.

Долгий старт моей системы обьясняется эфективной работой другого пакета оптимизации под названием preload который занимается ускорением старта программ уже в процессе работы в системе а также большим количеством программ в автозагрузке у меня (анализ startup.log показал что система загружает ~4000 файлов).

Подробней о результатах тестов с preload вы можете почитать здесь

http://habrahabr.ru/post/20901/

Спс за внимание!

А чем такие графики сделаны ???

bootchart

После проведенной оптимизации старт моей системы увеличился с 50сек до 35 сек

увеличился ? ))

После выполнения команды init 1 экран становится черным и в левом верхнем углу мигает курсор. Больше ничего ввести не получается.

После выполнения команды init 1 экран становится черным и в левом верхнем углу мигает курсор. Больше ничего ввести не получается.

Как вариант решения этой проблемы в параметрах загрузки ядра нужно добавить real_init=init 1 и тогда должен загрузиться в нужный режим. Потом не забудь сменить real_init на другой.

После выполнения команды init 1 экран становится черным и в левом верхнем углу мигает курсор. Больше ничего ввести не получается.

Ctrl+alt+f1 нажми. Скорее всего ты в DE это ввел и у тебя оно закрылось, что логично. Или вводи init 1 на одном из терминал tty

Понятно, вечером попробую.

После ввода в одном из терминалов init 1 и ввода e4rat-realloc /var/lib/e4rat/startup.log выдает вот такое:

Parsing file /var/lib/e4rat/startup.log
   4/3011 file(s) are not available
  30/3011 file(s) are presently not writable.
  12/3011 file(s) have no blocks.
   1/3011 file(s) are sparse-files which will retain gaps of unallocated blocks.
Defrag mode: locality group
Processing 2860 file(s) on device /dev/sda1 (mount-point: /)
Total fragment count before/afterwards/best-case:  307/437/1
There is no improvement possible.
Processing 58 file(s) on device /dev/sda5 (mount-point: /var)
Total fragment count before/afterwards/best-case:  11/6/1
Processing 47 file(s) on device /dev/sda6 (mount-point: /home)
Total fragment count before/afterwards/best-case:  115/1160/1
There is no improvement possible.
Cannot dump log messages: /dev/kmsg: Bad file descriptor
Discard 2 unwritten log message(s).

Как только люди не извращаются, вместо того, чтобы просто купить SSD-диск и наслаждаться почти мгновенной загрузкой.

Что мешает систему устанавливать на SSD, а /home на обычный диск? В результате: очень быстрая загрузка (4-5 секунд) и нормальная надёжность для файлов и всего добра.

У меня загрузка ноутбука ускорилась с 65 секунд до максимум 46. Считаю, что это хороший результат! Спасибо за информацию.

Как только люди не извращаются, вместо того, чтобы просто купить SSD-диск и наслаждаться почти мгновенной загрузкой.

Не все имеют средства на покупку SSD-диска. А это решение ускоряет загрузку системы без капиталовложений.

Что на счёт:

  • RAID
  • твердотельных дисков?

это всё актуально только для систем, которые работают на 1 SATA/IDE диске?

Спасибо. Сократил время загрузки ноута с 65 до 45 секунд. На стационарном у меня ssd. Статья полезная!

я после real_init=/sbin/e4rat-collect сбора статистики перезагрузился в single mode и сделал так:

mount -o remount,rw /
mount /home
e4rat-realloc -v /var/lib/e4rat/startup.log

а то что-то init 1 в tty1 отключил клавиатуру :slight_smile: