Hallo,

ich benötige Hilfe bei einem ZFS-Pool mit Verschlüsselung.
Nach der folgenden Anleitung aus dem Wiki bin ich vorgegangen: https://wiki.archlinux.org/title/ZFS:

Erst ein Pool aus 3 HDDs erstellt mit und dann eine passwortlose Verschlüsselung per Keyfile erstellt:

zpool create -f -o ashift=12 -m /mnt/pool pool raidz1 scsi-SWDC_WD14_0EDFZ-11A0VA0_52BC00000819 scsi-SWDC_WD14_0EDGZ-11B1PA0_22BC00000819 scsi-SWDC_WD14_0EDGZ-11B1PA0_F1BC00000819
dd if=/dev/urandom of=/media/usb/pool.key bs=32 count=1
zfs create -o encryption=on -o keyformat=raw -o keylocation=file:///media/usb/pool.key pool/pool

Das hat soweit auch prima funktioniert. Dann habe ich jede Menge Daten (knapp 7TB) dort hineingeschoben und nach einem Neustart wird mein Schlüssel nicht mehr akzeptiert. Ich bekomme immer die Fehlermeldung: Wrong key.

Ich kann den Key nicht manuell laden.

#zfs load-key -a
Key load error: Incorrect key provided for 'pool/pool'.
0 / 1 key(s) successfully loaded
#zfs load-key pool/pool
Key load error: Incorrect key provided for 'pool/pool'.

Über
#zfs get keylocation pool/pool
bekomme ich korrekt: file:///media/usb/pool.key local angezeigt.

Die entsprechenden systemd Files zum Einbinden beim Booten habe ich auch erstellt. Im Log steht beim Starten einfach nur:

"Failed to start Load ZFS keys.
Subject: A start job for unit zfs-load-key@pool-pool.service has failed
A start job for unit zfs-load-key@pool-pool.service has finished with a failure.
...
The job identifier is 1800 and the job result is failed."

Ich habe nichts anderes angegeben. Hat irgendjemand einen Tipp, was ich noch ausprobieren kann?
Die Daten sind zwar nicht verloren, da ich sie noch auf anderen Festplatten habe, aber bevor ich nochmal ein neues verschlüsseltes Dataset erstelle, würde ich gerne wissen, was ich falsch mache ;-)

Vielen Dank im Voraus und ein schönes Wochenende!

Liebe Grüße
Bernd

Ich habe noch ein wenig herumgespielt und letztendlich mein Dataset gelöscht:

#zfs destroy pool/pool

Aber selbst dann wird mir immer noch die alte Speicherplatzbelegung mit Dataset angezeigt:

#zfs list
NAME               USED  AVAIL     REFER  MOUNTPOINT
pool             6.82T  18.5T      128K  /mnt/pool

Ist das normal? Ich werde den Pool jetzt nochmal komplett neu erstellen und weiter testen...

Jetzt funktioniert es :-)

Ich weiß nicht genau, was anders ist als vorher. Falls jemand Hilfe braucht beim Erstellen eines verschlüsselten ZFS-Pools: So bin ich vorgegangen (als root). Bitte Poolname (pool) und Datasetname (dataset) sowie die Pfade für den Mountpoint und zum Keyfile selber anpassen:

  1. Pool erstellen: Laufwerke durch Bezeichnungnen aus /dev/disk/by-id ersetzen
    sudo zpool create -o ashift=12 -m /mnt/pool pool raidz1 {drive1} {drive2} {drive3}

  2. Keyfile erstellen (bei mir auf einem per /etc/fstab gemounteten USB-Stick):
    dd if=/dev/random of=/media/usb/key bs=1 count=32

  3. Verschlüsseltes Dataset erstellen:
    zfs create -o encryption=on -o keyformat=raw -o keylocation=file:///media/usb/pool.key pool/dataset

  4. Mountpoint vom ZFS-Root entfernen, da dort nichts gespeichert werden soll und Dataset dafür an der Stelle einbinden. Ich denke, man hätte den Parameter -m aus Schritt 1 weglassen können, oder dort auf "none" setzen können. Da dieser Parameter vererbt wird, muss man explizit den Mountpoint vom Dataset setzen:

    zfs set mountpoint=/mnt/pool pool/dataset
  5. Folgende Datei erstellen /etc/systemd/system/zfs-load-key@pool-dataset.service (nach dem @ muss der richtige Poolname ein Minuszeichen und der Datasetname angegeben werden):

    [Unit]
    Description=Load ZFS keys
    DefaultDependencies=no
    Before=zfs-mount.service
    After=zfs-import.target
    Requires=zfs-import.target
    
    [Service]
    Type=oneshot
    RemainAfterExit=yes
    ExecStart=/sbin/zfs load-key %I
    
    [Install]
    WantedBy=zfs-mount.service 
  6. Service aktivieren:
    sudo systemctl enable zfs-load-key@pool-dataset.service

Das war es auch schon. Danach hat man einen verschlüsseltes ZFS Dataset, dass bei jedem Systemstart automatisch eingehängt wird.

Ich habe jetzt noch eine herumliegende SSD-Platte als Cache hinzugefügt (Name wieder aus /dev/disk/by-id). Mal schauen ob das der Performance hilft:

zpool add pool cache {drive}

Vielleicht hilft es ja Jemandem :-)

Viele Grüße
Bernd

Dirk hat das Thema gelöst hinzugefügt ().