it-swarm.com.de

Wie kann ich extra schnell neustarten?

Es gibt oft Fälle, in denen Ubuntu-Benutzer einen schnellen Neustart durchführen müssen, z. nach einem Kernel-Update oder beim Testen einiger Einstellungen, die einen Neustart erfordern.

Ich hätte gerne eine Methode (z. B. ein Skript), mit der ich so viel Zeit wie möglich sparen kann, um einen Neustart durchzuführen.

Dies sind Dinge, die möglicherweise vermieden werden können, um die Neustartzeit zu verkürzen, bis die Benutzersitzung fertig ist:

  • überspringen Sie nach Möglichkeit die BIOS/UEFI/Firmware-Initialisierung und den POST
  • überspringe GRUB Menü (wähle den gewünschten Eintrag einmal vor und starte ihn direkt ohne Timeout)
  • anmeldebildschirm überspringen (einmal kennwortlose automatische Anmeldung verwenden)

Vielleicht gibt es noch mehr Dinge, die für einen schnellen Neustart übersprungen werden könnten.

Ich habe die RapidReboot Spezifikation im Ubuntu Wiki gesehen, aber die Seite wurde zuletzt am 03.02.2010 bearbeitet.

Aber selbst wenn wir das beschriebene kexec noch nicht verwenden können, um Firmware-Initialisierung und ähnliches zu überspringen, sollte es möglich sein, vorübergehend den Eintrag GRUB vorauszuwählen und die automatische Anmeldung für genau einen Neustart zu verwenden. Wie kann ich das einrichten?

Ich verwende Ubuntu 16.04, 64-Bit mit Unity DE, lightdm und GRUB im Dual-Boot mit Windows 10 (und bald einigen weiteren Linux-Distributionen) auf einem Acer Aspire E5-773G-Computer mit UEFI.

6
Byte Commander

Mal neustarten

In dieser Welt, in der viel zu tun ist und wir keine 5 oder 15 Sekunden verschwenden möchten, können wir einen Neustart hinauszögern. Als ich mir diese Frage zum ersten Mal angeschaut hatte, waren meine Startzeiten mit einer SSD und einer Optimierung von systemd von 45 Sekunden auf 14 Sekunden gesunken.

Kürzlich habe ich mir einen "modernen" Laptop mit einer NVMe M.2 Gen 3.0 x 4 SSD mit einer unglaublichen Windows-Lesegeschwindigkeit von 3,4 GB/s und einer Linux-Lesegeschwindigkeit von 2 GB/s angeschafft. Also sollte es doch schneller gehen, oder? Ähm ... nein. Es ist schmerzhaft langsamer:

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

Diese Zeit ist tatsächlich nach Optimierungen. Es war viel schlimmer als 80 Sekunden, da nVidia und Dell die Stromversorgung für HDMI-Audio auf einer nVidia GTX970M-Grafikkarte unterbrechen, die den HDMI-Anschluss steuert. Daher war ein setpci -Befehl erforderlich, der die Meldung "Low Grapics Error" verursachte, und Sie mussten 20 Sekunden warten, bis der Mauszeiger fortfuhr. Dann werden alle Grafiktreiber neu geladen und lightdm neu gestartet.

Ein weiteres Problem mit dem "modernen" Laptop ist, dass das BIOS POST 15 Sekunden brauchte. Optimierungen im BIOS zum Deaktivieren der Hardwarefehlerprüfung, zum Deaktivieren des Ladens von Boot-Treibern für Netzwerkkarten und anderer Optimierungen, an die ich mich nicht erinnern kann, haben die BIOS-Zeit POST auf 6 Sekunden geändert. Im Vergleich dazu war das "alte" Laptop-BIOS POST bei Verwendung von Legacy-BIOS-CSM und ohne BIOS-Optimierungen nur ein paar Sekunden lang.


Ubuntus RapidReboot Projekt von 2010

Die Erwähnung des Ubuntu RapidReboot -Projekts in ByteCommanders Beitrag stammt aus dem Jahr 2010. Die Gründe für das Projekt lassen sich folgendermaßen zusammenfassen:

Begründung

In einigen Fällen kann davon ausgegangen werden, dass der Benutzer den Bootloader nicht sehen möchte. In diesen Fällen sollten wir Kexec verwenden, um lange Neustarts, BIOS-POSTs und Bootloader-Zeiten zu vermeiden. Dies kann in optimalen Situationen 10 Sekunden dauern. Bei SCSI- oder RAID-BIOS- und Netzwerk-Boot-ROMs kann die Zeit jedoch auf 20, 30 oder sogar über 60 Sekunden ansteigen, selbst wenn zwischen dem Laden des Kernels und dem Anzeigen des Anmeldebildschirms 30 bis 60 Sekunden liegen.

Anwendungsbeispiele des Projekts:

