Львиную долю времени загрузки Linux-дистрибутива занимает загрузка файлов, необходимых для работы различных системных сервисов. Она происходит последовательно и индивидуально для каждого приложения или системного демона, что снижает общую производительность компонентов системы инициализации. Вместо того, чтобы отработать и отдать управление следующему компоненту, им приходится тратить время на ожидание. Современные системы инициализации, такие как Upstart и Systemd, частично решают эту проблему с помощью параллельного запуска компонентов системы, так что пока один компонент загружается в память, другой может спокойно работать. Кроме того, для ускорения загрузки используются инструменты под названием readahead (Fedora) и ureadahead (Ubuntu), которые составляют список используемых во время инициализации ОС файлов, и заблаговременно загружают их в память во время инициализации. Все это позволяет существенно сократить время загрузки операционной системы, но есть еще один способ, который пока не используется ни одним дистрибутивом.
Заключается он в том, чтобы расположить файлы, нужные для загрузки ОС так, чтобы все они физически располагались в одной области диска. В этом случае механизм упреждающего чтения жесткого диска будет работать более эффективно, наполняя кэш только актуальными данным. Но чтобы сделать это нужен специальный дефрагментатор, который бы собрал статистику использования файлов и поместил их в одну область жесткого диска.
e4rat (название которого расшифровывается как "Ext4 - Reducing Access Times") как раз и представляет собой такой дефрагментатор. Он состоит из трех компонентов:
-
e4rat-collect запускается во время "обучающей" загрузки ОС и составляет список нужных для инициализации ОС файлов.
-
e4rat-realloc перераспределяет блоки файлов, попавших в список так, чтобы они располагались в одной области жесткого диска.
-
e4rat-preload заранее помещает файлы в память для ускорения загрузки (это аналог ureadahead, он также способствует ускорению загрузки, но совсем не обязателен для применения).
Для работы эти компоненты требуют, чтобы ОС была установлена на файловую систему Ext4, так как только она поддерживает онлайн-дефрагментацию (начиная с ядра версии 2.6.31). При этом вариант с конвертированной Ext3 не пройдет, ФС должна быть создана, что называется, с нуля.
Пакет e4rat можно получить в следующих вариантах:
Также он доступен в ArchLinux AUR, поэтому для установки в этот дистрибутив достаточно выполнить:
$ yaourt -S e4rat
Если вы соберетесь устанавливать e4rat из исходников, то убедитесь, что удовлетворены следующие зависимости:
Linux Kernel (>= 2.6.31) CMake (>= 2.6) pod2man Boost Library (>=1.41) Linux Audit Library (libaudit >=0.1.7) Block Device Identification Library (libblkid) Ext2 File System Utilities (e2fsprogs)
Примечание для Убунтоводов: e4rat конфликтует с ureadahead, поэтому перед последний следует удалить еще до установки e4rat:
dpkg --purge ureadahead ubuntu-minimal
После того как пакет будет установлен, перезагружаем машину, выбираем нужный пункт меню Grub, нажимаем e, находим строку kernel, снова жмем e и добавляем в ее конец следующую строку:
init=/sbin/e4rat-collect
Нажимаем <Enter> и b чтобы продолжить загрузку. e4rat-collect будет собирать статистику ровно 2 минуты, все файлы, которые будут загружены за это время, попадут в список /var/lib/d4rat/startup.log, который будет использован для переразмещения этих файлов в одну область диска. Важно, что e4rat не делает различий между файлами, использованными для загрузки ОС и файлами, которые могут быть загружены уже после входа пользователя в систему. Поэтому, если, скажем, загрузка ОС в вашем случае занимает 40 секунд, то в течение следующих 80 секунд вы можете запустить все приложения, которыми обычно пользуетесь и они тоже попадут в список, а значит в следующий раз будут стартовать быстрее.
Теперь вновь перезагружаемся, и добавляем в конец строки kernel слово single. Жмем <Enter> и b, дожидаемся появления приглашения к вводу команд и пишем следующее:
e4rat-realloc /var/lib/e4rat/startup.log
Теперь начнется пермещение блоков файлов из сформированного в прошлом шаге списка. Оно может продолжаться достаточно долго, поэтому терпеливо ждем и ни в коем случае не прерываем этот процесс (иначе потеряем файлы).
Когда этот процесс закончится, открываем конфигурационный файл /boot/grub/grub.cfg (или /boot/grub/menu.lst) и добавляем к опциям ядра (все таже строка kernel) следующую строку:
init=/sbin/e4rat-preload
Сохраняем файл, пишем reboot и смотрим как изменилась скорость загрузки.
От себя скажу, что типичная скорость загрузки моего ArchLinux составляет примерно 36 секунд (от нажатия <Enter> в Grub до рабочего стола с программами, прописанными в autostart). После применяя e4rat она уменьшилась до 22 секунд (причем 4 из них занял запуск e4rat-preload). Пользователи других систем отмечают, что прирост скорости может составить от 20 до 300%, причем в системах, где уже используются различные оптимизации, таких например, как Ubuntu, прирост может не наблюдаться вовсе или составлять 1-2 секунды. Также e4rat совершенно бесполезен для нетбуков, оснащенных SSD-дисками, в которых скорость доступа к блокам данных не зависит от их физического расположения. Слабый процессор также может сыграть свою роль, просто не успевая за диском.