ubuntuusers.de

Ruhezustand

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:


Du möchtest den Artikel für eine weitere Ubuntu-Version testen? Mitarbeit im Wiki ist immer willkommen! Dazu sind die Hinweise zum Testen von Artikeln zu beachten.

Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:

Dieser Artikel konkretisiert einen Teil der Übersicht „Schlafender Rechner“.

Vom Ruhezustand spricht man, wenn der Zustand eines laufenden Systems eingefroren, gesichert und der Rechner anschließend heruntergefahren wird. Nach einem erneuten Einschalten des Rechners wird der vorherige Zustand 1:1 wiederhergestellt inklusive aller geöffneten Fenster und laufenden Programmen.

Andere Begriffe sind hibernate (deutsch: Winterschlaf) oder Suspend-to-disk (in etwa: „den Betrieb vorübergehend unterbrechen, indem der Zustand auf die Festplatte geschrieben wird“).

Im Gegensatz zum Modus Bereitschaft (englisch: Suspend-to-RAM), ein weniger tiefer Schlafzustand, wird im Ruhezustand keine Energie benötigt.

Grundsätzlich kann der Rechner wie unten beschrieben in den Ruhezustand versetzt werden. Dies bzw. das spätere Aufwachen (resume) funktioniert nicht immer und dieser Artikel soll bei der Einrichtung von "hibernate/resume" unterstützen.

Am einfachsten ist die Einrichtung von "hibernate/resume" mit einer separaten Partition für Swap[1], und dieser Artikel beschränkt sich darauf. Es geht aber auch mit einer Auslagerungsdatei (swapfile). Der Artikel Ruhezustand/Auslagerungsdatei beschreibt demnächst die zu beachtenden Besonderheiten.

Voraussetzungen und Vorbereitung

Beim Wechsel in den Ruhezustand wird der Zustand des Arbeitsspeichers in einen Swap-Bereich[1] geschrieben. Ein solcher muss auf einem Massenspeicher (HDD oder SSD) existieren und ausreichend groß sein. Ein Swap-Bereich im RAM eignet sich nicht.

Alle aktiven Swap-Bereiche zeigt der Befehl[2]:

systemctl --type swap 

Alle dem System (z.B. aus der Datei fstab) bekannten Swap-Bereiche listet der erweiterte Befehl:

systemctl --type swap --all 

Es werden auch die nicht aktiven Swap-Bereiche ausgegeben und die aktiven ggf. mehrfach mit allen Aliasnamen.

Wenn es keinen Swap-Bereich gibt, muss man einen anlegen. Dabei sind die im Artikel Swap genannten technischen Restriktionen für Swap zu beachten und zusätzlich die Anforderung:

  • Der für den Ruhezustand vorgesehene Swap-Bereich soll so groß wie der Arbeitsspeicher sein.

Man benötigt bei vorstehender Regel keinen Zuschlag, weil das Arbeitsspeicherabbild komprimiert gespeichert wird, weswegen man in günstigen Fällen sogar mit einem kleineren Swap-Bereich von mindestens dem halben Arbeitsspeicher auskommt. Mit vorstehender Empfehlung liegt man aber auf der sicheren Seite.

Man ermittelt die UUID für das SWAP-Dateisystem in der für "hibernate/resume" vorgesehenen Swap-Partition: Der vorherige Befehl verrät die Unit des Swap-Bereiches, beispielsweise dev-sda4.swap, und mit dieser Information erfragt man per lsblk die Kenndaten des daraus abgeleiteten Blockgerätes:

lsblk -o NAME,PARTUUID,UUID /dev/sda4 

In der Firmware des Rechners muss man "Secure Boot" deaktivieren, weil der Rechner sonst nicht aufwacht. → Problembehebung

Ebenfalls in der Firmware des Rechners – und, sofern man es benutzt, auch in Windows – ist Fastboot auszuschalten. Sonst: Datenverlust

Installation

