Как я могу перезагрузить дополнительный быстро?

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

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

Это - вещи, которых можно, вероятно, избежать для сокращения времени перезагрузки, пока сеанс пользователя не готов:

  • если это возможно, пропустите BIOS/UEFI/firmware инициализацию и POST
  • пропустите меню GRUB (предварительно выберите желаемую запись однажды и непосредственно загрузите ее без любого тайм-аута),
  • пропустите экран входа в систему (используйте автовход в систему без пароля однажды),

Возможно, существует еще больше вещей, которые могли быть пропущены для быстрой перезагрузки.

Я видел спецификацию RapidReboot в Wiki Ubuntu, но страница была в последний раз отредактирована 03.02.2010.

Но даже если мы еще не могли бы правильно смочь использовать, это описало kexec пропускать микропрограммную инициализацию и материал, временно предварительно выбирая запись GRUB и с помощью автовхода в систему точно для одной перезагрузки должно быть возможным. Как я могу настроить это?

Я использую Ubuntu 16.04, 64 бита с Единицей DE, lightdm и GRUB в двойной загрузке с Windows 10 (и скоро еще некоторые дистрибутивы Linux) на машине Acer Aspire E5-773G с UEFI.

6
задан 3 December 2017 в 10:40

1 ответ

Времена перезагрузки

Мы можем время от времени откладывать перезагрузку в этом мире "чрезмерно занятых" и не желания потратить впустую 5 или 15 секунд. Когда я сначала посмотрел на этот вопрос, мое время начальной загрузки прошло от 45 секунд до 14 секунд с SSD и systemd тонкая настройка.

Недавно я получил "современный" ноутбук с Генералом NVMe M.2 SSD 3.0 x 4 со сверкающей скоростью чтения Windows на 3,4 ГБ/с и скоростью чтения Linux на 2 ГБ/с. Таким образом, это должно быть более быстрое право? Гм... нет. Это мучительно медленнее:

$ systemd-analyze
Startup finished in 6.823s (firmware) + 4.447s (loader) + 3.467s (kernel) + 8.412s (userspace) = 23.151s

Это время на самом деле после настраивает. Это было намного хуже 80 секунд, потому что Nvidia и Dell принимают решение отключить электроснабжение к аудио HDMI на видеокарте nVidia GTX970M, которая управляет портом HDMI. A как таковой setpci команда требовалась, который вызвал "низкую графическую ошибку" сообщение, и необходимо было ожидать 20 секунд указателя мыши для продолжения. Затем это перезагрузило бы все графические драйверы и перезапустило бы lightdm.

Другой проблемой с "современным" ноутбуком является BIOS, POST занимал 15 секунд. Тонкие настройки в BIOS для выключения проверки аппаратной ошибки выключите загружающиеся драйверы начальной загрузки для NICs и других тонких настроек, которые я не могу помнить, сейчас изменил BIOS время POST на 6 секунд. Для сравнения "старый" ноутбук BIOS время POST был только несколькими секундами с помощью Наследия BIOS CSM и никакая тонкая настройка BIOS.


Ubuntu RapidReboot проект с 2010

Упоминание проекта Ubuntu RapidReboot в сообщении ByteCommander с 2010. Объяснению проекта подводят итог таким образом:

Объяснение

Существует несколько случаев, где мы можем безопасно предположить, что пользователь не хочет видеть загрузчик; в этих случаях мы должны использовать kexec для предотвращения длинных перезагрузок, СООБЩЕНИЙ BIOS, и время загрузчика. Это может занять 10 секунд в оптимальных ситуациях; но с SCSI или RAID BIOS и шумные игры сетевой загрузки, время может подняться на 20, 30, или даже более чем 60 секунд, даже в случаях, где время между загрузкой ядра и наблюдением экрана входа в систему составляет 30-60 секунд.

Примеры использования проекта:

Варианты использования

  • Bob только что обновил свое ядро; обновление-notifier сообщает ему, что он должен перезагрузить для изменений для вступления в силу, и кнопка 'Restart' использует kexec для создания этого быстрее.
  • Alice просто обновила dbus; обновление-notifier говорит ей перезапускать и использует kexec.
  • Seveas выполнил несколько обновлений в прошлом месяце и теперь испытывает менее чем в три раза больше давления памяти из-за различных программ с помощью различных копий общих библиотек. Он решает перезагрузить для разрешения этого и использует "Быструю Перезагрузку" для создания этого быстрее.
  • Keybuk просто установил Острую Ubuntu и хочет загрузиться в нее. LiveCD загружает целевое ядро и initrd с kexec; umounts все находящиеся на диске файловые системы; синхронизация; и затем использование kexec для запуска новой системы вместо перезагрузки.

