Ускорение загрузки

Материал из Rosalab Wiki
Перейти к: навигация, поиск

Чем замеряем

первое, что нам потребуется - это не большая утилита, которая умеет по логам строить интересный график

systemd-analyze из пакета:

urpmi systemd-tools

Для начала построим наш график до того, как что-то навыключали:

systemd-analyze plot > ~/default.svg

Ну графике есть три довольно значимых этапа загрузки:

Startup finished in 843ms (kernel) + 8841ms (initramfs) + 24549ms (userspace) = 34235ms

Ну с ядром мы вряд ли что-то поделаем - не пересобирать же его, а вот с остальными двумя очень даже, и так приступим.

Общие рекомендации

  • не используем софтрейд
  • не используем разделы LVM
  • отключаем и выкидываем ненужные для нашего оборудования модули и скрипты.
  • отключаем ненужные сервисы

Выкидываем лишнее из initramfs

дописываем в конец конфигурационного файла dracut:

echo 'omit_dracutmodules+="i18n plymouth resume"' >> /etc/dracut.conf.d/50-dracut-rosa.conf

и перегенерим наш initrd:

dracut -f /boot/initrd-$(uname -r).img

Некоторые опции ядра

в файле /etc/default/grub находим параметр GRUB_CMDLINE_LINUX_DEFAULT и приводим его к такому виду:

GRUB_CMDLINE_LINUX_DEFAULT='splash=silent logo.nologo quiet nouveau.modeset=0 rootfstype=ext4 plymouth.enable=0'

теперь необходимо перегенерить конфиг груба:

update-grub2

Ускоряем запуск userspace

Включим профилировщик:

systemctl enable systemd-readahead-collect.service systemd-readahead-replay.service
systemctl start systemd-readahead-collect.service systemd-readahead-replay.service
Idea.png
Примечание
Эффект от службы readahead проявится после нескольких (обычно 2-3) перезагрузок.

Если у Вас выделен на отдельный раздел /home то имеет смысл к опциям его монтирования в файле /etc/fstab добавить такие строки noauto,x-systemd.automount

А дальше отключаем кучу ненужных сервисов:

systemctl disable mysqld.service
systemctl disable polkit.service
systemctl disable acpid.service
systemctl disable apmd.service
systemctl disable console-kit-daemon.service
systemctl disable wine.service
systemctl disable mdadm.service
systemctl mask mdadm.service
systemctl mask systemd-ask-password-plymouth.path
systemctl mask plymouth-start.service
systemctl disable laptop-mode.service
systemctl disable bluetooth.service
systemctl disable wpa_supplicant.service
systemctl mask mandrake_everytime.service
systemctl mask mysqld.service
systemctl mask dev-hugepages.mount
systemctl mask fedora-storage-init-late.service
systemctl mask fedora-storage-init.service
systemctl mask console-kit-log-system-start.service
systemctl disable lm_sensors.service
systemctl mask systemd-vconsole-setup.service
systemctl disable rpcbind.service
systemctl disable autofs.service
systemctl mask partmon.service
systemctl mask plymouth-read-write.service
systemctl disable rsyslog.service
systemctl disable postfix.service
systemctl mask avahi-daemon.service
systemctl mask sys-kernel-debug.mount
systemctl mask mandriva-save-dmesg.service
systemctl mask mandriva-kmsg-loglevel.service
Idea.png
Примечание
Некоторые сервисы Вам могут быть необходимы. Например, при использовании "легких" оконных сред (LXDE, XFCE) вам может понадобиться acpid.


Избавляемся от GRUB

Если у Вас ROSA стоит как единственная система, то видеть меню выбора загрузки вовсе не обязательно т.к. выбирать там особо нечего, а это все драгоценные секунды. И еще, такой фокус возможен только если у Вас EFI загрузка.

Начнем

копируем Ваше ядро и initrd на раздел EFI (по умолчанию он должен быть смонтирован в /boot/efi)

cp /boot/vmlinuz-$(uname -r) /boot/efi/EFI/rosa/
cp /boot/initrd-$(uname -r).img /boot/efi/EFI/rosa/

И добавляем пункт загрузки в BIOS:

efibootmgr --create --gpt --disk /dev/sda --part 1 \
           --write-signature --label "ROSA Linux (kernel-$(uname -r))" \
           --loader "\EFI\rosa\vmlinuz-$(uname -r)" \
           -u "$(cat /proc/cmdline) initrd=/EFI/rosa/initrd-$(uname -r).img"


Где:

  • --part 1 - это тот самый раздел который смонтирован в /boot/efi/
  • наш диск /dev/sda имеет разделы GPT (в принципе это все дефолтовые параметры при установке системы на чистый носитель)
  • тут мы копируем текущее загруженное ядро. Если нужно загрузить другую версию ядра то строку $(uname -r) замените на нужную Вам версию.
Idea.png
Примечание
Эти шаманства придется проделывать каждый раз при обновлении ядра. И у Вас будет отсутствовать возможность выбрать загрузку другой системы, но такая возможность останется через настройки BIOS. Если система работает с включённым Secure Boot, то его придётся отключить, так как ядро не содержит необходимой подписи.

Итог:

Циферки говорят сами за себя:

Startup finished in 937ms (kernel) + 974ms (initramfs) + 2887ms (userspace) = 4800ms