Bootfehler mit 2. verschlüsselter btrfs Festplatte sowie verschlüsselter SWAP Partition - ERROR: resume: hibernation device

Alle meine Festplatten sind btrfs formatiert und mit LUKS verschlüsselt. Auf der SSD Festplatte ist das ManjaroOS Betriebssystem inkl. Home-Verzeichnis und der SWAP Partition. Die SWAP ist mit Ruhezustand. Auf einer weiteren Festplatte (Hard Disk) sind meine Daten.

Wenn ich das System boote, gebe ich das Passwort zur Entschlüsselung zum Start des Betriebssystems ein (SSD Festplatte). Wenn die “Daten” Festplatte in fstab hinterlegt ist, bootet der Rechner im weiteren Schritt nicht mehr vollständig. Es geht nichts mehr weiter. Dabei ist es egal, ob ich die Datenfestplatte als /media/Daten/ oder /run/media/rulinux/Daten/ in fstab einhänge. Interessanterweise wurde die 2. Festplatte bei der Installationsroutine “automatisch” als /run/media/rulinux/Daten/ eingehängt. Danach ging der Rechner wie gesagt nicht mehr vollständig zu booten.

Als Überbrückungs-Lösung habe ich die Daten Festplatte in fstab (im live-boot Modus) auskommentiert. Dann lies sich das System vollständig booten, wenn es auch mit folgenden Fehlermeldungen sehr lange dauerte.

Device does not exist or access denied.
ERROR: resume: hibernation device '/dev/mapper/luks-XXX
[ TIME ] Timed out waiting for device /dev/disk/by-uuid/YYYYYYY
[DEPEND] Dependency failed for Cryptography Setup for luks-YYYYYYY
[DEPEND] Dependency failed for /dev/mapper/luks-YYYYYYY
[DEPEND] Dependency failed for /dev/mapper/luks-YYYYYYY
[DEPEND] Dependency failed for Swaps
[DEPEND] Dependency failed for Local Encrypted Volumes
[ TIME ] Timed out waiting for device /dev/mapper/luks-ZZZZ
[DEPEND] Dependency failed for /run/media/rulinux/Daten
[DEPEND] Dependency failed for Local File Systems
Your are in emergency mode. After logging in, type "journalctl -xb" to view system logs, "systemctl reboot" to reboot, "systemctl default" or "exit" to boot into default mode
Adminstraorpassowrt für Wartungszwecke eingeben
(oder drücken Sie Strg+D, um fortzufahren):

Erklärung: “luks-ZZZZ” ist die UUID der LUKS-Partition der 2. Festplatte (Daten). Die anderen beiden UUIDs “luks-XXX” und “luks-YYYYYYY” kann ich nicht zuordnen.

Ich bin auf diese Lösungsmöglichkeit gestoßen und habe sie umgesetzt, indem ich die Swap Partition mit Verschlüsselung in der KDE Partitionsverwaltung neu erstellt habe und die Luks-UUID für Swap in /etc/fstab und in /etc/default/grub unter resume eingetragen habe. Danach habe ich sudo update-grub durchgeführt.
Device does not exist or access denied - ERROR: resume: hibernation device …

Anschließend habe ich neu gebootet und es erscheint immerhin eine reduzierte Fehlermeldung beim Bootvorgang:

ERROR: resume: hibernation device '/dev/mapper/luks-KKK
[ TIME ] Timed out waiting for device /dev/disk/by-uuid/HHHH
[DEPEND] Dependency failed for Cryptography Setup for luks-HHHH
[DEPEND] Dependency failed for Local Encrypted Volumes
[ TIME ] Timed out waiting for device /dev/mapper/luks-LLLL
[DEPEND] Dependency failed for /dev/mapper/luks-LLLL
[DEPEND] Dependency failed for Swaps

Mit lsblk -fi' lässt sich nur luks-LLLL` der Swap Partition zuordnen. Die anderen beiden UUIDs kann ich nicht zuordnen.

Wie bekomme ich dieses Problem noch gelöst?

Ist das zuerst LUKS, dann btrfs oder zuerst btrfs und dann LUKS?

Musst du nicht die UUID der Partition in /etc/crypttab eintragen, damit das verschlüsselte Container entschlüsselt eingehängt werden kann in /dev/mapper/luks-XXX?

I) Danke, ja. Ich habe jetzt die komplette LUKS UUID für die SWAP Partition in /etc/crypttab sowie in /etc/fstab eingetragen. Auch habe ich die anderen Partitionen mit richtiger LUKS UUID eingetragen.
Beim erneuten Booten erscheinen nun bereits noch weniger Fehlermeldungen. Das ist gut. Dennoch:

