Proxmox auf verschlüsseltem Software RAID

Mithilfe von MDRAID/LUKS/LVM, inkl. Remote-Entsperrung via Dropbear-SSH

Du bist aktuell auf der Suche nach einem (virtuellen) Server? Ich bin seit Jahren von netcup begeistert und hätte da ein paar Gutscheine.

Bei meinen externen Proxmox-Servern muss ich mich um Festplattenredundanz nicht kümmern. Bei einem Hoster (bei mir immer noch netcup) laufen die (virtuellen) Server selbstverständlich gründsätzlich auf einem ausfallsicheren RAID System.

Backups hat man natürlich schon auch, trotzdem fällt eine Platte/SSD immer dann aus, wenn das letzte Backup schon zu lange her ist. Und auch 2 Stunden sind manchmal zu lange. Von daher halte ich in jedem Server gründsätzlich den Massenspeicher redundant. Hardware RAID braucht man für Zuhause jetzt nicht unbedingt, Intel SoC Mainboards mit einem Hardware RAID Controller direkt auf dem Board habe ich jetzt noch nicht gesehen, eine PCIe Karte würde natürlich auch noch gehen, aber ich habe es ja auch gerne günstig und meine, Software RAID ist für diesen Zweck völlig ausreichend und in Debian ja auch schon vorhanden (MDRAID).

Der Proxmox ISO-Installer bietet auch schon von Haus aus Unterstützung für Software RAID, aber leider nur mit ZFS – und leider braucht ZFS ein bisschen zuviel RAM (bei meinem System mit 8 GB Hauptspeicher waren das ca. 1,5 GB Overhead). Wie aber schon in Proxmox voll-verschlüsselt beschrieben, kann man Proxmox aber ja recht einfach auf ein stink normales Debian bügeln, als machen wir das:

Folgendes Szenario geht von einer Maschine mit zwei Platten aus, aus denen ich ein RAID1 machen wollte.

1. Debian Installation

Ich nehme die Netinst-ISO und folge dem grafischen Installer erst mal bis es an die Festplattenpartitionierung geht, dort gibt es dann einiges zu beachten, was nachfolgend beschrieben ist.

1.1. Beide Platten initialisieren und Partitionen erstellen

Wir benötigen eine eigene Boot-Partition (die nicht verschlüsselt wird) und eine große für den Rest (die natürlich verschlüsselt wird). Kann man auch anders/feiner aufteilen, mir reicht das aber meistens so.

Weil Bilder oft besser sind, habe ich das mal in einem kurzen Screencast beschrieben:

Update 2024: Für die Boot Partition besser 1024 MB (statt 512 MB wie im Video) als Größe wählen + für UEFI-Systeme eine 100 MB Partition am Anfang erstellen (beide Platten, wegen Redundanz siehe Punkt 1.7 unten) und die erste (auf der „primären Platte“) entsprechend mounten („Use as EFI System Partition“).

1.2. (MD)RAID(1) erstellen für beide Partitionen

Als nächstes erzeugen wir über jeweils beide Partitionen ein RAID1 Array.

1.3. Bootpartition erstellen und Datenpartition verschlüsseln

Nun haben wir zwei MDRAID Block Devices, mit denen geht es weiter. Auf dem ersten Array erzeugen wir die Boot-Partition, das zweite wird mit LUKS verschlüsselt.

1.4. LVM Volume Group und Logical Volumes für SWAP und den Rest erstellen

Über das zweite, größere, Array, legen wir nun noch den LVM. Anschließend erzeugen wir eine Partition (bzw. ein Logical Volume) für SWAP. Über die Größe der SWAP-Partition gibt es verschiedene Meinungen, ich nehme meistens pauschal 8 GB. Der verbleibende Platz wird dann ein weiteres Logical Volume.

1.5. LVM Logical Volumes zuordnen und Installation starten

Nun müssen nur noch die erzeugten Logical Volumes zugerodnet werden – das erste als SWAP und eben das zweite eingehängt in / (root). Anschließend geht es ganz normal mit der Installation weiter.

1.6. GRUB Bootloader am Ende der Instalation auf /dev/sda installieren

