Vorwort

Vorwort

Vorwort

Ich habe einen Fehler gemacht und installiertUbuntu 20.04 LTS mit einer verschlüsselten ZFS/OpenZFS- rootPartitionauf meinem produktiven Arbeits-Desktop in einer Dual-Boot-Konfiguration (siehe Partitionstabelle unten). Aber ich habe dem Tutorial, das ich befolgt habe, nicht richtig geachtet und jetzt scheint es, dass ich eine Swap-Partition von 4G habe, obwohl ich 32G RAM habe (BEARBEITEN: Ich habe herausgefunden, wie ich den Swap erhöhen kann, aber ich kann immer noch nicht in den Ruhezustand wechseln – siehe unten). Daher kann ich diese Maschine nicht in den Ruhezustand versetzen.

Wie kann ich dieses Problem am besten lösen, damit ich den Computer in den Ruhezustand versetzen kann?

Aktuellen Zustand

$ sudo fdisk -l /dev/nvme0n1
Disk /dev/nvme0n1: 1.88 TiB, 2048408248320 bytes, 4000797360 sectors
Disk model: KXG60PNV2T04 NVMe KIOXIA 2048GB         
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 1FCA11ED-9263-4C06-A8DF-594C0DE84AFA

Device             Start        End    Sectors   Size Type
/dev/nvme0n1p1      2048    1085439    1083392   529M Windows recovery environment
/dev/nvme0n1p2   1085440    1290239     204800   100M EFI System
/dev/nvme0n1p3   1290240    1323007      32768    16M Microsoft reserved
/dev/nvme0n1p4   1323008  409420488  408097481 194.6G Microsoft basic data
/dev/nvme0n1p5 409421824  410920959    1499136   732M Windows recovery environment
/dev/nvme0n1p6 410923008  415117311    4194304     2G Linux filesystem
/dev/nvme0n1p7 415117312 4000797326 3585680015   1.7T Linux filesystem

$ sudo swapon --show --output all
NAME     TYPE      SIZE USED PRIO UUID                                 LABEL
/dev/zd0 partition   4G   0B   -2 1e1fb013-69d9-4878-b358-6b8ee53d5b09

$ sudo zpool list -v
NAME          SIZE  ALLOC   FREE  CKPOINT  EXPANDSZ   FRAG    CAP  DEDUP    HEALTH  ALTROOT
Root         1.66T   535G  1.13T        -         -     2%    31%  1.00x    ONLINE  -
  nvme0n1p7  1.66T   535G  1.13T        -         -     2%  31.5%      -  ONLINE

$ sudo zpool status -v
  pool: Root
 state: ONLINE
  scan: none requested
config:

    NAME         STATE     READ WRITE CKSUM
    Root         ONLINE       0     0     0
      nvme0n1p7  ONLINE       0     0     0

errors: No known data errors

$ sudo zfs list
NAME                                                                              USED  AVAIL     REFER  MOUNTPOINT
Root                                                                              539G  1.08T      192K  none
Root/root                                                                         534G  1.08T      530G  /
Root/root/00a891589b00cebc55cb6767e266ca38ac201daf3a6048c1f33d7d55c0710533        544K  1.08T      143M  legacy
[…] # many other legacy mount points
Root/root/ffe52d35c873e6a417ee12c7025d848dac1f269b8078266f00a8d8088fd34384        396K  1.08T      607M  legacy
Root/swap                                                                        4.25G  1.08T      172M  -