Device does not exist or access denied.
ERROR: resume: hibernation device '/dev/mapper/luks-XXX
Please enter passphrase for disk ... (luks-XXXXX) on swap: 
Please enter passphrase for disk ... (luks-YYYYY): 

Verwunderlich ist, dass bei der 2. Zeile, “ERROR” Zeile die Luks UUID mit 8 Stellen verkürzt angezeigt wird im Gegensatz zur vollständigen Luks UUID in Zeile 3, die sich auch unter lsblk -fi findet. Auch habe ich die vollständige in der /etc/default/grub entsprechend sinngemäß wie hier eingegeben:

resume=/dev/mapper/luks-XXXXX

Irgendetwas passt da noch nicht. Den weiteren Beitrag, den ich gefunden habe ERROR: resume: hibernation device macht mich auch nicht schlauer.

Wie kann ich diesen “ERROR: resume: hibernation device” lösen?

II). Die fehlenden Passwörter beim Booten in Zeile 3 und 4 (s. oben) konnte ich
mit einem Beitrag von @kisun lösen: Passwort in die crypto_keyfile.bin hinterlegt. Die Eingabe der bestehenden Passwörter werden mit dem Befehl abgefragt
Fürs Datenlaufwerk

sudo cryptsetup luksAddKey /dev/sda1 /crypto_keyfile.bin

Fürs Swap Laufwerk

sudo cryptsetup luksAddKey /dev/nvme0n1p3 /crypto_keyfile.bin

P.S.

Verstehe ich nicht ganz. Aber LUKS ist natürlich der Container und darin befindet sich die btrfs Partition.

Eventuell das hier?

PS: Das Skript funktioniert anscheinend nicht mehr.

Auf den ersten Blick wirkt das recht kompliziert und aufwendig. Schaue ich mir noch näher an.

Gibt es vielleicht noch eine einfachere Alternative?

Tja, du hast dich für LUKS + BTRFS entschieden. Da funktioniert Hibernation nur mit Tweaks. Also nein. :man_shrugging:

Und was meinst Du zu dieser Anleitung? Ist diese vollumfänglich erklärt? Was fehlen dort ggf. für Zwischenschritte?
Konfiguration Ruhezustand

Da fehlen Schritte. Wie gesagt, LUKS braucht Anpassungen, wie auch BTRFS braucht welche. Das wäre die Konfiguration eine Standard Installation (unverschlüsselt und ext4).

Tja, wenn das alles noch unausgereift ist, dann überlege ich ernsthaft, ob ich auf die Hibernation (Ruhezustand) Funktion verzichte und halt nur den Standy-Modus (Bereitschaftszustand) nutze.

Wie muss ich die Einstellungen für das Swap-Laufwerk konfigurieren (Befehle), um vom Hibernation (Ruhezustand) Modus weg zu kommen und halt nur den Standy-Modus (Bereitschaftszustand) zu nutzen?

Hibernation Parameter in /etc/mkinitcpio.conf und /etc/default/grub entfernen, wie auch linux images und grub menu neu erstellen:

sudo update-grub
sudo mkinitcpio -P

Dann evtl. auch noch hier eine Datei erstellen:

sudo mkdir  -pv /etc/systemd/sleep.conf.d/
sudo nano /etc/systemd/sleep.conf.d/disable-hibernation.conf

mit dem inhalt:

AllowHibernation=no
AllowSuspendThenHibernate=no
AllowHybridSleep=no

Vielleicht hilft Dir ja das hier weiter.
(Link zu einem anderen Thread hier im Forum)
Soweit ich das sehe ist das genau das Szenario was Du haben wolltest
und er hat beschrieben, wie er es gemacht hat.

(das allerletzte Kommando ist nicht völlig korrekt
und das hibernator script solltest Du nur einmal laufen lassen - sonst hast Du mehrfache Einträge in Deiner Grub Konfiguration.
ein backup des Originals hilft …)

Zu Deinem Lösungsvorschlag @megavolt
verschlusselte btrfs festplatte sowie verschlusselte swap partition error resume hibernation device
Da erscheint jetzt beim Booten

Starting version 250.4-2-manjaro
Device does not exist or access denied
Error: resume: no device specified for hibernation

Die letzte Fehlermeldung kam bei mir sinngemäß als Warnung beim durchführen von sudo mkinitcpio -P

==> WARNING: consolefont: no font found in configuration
  -> Running build hook: [encrypt]
==> WARNING: Possibly missing firmware for module: qat_4xxx
  -> Running build hook: [openswap]
==> WARNING: swap_device variable is not set
==> WARNING: crypt_swap_name variable is not set

Bei mir ist die /etc/mkinitcpio.conf komplett leer.

Sollte alles nicht fruchten, dann müsste ich doch den sehr aufwendingen Weg zur Fehlerbeseitigung von Dir wählen:
How to enable btrfs with hibernation (error: resume: hibernation device)