Die Funktionalität des Ruhezustands ist im Linux-Kernel selbst eingebaut und wird über systemd gesteuert, somit benötigt man bei Ubuntu-Betriebssystemen ab 20.04 keine weitere Software zur Nutzung des Ruhezustandes.

Das bedeutet allerdings nicht, dass es bei jeder Hardware funktioniert! Oft lohnt ein Blick in das Setup-Programm des Rechners ("BIOS") und nach diesbezüglichen Einstellmöglichkeiten zu suchen, die natürlich jeder Hersteller individuell benennt.

Einrichtung

Einschlafen testen

Man testet zuerst nach der hier folgenden Anleitung, ob Hardware und Betriebssystem alle Voraussetzungen erfüllen, per ACPI ordnungsgemäß miteinander kommunizieren und das Systemabbild für den Ruhezustand erstellt und gesichert werden kann. Dafür verwendet man eine Kernel-Schnittstelle:

Die Datei /sys/power/state enthält die Methodengruppen, mit denen der Kernel in einen Schlafzustand wechseln kann:

cat /sys/power/state 

In der Beispielausgabe

freeze mem disk 

muss das Wort disk aufgeführt sein, sonst kann man den Ruhezustand nicht verwenden. → Problembehebung

Wenn der Ruhezustand verfügbar ist, erfragt man aus der Datei /sys/power/disk die für einen solchen Wechsel möglichen Methoden:

cat /sys/power/disk 

Beispielausgabe:

[platform] shutdown reboot suspend test_resume 

Das Wort platform bedeutet, dass der Kernel mit Hilfe des ACPI in der Rechner-Firmware in den Ruhezustand wechseln kann, shutdown bedeutet, dass er selbst es sich auch ohne eine solche Unterstützung zutraut. Wenn keines dieser beiden Worte auftaucht, kann man den Ruhezustand nicht benutzen. → Problembehebung

Das Wort test_resume bedeutet, dass man den Ruhezustand auch testen kann, was man natürlich auch macht:

  1. Für diesen Test muss der zur Aufnahme des Speicherabbildes vorgesehene Swap-Bereich[1] aktiv sein, was man mit den im Artikel Swap (Abschnitt „Swap-ueberwachen“) genannten Methoden überprüfen und mit swapon erledigen kann.

  2. Wenn man mehr als einen Swap-Bereich aktiviert hat, kann automatisch der falsche ausgewählt werden. In diesen Fällen kann man den vorgesehenen als Gerätedatei in die Datei /sys/power/resume schreiben.

  3. Man programmiert mit Rootrechten[2][3] den Test als Standardverfahren für einen Zustandswechsel des Typs disk:

    echo test_resume | sudo tee /sys/power/disk 
  4. Kontrolle:

    cat /sys/power/disk 

    ergibt beispielsweise:

    platform shutdown reboot suspend [test_resume] 
  5. Man startet ein zweites Terminal und darin den Befehl:

    journalctl -k -f | grep PM: 
  6. Im ersten Terminal startet man nun die Erzeugung des Abbildes für den Ruhezustand. Das System wird daraufhin einfrieren und unbedienbar und vielleicht auch nicht mehr aufwachen:

    echo disk | sudo tee /sys/power/state 
  7. Wenn das System glücklicherweise wieder erwacht,

    • findet man im Systemlog im zweiten Terminal hilfreiche Meldungen, deren weitere Ausgaben man nun beendet.

    • Im anderen Fall muss man den Rechner zwangsweise ausschalten und neu starten. Man kann den Ruhezustand nicht verwenden.

    • Der Test ist erfolgreich, wenn keine Fehlermeldungen (z.B. „Kein passendes Gerät gefunden“ oder "Cannot find swap device", "Cannot get swap writer") erscheinen.

  8. Man soll diesen Test ab Punkt 4 mindestens noch einmal direkt wiederholen. In seltenen Fällen misslingt dies, auch bei erfolgreichem ersten Durchlauf.

  9. Nach dem Test deaktiviert man diesen wieder, indem man den vorher gültigen Wert, z.B. platform wieder in die Datei /sys/power/disk schreibt.

