
Vorwort
Ich habe einen Fehler gemacht und installiertUbuntu 20.04 LTS mit einer verschlüsselten ZFS/OpenZFS- root
Partitionauf 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 swapon
behauptet wird, dass die Swap-Partition verfügbar ist, 4G
obwohl zfs get all Root/swap
es heißt, dass sie 1.08T
verfü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)
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 resume
Parameter 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.
com.ubuntu.desktop.pkla
In 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 upower
und Disable hibernate by default in logind
und ändern Sie jeden ResultActive
Wert 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 boot
und Secure boot
in 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.
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
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-grub
und 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!