it-swarm.com.de

Ruhezustand und Wiederaufnahme aus einer Auslagerungsdatei

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 über eine Auslagerungsdatei in den Ruhezustand zu versetzen. Daher habe ich versucht, dieses Tutorial , aber es ist spezifisch für grub1 und Ubuntu verwendet jetzt grub2 .

Weiß jemand, wie das geht?

22
tfmoraes

Ruhezustand mit Swap-Datei mit uswusp

Obwohl es möglich ist, in den Ruhezustand zu wechseln und die Datei auszutauschen, funktioniert es angeblich mit dem Ruhezustand von systemd, indem Kernelparameter festgelegt werden. Ich konnte es jedoch nicht wiederaufnehmen 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, die angehängt und zu /etc/fstab hinzugefügt wurde:

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 /mnt/4GiB.swap
> /dev/sda1 11cc33ee-1234-abcd-1234-ddeeff112233

Userspace Software installieren Suspend (uswsusp)

Sudo apt install uswsusp

Konfigurieren Sie uswsusp

So erstellen Sie /etc/uswsusp.conf und erstellen initramfs neu:

Sudo dpkg-reconfigure -pmedium uswsusp
  • Yes bis ' Ohne gültigen Auslagerungsspeicher fortfahren? ' (Assistent hat Auslagerungsdatei noch nicht festgelegt.)
  • Wählen Sie die Partition aus, auf der sich die Auslagerungsdatei befindet, und verweisen Sie auf Details aus findmnt oben. ( Hinweis: nicht die Auslagerungsdatei selbst )

Hinweis: Bei manuellen Änderungen an /etc/uswsusp.conf muss anschließend initramfs mit folgendem Befehl neu erstellt werden:

Sudo update-initramfs -u

Testen Sie den Ruhezustand von uswusp

Sudo s2disk

Im Ruhezustand und im Wiederaufnahmemodus sollten snapshot 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 den systemd-hibernate.service überschreiben:

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.conf -Datei mit Überschreibungsdetails erstellt.

Test systemd Ruhezustand:

systemctl hibernate 

Hinweis: Um zu überprüfen, ob der systemd override.conf erstellt, geladen und fehlerfrei ist, führen Sie Folgendes aus:

systemctl status systemd-hibernate.service

Referenzen:

18
Cas

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

  • Stellen Sie sicher, dass Ihr /swapfile mindestens die Größe Ihres RAM hat

    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 Ihren /swapfile enthält:

    $ Sudo findmnt -no SOURCE,UUID -T /swapfile
    /dev/nvme0n1p5 20562a02-cfa6-42e0-bb9f-5e936ea763d0
    
  • Konfigurieren Sie das Paket uswsusp neu, 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.service und 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 Wiederaufnahmeversatz Ihres /swapfile:

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

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

    Sudo update-grub
    
  • Erstellen Sie den folgenden /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 Sudo systemctl hibernate in den Ruhezustand wechseln.

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

Sie können also mit gotosleep schlafen oder mit gotohibernation in den Ruhezustand wechseln.

Sie müssen in der Lage sein, Sudo s2both, Sudo s2ram und Sudo systemctl hibernate auszuführen, ohne Ihr Kennwort eingeben zu müssen, damit die vorherigen Skripts funktionieren.

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

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

Dokumentation verwendet:

10
Anthony O.

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

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

Führen Sie danach Sudo update-grub aus, damit die Änderungen wirksam werden.

Das Ändern von GRUB_CMDLINE_LINUX wirkt sich nicht auf andere Linux-Installationen aus (da /etc/grub.d/30_os-prober diese Variable nicht verwendet).

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 /swapfile hilfreich sein.

8