Ruhezustand und Wiederaufnahme aus einer Auslagerungsdatei

23

Ich habe eine neue Ubuntu-Installation in einem Notebook so konfiguriert, dass eine Auslagerungsdatei anstelle einer Auslagerungspartition verwendet wird.

Standardmäßig ist es nicht möglich, Ubuntu mithilfe einer Auslagerungsdatei in den Ruhezustand zu versetzen . Daher habe ich dieses Tutorial ausprobiert , aber es ist spezifisch für grub1 , und Ubuntu verwendet jetzt grub2 .

Weiß jemand, wie das geht?

tfmoraes
quelle

Antworten:

21

Ruhezustand mit Swap-Datei mit uswusp

Obwohl es möglich ist, in den Ruhezustand zu wechseln, um die Datei auszutauschen, funktioniert es angeblich mit dem Ruhezustand von systemd, indem Kernelparameter festgelegt werden. Ich konnte es jedoch nicht wieder aufnehmen und wechselte stattdessen zu uswsusp (Userspace-Software suspend) . Hier sind die Schritte, die ich unter Ubuntu 17.04 / 17.10 ausgeführt habe.

Erstellen Sie die Auslagerungsdatei

Die Befehle zum Erstellen einer formatierten 4GiB-Auslagerungsdatei, eingehängt und hinzugefügt zu /etc/fstab:

sudo fallocate -l 4g /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
echo '/swapfile swap swap defaults 0 0' | sudo tee -a /etc/fstab

Überprüfen Sie die Swap-Dateipartition

sudo findmnt -no SOURCE,UUID -T /swapfile
> /dev/sda1 11cc33ee-1234-abcd-1234-ddeeff112233

Userspace Software Suspend installieren (uswsusp)

sudo apt install uswsusp

Konfigurieren Sie uswsusp

So erstellen /etc/uswsusp.confund neu erstellen Sie initramfs:

sudo dpkg-reconfigure -pmedium uswsusp
  • Yeszu " ohne gültigen Swap - Bereich weiter? ' (Der Assistent hat die Auslagerungsdatei noch nicht festgelegt.)
  • Wählen Sie die Partition aus , auf der sich die Auslagerungsdatei befindet, und verweisen Sie auf die Details von findmntoben. ( Hinweis: nicht die Swap-Datei selbst )

Hinweis: Alle Änderungen, die manuell vorgenommen /etc/uswsusp.confwerden, müssen initramfsanschließend mit dem folgenden Befehl neu erstellt werden:

sudo update-initramfs -u

Testen Sie den Ruhezustand von uswusp

sudo s2disk

Im snapshotRuhezustand und im Wiederaufnahmemodus sollten Meldungen auf dem Bildschirm angezeigt werden.

Verwenden Sie s2disk mit dem Ruhezustand systemd

Standardmäßig verwendet systemd seine eigenen Ruhezustandsbefehle. Ersetzen Sie diese also durch die uswusp-Befehle, indem Sie Folgendes überschreiben systemd-hibernate.service:

sudo systemctl edit systemd-hibernate.service

Geben Sie im sich öffnenden Texteditor den folgenden Text ein (das Leerzeichen ExecStart ist erforderlich). Dann speichern und beenden:

[Service]
ExecStart=
ExecStart=/usr/sbin/s2disk 
ExecStartPost=/bin/run-parts -a post /lib/systemd/system-sleep

Dadurch wird eine /etc/systemd/system/systemd-hibernate.service.d/override.confDatei mit Überschreibungsdetails erstellt.

Test systemd Ruhezustand:

systemctl hibernate 

Hinweis: Um zu überprüfen, ob das System override.conferstellt, geladen und fehlerfrei ist, führen Sie Folgendes aus:

systemctl status systemd-hibernate.service

Verweise:

Cas
quelle
Diese Anleitung scheint zu funktionieren, aber der Ruhezustand des Systems funktioniert bei mir nicht. Hast du das selbst getestet? Sollte das ExceStart=run-parts -a post /lib/systemd/system-sleepseinExceStartPost=run-parts -a post /lib/systemd/system-sleep
Joaquín Aramendía
Es wurde getestet und funktioniert, aber möglicherweise ist diese Ergänzung erforderlich. Ich habe meine Antwort aktualisiert.
Cas
Das sieht nicht ganz richtig aus. Die enableMöglichkeit von systemctl symbolischen Links von /etc/systemd/system/bis /lib/systemd/system/. Sie sollten niemals um /etc/systemd/system/
Uhr
1
Ich habe es nicht geschafft, diese Arbeit zu machen 😞. Ich habe swapfile eingerichtet, uswsusp installiert und konfiguriert, aber sudo s2disknur Protokolle Saving snapshot, als das Display ausgeschaltet, hängt für ~ 5 Minuten und dann fährt es den Computer herunter. Nachdem ich es eingeschaltet habe, bootet es normalerweise, als ob es keinen Winterschlaf gegeben hätte.
m93a
1
Ich denke, diese Zeile sudo findmnt -no SOURCE,UUID -T /mnt/4GiB.swapsollte geändert werdensudo findmnt -no SOURCE,UUID -T /swapfile
user1915011
12

Hier ist, was ich getan habe, damit es mit Ubuntu 18.04 funktioniert.

  • Stellen Sie sicher, dass Sie /swapfilemindestens die Größe Ihres Arbeitsspeichers haben

    sudo swapoff /swapfile
    sudo dd if=/dev/zero of=/swapfile bs=$(cat /proc/meminfo | grep MemTotal | grep -oh '[0-9]*') count=1024 conv=notrun
    sudo mkswap /swapfile
    sudo swapon /swapfile
    
  • Notieren Sie sich die UUID der Partition, die Folgendes enthält /swapfile:

    $ sudo findmnt -no SOURCE,UUID -T /swapfile
    /dev/nvme0n1p5 20562a02-cfa6-42e0-bb9f-5e936ea763d0
    
  • Konfigurieren Sie das Paket uswsuspneu, um die Auslagerungsdatei korrekt zu verwenden:

    sudo dpkg-reconfigure -pmedium uswsusp
    # Answer "Yes" to continue without swap space
    # Select "/dev/disk/by-uuid/20562a02-cfa6-42e0-bb9f-5e936ea763d0" replace the UUID with the result from the previous findmnt command
    # Encrypt: "No"
    
  • Bearbeiten Sie den SystemD-Ruhezustand mit sudo systemctl edit systemd-hibernate.serviceund füllen Sie ihn mit folgendem Inhalt:

    [Service]
    ExecStart=
    ExecStartPre=-/bin/run-parts -v -a pre /lib/systemd/system-sleep
    ExecStart=/usr/sbin/s2disk
    ExecStartPost=-/bin/run-parts -v --reverse -a post /lib/systemd/system-sleep
    
  • Beachten Sie den Lebenslauf-Offset Ihres /swapfile:

    $ sudo swap-offset /swapfile
    resume offset = 34818
    
  • Konfigurieren Sie Grub für die Fortsetzung aus der Auslagerungsdatei, indem Sie /etc/default/grubdie folgende Zeile bearbeiten und ändern:

    GRUB_CMDLINE_LINUX_DEFAULT="resume=UUID=20562a02-cfa6-42e0-bb9f-5e936ea763d0 resume_offset=34818 quiet splash"
    
  • Update Grub:

    sudo update-grub
    
  • Erstellen Sie Folgendes /etc/initramfs-tools/conf.d/resume:

    RESUME=UUID=20562a02-cfa6-42e0-bb9e-5e936ea763d0 resume_offset=34816
    # Resume from /swapfile
    
  • Aktualisiere initramfs:

    sudo update-initramfs -u -k all
    

Jetzt können Sie mit überwintern sudo systemctl hibernate.

Man kann auch diese Skripte erstellen:

    sudo tee /usr/local/bin/gotosleep <<EOF
    dbus-send --type=method_call --dest=org.gnome.ScreenSaver /org/gnome/ScreenSaver org.gnome.ScreenSaver.Lock
    sleep 2
    sudo /usr/sbin/s2both
    EOF
    sudo chmod +x /usr/local/bin/gotosleep
    sudo tee /usr/local/bin/gotohibernation <<EOF
    dbus-send --type=method_call --dest=org.gnome.ScreenSaver /org/gnome/ScreenSaver org.gnome.ScreenSaver.Lock
    sleep 2
    sudo systemctl hibernate
    EOF
    sudo chmod +x /usr/local/bin/gotohibernation

So können Sie mit schlafen gotosleepoder mit überwintern gotohibernation.