Anwendungsfälle

  • Bob hat gerade seinen Kernel aktualisiert. update-notifier teilt ihm mit, dass er einen Neustart durchführen muss, damit die Änderungen wirksam werden, und die Schaltfläche "Neustart" verwendet Kexec, um dies zu beschleunigen.
  • Alice hat gerade dbus aktualisiert; update-notifier fordert sie auf, neu zu starten, und verwendet kexec.
  • Seveas hat im letzten Monat mehrere Aktualisierungen durchgeführt und ist jetzt aufgrund unterschiedlicher Programme, die unterschiedliche Kopien gemeinsam genutzter Bibliotheken verwenden, unter dem dreifachen Speicherdruck. Er entscheidet sich für einen Neustart, um dies zu klären, und verwendet einen "Schnellstart", um dies zu beschleunigen.
  • Keybuk hat gerade Ubuntu Edgy installiert und möchte es starten. Die LiveCD lädt den Zielkernel und initrd mit kexec. Meldet alle festplattenbasierten Dateisysteme an. synchronisieren; und verwendet dann Kexec, um das neue System zu starten, anstatt neu zu starten.

Verwenden von Kexec zum Neustarten

kexec ist der Zauber, mit dem wir einen Neustart ohne BIOS-Post und einige andere Erkennungsmechanismen auf niedriger Ebene, wie z. B. RAID-Setup, durchgeführt haben.

Der Kernel muss mit dem Flag CONFIG_KEXEC kompiliert werden

Der erste Schritt besteht darin, sicherzustellen, dass Ihr Kernel mit der Option CONFIG_KEXEC=y kompiliert wurde:

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

Der erste Befehl uname -r ist optional, um anzuzeigen, mit welchem ​​Kernel Sie gebootet haben. Wie wir im zweiten Befehl sehen können, wird der Kernel vom Ubuntu-Team mit dem erforderlichen Flag gesetzt. Nicht sicher, wann dies hinzugefügt wurde, aber wahrscheinlich <= Jahr 2012.

Installiere kexec-tools

Der nächste Schritt ist die Installation der kexec Tools für den Benutzerbereich:

$Sudo apt install kexec-tools

Nach normalen Binärdownloads werden Sie mit folgendem Bildschirm begrüßt:

kexec-tools install.png

Ich habe No teilweise aufgrund dieses Fehlerberichts beantwortet, dass die Option in systemd nicht relevant ist.

Dann wird die Installation fortgesetzt (Ausschnitt siehe unten):

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/[email protected]/EFI/Microsoft/Boot/bootmgfw.efi
Found Windows Boot Manager on /dev/[email protected]/efi/Microsoft/Boot/bootmgfw.efi
Adding boot menu entry for EFI firmware configuration
done
Processing triggers for systemd (229-4ubuntu21) ...

kexec konfigurieren

Unsere Kohorten bei ArchLinux haben großartige Dokumentation für kexec , aber es muss für Ubuntu/Debian-Distributionen massiert werden.

Die grundlegende Verwendung erfolgt mit zwei Befehlen:

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

von diesem Punkt an wird jedes Mal, wenn Sie auf "Neustart" klicken, der letzte Kernel im Schnellstartmodus automatisch neu geladen.

Verwenden von Systemd zum Laden von kexec

Erstellen Sie die Datei /etc/systemd/system/[email protected]:

[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

Aktivieren Sie dann die Service-Datei für den Kernel, den Sie laden möchten, um beispielsweise einfach den aktuellen Kernel uname -r festzulegen:

$ Sudo systemctl enable [email protected]`uname -r`
Created symlink from /etc/systemd/system/kexec.target.wants/[email protected] to /etc/systemd/system/[email protected]

Dann zu kexec:

$ Sudo systemctl kexec

Wenn Sie youtube ausgeführt haben, ist möglicherweise eine Systemsperre vorhanden, die einen Neustart verhindert. Verwenden Sie in diesem Fall:

$ Sudo systemctl kexec -i

Wenn Sie einen anderen Kernel für den nächsten Kernel laden möchten, z. B. 4.12.2-041202-generic, deaktivieren Sie den Dienst für den aktuellen Kernel und aktivieren Sie den für den neuen Kernel:

$ Sudo systemctl disable [email protected]`uname -r`
$ Sudo systemctl enable [email protected]

Da kommt noch mehr

Ich muss diese Antwort jetzt posten, da es Zeit ist zu booten, zu reparieren, zu booten, zu reparieren, zu wiederholen. Ich habe ein kompliziertes Setup, bei dem systemd fünf nVidia Treiber lädt, die ich entladen, setpci ausführen muss, um Audio auf HDMI einzuschalten, nVidia Treiber neu zu laden und lightdm neu zu starten. Es könnte eine Weile dauern, bis es klappt.

Nachdem die cli Methoden zum Laufen gebracht wurden, erstelle ich eine Desktop-Verknüpfung für einen Neustart mit einem Klick und der Sudo Passwort-Eingabeaufforderung. Danach erstelle ich eine Desktop-Verknüpfung zu einem Dialogfeld yad, in dem Sie aus den installierten Kerneln auswählen können, um einen Neustart durchzuführen. Ähnlich wie das erweiterte Optionsmenü von grub.

2