Тихая загрузка 2.0

15.11.2019

В продолжение моих предыдущих изысканий. Нашёлся параметр загрузки ядра Linux, который гасит все экранные сообщения легко и изящно, переводя их на «пустую» консоль. Это console=ttyS0. Для достижения нужного эффекта нужно только добавить второй параметр, отключающий мигание курсора:
console=ttyS0 vt.global_cursor_default=0
Вот и всё! Одна строка заменяет собой целую статью Silent boot на арчвики.


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

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=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
Теперь у вас нет консольного терминала, но зато выглядит всё просто отлично!


Загрузка Linux без экранных сообщений

23.04.2019

Если вам не нужны служебные и отладочные сообщения, которые мелькают при загрузке Linux, то вам может быть это интересно.

Мне хотелось сделать так, чтобы моя ОС Rosa R11 загружалась максимально аккуратно, без чего-либо лишнего на экране. Отправной точкой послужила статья про «тихую загрузку» для Arch Linux, а примером для подражания — готовящаяся к релизу OpenMandriva Lx 4.0. В Мандриве загрузка происходит просто идеально: после меню Grub2 экран гаснет и загорается уже в KDE Plasma 5. Красота!

Сделаем так же в Росе.

Используем набор параметров из OpenMandriva:
quiet splash logo.nologo acpi_osi=Linux "acpi_osi=!Windows 2012" acpi_backlight=vendor audit=0 rd.timeout=120 scsi_mod.use_blk_mq=1 dm_mod.use_blk_mq=1 rd.systemd.show_status=auto rd.udev.log-priority=3 loglevel=3

Их нужно добавить одной строкой в /etc/default/grub, в качестве значения параметра GRUB_CMDLINE_LINUX_DEFAULT. Для применения понадобится выполнить команду:
sudo update-grub2
Но это ещё не всё: у нас по-прежнему моргает полоска курсора при загрузке и отображается сообщение Started bpfilter. Мигание курсора отключается параметром vt.global_cursor_default=0 (нужно добавить его к описанному выше набору), а для подавления bpfilter мы просто забаним соответствующий модуль ядра (при условии, что сам Bpfilter вам не нужен). Этот модуль отключается хитро: его недостаточно указать в списке blacklist, т.к. по зависимостям других модулей он всё равно будет загружаться. Для решения проблемы откроем файл /etc/modprobe.d/blacklist-mdv.conf и добавим в конец следующую строку:

install bpfilter /bin/false

Кстати, в Росе можно открывать системные файлы в обычном редакторе Kwrite: при попытке сохраниться он запросит пароль root, а не пошлёт вас куда подальше…

В принципе, на этом всё. Что можно улучшить? Во-первых, если при выключении/перезагрузке Linux у вас система висит 1,5 минуты, то можно исправить это, отредактировав файл /etc/systemd/system.conf. Там нужно раскомментировать параметр DefaultTimeoutStopSec и задать ему поменьше секунд. У меня он выглядит так:

systemd

Также, для управления настройками Grub2 удобно использовать графическую программу Grub2-editor. Для Росы можно взять пакет здесь. После установки в параметрах KDE, в разделе «Запуск и завершение» появится новый раздел:

grub2-editor