Aufwachen konfigurieren

Dieser Abschnitt setzt voraus, dass der Leser das Kapitel „Voraussetzungen und Vorbereitung“ durchgearbeitet hat, sich die benötigten Informationen beschafft hat und der Rechner auch den vorstehenden Test erfolgreich bestanden hat.

⚓︎ In diesem Abschnitt werden in den Beispielen konkrete Werte verwendet, die natürlich auf die für das eigene System passenden zu ändern sind:

  • Swap-Partition für das Speicherabbild: /dev/sda4

  • UUID des SWAP-Dateisystems in der Swap-Partition: b20f08ae-d5f5-4829-8e66-e03274606a50

Damit das System beim Aufwachen aus dem Ruhezustand den vorherigen Zustand wiederherstellen kann (resume), muss es dessen Speicherort kennen. Diesen Speicherort kann man ihm über unterschiedliche Wege mitteilen lassen:

  1. Der Speicherort kann automatisch die Datei initrd.img (der Dateiname wird noch um die Kernelversion ergänzt) übertragen werden.

  2. Es kann konfiguriert werden, was update-initramfs als Ort des Speicherabbildes in die Datei initrd.img schreiben soll.

  3. Man kann im Bootmanager die Startdaten ändern.

  4. Man kann beim Start dem Kernel den Speicherort als Bootparameter von Grub mitteilen lassen.

Methode Ia

Hinweis:

Diese Methode setzt voraus, dass das installierte Betriebssystem zur Erzeugung der Datei initrd.img die Infrastruktur initramfs-tools verwendet, dies ist bei Ubuntu bis mindestens 24.04 der Fall. Es gibt aber Überlegungen, zukünftig hierfür dracut einzusetzen und dann wird diese Methode möglicherweise nicht mehr funktionieren.

Bei jeder Installation eines neuen Kernel wird mit update-initramfs automatisch für diesen ein zum System individuell passende Datei initrd.img erstellt und auch der vermutliche Ort des Speicherabbildes für Hibernate wird geraten. Man muss prüfen, ob die Ausgabe von update-initramfs konsistent mit den selbst ermittelten Informationen ist:

  1. Der zur Aufnahme des Speicherabbildes vorgesehene Swap-Bereich[1] muss aktiv sein. Das gilt übrigens nicht nur für diese Prüfung, sondern für jeden Lauf von update-initramfs, also auch bei der Installation eines neuen Kernels während einer Systemaktualisierung (update).

  2. Man generiert für den laufenden Kernel dessen Datei initrd.img erneut und speichert die Mitteilungen:

    sudo update-initramfs -v -u -k $( uname -r ) | tee /tmp/initrd.log 
  3. Man durchsucht die Ausgaben des Befehls nach dem Begriff resume:

    grep -A3 resume /tmp/initrd.log 

    Beispielausgabe:

    Calling hook resume
    I: Configuration sets RESUME=
    I: Checking swap device /dev/sda4
    I: The initramfs will attempt to resume from /dev/sda4
    I: (UUID=b20f08ae-d5f5-4829-8e66-e03274606a50)
    I: Set the RESUME variable to override this.
    Calling hook thermal
  4. In der Ausgabe müssen die selbst ermittelten Informationen stehen. Dies trifft im Beispiel zu.

Wenn dieser Test fehlschlägt, kann man weitermachen mit Methode IM oder B oder G.

Methode Im

Bei dieser Methode macht man genau das, was update-initramfs mit der Zeile

I: Set the RESUME variable to override this.

empfiehlt. Dazu editiert man mit einem Editor[4] mit Rootrechten[3] die Datei /etc/initramfs-tools/conf.d/resume, die man möglicherweise selbst anlegen muss, und die Beispieldaten sind anzupassen:

# /etc/initramfs-tools/conf.d/resume
RESUME=UUID=b20f08ae-d5f5-4829-8e66-e03274606a50