Am Ende der Installation kommt die Frage bzgl. Installation des Bootloaders, leider kann man hier nicht direkt mehrere Festplatten auswählen, wir installieren den von daher erstmal ganz normal auf /dev/sda.

1.7. GRUB Bootloader auf zweiter Platte installieren

Nun sind wir soweit fertig, allerdings ist der Bootloader ja nur auf der ersten Platte installiert. Wenn die abraucht, wird das System von daher nicht mehr starten. Von daher installieren wer den nun auch auf der zweiten Platte.

Für Nicht-UEFI-Systeme:

dpkg-reconfigure grub-pc

Für UEFI-Systeme:

dpkg-reconfigure grub-efi-amd64

Siehe dazu auch folgende Notiz: EFI System Partition (ESP) klonen (MDRAID, RAID1)

2. Remote-Entsperrung via Dropbear

Nun geht es weiter mit der Einrichtung bzgl. Remote-Entsperr-Möglichkeit.

Siehe Punkt 2 von Proxmox voll-verschlüsselt.

3. Proxmox installieren

Nun haben wir ein fertiges Debian System, muss also noch Proxmox drauf.

Siehe Punkt 3 von Proxmox voll-verschlüsselt.

Schritte um eine Festplatte zu ersetzen

Passiert ja hoffentlich eh nie, aber wenn dann irgendwann eine Platte kaputt geht, ist es hilfreich zu wissen, was zu tun ist. Das Ganze kann man wie folgt machen, ich gehe mal davon aus, dass /dev/sdb (die zweite Platte) das Zeitliche gesegnet hat.

Wenn das System doch nicht mehr bootet

Aktuell gibt es in Debian wohl einen Bug der dafür sorgen kann, dass das System nicht mehr von einem degraded MDRAID bootet. Beim Start heißt es dann, dass LVM keine Volume Groups finden kann. Konnte ich so nachvollziehen, Workaround ist aus der initramfs-Debug-Shell (in der landet man nach 2 Minuten automatisch, wenn kein LVM Device gefunden wird) die Arrays manuell zu starten mit:

mdadm --run /dev/md0
mdadm --run /dev/md1
exit

Damit bootet das System auch von dem degraded RAID.

Defekte Platte aus den Arrays entfernen

Je nachdem wie die Platte so gestorben ist, ist diese evtl. noch im Array vorhanden oder nicht. Schadet auf alle Fälle nicht, die erstmal zu entfernen mit:

mdadm -–manage /dev/md0 -r failed
mdadm –-manage /dev/md1 -r failed

Degraded/Defektes MDRAID ArrayPartitionslayout neu einrichten bzw. kopieren

Als nächstes müssen zuerst die Partitionen auf der neuen Platte wieder angelegt werden. Kann man manuell machen, wir haben aber ja auch noch eine funtionierende Platte – also kopieren wir doch einfach das Layout von /dev/sda (der funktionierenden Platte) nach /dev/sdb (die neue Platte) mit:

Für GPT Datenträger (UEFI):

apt-get install gdisk
sgdisk -R /dev/sdb /dev/sda
sgdisk -G /dev/sdb

Für MRB Datenträger (Nicht-UEFI):

sfdisk -d /dev/sda | sfdisk /dev/sdb

Neue Platte den Arrays hinzufügen

Als nächstes wird die neue Platte bzw. die Partitionen noch den jeweiligen MDRAID Arrays wieder hinzugefügt mit:

mdadm --zero-superblock /dev/sdb1
mdadm --zero-superblock /dev/sdb5
mdadm -–manage /dev/md0 --add /dev/sdb1
mdadm –-manage /dev/md1 --add/dev/sdb5

Der Rebuild startet von selbst, den Status kann man jederzeit checken mit:

mdadm --detail /dev/md0
mdadm --detail /dev/md1

GRUB Bootloader auf neuer Platte installieren

Zuletzt muss auch noch der Bootloader auf der neuen Platte installiert werden, sonst hätten wir wieder das Problem, dass beim Tod von der ersten Platte kein startfähiges System vorhanden wäre. Macht man genauso wie in Schritt 1.7. oben.

Du möchtest mir hierzu Feedback hinterlassen? Dann schreib mir gerne eine Nachricht.