Start   Impressum   Lizenz         online lesen   Download         Online-Shop   Jumping Blue Turtle

Debian für Unternehmer - Debian-Know-how

6110: Hartverdrahtete Probleme lösen

Seit Debian Lenny gibt es Probleme, die von Suspend-Logiken verursacht werden, wenn ein Migriertes System die SWAP-Partition an einer geänderten Position vorfindet.

Das Booten in einer neuen Umgebung wird dann von folgendem Dialog unterbrochen:

Begin: Mounting root file system ... Begin: Running /scripts/local-top ... done.
Begin: Running /scripts/local-premount ... resume: libgcrypt version: 1.4.1
resume: Could not stat the resume device file '/dev/sda14'
        Please type in the full path name to try again
        or press ENTER to boot the system: 

Was ist passiert? Nun, in diesem Beispiel wurde ein Template auf einem System erstellt, dessen SWAP-Partition sich auf "/dev/sda14" befand. Dieses Template wurde später auf einem System eingespielt, dessen SWAP-Partition sich nun auf "/dev/sda12" befindet.

Die Information "/dev/sda14" ist aber leider hart verdrahtet und wird seit Lenny nun auch tatsächlich bei jedem Booten benutzt.

1. Abhilfe

Generell ist es nützlich, das Unterverzeichnis "/etc" immer dann nach der Partitionsbezeichnung der SWAP-Partition zu durchsuchen, wenn sich die Position der SWAP-Partition bei einer Migration ändert. Dazu können Sie die Suchfunktion des Midnight-Commanders verwenden.

Konkret lösen Sie das Problem, wenn sich die Position der SWAP-Partition ändert, wie folgt:

  1. Öffnen Sie die Datei "/etc/uswsusp.conf":
    nedit /etc/uswsusp.conf
    

    Ersetzen Sie dort die alte Partitionsbezeichnung der SWAP-Partition durch die neue. Im hier genannten Beispiel würde die Aktion so aussehen:

    Vorher
    resume device = /dev/sda14
    
    Nachher
    resume device = /dev/sda12
    
  2. Öffnen Sie die Datei "/etc/initramfs-tools/conf.d/resume":
    nedit /etc/initramfs-tools/conf.d/resume
    

    Ersetzen Sie dort die alte Partitionsbezeichnung der SWAP-Partition durch die neue. Im hier genannten Beispiel würde die Aktion so aussehen:

    Vorher
    RESUME=/dev/sda14
    
    Nachher
    RESUME=/dev/sda12
    
  3. Öffnen Sie die Datei "/var/cache/debconf/config.dat":
    nedit /var/cache/debconf/config.dat
    

    Laut Recherche (gefunden hier – Warnung: Die Seite enthält Fäkalsprache!) stehen in der Datei "config.dat" Variablen, die von den Installations-Skripten angelegt, aber auch abgefragt werden. Mit "Installations-Skripten" wird sicherlich "Debconf" gemeint sein. Die Aufgabe von "Debconf" scheint dabei zu sein, dafür zu sorgen, dass bei Verwendung von "apt-get install", "aptitude install" oder "dpkg -i" Default-Werte für Fragen zu verwenden sind, wenn diese Fragen aufgrund der "priority", die Sie per "dpkg-reconfigure debconf" auch individuell verändern können, nicht gestellt werden.

    Bei Installations- oder Konfigurations-Aktionen kann nicht ausgeschlossen werden, dass Debian einen nun falschen Wert aus der Datei "config.dat" entnimmt und zu Unrecht als korrekt voraussetzt. Jedenfalls müssen Sie damit immer dann rechnen, wenn in der Datei "/etc/apt/apt.conf.d/70debconf" der Wert "DPkg::Pre-Install-Pkgs {"/usr/sbin/dpkg-preconfigure --apt || true";};" aktiv ist, also nicht per "//" auskommentiert wurde. Aus diesen Gründen halte ich es für angebracht, die hartverdrahteten Einträge in der Datei "config.dat" ebenfalls per Hand anzupassen.

    Ersetzen Sie also auch hier die alte Partitionsbezeichnung der SWAP-Partition durch die neue. Im hier genannten Beispiel würde die Aktion so aussehen:

    Vorher
    Name: uswsusp/resume_device
    Template: uswsusp/resume_device
    Value: /dev/sda14
    Owners: uswsusp
    Variables:
     list = /dev/sda14
    
    Nachher
    Name: uswsusp/resume_device
    Template: uswsusp/resume_device
    Value: /dev/sda12
    Owners: uswsusp
    Variables:
     list = /dev/sda12
    
  4. Sie müssen nun noch das Initramfs-Image aktualisieren, damit Ihre Änderungen in der Datei "/etc/initramfs-tools/conf.d/resume" in das Image hingelangen:
    update-initramfs -u
    

Den entscheidenden Hinweis, wie das Problem behoben werden kann, habe ich aus zwei alten Diskussionen (geführt in den Jahren 2008 und 2007) entnommen, die ein Teilnehmer mit dem Namen "pluvo" mit anderen Diskussionsteilnehmern geführt hatte:

2. Weitere Recherche-Ergebnisse und Einsichten

Das hier aufgestoßene Thema kam für mich völlig überraschend. Eigentlich wollte ich nur mal schnell ein weiteres produktives System von Etch auf Lenny bringen, weil es einfach nur noch öde ist, sich mit Problemen herumschlagen zu müssen, die nur deshalb auftreten, weil das laufende System 3 Jahre alt ist und dementsprechend hoffnugslos veraltet.