Используя kexec к перезагрузке

kexec магическое заклинание, которое мы бросаем к перезагрузке без сообщения BIOS и некоторых других низкоуровневых механизмов обнаружения, таких как установка RAID.

Ядро должно быть скомпилировано с CONFIG_KEXEC флаг

Первый шаг должен гарантировать, что Ваше ядро было скомпилировано с CONFIG_KEXEC=y опция:

$ uname -r
4.14.2-041402-generic
$ grep KEXEC= /boot/config-`uname -r`
CONFIG_KEXEC=y

Первая команда uname -r является дополнительным только для показа, с каким ядром Вы загрузились. Как мы видим на второй команде, ядро компилируется Ubuntu, подходят к необходимому набору флага. Не уверенный, когда это было добавлено, но вероятно <= 2012 год.

Установка kexec-tools

Следующий шаг должен установить kexec инструменты для пространства пользователя:

$sudo apt install kexec-tools

После нормальных двоичных загрузок Вас встречают этим экраном:

kexec-tools install.png

Я ответил No частично из-за этого отчета об ошибках, в котором опция не релевантна systemd.

Затем установка продолжается (отрывок, показанный ниже):

Unpacking kexec-tools (1:2.0.10-1ubuntu2.4) ...
Processing triggers for man-db (2.7.5-1) ...
Processing triggers for systemd (229-4ubuntu21) ...
Setting up kexec-tools (1:2.0.10-1ubuntu2.4) ...
Generating /etc/default/kexec...
Generating grub configuration file ...
  (... CUT ...)
Found Windows Boot Manager on /dev/nvme0n1p2@/EFI/Microsoft/Boot/bootmgfw.efi
Found Windows Boot Manager on /dev/sda1@/efi/Microsoft/Boot/bootmgfw.efi
Adding boot menu entry for EFI firmware configuration
done
Processing triggers for systemd (229-4ubuntu21) ...

Конфигурирование kexec

Наши когорты в ArchLinux имеют замечательную документацию для kexec, но этому нужно массирование для Ubuntu / дистрибутивы Debian.

Основное использование с двумя командами:

sudo kexec -l /boot/vmlinuz-`uname -r` --initrd=/boot/initrd.img-`uname -r` --reuse-cmdline
sudo kexec -e

от этой точки вперед это появляется каждый раз, когда Вы нажимаете перезагрузку, это автоматически перезагружает последнее ядро в режиме быстрой перезагрузки.

Используя Systemd для загрузки kexec

Создайте файл /etc/systemd/system/kexec-load@.service:

[Unit]
Description=load %i kernel into the current kernel
Documentation=man:kexec(8)
DefaultDependencies=no
Before=shutdown.target umount.target final.target

[Service]
Type=oneshot
ExecStart=/usr/bin/kexec -l /boot/vmlinuz-%i --initrd=/boot/initrd.img-%i --reuse-cmdline

[Install]
WantedBy=kexec.target

Затем включите сервисный файл для ядра, которое Вы хотите загрузить, например, просто установить текущее ядро uname -r:

$ sudo systemctl enable kexec-load@`uname -r`
Created symlink from /etc/systemd/system/kexec.target.wants/kexec-load@4.4.0-101-generic.service to /etc/systemd/system/kexec-load@.service.

Затем к kexec:

$ sudo systemctl kexec

Если Вы имеете youtube выполнение там могло бы быть системным ингибитором, препятствующим тому, чтобы Вы перезагрузили, в этом случае использование:

$ sudo systemctl kexec -i

Если Вы хотите загрузить другое ядро для следующего kexec, например, 4.12.2-041202-универсального, отключить сервис для текущего ядра и включить то для нового ядра:

$ sudo systemctl disable kexec-load@`uname -r`
$ sudo systemctl enable kexec-load@4.12.2-041202-generic

Больше прибыть

Я должен отправить этот ответ теперь, когда пора загрузить, зафиксировать, загрузить, зафиксировать, повториться. У меня есть сложная установка где systemd загрузки пять nVidia драйверы, которые я должен разгрузить, работают setpci для включения аудио к HDMI перезагрузите драйверы Nvidia и перезапустите lightdm. Это могло бы взять некоторое время для разработки.

После получения cli работа методов я создам настольный ярлык для перезагрузки одного щелчка с sudo подсказка пароля. После этого я создам настольный ярлык на a yad диалоговое окно, разрешающее Вам выбрать от установленных ядер до перезагрузки. Подобный меню расширенных настроек личинки.

2
ответ дан 23 November 2019 в 08:08

Другие вопросы по тегам:

Похожие вопросы: