Tiefschlaf mit TuxOnIce

Aus LinuxUser 11/2009

Tiefschlaf mit TuxOnIce

© Miguel Ugalde, sxc.hu

Tiefgefroren

Mit TuxOnIce frieren Sie produktive Sitzungen mit mehreren Anwendungen und geöffneten Dokumenten zuverlässig ein und können sie beim nächsten Rechnerstart im Handumdrehen wieder fortsetzen.

Es gibt mehrere Möglichkeiten, die Arbeit am Computer zu unterbrechen – den Rechner herunterzufahren und wieder neu zu starten dauerst am längsten. Zudem stellen die Sitzungsverwaltungen von KDE und Gnome den vor dem Herunterfahren gegebenen Zustand nicht immer lückenlos wieder her: So manche Anwendung öffnet ein leeres Fenster anstatt das vorher geladene Dokument.

Oft zum Einsatz kommt indes der Ruhezustand. Linux fährt die Komponenten wie Grafikkarte, Prozessor und Festplatte so weit wie möglich in einen Energiesparmodus oder schaltet sie komplett aus. Auf Strom ist der Computer jedoch weiterhin angewiesen, da sonst der Inhalt des nicht flüchtigen Speichers verloren geht. Daher leert sich in diesem Modus ein Notebook-Akku leert zwar langsam, aber stetig. Eine stationärer PC wiederum lässt sich nicht komplett vom Stromnetz trennen, woraus ein – mitunter recht hoher – Standby-Verbrauch resultiert. Den Standby-Modus stellt Linux her, indem es das BIOS via ACPI anweist, in den Zustand S3 zu wechseln. Bei Problemen mit der ACPI-Implementation des BIOS funktioniert der Ruhezustand eventuell nicht zuverlässig.

Als Alternative dazu bietet der Standard-Kernel zwei weitere Varianten an, um den Computer in Tiefschlaf zu versetzen. Dabei sichert Linux den Speicherinhalt in eine ausreichend dimensionierte Swap-Partition. Dann stellt der Kernel entweder via ACPI den (weitestgehend) stromlosen Zustand S4 her oder schaltet das System ohne ACPI komplett ab (S5). Beim nächsten Neustart lädt der Boot-Kernel den Speicherinhalt zurück und übergibt dem damit gerade geladenen alten Kernel wieder die Kontrolle. Die “Software Suspend” genannte Implementation erledigt alle Aufgaben komplett im Kernel, während “Userspace Software Suspend” für das Speichern des Images auf ein Userspace-Programm zurückgreift und somit eine Initial RAM-Disk erfordert.

Doch neben diesen beiden Möglichkeiten existiert noch eine weitere, um den Kernel in Tiefschlaf zu versetzen: TuxOnIce [1].

Der dritte Mann

Wozu noch eine dritte Variante, wo doch alle gängigen Distributionen mindestens eine der beschriebenen Suspend-Spielarten out of the box unterstützen?

Der ausgereifte Kernel-Patch TuxOnIce, federführend vom Australier Nigel Cunningham entwickelt, arbeitet sehr schnell, lässt sich flexibel konfigurieren und bietet weitaus mehr Funktionen als die Standard-Verfahren [2]. TuxOnIce komprimiert standardmäßig den Speicherinhalt mit Hilfe des schnellem LZF-Verfahrens oder – seit der neuesten Version 3.0.1 – mit dem im Kernel enthaltenen LZO. Zudem schreibt TuxOnIce wahlweise auf mehrere Swap-Partitionen gleichzeitig oder in eine Datei und speichert fast den gesamten Speicherinhalt inklusive der Caches. So ist der Computer nach dem Aufwachen sofort mit voller Geschwindigkeit einsatzfähig.

TuxOnIce ersetzt den Software-Suspend-Mechanismus im Kernel wahlweise komplett und integriert sich so in die Tiefschlaf-Mechanismen der Desktop-Umgebung. Alternativ steuert das fein konfigurierbare Skript hibernate.sh das Einschlafen und Aufwachen. Wer möchte, installiert sich die obendrein ein User-Interface mit Fortschrittsanzeige, das es erlaubt, einen laufenden Tiefschlaf-Vorgang mit [Esc] abzubrechen. Davon gibt es eine Text-Variante sowie grafische Usplash- [3] und Fbsplash-Versionen [4].

Streit um TuxOnIce