Doch statt nun endlich zügig das Template einspielen und das System maßschneidern zu können, artete diese Aktion zu einer weiteren über mehrere Tage verteilten Recherche-Aktion aus.

Was ich hierbei gelernt habe, werde ich, wenn ich mich um Squeeze kümmern werde, in das Gesamtkonzept einfließen lassen müssen, denn die in Kapitel 1 gemachten Vorschläge kurieren ja nur Symptome, nicht aber die Ursachen.

2.1. Recherche-Ergebnisse

Hier trage ich zusammen, was ich sonst noch so finde.

2.1.1. Ist ein Resume-Device eigentlich sinnvoll?

Nein! Dieser Link hier erklärt sehr anschaulich, warum ein Resume-Device ziemlicher Käse ist:

http://forum.ubuntuusers.de/topic/etc-initramfs-tools-conf-d-resume-ohne-resume/

Hier stehen vor allem 2 Argumente, die gegen ein Resume-Device sprechen:

  1. Das Einlesen des Inhalts von 6 GB RAM von einer Festplatte dauert länger als ein herkömmlicher System-Neustart.
  2. Der Bootvorgang dauert unnötig lange, wenn beim Booten nachgesehen werden muss, ob ein Resume durchzuführen ist, wenn von Anfang an klar, dass ein Resume sowieso nie passieren wird. Also: Wozu dann erst bei jedem Booten nachsehen und wertvolle Zeit verschwenden?

2.2. Einsichten

Und hier trage ich zusammen, welche Empfehlungen ich aus den oben aufgelisteten Recherche-Ergebnissen in künftigen Versionen von "Debian für Unternehmer" ableiten werde.

2.2.1. Ist ein Resume-Device eigentlich sinnvoll?

Besonders dann, wenn Ihr System eigentlich gar kein SWAP-Device hat (Stichwort Rettungsfestplatte), wäre dementsprechend auch gar keine SWAP-Partition da, die als Resume-Device missbraucht werden könnte.

Konsequenz: Sagen Sie dem Initramfs-Image, dass es sich um Resume-Devices nicht kümmern soll. Dazu öffnen Sie die Datei "/etc/initramfs-tools/conf.d/resume":

nedit /etc/initramfs-tools/conf.d/resume

Kommentieren Sie den dort befindlichen Eintrag mit einem "#" aus. Im hier genannten Beispiel würde die Aktion so aussehen:

Vorher
RESUME=/dev/sda14
Nachher
# RESUME=/dev/sda14

Sie müssen nun noch das Initramfs-Image aktualisieren, damit Ihre Änderungen in der Datei "/etc/initramfs-tools/conf.d/resume" in das Image hingelangen:

update-initramfs -u
2.2.2. Wozu eigentlich muss "userspace software suspend" laufen?

Wenn die Software Uswsusp gar nicht gebraucht wird, sondern ihre Existenz nur Probleme verursacht, dann empfehle ich, sie am besten gleich zu deinstallieren:

apt-get remove uswsusp --purge

Ich habe diese Aktion jetzt (25.04.2010) nicht getestet, kann also nicht sagen, welche Folgen sie haben wird. Aber künftig (Squeeze), werde ich sie wohl standardmäßig empfehlen, besonders dann, wenn das Ziel wichtig ist, ein schlankes System zu erstellen, also ein managebares System ohne unnötigem Firlefanz.

2.2.3. Argument gegen Suspending aus Sicht der Datenkonsistenz

Es ist praktisch nicht mehr möglich, nur noch mit einem Betriebssystem alle im täglichen Leben anstehenden Aufgaben zu erledigen. Einfachstes Beispiel:

  • Auf einem Debian-Lenny-System scheitert die Simple Aufgabe, mal eben 800 Megabyte Daten passwortgeschützt in ein 7-Zip-Archiv einzupacken daran, dass die mit Lenny ausgelieferte 7-Zip-Version einen Bug hat. Es muss also ein Etch gebootet werden, damit diese simple Aufgabe erledigt werden kann, denn die ältere 7-Zip-Version unter Etch hat diesen Bug noch nicht.

Multiboot ist daher aktuell die Regel. Mit den Bordmitteln von Lenny kann Multiboot um Virtualisierung ergänzt (nicht ersetzt, sondern nur ergänzt) werden.

Wenn aber in einer Multiboot-Umgebung verschiedene Betriebssysteme auf die gleichen Daten zugreifen, dann werden Suspend-Logiken ganz schnell zu einem unkalkulierbaren Risiko.

Warum?

Selbst wenn Sie es schaffen würden, jedem System einen eigenen SWAP-Bereich zuzuweisen, damit die Systeme sich gegenseitig die ausgelagerten RAM-Inhalte nicht überschreiben, wäre es denkbar, dass Sie vor dem Suspenden verschiedene Dateien offen haben, vielleicht sogar im Schreib-Modus.

Sie können sich sicherlich denken, was passieren wird, wenn verschiedene Systeme die gleichen Dateien jeweils im Schreib-Modus bearbeiten und zu willkürlichen Zeitpunkten mal eben schlafen gelegt werden. Falls nicht, hier kommt die Antwort: Sobald ein System aus dem Tiefschlaf erwacht, haben sich die Inhalte der betroffenen im Schreib-Modus geöffneten Dateien bereits verändert. Die so entstehende Dateninkonsistenz ist in Produktivumgebungen nicht wirklich lustig.