Entweder du entfernst den Hook openswap aus /etc/mkinitcpio.conf oder setz die korrekten Werte in /etc/openswap.conf

Wenn ich in /etc/openswap.conf das hier aus lsblk -fi einsetze
gemäß dieser Anleitung openswap - error resume hibernation device

## cryptsetup open $swap_device $crypt_swap_name
## get uuid using e.g. lsblk -f
swap_device=/dev/disk/by-uuid/XXX
crypt_swap_name=luks-YYY

kommt zwar keine diesbezüglich Fehlermeldung mehr, wenn ich sudo mkinitcpio -P laufen lasse, aber beim Booten kommt weiterhin eine Fehlermeldung.

Kommentiere ich alternativ die Zeile 52 in /etc/mkinitcpio.conf aus:
# HOOKS="base udev autodetect modconf block keyboard keymap consolefont encrypt openswap resume filesystems"
so erscheint dieser Fehler, wenn ich sudo mkinitcpio -Plaufen lasse.

==> Building image from preset: /etc/mkinitcpio.d/linux515.preset: 'default'
  -> -k /boot/vmlinuz-5.15-x86_64 -c /etc/mkinitcpio.conf -g /boot/initramfs-5.15-x86_64.img
==> ERROR: Invalid config: No hooks found
==> Building image from preset: /etc/mkinitcpio.d/linux515.preset: 'fallback'
  -> -k /boot/vmlinuz-5.15-x86_64 -c /etc/mkinitcpio.conf -g /boot/initramfs-5.15-x86_64-fallback.img -S autodetect
==> ERROR: Invalid config: No hooks found

Irgendetwas ist bei den Einstellungen noch nicht ganz in Harmonie!

Tief atmen

Sieht du die den Hook resume ? Der ist dafür zuständig beim Booten nach einen “Ruhezustand-Image” in der Swapfile zu suchen. Also, bitte entfernen, dann kommt da auch keine Meldung.

Lösche ich das Wort “resume” in der Zeile 52, so erscheint nach
sudo mkinitcpio -P wieder der Fehler:

==> WARNING: Possibly missing firmware for module: qat_4xxx
  -> Running build hook: [openswap]
==> WARNING: swap_device variable is not set
==> WARNING: crypt_swap_name variable is not set

Bin mir jetzt nicht ganz sicher, aber scheint mir, dass openswap nur benötigt wird, wenn man resume auf eine verschlüsselten Partition verwendet. Die Swap Partition wird ja ohnehin in /etc/cryptab aufgelistet oder?

In die etc/crypttab habe ich die swap eingetragen

luks-XXXXX UUID=XXXXX /crypto_keyfile.bin luks

wobei die luks und die UUID Ziffernfolge gleich ist, also nicht UUID des Containerinhalts. Das habe ich bei den anderen Partitionen auch so gemacht und es funktioniert fehlerfrei.

Es scheint mir auch so, aber ganz klar bin ich da auch nicht.

dm-crypt/Swap encryption

Hier scheint mir das Problem am nähesten gelöst. Doch ich verstehe es nicht ganz. Auch werden 2 verschiedene luks-ID für die gleiche (?) swap reingeschrieben.
openswap Konfiguration Error resume hibernation device

May I write this in English, in case @MaFo joins the discussion refering to his link solutions just above. It looks there are 2 alternatives for swap with btrfs on luks

  1. Make hibernation swap device properly run while including
    /etc/openswap.conf
    /etc/crypttab
    /etc/mkinitcpio.conf
    /etc/default/grub
  2. Deactivate hibernation swap and simply run it as swap without hibernation.

But none of them I can make run. The available solutions are really good but probably none of them is really fully completely summarized and explained.

Es sieht so aus, als sie der einzige Weg, um btrfs mit Luks Verschlüsselung und hibernation zum Laufen zu bringen mit swapfile funktioniert, nicht mit Swap-Partition.

Bevor ich die recht aufwendige Lösung von Megavolt schließlich doch noch teste, probiere ich auf Empfehlung von @bogdancovaciu diese Lösung noch aus:
Linux laptop with encrypted disk and hibernation - #6 by jbkh
Doch ich hänge an Punkt 6 in der Anleitung fest. Leider antwortet der Autor nicht.
Ich habe die Datei btrfs_map_physical.c mit diesem Inhalt gemäß [dieser Anleitung]( Hibernation into swap file on Btrfs) gefüllt. Doch ich kann den folgenden Befehl nicht ausführen. Irgendetwas verstehe ich da offenbar nicht.

gcc -O2 -o btrfs_map_physical btrfs_map_physical.c

Danke für einen Tipp, Rulinux