Sep 292014
 

Das Posting soll primär als Gedächtnisstütze dienen, wenn ich das selber nochmal bauen will. Das wichtigste ist mir Schritt 4 zu dokumentieren, das hat mich einiges an Zeit gekostet das rauszufinden. Ich setze voraus, das man die beiden Artikel im Arch-Wiki zu dm_crypt und ZFS gelesen, verstanden, und idealerweise schonmal umgesetzt hat. Mein Hauptproblem bei der Einrichtung ist dort nicht dokumentiert, ich werde versuchen die Lösung aus Schritt 4 direkt in die ZFS Pakete einfliessen zu lassen. Nach einem Reboot werden die zpools nicht automatisch eingebunden. Sie sind zwar aktiv und mit den zpool und zfs Befehlen sichtbar, aber die Datasets sind nicht gemounted. Nach einem Export und Import des zpools ist alles wie es sein soll. Das Problem ist eine fehlende Abhängigkeit in den ZFS Startscripten, die nicht warten bis Cryptsetup fertig ist.

Die Anleitung:

Schritt 1: Anlegen der dm_crypt Devices. Einmal mit Passphrase, danach wird ein Keyfile zugefügt. Das ist nötig, um ohne die Passphrase einzugeben den Rechner neu starten zu können.

cryptsetup --cipher aes-xts-plain64 --key-size 512 --hash sha512 luksFormat /dev/sda
cryptsetup --cipher aes-xts-plain64 --key-size 512 --hash sha512 luksFormat /dev/sdb
cryptsetup --cipher aes-xts-plain64 --key-size 512 --hash sha512 luksFormat /dev/sdc
dd if=/dev/random of=/etc/cryptfs.key bs=512 count=5
cryptsetup luksAddKey /dev/sda /etc/cryptfs.key
cryptsetup luksAddKey /dev/sdb /etc/cryptfs.key
cryptsetup luksAddKey /dev/sdc /etc/cryptfs.key

Schritt 2: Editieren der Datei /etc/crypttab, welche für das automatische Öffnen der dm_crypt Devices beim Systemstart zuständig ist. Die erste Spalte ist der Name, unter dem das Device der zweiten Spalte geöffnet werden soll (es taucht dann als /dev/mapper/DISK-WD-SERIENNUMMER1 auf), und die dritte Spalte ist das zu verwendende Keyfile.

DISK-WD-SERIENNUMMER1     /dev/disk/by-id/ata-WDC_WD30EFRX-68EUZN0_SERIENNUMMER1    /etc/cryptfs.key
DISK-WD-SERIENNUMMER2     /dev/disk/by-id/ata-WDC_WD30EFRX-68EUZN0_SERIENNUMMER2    /etc/cryptfs.key
DISK-WD-SERIENNUMMER3     /dev/disk/by-id/ata-WDC_WD30EFRX-68EUZN0_SERIENNUMMER3    /etc/cryptfs.key

Schritt 3: Nach einem Server-Reboot sollten die dm_crypt Devices jetzt automatisch geöffnet worden sein, und es kann weitergehen – wir legen den zpool an. Die einzelnen Optionen können für euch natürlich variieren, ich verweise einfach mal auf die oben genannte Wiki-Seite.

zpool create -f -o ashift=12 -O atime=off -O casesensitivity=mixed -O mountpoint=/zfs/storage storage raidz1 /dev/mapper/DISK-WD-SERIENNUMMER1 /dev/mapper/DISK-WD-SERIENNUMMER2 /dev/mapper/DISK-WD-SERIENNUMMER3
zfs create storage/archiv -o mountpoint=/mnt/archiv
zfs create storage/backup -o mountpoint=/mnt/backup

Schritt 4: Nach einem weiteren Reboot stellt man, wie schon in der Einleitung beschrieben, fest: der zpool ist aktiv, aber keines der Datasets ist gemounted. Die Ursache liegt darin, das die beiden Systemd-Services zfs-import-cache und zfs-import-scan nicht auf das Cryptsetup-Target warten. Daher legen wir 2 Erweiterungen der zugehörigen Unit-Files an (die Funktionsweise der Erweiterungen ist im systemd-Artikel das Arch Wikis beschrieben).

mkdir /etc/systemd/system/zfs-import-cache.service.d
echo "[Unit]
After=cryptsetup.target" >/etc/systemd/system/zfs-import-cache.service.d/cryptsetup.conf
mkdir /etc/systemd/system/zfs-import-scan.service.d
echo "[Unit]
After=cryptsetup.target" >/etc/systemd/system/zfs-import-scan.service.d/cryptsetup.conf

Das wars dann auch schon. Jetzt sind nach jedem Reboot automatisch alle zpools und Datasets aktiv bzw. gemounted.

 Leave a Reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

(required)

(required)