$ sudo zfs get all Root/swap
NAME       PROPERTY              VALUE                 SOURCE
Root/swap  type                  volume                -
Root/swap  creation              So Aug  2 15:36 2020  -
Root/swap  used                  4.25G                 -
Root/swap  available             1.08T                 -
Root/swap  referenced            172M                  -
Root/swap  compressratio         1.00x                 -
Root/swap  reservation           none                  default
Root/swap  volsize               4G                    local
Root/swap  volblocksize          4K                    -
Root/swap  checksum              on                    default
Root/swap  compression           off                   local
Root/swap  readonly              off                   default
Root/swap  createtxg             3746                  -
Root/swap  copies                1                     default
Root/swap  refreservation        4.25G                 local
Root/swap  guid                  12379969387189982956  -
Root/swap  primarycache          metadata              local
Root/swap  secondarycache        none                  local
Root/swap  usedbysnapshots       0B                    -
Root/swap  usedbydataset         172M                  -
Root/swap  usedbychildren        0B                    -
Root/swap  usedbyrefreservation  4.08G                 -
Root/swap  logbias               throughput            local
Root/swap  objsetid              278                   -
Root/swap  dedup                 off                   default
Root/swap  mlslabel              none                  default
Root/swap  sync                  always                local
Root/swap  refcompressratio      1.00x                 -
Root/swap  written               172M                  -
Root/swap  logicalused           169M                  -
Root/swap  logicalreferenced     169M                  -
Root/swap  volmode               default               default
Root/swap  snapshot_limit        none                  default
Root/swap  snapshot_count        none                  default
Root/swap  snapdev               hidden                default
Root/swap  context               none                  default
Root/swap  fscontext             none                  default
Root/swap  defcontext            none                  default
Root/swap  rootcontext           none                  default
Root/swap  redundant_metadata    all                   default
Root/swap  encryption            aes-256-gcm           -
Root/swap  keylocation           none                  default
Root/swap  keyformat             passphrase            -
Root/swap  pbkdf2iters           342K                  -
Root/swap  encryptionroot        Root                  -
Root/swap  keystatus             available             -

Was ich versucht habe

Erstellen einer Auslagerungsdatei

Ich dachte, eine Auslagerungsdatei wäre eine einfache Lösung, aber da lag ich offensichtlich falsch:

$ sudo dd if=/dev/zero of=/swapfile bs=1MiB count=$((32*1024))
32768+0 records in
32768+0 records out
34359738368 bytes (34 GB, 32 GiB) copied, 14.5783 s, 2.4 GB/s

$ sudo chmod 600 /swapfile

$ sudo swapon /swapfile
swapon: /swapfile: skipping - it appears to have holes.

Ich schätze also, ich sollte lieber die Swap-Partition vergrößern. Mir ist auch nicht klar, warum swaponbehauptet wird, dass die Swap-Partition verfügbar ist, 4Gobwohl zfs get all Root/swapes heißt, dass sie 1.08Tverfügbar ist.

Alles mit GParted

GParted erkennt nicht viel. Dies könnte mit dem Fehler in os-prober( zusammenhängen.GParted Ausgabe 14,Debian-Fehler 888114,os-prober-Problem 1848496, OpenZFS-Probleme9801Und9069)

Bildbeschreibung hier eingeben

Ersetzen der kleinen Swap-Partition (=Vergrößern der Swap-Partition auf ZFS)

Der Schöpfungsbefehl wurde inspiriert vonein Kommentar auf GitHubaber du solltest bedenkennichtbenutzen-o sync=always.

$ sudo zfs create -V 32G -b $(getconf PAGESIZE) -o logbias=throughput -o primarycache=metadata -o secondarycache=none -o com.sun:auto-snapshot=false -o compression=zle Root/swap_two
$ sudo zfs rename Root/swap Root/swap_bak
$ sudo zfs rename Root/swap_two Root/swap
$ sudo mkswap -f /dev/zvol/Root/swap
$ sudo swapon /dev/zvol/Root/swap

Stellen Sie sicher, dass dieser Eintrag in folgender Reihenfolge vorliegt /etc/fstab:

/dev/zvol/Root/swap none swap discard 0 0

Starten Sie dann neu und entfernen Sie den winzigen Legacy-Swap:

$ sudo zfs destroy Root/swap_bak

Obwohl dies anscheinend funktioniert hat, kann ich noch immer nicht in den Ruhezustand wechseln:

$ sudo systemctl hibernate
Failed to hibernate system via logind: Sleep verb "hibernate" not supported

Daher bin ich weiterhin für jeden Ratschlag offen. Vielleicht braucht es einen eigenen resumeParameter in GRUB_CMDLINE_LINUX_DEFAULT?

Antwort1

Letztendlich lag der Grund nicht an ZFS. Selbst nach der Größenanpassung des Swaps funktionierte es nicht, da es bei neueren Ubuntu-Versionen einfach deaktiviert ist (es wird jedoch noch einmal überdacht).

Um dieses Problem zu beheben, müssen Sie den Ruhezustand aktivieren.

  1. com.ubuntu.desktop.pklaIn einem Editor öffnen :
$ sudo vim /var/lib/polkit-1/localauthority/10-vendor.d/com.ubuntu.desktop.pkla
# or on some machines
$ sudo vim /etc/polkit-1/localauthority/10-vendor.d/com.ubuntu.desktop.pkla

Suchen Sie nach den Einträgen Disable hibernate by default in upowerund Disable hibernate by default in logindund ändern Sie jeden ResultActiveWert in yes.

