Немного о быстрой (и тихой) загрузке

01.09.2019

Данная запись дополняет мою прошлую заметку про загрузку Linux без экранных сообщений. В этот раз я покажу, как можно организовать загрузку в обход Grub2, т.е. обойтись без стороннего загрузчика вообще. Нам понадобится система с поддержкой UEFI и примерно 5 минут времени.

Современных компьютеров без UEFI днём с огнём не сыщешь, и даже моя рабочая лошадка родом из 2011 года прекрасно поддерживает эту технологию. В Linux имеется замечательная утилита efibootmgr, управляющая загрузочными записями прямо в ПЗУ материнской платы. С помощью Efibootmgr можно добавлять, удалять и менять приоритет загрузки этих записей. Efibootmgr может добавить запись, ссылающуюся на grub2-efi — в этом случае вы увидите меню Grub вашего дистрибутива. Но можно сразу указать путь к vmlinuz и initrd, а также произвольный набор параметров ядра, и тогда Linux будет загружаться безо всякого Grub. Если у вас на ПК установлена только одна ОС, то это прекрасный способ сделать процесс загрузки более быстрым и плавным.

Для реализации этой идеи для начала нужно скопировать образы vmlinuz и initrd из /boot куда-нибудь внутрь EFI-раздела. В моём случае это директория efi/opensuse. Я переименовал эти файлы в initrd.img и vmlinuz.efi для удобства, но названия могут быть любыми. Далее следует ввести команду примерно такого вида:
efibootmgr --create --disk /dev/sda --part 1 --label "opensuse" -u --loader '\efi\opensuse\vmlinuz.efi'
"root=/dev/sda2 initrd=/efi/opensuse/initrd.img resume=/dev/sda2 splash=silent plymouth.enable=0 quiet elevator=noop logo.nologo acpi_osi=Linux acpi_backlight=vendor audit=0 rd.timeout=120 scsi_mod.use_blk_mq=1 dm_mod.use_blk_mq=1 systemd.show_status=0 rd.udev.log-priority=3 ipv6.disable=1 loglevel=3 vt.global_cursor_default=0 systemd.log_target=/dev/null systemd.journald.forward_to_console=0 systemd.default_standard_output=null systemd.default_standard_error=null init=/bin/systemd "

На что нужно обратить внимание:

  • У меня EFI-раздел находится на /dev/sda1, а корневой — на /dev/sda2 (у вас может быть иначе);
  • Я отключил заставку Plymouth, указал планировщик ввода/вывода Noop, отключил IPv6 и убрал вывод сообщений на экран (тут довольно много опций, с избытком);
  • Нужно не забыть передать UEFI-загрузчику путь до Systemd. В openSUSE это /bin/systemd, но в других системах может быть иначе, например в Росе это /lib/systemd/systemd.

Далее нужно указать приоритет записей:

efibootmgr -o <номер 1>,<номер 2>...

Можно просто удалить все остальные записи кроме нашей:

efibootmgr -b <номер записи> -B

Дополнительно имеет смыл залезть в UEFI BIOS и включить там быструю загрузку, когда система не показывает логотип производителя, не пытается опрашивать USB-устройства и т.д.

Мой результат: от нажатия кнопки питания на системном блоке до полной прогрузки KDE Plasma проходит 25 секунд, причём половина этого времени проходит ещё до загрузки Linux.

Вот и всё. Если ваш дистрибутив всё равно загружается слишком долго, посмотрите вывод команды systemd-analyze blame. Скорее всего, какой-то сервис инициализируется слишком долго — иногда его проще отключить.

P.S.

Для отключения неопрятных сообщений в консоли, которые мигают, например, перед выключением/перезагрузкой системы, существует простой хак:
sudo systemctl disable getty@tty1.service
Теперь у вас нет консольного терминала, но зато выглядит всё просто отлично!

Реклама

UEFI и Linux

16.04.2014

Продолжаю тестирование различных дистрибутивов Linux на моей системе в режиме EFI. Используется вот такая материнская плата. Пока результат такой:

  • Rosa Desktop Fresh R2 — отличный сам по себе дистрибутив, оснащённый слабым инсталлятором, который не умеет устанавливать систему в EFI-режиме. Я всё же смог сделать EFI-загрузку уже после инсталляции, но вручную и с использованием живой флешки с OpenSUSE 🙂 Имеется неплохое руководство.
  • Linux Mint 16 — поддержка EFI заявлена и по факту имеется, плюс это один из самых «вылизанных» и простых в работе дистрибутивов Linux. Проблема в моём случае оказалась в крайне нестабильной работе системы в EFI-режиме: зависания (freeze), загрузка со второго-третьего раза. Давно так часто не нажимал Reset :). К сожалению, пользоваться системой почти невозможно.
  • Manjaro 0.8.9 — Быстрый, красивый и очень крепко сбитый дистрибутив. Это Arch, доведённый до ума и допиленный где надо. Поддержка EFI работает идеально, установщик шикарен. Я бы перешёл полностью на Manjaro, если бы не его фатальные недостатки. Во-первых, это Арч, а значит тут всё очень новое и время от времени что-то ломается. Трудно (иногда никак) поставить пакеты предыдущих версий (столкнулся с Turboprint, на новую версию которой у меня уже нет лицензии). Обновление запросто может что-то сломать. Во-вторых, тут нет штатного Pulseaudio, а после его доустановки система не умеет переключать каналы вывода так как мне надо. Звук постоянно норовит утечь в HDMI, а мне нужен просто Analog Stereo Output. Наконец, тут, так же  как и в самом Арче, сломан Bluetooth в связи с миграцией на новый стек Bluez5. Плюс, XFCE в принципе не имеет собственной поддержки Bluetooth. Так что сыроват Manjaro.
  • OpenSUSE 13.1 — Поддержка EFI близка к идеалу, хотя и есть подводные камушки. Если дать установщику YaST самостоятельно разметить жёсткий диск под GPT, то всё идёт как по маслу и в итоге вы получаете идеальную загрузку через grub2-efi. Сам дистрибутив в исходном состоянии рыхлый, требует многочасового допиливания, ни о каком «немецком качестве» речи не идёт: OpenSUSE делается разношёрстной командой добровольцев. Однако, для пытливого ума тут всё есть и всё работает. Поэтому пока что эта система более других годится мне на десктоп.