Bei manchen Versionen von Ubuntu funktioniert wegen Fehler in den Init-Skripten die Identifizierung des Speicherabbildes über die UUID nicht, sondern leider nur über unzuverlässige temporäre Gerätebezeichner, z.B.

# /etc/initramfs-tools/conf.d/resume
RESUME=/dev/sda4

Nun Methode Ia erneut versuchen.

Methode B

Diese Methode eignet sich nicht für eine dauerhafte Einrichtung, aber zum Test.

Man benutzt den Editor des Bootmanagers zur Abänderung der Startdaten und fügt den Bootoptionen des Kernels die für resume benötigten Angaben hinzu (Beispieldaten anpassen!):

resume=UUID=b20f08ae-d5f5-4829-8e66-e03274606a50 

Wenn dies gelingt, dann kann man dieses Verhalten mit Methode G dauerhaft konfigurieren.

Methode G

Achtung!

Unsachgemäßen Änderungen an den Konfigurationsdateien von GRUB können einen späteren Neustart das Systems stören, möglicherweise startet es nicht mehr.

Man ändert mit einem Editor[4] mit Rootrechten[3] die Datei /etc/default/grub und ergänzt den Wert der Variablen GRUB_CMDLINE_LINUX_DEFAULT um die Daten zur Identifizierung des für das Speicherabbild benutzten Swap-Bereiches[1]. Dies kann direkt in der Zeile für die Variable geschehen, besser aber fügt man am Ende der Datei eine weitere Definition dieser Variablen an (Beispieldaten anpassen!):

# /etc/default/grub
…
GRUB_CMDLINE_LINUX_DEFAULT="… … …"     # Diese Zeile nicht ändern!
…
#--------------------------------------------------------------------------
GRUB_CMDLINE_LINUX_DEFAULT+=" resume=UUID=b20f08ae-d5f5-4829-8e66-e03274606a50"

Abschluss der Konfiguration

Wer Methode Ia oder Im benutzt, muss ggf. noch die Dateien initrd.img* für alle installierten Kernel aktualisieren:

sudo update-initramfs -u -k all 

Wer Methode G verwendet, muss noch die Konfigurationsdatei für Grub 2 aktualisieren:

sudo update-grub 

Bedienung

System schlafen legen

Voraussetzung für einen erfolgreichen Wechsel in den Ruhezustand ist, dass der dafür vorgesehene Swap-Bereich aktiv ist. Im produktiven Betrieb benutzt man natürlich nicht die oben beschriebene Schnittstelle zum Kernel, sondern die vom Init-System dafür bereit gestellten Befehle. Auch diese benutzt man besser indirekt über die GUI:

pkexec systemctl hibernate 

In manchen Versionen von Ubuntu funktioniert dieser Befehl auch ohne pkexec oder systemctl. Immer wird man aber nach dem Passwort eines Administrators gefragt. → Problembehebung

⚓︎ Als Variante kommt auch der Befehl

pkexec systemctl suspend-then-hibernate 

in Frage. Bei diesem erfolgt zunächst ein Wechsel in den Modus Bereitschaft. Es wird aber zuvor ein Wecker in der Firmware des Rechners gestellt, der den Rechner nach einer einstellbaren Wartezeit weckt. Die weitere Bearbeitung hängt von der Version ab:

  • Vor 24.04 wurde der Rechner geweckt um in den Tiefschlaf zu fallen.

  • Ab 24.04 (systemd Version ab 255) wird er im Batteriebetrieb periodisch geweckt zur Prüfung des Ladezustandes des Akkus und der Rechner geht nur dann in den Ruhezustand, wenn der Akku fast entladen ist.

In der GUI ist gewollt die Einstellung des Ruhezustandes bei den Optionen für Energie gesperrt oder die Existenz des Ruhezustandes wird komplett verschwiegen.

Der Artikel Desktop-Dateien/Beispiele/Einschlafen beschreibt eine Desktop-Datei, mit der man selbst die in diesem Abschnitt vorgestellten (und weitere) Befehle an systemd in die GUI integrieren kann.