TuxOnIce wickelt den kompletten Tiefschlaf-Prozess im Kernel ab. Der Patch-Autor Nigel Cunningham argumentiert, nur so lasse sich die Funktion zuverlässig implementieren. Dagegen gaben Rafael Wysocki, Pavel Machek und andere etablierte Kernel-Entwickler lange Zeit der Userspace-Variante den Vorzug und weigerten sich beharrlich, TuxOnIce zu integrieren.

Nach einem erneuten Versuch Cunninghams, TuxOnIce in den Standard-Kernel zu bekommen [11], zeichnet sich seit Anfang Mai 2009 ein Wandel ab: Zwar lehnen Machek und Wysocki es weiterhin ab, den gesamten Patch auf einmal aufzunehmen. Es besteht aber mittlerweile eine gewisse Bereitschaft, inkrementelle Verbesserungen an der Kernel-Implementation zu akzeptieren und auf die Userspace-Variante zu verzichten.

Möchten Sie TuxOnIce einsetzen, dann brauchen Sie dazu einen angepassten Kernel. Für Ubuntu und Fedora gibt es dazu bereits fertige Kernel-Pakete.

Installation unter Fedora

Für Fedora bietet das Repository Atrpms perfekt integrierte Pakete [5]. Um es einzubinden, erzeugen Sie die Datei /etc/yum.repos.d/atrpms.repo mit dem Inhalt aus Listing 1. Anschließend führen Sie yum install kernel-tuxonice pm-utils-tuxonice aus.

Listing 1
# /etc/yum.repos.d/atrpms.repo
[atrpms]
name=Fedora Core $releasever - $basearch - ATrpms
baseurl=http://dl.atrpms.net/f$releasever-$basearch/atrpms/stable
gpgkey=http://ATrpms.net/RPM-GPG-KEY.atrpms
gpgcheck=1

Nun ermitteln Sie mittels swapon -s die Swap-Partition und fügen den entsprechenden Device-Namen in der Datei /boot/grub/menu.lst in der kernel-Zeile für den TuxOnIce-Kernel als Option resume=/dev/Swap-Device hinzu. Für die grafische Fortschrittsanzeige fügen Sie noch die Option vga=0x317 ein – weitere Modi listet fb/vesafb.txt aus der Kernel-Dokumentation.

Jetzt starten Sie neu und prüfen anschließend mit cat /sys/power/tuxonice/resume, ob der TuxOnIce-Kernel läuft und die richtige Resume-Partition eingestellt ist. Zeigt cat /sys/power/tuxonice/replace_swsusp eine 1 ersetzt TuxOnIce das originale Software-Suspend komplett.

Für einen ersten Einschlaf-Versuch melden Sie sich von der grafischen Oberfläche ab, wechseln mit [Strg]+[Alt]+[F2] auf eine Konsole, melden sich dort als Root an und führen sync; echo disk > /sys/power/state aus. Klappt alles, probieren Sie den Suspend von der grafischen Oberfläche aus. Wählen Sie unter KDE beispielsweise Ruhezustand (auf Festplatte) aus dem Kickoff-Menü. In anderen Oberflächen sind Bezeichnungen wie Tiefschlaf oder Hibernate gängig.

Installation unter Ubuntu

Unter Ubuntu 8.10 und 9.04 fügen Sie den Installationsquellen das TuxOnIce- [6] und das Sn0ball-PPA[7] hinzu und ergänzen die zugehörigen Signierschlüssel über den Ubuntu-Keyserver. Die dazu notwendigen Befehle zeigt Listing 2. Die Version ersetzen Sie durch die von Ihnen verwendete, also entweder intrepid oder jaunty. Ein anschließendes

$ sudo apt-get update
$ sudo apt-get upgrade

richtet den Modul-kompatiblen TuxOnIce-Kernel ein, da Aptitude diesen aufgrund des Version-Anhängsels +tuxonice1 als neuer einstuft. User-Interface und Hibernate-Skript installieren Sie anschließend über den Befehl sudo apt-get install tuxonice-userui.

Listing 2
$ sudo echo 'deb http://ppa.launchpad.net/tuxonice/ppa/ubuntu Version main' >> /etc/apt/sources.list $ sudo echo 'deb http://ppa.launchpad.net/sn0ball/ppa/ubuntu Version main' >> /etc/apt/sources.list $ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 4BAF9666 $ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys DEC8FAAC