Sie müssen nicht ausführen, um sudo s2both, sudo s2ramund sudo systemctl hibernateohne Ihr Passwort für die vorherigen Skripte Arbeit einzugeben.

Sie können dies zum Beispiel tun, indem Sie eine powerdevGruppe erstellen , Ihren aktuellen Benutzer hinzufügen und die folgende sudoers-Konfiguration konfigurieren (mit bearbeiten sudo visudo -f /etc/sudoers.d/powerdev):

     %powerdev ALL=NOPASSWD: /usr/sbin/s2both, /usr/sbin/s2ram, /bin/systemctl hibernate

Dokumentation verwendet:

Anthony O.
quelle
Danke dafür! Ich habe viele Methoden ausprobiert, aber nur Ihre funktioniert für mich unter Ubuntu 18.04 :)
jirislav
Ich habe fast das Gefühl, ich würde es noch einmal mit dem Ruhezustand versuchen - ich hatte ein Problem mit gelegentlichen Beschädigungen meiner Festplatten, die anscheinend mit dem Ruhezustand zusammenhängen. Sind Sie auf so etwas gestoßen?
Charles Green
Vielen Dank, @Anthony! Ich habe so viele Dinge versucht, um den Winterschlaf zum Laufen zu bringen. Ihre war die endgültige Lösung, die tat. Es scheint sehr seltsam für mich , dass dies nicht richtig sofort eingerichtet ist. :(
Mike Williamson
Vielen Dank für diesen Leitfaden. Nachdem ich die Schritte befolgt und versucht habe, den Ruhezustand mit $ sudo systemctl hibernate zu beenden, wird mein Laptop einige Sekunden nach dem Versuch, den Ruhezustand zu beenden, wieder aktiviert. / var / log / syslog zeigt viele Fehler, aber diese scheinen am relevantesten zu sein: - Fehler beim Festlegen des Energiesparmodus für Ausgabe eDP-1: Berechtigung verweigert ... - Objekt .Gjs_AppIndicatorIconActor__1 (0x561c60a4d150) wurde bereits finalisiert. Es ist unmöglich, eine Eigenschaft darauf festzulegen. ... - s2disk: Das Wiederaufnahmegerät konnte nicht verwendet werden (versuchen Sie es mit Swapon -a). Grund: Kein solches Gerät - systemd-hibernate.service: Hauptprozess beendet, Code = beendet, ...
Jelani Nelson
1
Dies ist die einzige Lösung, die für mich funktioniert hat. Nur angemeldet, um dieser Antwort zuzustimmen. Vielen Dank.
Dpetrini
8

Ich habe das Tutorial kurz gelesen und wenn ich es richtig verstanden habe, müssen Sie nur die resumeOptionen in der Linux-Befehlszeile angeben . Mit Grub2 ist das ganz einfach und Ihre Änderungen bleiben immer erhalten. Sie müssen die /etc/default/grubDatei bearbeiten , insbesondere diese Zeile:

GRUB_CMDLINE_LINUX="resume=... resume_offset=..."

Führen Sie anschließend sudo update-grubden Befehl aus, damit die Änderungen wirksam werden.

Änderungen wirken GRUB_CMDLINE_LINUXsich nicht auf andere Linux-Installationen aus (da /etc/grub.d/30_os-proberdiese Variable nicht verwendet wird).

Was das Problem betrifft, das Sie haben: Ist die Partition der Auslagerungsdatei verschlüsselt? In diesem Fall funktioniert der Ruhezustand nicht. Wenn nicht, kann die Ausgabe von filefrag -v /swapfilehilfreich sein.

Andrea Corbellini
quelle
Vielen Dank! Ich werde es versuchen. Aber ich denke, es werden alle Linux-Einträge in Grub mit dieser Zeile konfiguriert.
tfmoraes
Vergiss nicht: Nach dem Wechsel /etc/default/grubmusst du rennen update-grub.
13.
@tfmoraes: warum soll dies nicht zu allen Linux-Einträgen hinzugefügt werden?
13.
@JanC: Weil ich möglicherweise andere Linux-Distributionen installiert habe.
tfmoraes
1
@ didi_X8 dieser Kommentar wurde vor 8 Jahren geschrieben. Möglicherweise haben sich die Dinge seitdem geändert. Danke für das Teilen.
Andrea Corbellini