⚓︎ Alternativ findet man auf extensions.gnome.org 🇬🇧 mit dem Suchbegriff "Hibernate" einige Erweiterungen, womit man z.B. eine Option Hibernate ins Status-Menü aufnehmen kann. Erweiterungen funktionieren oft nur mit bestimmten Versionen der Gnome-Shell. → GNOME Shell/Extensions (Abschnitt „extensions-gnome-org“)

Schließlich gibt es noch das Paket qschutdown, welches allerdings nicht Gtk sondern Qt benutzt und vorwiegend für Kubuntu eine Alternative darstellt.

Alle genannten Bedienoberflächen sind reine Bedienoberflächen und machen unter der Haube nichts außer systemd zu beauftragen. Wenn es mit dem oben genannten Befehl

pkexec systemctl hibernate 

nicht funktioniert, wird das durch eine GUI nicht besser.

Schlafendes System benutzen

Das ist technisch möglich, aber man sollte es nicht tun.

Achtung!

Jede Änderung an einer von einem schlafenden System offen gehaltenen Datei oder einem eingebundenen Dateisystem oder am im Swap-Bereich[1] gespeicherten Abbild des Arbeitsspeichers führt zum Datenverlust.
Swap suspend in der Dokumentation des Linux Kernels

Das gilt natürlich auch für das Abziehen von USB-Sticks oder Entfernen von anderen Datenträgern, und auch Netzlaufwerke können in solchen Situationen Datenverlust verursachen.

Die Warnung gilt übrigens unabhängig vom Namen des schlafenden Betriebssystems. Es ist auch Irrsinn, Windows schlafen zu legen und dann mit Linux auf die noch von Windows belegten Ressourcen zugreifen zu wollen. Linux erkennt (in günstigen Fällen, nicht immer) den Wahnsinn seines Benutzers und weigert sich dann, das NTFS-Dateisystem beschreibbar einzubinden und stürzt lieber mit Fehlermeldung ab.

Genauso ist unzulässig, mit Windows oder mit Linux oder jedem anderen Betriebssystem auf die Ressourcen eines schlafenden Linux zuzugreifen.

System aufwecken

Zum Wecken des System schaltet man den Rechner einfach ein, je nach Konfiguration durch Betätigung der Einschalttaste, Aufklappen des Bildschirms, automatisch durch den Wecker in der Firmware, etc.

Der Rechner führt zunächst einen ganz normalen Bootvorgang aus und startet den Bootmanager, bei Ubuntu standardmäßig Grub 2.

An dieser Stelle ist nun wichtig, dass genau das Betriebssystem (Kernel und Datei initrd.img) gestartet wird, welches auch den Ruhezustand ausgelöst hat.

Die Software in der Datei initrd.img erkennt automatisch, dass dies kein Neustart, sondern ein Aufwachen aus dem Ruhezustand (resume) ist und restauriert das frühere Betriebssystem und die Anwendungsprogramme mit geöffneten Dateien und Fenstern. Man kann weiterarbeiten, als hätte es keinen Schlaf gegeben.

Problembehebung

Arbeitsspeicherabbild wird nicht erstellt

Wenn obiger Test für das Einschlafen nicht funktioniert, kann das verschiedene Ursachen haben:

  • Die vom Kernel benötigte Unterstützung durch die Hardware kann in der Firmware des Rechners deaktiviert sein. Das kann man dann nur durch Aufruf der Setup-Routine der Firmware prüfen und ggf. korrigieren. Wie diese Firmware aufzurufen ist, steht in der Bedienungsanleitung des Rechners. Man suche dort auch unter dem Stichwort "Bios". Vielleicht hilft auch eine Aktualisierung der Firmware.

  • Es kann auch sein, dass die eigentliche Funktionalität für Hibernation in der Hardware gar nicht deaktiviert ist, der Rechner aber nicht über einen einstellbaren Wecker ("Alarm") verfügt, der für den Test, aber nicht für Hibernation benötigt wird.

  • Wenn zum Zeitpunkt des Tests irgendwelche Hardware mit maroder Energieverwaltung angeschlossen ist, kann der Rechner möglicherweise nicht einschlafen, weil diese Teile nicht kontrolliert abschaltbar sind. Man entferne also z.B. alle USB-Geräte außer Tastatur und Maus sowie überhaupt alles nicht unbedingt benötigte.

  • Es gibt keinen ausreichend großen Swap-Bereich[1], oder es wird der falsche verwendet. Dann prüfe man, ob die Voraussetzungen erfüllt sind. Bei Hibernation wird nur ein einziger Swap-Bereich benutzt und dieser muss das komprimierte Arbeitsspeicherabbild vollständig aufnehmen können.