Starten Sie neu und testen Sie das Ergebnis mit

$ sudo systemctl hibernate
# or
$ sudo pm-hibernate

Wenn es immer noch nicht funktioniert, müssen Sie möglicherweise Dinge wie Fast bootund Secure bootin Ihrem BIOS deaktivieren (AUFMERKSAMKEIT:es istsehrwahrscheinlich müssen Sie das auf neueren Maschinen tun).

Wenn der Test keinen Fehler mehr ergibt, sollte es in den Ubuntu-Einstellungen auch möglich sein, Ruhezustände bestimmten Aktionen zuzuweisen. Zum Beispiel dem Drücken des Power-Buttons.

Stromversorgung – Ruhezustand und Stromversorgung – Schalter Verhalten des Netzschalters – Ruhezustand

Antwort2

Die Verwendung von ZFS für Swap (entweder eine Datei auf einem Dateisystem oder ein ganzes Zvol) ist bereitseine schlechte Idee, ganz zu schweigen davon, damit zu überwintern. Mein einziger Rat wäregib es ganz auf, ZFS ist nicht für diesen Zweck gebaut.

ZFS ist einlogstrukturiertes Dateisystem, bei dem die Blöcke (Ausdehnungen) einer Datei zu keinem Zeitpunkt festgelegt sind, sondern sich bei jedem Schreiben ändern (die Regel „Kein Überschreiben“). Das Swap-Subsystem erwartet jedoch einfache, verständliche Zuordnungen zwischen der Swap-Datei und den Blöcken sowie direkten Zugriff auf die zugrunde liegenden Festplattensektoren, was keine Eigenschaft logstrukturierter Dateisysteme ist. Btrfs, ein weiteres LFS, unterstützt Swap-Dateien mitzahlreiche Einschränkungen, nur um es zu machenverwendbar, während ZFS nicht einmal unterstützt O_DIRECT. Es gibt einen Grund, warum SwapPartitionenleistungsfähiger und zuverlässiger als SwapDateien.

ZFS führt viele interne Buchhaltungsvorgänge durch, um die Transaktionssicherheit zu gewährleisten, und ist stark auf reichlich Speicher angewiesen. Wenn Sie ZFS für Swap verwenden, dessen Hauptzweck darin besteht, als festplattengestützte Speichererweiterung zu dienen, verursacht dies bei hoher Last oder hohem Swap-Druck eine positive Rückkopplungsschleife zwischen ZFS und dem Speicherverwaltungssubsystem. Dies kann beispielsweise zu einer Soft-Locking-Funktion des gesamten Systems führen.

Wenn Sie noch einen Schritt weitergehen und den Ruhezustand mit Swap-on-ZFS durchführen, geraten die internen Datenstrukturen von ZFS früher oder später in Schwierigkeiten, da die Wiederaufnahme des Ruhezustands auf korrektem und konsistentem Speicher beruht, der von der Festplatte geladen wurde, während ZFS außerdem von wohlgeformten Datenstrukturen im Arbeitsspeicher abhängt, um integrale Festplattendaten bereitzustellen.

Antwort3

Verfahren zum Erhöhen der Größe der Swap-Partition und Verwenden für den Ruhezustand

  1. Erstellen der Swap-Partition

    Aktivieren der Swap-Partition

    So machen Sie die neue Swap-Partition für den Ruhezustand nutzbar (optional)

    Erstellen der Swap-Partition. Booten Sie von der Ubuntu-Installations-CD und wählen Sie die Option, Ubuntu jetzt auszuführen. Gehen Sie zu System -> GParted Partition Editor.

Löschen Sie die Swap-Partition und, falls nichts anderes darin ist, die erweiterte Partition, die sie enthält. (Wenn Sie durch ein Wunder die Größe Ihrer Swap-Partition von hier aus ändern können, wird Ihr Leben vermutlich viel einfacher sein als meines.) Verringern Sie die Größe Ihrer primären Partition um den Betrag, den Ihre neue Swap-Partition haben soll (ich habe meine sicherheitshalber auf 2x RAM + 500 MB festgelegt). Am einfachsten geht das, indem Sie die Größe des Swap-Speicherplatzes in das Feld „freier Speicherplatz folgend“ eintragen. Wählen Sie im nun erstellten freien Speicherplatz „Neu“, geben Sie „linux-swap“ ein und benennen Sie die Partition nach Belieben „swap“. Klicken Sie auf dieAnwendenSchaltfläche (sollte ein Häkchen sein), um die Änderungen auf die Festplatte zu schreiben. Wenn Sie fertig sind, starten Sie Ubuntu neu. Aktivieren Sie die Swap-Partition (Wenn sich Ihr Swap auf Ihrer primären Festplatte befindet, müssen Sie hier nichts tun.) Jetzt müssen Sie herausfinden, auf welcher Partition sich Ihr Swap befindet und welche UUID diese hat. UUID?!, sagen Sie? Nun, das ist der universell eindeutige Bezeichner für die Partition, sodass Sie darauf verweisen können, auch wenn sie sich aufgrund hinzugefügter Festplatten usw. von Boot zu Boot an einem anderen Einhängepunkt befindet.

