Ruhezustand
Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:
Ubuntu 20.04 Focal Fossa
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.
Hinweis:
Die in diesem Artikel verwendeten Methoden sind veraltet. Die benötigten Pakete stehen bei Ubuntu 22.04 LTS und neuer nicht mehr zur Verfügung. Die Funktionalität des Ruhezustands ist im Linux-Kernel selbst eingebaut und wird über systemd gesteuert, somit benötigt man bei aktuellen Ubuntu-Betriebssystemen auch keine weitere Software zur Nutzung des Ruhezustandes.
Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:
Vom Ruhezustand spricht man, wenn der Zustand eines laufenden Systems "eingefroren" und das Betriebssystem anschließend heruntergefahren wird. Nach einem erneuten Start des Systems wird der vorherige Zustand 1:1 wiederhergestellt - als wäre das System gar nicht beendet worden. Das heißt zum Beispiel, dass alle geöffneten Fenster und Programme wieder offen sind.
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 "Bereitschaftsmodus" (englisch: sleep) wird im Ruhezustand keine Energie benötigt.
Grundsätzlich kann der Rechner auch via systemd über den Befehl sudo systemctl hibernate
[2][3] in den Ruhezustand versetzt werden. Dies funktioniert aber in vielen Fällen nicht, so dass das folgende Vorgehen notwendig ist bzw. zum Erfolg führen kann.
Vorbereitung¶
Da beim Ruhezustand der Zustand des Arbeitsspeichers in den Swap-Bereich[4] geschrieben wird, muss ein solcher existieren und ausreichend groß sein. Am einfachsten ist die Erreichung des Ruhezustandes mit einer Swap-Partition, es geht aber auch mit einer Swap-Datei (swapfile). Man muss also zunächst herausfinden, wie der Swap-Bereich eingerichtet ist. Details findet man unter Swap (Abschnitt „Swap-ueberwachen“). Existiert kein Swap-Bereich, muss man einen anlegen.
Ermitteln der UUID für Swap-Partition¶
Zuerst muss für die swap-Partition die UUID ermittelt werden, z.B. im Terminal über den Befehl:
lsblk -o NAME,UUID,FSTYPE,SIZE,LABEL,MOUNTPOINT
Die aktive swap-Partition ist die, die in der Ausgabe in der Spalte "MOUNTPOINT" mit "[swap]" gekennzeichnet ist. Ein Swap-Bereich im RAM wie z.B. zram0
etc. kann hier nicht verwendet werden.
Ermitteln der UUID für swapfile¶
Es muss von der swapfile die UUID ermittelt werden, z.B. im Terminal über den Befehl:
findmnt -no SOURCE,UUID -T /swapfile
/dev/sdc1 28f75806-2cb1-4fe6-a6cb-bb39568138d9
Die UUID ist hier also die Zeichenkette "28f7...38d9".
Nun ermittelt man noch den sogenannten "Offset" des Swapfile. Markiert ist im Folgenden der Wert, der später benötigt wird[2][3]:
sudo swap-offset /swapfile
resume offset = 21474836480
Das Programm swap-offset ist im Paket uswsusp enthalten, welches für diesen Test installiert sein muss.
Installation¶
Bei Ubuntu-Systemen ab 20.04 muss nichts installiert werden, da alle benötigten Funktionalitäten im Linux Kernel und im Init-System eingebaut sind. (→ Hinweis) 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.
Früher wurden für das Ausführen des Ruhezustands werden folgende Pakete benötigt[1], welche nur bis Ubuntu 20.04 verfügbar sind:
hibernate
uswsusp
Befehl zum Installieren der Pakete:
sudo apt-get install hibernate uswsusp
Oder mit apturl installieren, Link: apt://hibernate,uswsusp
Achtung!
Wer zRam installiert hat, sollte jetzt noch uswsusp neu Konfigurieren ausführen, und dabei das richtige Volume auswählen. Sonst versucht uswsusp
die RAM-Disk für den Ruhezustand zu verwenden, was dann logischerweise in die Hose gehen muss.
Einrichtung¶
Damit das System beim Aufwachen aus dem Ruhezustand den letzten Zustand wiederherstellen kann ("resume"), muss es wissen, wo dieser gespeichert ist. Dazu editiert man mit einem Editor mit Root-Rechten[3] die Dateien /etc/default/grub[5] und /etc/initramfs-tools/conf.d/resume.
Achtung!
Änderungen an den Konfigurationsdateien von GRUB können das System beschädigen. bei unsachgemäßen Einstellungen startet es ggf. nicht mehr richtig.
/etc/default/grub¶
mit Swap-Partition¶
Hier wird die UUID der Swap-Partition angegeben:
GRUB_CMDLINE_LINUX_DEFAULT="<bestehende Parameter> resume=UUID=<DIE UUID DER SWAP-PARTITION>"
Die evtl. schon bestehenden Parameter von GRUB_CMDLINE_LINUX_DEFAULT
sollte man nicht löschen, sondern im Zweifelsfall mittels davor gesetztem #
in einer Kommentarzeile parken.
mit swapfile¶
Hier wird die ermittelte Größe und der Wert aus dem Offset des swapfile ergänzt, sowie die ermittelte UUID:
GRUB_CMDLINE_LINUX_DEFAULT="<bestehende Parameter> resume=UUID=<DIE UUID DES swapfile> resume_offset=21474836480"
/etc/initramfs-tools/conf.d/resume¶
Wenn noch nicht vorhanden, muss man diese Datei mit Root-Rechten neu erstellen, und dann folgendes eintragen:
mit Swap-Partition¶
RESUME=UUID=<DIE UUID DER SWAP-PARTITION>
mit swapfile¶
RESUME=UUID=<DIE UUID DES swapfile> resume_offset=21474836480
Einlesen der Konfiguration¶
Jetzt müssen beide Einträge noch eingelesen werden:
sudo update-grub sudo update-initramfs -u -k all
Ruhezustand ausführen¶
Nun führt man den Ruhezustand aus mit
sudo hibernate
Bei einem Neustart sollte das System zum vorigen Stand zurück kehren.
Alternativ findet man auf extensions.gnome.org 🇬🇧 mit dem Suchbegriff "Hibernate" einige Extensions, womit man z.B. eine Hibernate-Option ins Status-Menü aufnehmen kann.
Problembehebung¶
Bei einigen neueren Grafikkarten von AMD kann es zu Fehlern beim Aufwachen aus dem Hibernate kommen, da in den meisten Fällen der Radeon-Grafiktreiber als Standard verwendet wird.
Zur Überprüfung, welcher Grafiktreiber verwendet wird, gibt man folgendes in ein Terminal ein
lspci -nnk | grep -A4 "\[03..\]:"
Sollte die Ausgabe so aussehen
Kernel driver in use: radeon Kernel modules: radeon, amdgpu
Hier wird der radeon-Treiber verwendet ("Kernel driver in use") aber es kann auch der amdgpu-Treiber (siehe Grafikkarten/AMD) verwendet werden ("Kernel modules").
Um den amdgpu-Treiber zu verwenden ist folgender Eintrag in der GRUB 2/Konfiguration /etc/default/grub mit einem Editor mit Root-Rechten zu bearbeiten.
GRUB_CMDLINE_LINUX="radeon.si_support=0 radeon.cik_support=0 amdgpu.si_support=1 amdgpu.cik_support=1"
Änderung speichern und Grub neu einlesen mit
sudo update-grub
Nach einem Neustart sollte der amdgpu -Treiber verwendet werden und das Aufwachen aus dem Hibernate funktionieren.
System schaltet beim Runter fahren 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.
Eine mögliche Lösung ist die Datei /etc/hibernate/tuxonice.conf mit einem Editor mit Root-Rechten zu bearbeiten. Aus der Zeile
PowerdownMethod 5
ist dazu die Raute zu entfernen.
System zeigt nur ein schwarzes Bild beim Start¶
Es kann vorkommen das das System nur einen Schwarzen Bildschirm anzeigt, obwohl alles in Ordnung ist. Die Ursache liegt meist an dem Eintrag quiet splash
in der Datei /etc/default/grub. Eine mögliche Lösung ist die Datei mit einem Editor mit Root-Rechten zu bearbeiten. Beispiel
GRUB_CMDLINE_LINUX_DEFAULT="noplymouth resume=UUID=4478b4b2-2d23-475a-adaf-e34112ecff85"
Hierbei wird der Eintrag von quiet splash
durch noplymouth
ersetzt. Änderung speichern und Grub neu einlesen mit:
sudo update-grub
System geht nicht in Ruhezustand mit einer Extension¶
gnome-extension: Simpler Off Menu |
Es kann vorkommen, dass das System zwar mit dem Befehl sudo hibernate
in den Ruhezustand geht, aber dass trotzdem manche der Hibernate-Extensions von extensions.gnome.org 🇬🇧 nicht direkt funktionieren. Falls eine Situation vorliegt, wie z.B. dass das Swapfile zu klein ist (RAM-Größe hier im Bsp: 782912):
swapon -s
Dateiname Typ Größe Benutzt Priorität /swapfile file 1155228 0 -2 /dev/sda8 partition 9435132 0 -3
Beim Versuch, mit der Erweiterung in den Ruhezustand zu gehen, bekommt man mit journalctl -r
z.B. folgende Meldung:
-- Logs begin at Fri 2020-04-24 08:39:32 CEST, end at Sun 2020-08-02 16:21:09 CEST. -- Aug 02 16:21:09 USER-ThinkPad-X1-Carbon-3rd systemd[1451]: gnome-launched-systemctl-3887.scope: Succeeded. Aug 02 16:21:09 USER-ThinkPad-X1-Carbon-3rd gnome-shell[3887]: Failed to hibernate system via logind: Not enough swap space for hibernation Aug 02 16:21:09 USER-ThinkPad-X1-Carbon-3rd systemd[1451]: Started Application launched by gnome-shell. ...
Eine Lösung ist z.B., das Swapfile zu löschen:
sudo swapoff /swapfile
Dann muss man mit einem Editor mit Root-Rechten aus der Datei /etc/fstab die Zeile löschen, in der die Auslagerungsdatei eingetragen ist. Anschließend sind noch die folgenden Befehle auszuführen:
sudo rm /swapfile sudo swapon
Mit swapon -s
wird bestätigt, dass nur noch die ausreichend große Swap-Partition benutzt wird. Nun kann man mit der Extension den Ruhezustand benutzen.
uswsusp neu Konfigurieren¶
Unter bestimmten Umständen kann es erforderlich sein, die Swap Konfiguration neu einzulesen. Dazu gibt man Folgendes in ein Terminal ein:
sudo dpkg-reconfigure -pmedium uswsusp
Bei der folgenden Abfrage "Ohne einen gültigen Swap-Bereich fortfahren?" sollte man "nein" wählen.
Die nächste Abfrage, von wo das System aufgeweckt werden soll, wird mit der "/dev/disk/by-uuid" gewählt - auch wenn man eine swapfile hat!
Die letzte Frage, ob der Schnappschuss verschlüsselt werden soll, sollte mit "nein" beantwortet werden. Ansonsten wird beim Aufwecken das Passwort verlangt.
Da dabei nur das initramfs
des primären Kernels aktualisiert wird, ist es ratsam, anschließend auch nochmal folgendes auszuführen:
sudo update-initramfs -u -k all