Nun fügen Sie in der Datei /boot/grub/menu.lst in der Zeile mit # defoptions= die Option resume=/dev/sda2 hinzu, wobei Sie /dev/sda2 durch den Bezeichner für die Swap-Partition Ihres Rechners ersetzen. Lassen Sie das Kommentarzeichen dabei unverändert. Die Zeile # altoptions=(recovery mode) ergänzen Sie ebenfalls mit der genannten Option sowie zusätzlich mit noresume. Aktualisieren Sie mittels update-grub das Grub-Menü. Starten Sie neu, und prüfen Sie dann wie für Fedora beschrieben, ob der TuxOnIce-Kernel läuft.

Die initramfs-tools von Ubuntu unterstützen ausschließlich das Userspace-Software-Suspend. Fügen Sie am Ende der Datei /etc/initramfs-tools/modules eine Zeile mit dem Inhalt lzo hinzu, damit die Initrd das Modul für die LZO-Kompression lädt. Erstellen Sie außerdem eine Datei /etc/initramfs-tools/scripts/local-premount/tuxonice_do_resume mit dem Inhalt aus Listing 3. Machen Sie das Skript über sudo chmod +x /etc/initramfs-tools/scripts/local-premount/tuxonice_do_resume ausführbar und aktualisieren Sie dann mittels update-initramfs -k $(uname -r) -u die Initrd. Nun testen Sie das Tiefschlafen wie für Fedora beschrieben. Weitere Hinweise finden Sie im Netz unter [8] und [9].

Listing 3
#!/bin/sh
PREREQ=""
prereqs()
{
  echo "$PREREQ"
}
case $1 in
  # get pre-requisites
  prereqs)
    prereqs
    exit 0
    ;;
esac
if [ -d /sys/power/tuxonice ]; then
 echo 1 > /sys/power/tuxonice/do_resume
fi

Andere Distributionen

Nutzen Sie weder Fedora noch Ubuntu, kommen sie nicht umhin, einen eigenen Kernel zu kompilieren. Dieses Vorgang detailliert zu beschreiben, würde den Rahmen dieses Artikels sprengen. Einige Hinweise liefert der Kasten “Kernel kompilieren”, eine ausführliche Anleitung liefert ein älterer LinuxUser-Artikel ([10], auch auf Heft-DVD unter Know-how).

Die Initrd für Debian passen Sie an, wie für Ubuntu beschrieben. Für die aktuelle OpenSuse-Version 11.1 existiert bislang keine Anleitung, inwiefern die Initrd anzupassen ist. Auf Nummer sicher geht, wer einen Kernel kompiliert, der ohne Initial RAM-Disk auskommt.

Kernel kompilieren

Es gibt eine Reihe von Varianten, um einen eigenen Kernel zu konfigurieren. Entweder holen Sie die Kernel-Quellen von http://kernel.org und wenden im Verzeichnis mit den ausgepackten Archiv mit

$ bzcat tuxonice-Version-for-Kernel-Version.patch.bz2 | patch -p1

den passenden TuxOnIce-Patch an. Alternativ verwenden Sie gleich das passende GIT-Repository des TuxOnIce-Entwicklers ([12],[13]). So befördert der Befehl

$ git clone git://git.kernel.org/pub/scm/linux/kernel/git/nigelc/tuxonice-2.6.31.git

den Quelltext des aktuellen 2.6.31er-TuxOnIce-Kernels auf die Platte. Mit git pull aktualisieren Sie einen bestehendes Quelltext-Verzeichnis, wenn beispielsweise eine neue Minor-Version wie 2.6.31.1 herauskommt.

Für Debian und Ubuntu verwenden Sie make-kpkg aus dem Paket kernel-package, um den Kernel zu bauen. Als Ausgangsbasis für eine eigene Konfiguration eignet sich die Konfiguration für den laufenden Kernel. Für einen Kernel, der ohne Initrd auskommt, kompilieren Sie den Treiber für den Festplatten-Controller und das Root-Dateisystem fest in den Kernel. Der Befehl lsmod zeigt die hierfür geladenen Module am Ende der Liste an.

Die Konfigurationsoptionen befinden sich unter Power management and ACPI options | Enhanced Hibernation (TuxOnIce). Lassen Sie make oldconfig laufen, um die neu hinzugekommenen Optionen zu setzen. Aktivieren Sie zumindest eine Variante für das Speichern des Images, wie den Swap Allocator (CONFIG_TOI_SWAP). Die Optionen Compression support (CONFIG_TOI_CRYPTO), Userspace User Interface support sowie Replace swsusp by default (CONFIG_TOI_REPLACE_SWSUSP) sind ebenfalls empfehlenswert.

