In meinem Openmediavault-NAS läuft schon seit einiger Zeit ein RAID1-Array aus zwei 2TB-Platten. Darauf landen alle Backups aus meinem EDV-Zoo. Als Schutz gegen neugierige Diebe soll der Inhalt nun nachträglich verschlüsselt werden.
Leider geht das nicht einfach auf Knopfdruck. Einziger gangbarer Weg scheint folgender zu sein:
Ausgangspunkt ist ein mit der Openmediavault-GUI erzeugtes unverschlüsseltes RAID1 aus den zwei Platten sda und sdc. Für das Backup steht temporär eine weitere ausreichend große Platte zur Verfügung.
- Backup erstellen (!)
rsync -axHAXW --info=progress2 <altes RAID1> <Backup-Disk>
- Aus dem bestehenden RAID1 eine Platte entfernen und neu formatieren
mdadm --fail /dev/md0 /dev/sdc1
c
mdadm --remove /dev/md0 /dev/sdc1
fdisk /dev/sd
g
- create a new empty GPT partition table
n
- add a new partition (Größe ca. 100MB kleiner als maximal möglich)
w
- write table to disk and exit - Auf dieser Partition ein neues RAID1 mit nur einer Platte anlegen
mdadm --create /dev/md1 --level=1 --raid-devices=2 missing /dev/sdc1
- Das neue RAID1 verschlüsseln, ein Filesystem anlegen und mounten
cryptsetup -v luksFormat /dev/md1
(Passwort eingeben)mkfs.ext4 /dev/mapper/md1-crypt
mkdir /mnt/raid1
mount -t ext4 /dev/mapper/md1-crypt /mnt/raid1 - Die Daten aus der Sicherung auf die verschlüsselte Partition kopieren
rsync -axHAXW --info=progress2 <Backup-Disk> /mnt/raid1
umount /mnt/raid1
umount <Backup-Disk>
- In der Openmediavault-GUI das neue, verschlüsselte RAID1 mounten und alle Verweise vom alten RAID1 auf das neue umlenken
- In der GUI das alte RAID unmounten
- Das RAID und von der alten Platte entfernen
mdadm --stop /dev/md0
mdadm --remove /dev/md0
mdadm --zero-superblock /dev/sda1 - Auf der freien Platte eine neue Partition anlegen und formatieren
fdisk /dev/sda
g
- create a new empty GPT partition table
n
- add a new partition (gleiche Größe wie bei erster Platte)
w
- write table to disk and exit - Die Partition zum neuen RAID1 hinzufügen wiederherstellen lassen
mdadm --add-spare /dev/md1 /dev/sda1
mdadm --readwrite /dev/md1
In der GUI und mitcat /proc/mdstat
kann man den Fortschritt der Synchronisation beobachten
Nach Abarbeitung dieses 10-Punkte-Plans brauchte das NAS noch gute 5 Stunden für die Synchronisation.
Wenn man mit dem erhöhten Risiko des Datenverlusts leben kann, z.B. weil ohnehin weitere aktuelle (!) Backups existieren, kann man sich auch das kopeiren in Schritt 1 sparen und in Schritt 5 die Daten direkt vom degradierten alten RAID1 auf das Neue kopieren. Das spart einige Stunden Zeit ein.
Nachtrag
Wird das verschlüsselte RAID1 wie oben vorbereitet, bleibt es im Openmediavault nach dem Booten verschlüsselt und kann so nicht automatisch gemountet werden. Es wäre also immer Handarbeit nötig, bevor das RAID benutzbar wäre.
Zum automatischen Entschlüsseln gibt es mehrere Lösungen mit Passworten oder key-files auf USB-Sticks oder remote gemounteten Laufwerken. Ich habe das Script von von TheFax [3] etwas angepasst in Betrieb. Es entschlüsselt das RAID-Laufwerk zuverlässig - allerdings bleibt es in der Ursprungsfassung am Ende umgemountet. Irgendwann (nach Timeout?) mountet es Openmediavault dann zwar doch noch, wenn man es aber sofort nutzen will, hilft folgende Zeile am Ende des Scripts:
# mount the unlocked file systems
mount /dev/mapper/$DEVICENAME-crypt >>$LOGFILE 2>&1
Trotzdem kommt es beim Booten noch zu einer Verzögerung, weil Openmediavault das Filesystem in die /etc/fstab einträgt und das System beim Booten auf die Bereitschaft des Laufwerks wartet. Das es zu dem Zeitpunkt noch nicht entsperrt werden kann, läuft das Script in ein Timeout, das standardmäßig 90 Sekunden beträgt.
Zur Abhilfe wird in der fstab zu den Laufwerksoptionen noauto
hinzugefügt, um das auto-mounten zu verhindern, und x-systemd.device-timeout=1
, um den unvermeidlichen Timeout beim Booten zu verkürzen. Die Zeile für das RAID sieht dann etwa so aus:
/dev/disk/by-uuid/... /srv/dev-disk-by-uuid-... ext4 defaults,noauto,nofail,user_xattr,usrjquota=aquota.user,grpjquota=aquota.group,jqfmt=vfsv0,acl,x-systemd.device-timeout=1 0 2
Die /etc/fstab
würde allerdings bei Änderungen von omv wieder überschrieben werden, daher müssen die Angaben in die Laufwerksoptionen in /etc/openmediavault/config.xml
eingetragen und übernommen werden:
...
<fstab>
...
<mntent>
<uuid>992c8734-c019-49f5-9652-4d89201f5439</uuid>
<fsname>/dev/disk/by-uuid/e62f7869-7f16-4619-8a9e-4f91014a4c4b</fsname>
<dir>/srv/dev-disk-by-uuid-e62f7869-7f16-4619-8a9e-4f91014a4c4b</dir>
<type>ext4</type>
<opts>defaults,noauto,x-systemd.device-timeout=1,nofail,user_xattr,usrjquota=aquota.user,grpjquota=aquota.group,jqfmt=vfsv0,acl</opts>
<freq>0</freq>
<passno>2</passno>
<hidden>0</hidden>
<usagewarnthreshold>85</usagewarnthreshold>
<comment>2TB RAID LUKS EXT4</comment>
</mntent>
</fstab>
...
Quellen:
- https://blog.getreu.net/_downloads/encrypted-raid1-nas.pdf
- https://www.reddit.com/r/OpenMediaVault/comments/neo8cz/convert_usb_raid1_array_to_rsyncd_disks_raspberry/
- https://github.com/TheFax/Automount_LUKS_openmediavault