Öffnen Sie ein Terminal, führen Sie gksu gparted & aus und geben Sie Ihr Root-Passwort ein. Mit & wird dieser Prozess ausgeführt, während Sie weiterhin auf die Befehlszeile zugreifen können.

Klicken Sie mit der rechten Maustaste auf Ihre Swap-Partition und wählen SieInformation. Sie sollten dasWegUndUUIDdort aufgeführt. Lassen Sie dies für spätere Referenz geöffnet. Führen Sie gksu gedit /etc/fstab & aus und suchen Sie nach der Zeile, dietauschendarin. Es sollte die dritte Spalte sein, getrennt durch Leerzeichen oder Tabulatoren. Sie können entweder den Pfad oder die UUID verwenden, um Linux mitzuteilen, wo sich Ihre Swap-Partition befindet. Ich empfehle die UUID, da sie konstant bleibt, selbst wenn Sie die Partition verschieben oder die Festplatte irgendwie zu sdb statt sda oder etwas Ähnlichem wird. Nehmen Sie die entsprechenden Änderungen vor und speichern Sie die Datei. Ihre Zeile sollte ungefähr so ​​aussehen, wenn Sie UUID verwendet haben (natürlich mit Ihrer UUID stattdessen):

UUID=41e86209-3802-424b-9a9d-d7683142dab7 keine Swap-SW 0 0

oder dies, wenn Sie den Pfad verwendet haben: /dev/sda2 none swap sw 0 0

Speichern Sie die Datei. Aktivieren Sie die neue Swap-Partition mit diesem Befehl.

sudo swapon --all

ODER

$ sudo swapon --all --verbose

swapon on /dev/sda2
swapon: /dev/sda2: found swap signature: version 1, page-size 4, same byte order
swapon: /dev/sda2: pagesize=4096, swapsize=2147483648, devsize=2147483648
Confirm that the swap partition exists.

$ cat /proc/swaps
Filename                                Type            Size    Used    Priority
/dev/sda2                               partition       2097148 0       -1

Starten Sie neu, um sicherzustellen, dass der neue Swap beim Start richtig aktiviert wird. So machen Sie die Swap-Partition für den Ruhezustand funktionsfähig (optional). „INFO: Dies funktioniert nicht für 12.04, die Fortsetzung aus dem Ruhezustand funktioniert für 12.04 anders.“

Öffnen Sie erneut ein Terminal und führen Sie cat /proc/swaps aus. Hoffentlich sehen Sie dort den Pfad zu Ihrer Swap-Partition. Wenn nicht, ist bei den obigen Schritten wahrscheinlich etwas schiefgelaufen. Hier ist meine Ausgabe:

Dateiname Typ Größe Verwendet Priorität /dev/sda2 partition 2676732 73380 -1 gksu gedit /etc/default/grub & zum Hochladen der Bootloader-Konfiguration

Suchen Sie nach der Zeile GRUB_CMDLINE_LINUX="" und stellen Sie sicher, dass sie wie folgt aussieht (natürlich unter Verwendung Ihrer UUID) GRUB_CMDLINE_LINUX="resume=UUID=41e86209-3802-424b-9a9d-d7683142dab7" und speichern Sie die Datei

sudo update-grubund warte, bis es fertig ist

gksu gedit /etc/initramfs-tools/conf.d/resume & und stellen Sie sicher, dass der Inhalt resume=UUID=41e86209-3802-424b-9a9d-d7683142dab7 ist (natürlich mit Ihrer UUID anstelle meiner). Speichern Sie die Datei!

sudo update-initramfs -u

Neustart! Jetzt sollten Sie in den Ruhezustand wechseln und fortfahren können!

verwandte Informationen