Die Option Default userui program location (CONFIG_TOI_USERUI_DEFAULT_PATH) setzt das Standard-Programm für die User-UI. Modulare Kernel brauchen Wait for initrd/ramfs to run, by default (CONFIG_TOI_IGNORE_LATE_INITCALL). Aktivieren Sie auch LZO-Kompression LZO compression algorithm (CONFIG_CRYPTO_LZO) unter Cryptographic API. Abbildung 1 zeigt eine Konfiguration, die auch ohne Initrd funktioniert.

Abbildung 1: Die Kernel-Konfiguration für das Nutzen von TuxOnIce ohne Initrd.

Abbildung 1: Die Kernel-Konfiguration für das Nutzen von TuxOnIce ohne Initrd.

Konfiguration

Mit Hilfe der Dateien unter /sys/power/tuxonice lesen Sie die aktuelle Konfiguration aus (cat ...) oder passen diese zur Laufzeit an:

# echo Wert > /sys/power/tuxonice/Datei

Die möglichen Optionen beschreibt power/tuxonice.txt aus der Kernel-Dokumentation. Einige Informationen, wie zum Beispiel die Anzahl der Tiefschlaf-Zyklen und die Geschwindigkeit beim Schreiben und Lesen des Images, zeigt der Befehl

cat /sys/power/tuxonice_debug

Änderungen gehen beim nächsten Neustart verloren. Nutzen Sie das Hibernate-Skript nicht, verwenden Sie unter Debian und Ubuntu /etc/sysfs.conf für permanente Einstellungen. Führen Sie nach Änderungen /etc/init.d/sysfs restart aus, um diese sofort zu aktivieren. Für Fedora tragen Sie die entsprechenden Befehle in /etc/rc.local ein, unter OpenSuse bleibt nur der Umweg über ein Init-Skript.

Das Hibernate-Skript bietet eine Reihe von Tricks und Kniffen, um auch störrische Rechner zur Zusammenarbeit zu überreden. Klappt alles, brauchen Sie das Skript nicht. Installieren Sie das Paket hibernate, falls noch nicht geschehen, oder besorgen Sie sich das entsprechende Quelltext-Archiv von der TuxOnIce-Homepage. Letzteres entpacken Sie mit tar -xf hibernate-script-2.0.tar.gz, wechseln in das neu entstandene Verzeichnis hibernate-script-2.0 und führen sudo ./install.sh aus. Die Konfigurationsdateien befinden sich unterhalb von /etc/hibernate. Die Manpage hibernate beschreibt alle Optionen.

Nur die Fedora-Pakete integrieren das Skript mit pm-utils, dem Freedesktop.org-Projekt mit Hilfsfunktionen für die Energieverwaltung, das viele Distributionen verwenden. Ab Version 1.1.0 unterstützt pm-utils TuxOnIce direkt. Der Befehl

# echo SLEEP_MODULE=tuxonice > /etc/pm/config.d/10sleepmodule

schaltet auf TuxOnIce um. Mit pm-suspend-hybrid gelingt eine Kombination von Tiefschlaf und Ruhezustand – nur bei unterbrochener Stromzufuhr muss TuxOnIce das Image laden. Hibernate kennt hierfür die Option PowerDownMethod mit dem Wert 3 für die Kombination, 4 fürs Ausschalten via ACPI und 5 fürs Ausschalten ohne ACPI.

Fortschrittsanzeige

Unter Fedora läuft bereits die Text-Oberfläche (Abbildung 2). Für die grafische Anzeige installieren Sie die Pakete userui-tuxonice-fbsplash und userui-tuxonice-theme-fedoraleonidas. Dann wechseln Sie mit [Strg]+[Alt]+[F2] auf eine Konsole und testen die neue Konfiguration mittels /sbin/suspend2ui_fbsplash -t (Abbildung 3). Klappt dies, setzen Sie in /etc/hibernate/tuxonice.conf die Option ProcSetting userui_program auf /sbin/tuxoniceui_fbsplash.

Abbildung 2: Einfach aber zweckmäßig – die Text-Oberfläche für TuxOnIce.

Abbildung 2: Einfach aber zweckmäßig – die Text-Oberfläche für TuxOnIce.

Abbildung 3: Auch die grafische Oberfläche erlaubt das Abbrechen des Tiefschlaf-Vorgangs mit Escape.

Abbildung 3: Auch die grafische Oberfläche erlaubt das Abbrechen des Tiefschlaf-Vorgangs mit Escape.

