Часто существуют случаи, где пользователи Ubuntu должны сделать быструю перезагрузку, например, после обновления ядра или при тестировании некоторых настроек, которые требуют перезагрузки.
Я хотел бы иметь метод (например, сценарий), который позволяет мне экономить как можно большему количеству времени выполнение перезагрузки.
Это - вещи, которых можно, вероятно, избежать для сокращения времени перезагрузки, пока сеанс пользователя не готов:
Возможно, существует еще больше вещей, которые могли быть пропущены для быстрой перезагрузки.
Я видел спецификацию RapidReboot в Wiki Ubuntu, но страница была в последний раз отредактирована 03.02.2010.
Но даже если мы еще не могли бы правильно смочь использовать, это описало kexec
пропускать микропрограммную инициализацию и материал, временно предварительно выбирая запись GRUB и с помощью автовхода в систему точно для одной перезагрузки должно быть возможным. Как я могу настроить это?
Я использую Ubuntu 16.04, 64 бита с Единицей DE, lightdm и GRUB в двойной загрузке с Windows 10 (и скоро еще некоторые дистрибутивы Linux) на машине Acer Aspire E5-773G с UEFI.
Мы можем время от времени откладывать перезагрузку в этом мире "чрезмерно занятых" и не желания потратить впустую 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.
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
магическое заклинание, которое мы бросаем к перезагрузке без сообщения 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
После нормальных двоичных загрузок Вас встречают этим экраном:
Я ответил 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
от этой точки вперед это появляется каждый раз, когда Вы нажимаете перезагрузку, это автоматически перезагружает последнее ядро в режиме быстрой перезагрузки.
Создайте файл /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
диалоговое окно, разрешающее Вам выбрать от установленных ядер до перезагрузки. Подобный меню расширенных настроек личинки.