System geht nicht in Ruhezustand mit einer Extension

Es kann vorkommen, dass das System zwar mit dem Basis Befehl an systemd in den Ruhezustand geht, aber dass trotzdem manche der Hibernate-Extensions nicht funktionieren. Die Entwickler mancher Desktops (z.B. Gnome) sehen den Ruhezustand skeptisch, weil er Probleme verursachen kann, vor denen die Entwickler glauben die Anwender schützen zu müssen und behindern die Programmierer solcher Erweiterungen. Man kann dies berechtigt als Bevormundung kritisieren, was aber gar nichts hilft. Man wähle eine andere Erweiterung oder einen anderen Desktop.

System schaltet nicht ab

Es kann vorkommen, dass das System nicht ganz abschaltet, was dazu führt, dass der Akku sich entlädt bzw. ein Desktop PC die ganze Zeit Strom verbraucht.

Je nach Version von systemd kann ein verzögerter Beginn des Tiefschlafs beabsichtigt sein, meistens gibt es aber ein Problem mit der maroden Energieverwaltung eines angeschlossenen Gerätes, welches sich nicht abschalten lässt. Man entferne alle nicht unbedingt erforderlichen Geräte.

Siehe auch Artikel Herunterfahren.

System wacht nicht auf

  • Prinzipbedingt darf das System bei aktivem "Secure Boot" nicht das Systemabbild starten. Wer den Ruhezustand benutzen möchte, muss dafür also im Setup-Menü des Rechners "Secure Boot" deaktivieren.

  • Wenn man vor einem schwarzen Bildschirm sitzt oder nur ein Splash-Bild bewundern kann, sollte man zuerst das Bootverhalten anders konfigurieren. Der Bootmanager muss so konfiguriert werden:

    • Anzeige des Bootmenüs

    • Abschalten des Boot-Splash, welcher die Meldungen während des Bootens verbirgt. Bei Grub 2 muss man dafür die Option splash entfernen.

    • Einschalten der Meldungen des bootenden Systems. Bei Grub 2 muss man dafür die Option quiet entfernen.

    • Die Grafik-Karte auf einen Kompatibilitätsmodus schalten.

    • Für die Grafikkarten von Nvidea und AMD sind ggf. mehrere Treiber verfügbar. Man konfiguriere sein System um und aktualisiere die Dateien initrd.img*

    • Die benötigten Bootparameter sind individuell zu ermitteln und können ähnlich wie oben beschrieben an Grub übergeben werden.

Passworteingabe abschalten

Es ist vom System so vorgesehen, dass der Winterschlaf dem Administrator vorbehalten ist und dafür die Eingabe eines Passworts verlangt wird. Viele Anwender, insbesondere auf Systemen mit nur einem regelmäßigen Benutzer empfinden das aber als lästig. Eine Änderung des Verhaltens bedarf eines Eingriffs in den Regelsatz von PolicyKit bzw. in die Konfiguration von sudo und dort muss man die Ausführung des Kommandos für den Ruhezustand ohne Passwort zulassen. Durch einen Fehler bei einem solchen Eingriff kann der Rechner unbenutzbar werden.

Diese Revision wurde am 10. Januar 2025 13:25 von kB erstellt.
Die folgenden Schlagworte wurden dem Artikel zugewiesen: Energie, System, Ruhezustand, Hibernate