Unter Debian und Ubuntu spielen Sie wie bei der Installation schon beschrieben das Paket tuxonice-userui ein. Passende Themen befinden sich usplash-theme-debian oder usplash-theme-ubuntu. Testen Sie mittels /usr/lib/tuxonice-userui/tuxoniceui_text -t oder /usr/lib/tuxonice-userui/tuxoniceui_usplash -t. Funktioniert alles wie gewünscht, setzen Sie wie bei Fedora ProcSetting userui_program auf das gewünschte Programm.

Fazit

TuxOnIce bietet eine stabile und zuverlässige Tiefschlaf-Funktion. Neustarts stehen im Idealfall nur noch nach Kernel-Aktualisierungen an. Mehrere Monate lange Rechnerlaufzeiten sind so keine Seltenheit. Das alte Thinkpad T23 des Autors schaffte mit Kernel 2.6.29 über 105 Tage Uptime bei mehr als 100 Tiefschlaf-Zyklen. Eine Dell-Workstation am Arbeitsplatz kam mit Kernel 2.6.28 auf über 200 Tage (Abbildung 4) ununterbrochene Laufzeit. Der Aufwand für ein funktionierendes Setup liegt bei Fedora und Ubuntu niedriger als bei Debian und OpenSuse.

Abbildung 4: Zwei Dell-Workstations mit TuxOnIce und jeweils über 100 Tage Uptime sowie mehr als 40 Tiefschlaf-Zyklen.

Abbildung 4: Zwei Dell-Workstations mit TuxOnIce und jeweils über 100 Tage Uptime sowie mehr als 40 Tiefschlaf-Zyklen.

Glossar

ACPI

Advanced Configuration and Power Management Interface. Offener Industriestandard für die Energieverwaltung von Notebooks, Desktops und Servern.

Initial RAM-Disk

Kurz auch Initrd. Gepackte Datei mit einer RAM-Disk, welche der Bootloader lädt. Der Kernel entpackt und die RAM-Disk und hängt sie ein. Die (distributionsspezifische) Initrd unterstützt zum Booten erforderliche Treiber als Kernel-Module und kommt mit LVM und Soft-RAID klar.

LZO

Lempel-Ziv-Oberhumer. Ein speziell auf besonders schnelles Entpacken ausgelegter Kompressionsalgorithmus.

PPA

Personal Package Archive. Persönliches Paket-Archiv. Mit dieser Launchpad-Funktion stellen Entwickler bequem eigene Paketquellen zusammen.

Infos

[1] TuxOnIce: http://www.tuxonice.net

[2] Feature-Vergleich: http://www.tuxonice.net/features.html

[3] Usplash-Hompeage: https://launchpad.net/usplash

[4] Fbsplash-Homepage: http://fbsplash.berlios.de

[5] Software-Suspend mit Fedora / RHEL: http://mhensler.de/swsusp/index_de.php

[6] TuxOnIce-Kernel-Pakete für Ubuntu: https://launchpad.net/~tuxonice/+archive/ppa

[7] Aktuelles Hibernate-Skript für Ubuntu: https://launchpad.net/~sn0ball/+archive/ppa

[8] TuxOnIce-Artikel im TuxOnIce-Wiki: http://wiki.tuxonice.net/DistroAndHardwareSetup/Ubuntu_Gutsy_Gibbon

[9] “How to Install TuxOnIce in Ubuntu”: http://www.ubuntugeek.com/how-to-install-tuxonice-in-ubuntu.html

[10] Kernel kompilieren: Peter Kreussel, “Kerngeschäft”, LinuxUser 06/2006, S. 88, http://www.linux-user.de/ausgabe/2006/06/088-kernel-kompilieren/

[11] Nigel Cunningham, “[RFC] TuxOnIce”: http://lists.tuxonice.net/lurker/message/20090506.143819.2d1800c8.en.html

[12] TuxOnIce-Kernelquellen für Ubuntu: nigelc/... auf http://kernel.ubuntu.com/git/

[13] TuxOnIce-Kernelquellen für Vanilla-Kernel: linux/kernel.git/nigelc/... auf http://git.kernel.org/

LinuxUser 11/2009 KAUFEN
EINZELNE AUSGABE
ABONNEMENTS
TABLET & SMARTPHONE APPS
E-Mail Benachrichtigung
Benachrichtige mich zu:

Hinweis: Dieser Artikel ist älter als ein Jahr, enthaltene Informationen sind möglicherweise veraltet.

0 Kommentare
Älteste
Neuste Beste Bewertung
Inline Feedbacks
Alle Kommentare anzeigen
Nach oben