Welches ist der Benutzerbereichsbefehl zum Fortsetzen des Betriebs aus dem Ruhezustand?

Welches ist der Benutzerbereichsbefehl zum Fortsetzen des Betriebs aus dem Ruhezustand?

Lange Zeit habe ich

echo disk > /sys/power/state

Um in den Ruhezustand zu wechseln, /dev/sda10habe ich zum Fortsetzen das initrd meiner Debian-Distribution verwendet.

Aber vor kurzem bin ich auf ein RAID-Array umgestiegendie erfordern, dass ich ein komplett benutzerdefiniertes initramfs verwende (Ich musste es von Grund auf neu erstellen, da der Versuch, das vorhandene Initrd zu ändern, nicht funktionierte.)um das RAID-Array vor dem Mounten der Root-Partition einzurichten.

Es gibt zwei Möglichkeiten, den Vorgang fortzusetzen: Entweder kann der Kernel das Swap-Dateisystem direkt mit dem resume=Kernel-Parameter lesen(und es wird fortgesetzt, bevor init gestartet wird) ; oder es benötigt etwas Benutzerspeicherplatz(zum Beispiel Laden von Modulen)um auf die Swap-Partition zugreifen zu können.

Was ist also der Benutzerbereichsbefehl, um fortzufahren von /dev/mapper/isw_qfyzrvbsusf_Volume0p9 ?

Antwort1

Die kurze Antwort lautet /sys/power/resume

Viel längere Antwort, denn das allein bringt nicht viel, wenn überhaupt etwas. Die meisten Distributionen empfehlen, eine Wiederaufnahme vom Init-/PID-1-Prozess (früher Benutzerbereich) aus zu initiieren. Die Anweisungen werden Sie jedoch fast immer dazu auffordern, Ihrem Bootloader ein Kernel-Cmd-Zeilenargument mit dem Wiederaufnahmeziel hinzuzufügen. Der Grund dafür ist in fast allen Fällen, dass das Initramfs-Buildtool (dracut / mkinitcpio / initramfs-tools) selbst durch dieses Argument in der Konfiguration ausgelöst wird.

Basierend auf Ihrem Beispiel und Ihrer Distribution gehe ich davon aus, dass Sie die Low-Level-Kernelschnittstelle für Suspend (swsusp) verwenden. Es gibt eine Reihe anderer Dienstprogramme, mit denen der Suspend-Prozess gestartet werden kann. Alle sind im Grunde Wrapper um das erste Element, swusp.

  • schwups- Kernel-Schnittstelle auf niedriger Ebene; Benutzerschnittstelle erfolgt über sysfs
  • uswswp- Low-Level-Userspace-Software-Suspend-Wrapper - stellt s2disk- und s2ram-Dienstprogramme bereit (wird nicht aktiv gepflegt)
  • pm-utils- High-Level-Skripte zur Konfiguration des Prozesses
  • Systemd-Suspendieren- Auf systemd-Systemen ist ein Suspend-Ziel verfügbar, das den Suspend-Vorgang über die Kernel-Schnittstelle initiiert.

Konfiguration fortsetzen

Eine stark vereinfachte Darstellung der Boot-Reihenfolge unter Linux bei Verwendung eines Initramfs-Images sieht folgendermaßen aus:

[BIOS] ==> [Bootloader] ==>[Kernel auf temporärem Root-FS - Initramfs] ==> [Kernel auf Root-FS - Laufwerke]

Am Ende der Initramfs-Phase gibt es ein kleines Fenster, in dem die Wiederaufnahme erfolgen kann; nachdem der Kernel PID 1 (systemd oder init) gestartet und die Treiber für das RAID geladen hat, aber bevor die eigentlichen Laufwerke gemountet werden.

Ich habe ein Beispiel für eine typische Wiederaufnahmekonfiguration bereitgestellt. Dabei wird davon ausgegangen, dass der von Ihnen angegebene Wiederaufnahmepfad eine Swap-Partition ist und keine „normale“ Partition mit einer Swap-Datei. Eine Swap-Datei erfordert eine zusätzliche Konfiguration. Die systemd-Methode ist anders – sie verwendet eine auf resume.target basierende udev-Regel, die den Wiederaufnahmeprozess auslöst. Es lohnt sich, dies zu untersuchen, wenn der traditionellere Ansatz mit Bootloader/Initramfs-Image nicht funktioniert. Dies ist eine direkte Folge der Vorgehensweise eines init-basierten Systems; es ist jedoch etwas schwieriger, manuell ein eigenes Skript einzufügen und die gegenseitigen Abhängigkeiten/relativen Zeitabläufe richtig einzustellen.

Unterm Strich liegt der Zeitpunkt, zu dem die Wiederaufnahme ausgelöst wird, unmittelbar vor dem Zeitpunkt, an dem der Kernel die „echten“ Festplatten mountet. Wenn der Kernel also das gesamte FS mounten kann, verfügt er auch über alle erforderlichen Fähigkeiten und Informationen, um nur die Swap-Partition zu mounten.

Stellen Sie sicher, dass Ihre Swap-Partition über fstab gemountet ist. Das Initramfs-Tool Dracut sucht gezielt danach und schließt das Resume-Modul nicht ein, wenn die Swap-Partition nicht vorhanden ist.

Bootloader konfigurieren

Vorausgesetzt, Sie verwenden grub2, müssen Sie resume=/dev/mapper/isw_qfyzrvbsusf_Volume0p9dem GRUB_CMDLINE_LINUX_DEFAULTFeld unter „ /etc/default/grub Aktualisieren Sie Ihr Grub-Image“ Folgendes anhängen, normalerweise mit dem folgenden Befehl:sudo grub2-mkconfig -o /boot/grub2/grub.cfg

initramfs neu erstellen

Sie müssen das Initramfs-Image mit der Resume-Funktion neu erstellen (sowie die bereits vorgenommenen RAID-Änderungen). Debian bietet sowohl dracut als auch initramfs-tools zum Generieren von Initramfs. Es muss mit dem Resume-Modul neu generiert werden. Fügen Sie mit dracut das Befehlszeilenargument hinzu --add resume. update-initramfsFügen Sie mit den Eintrag resume=/dev/mapper/isw_qfyzrvbsusf_Volume0p9zur Konfigurationsdatei hinzu/etc/initramfs-tools/conf.d/resume

Das sollte es sein; vorausgesetzt, ich habe einige richtige Annahmen bezüglich Ihrer Konfiguration gemacht.

Bearbeiten; vorausgesetzt, Sie können es richtig timen, können Sie die Haupt-/Nebengerätenummer der Swap-Partition von einem Init-Skript aus an /sys/power/resume zurücksenden, um die Wiederaufnahme auszulösen. Ihr Initramfs- (oder Initd-)Image muss Wiederaufnahmeunterstützung enthalten, sonst existieren dieses Sysfs-Element und die von ihm dargestellte Funktion nicht. Siehehttps://bugs.launchpad.net/ubuntu/+source/initramfs-tools/+bug/983805

Antwort2

Die Datei ist /sys/power/resume.

Um die Wiederaufnahme auszulösen, muss die Hauptnummer des Geräts, gefolgt von der Nebennummer, in diese Datei geschrieben werden. Der folgende Befehl kann dies erreichen:

echo `stat -c %t /dev/mapper/isw_*_Volume0p9`\:`stat -c %T /dev/mapper/isw_*_Volume0p9` > /sys/power/resume

verwandte Informationen