Software-Raid verschlüsseln
Raid-Array erzeugen
Zunächst werden die Festplatten wie folgt vorbereitet:
| Partitionsart | primäre Partition |
| Partitionsgröße | alle Partitionen haben dieselbe Größe |
| Partitionstyp | LINUX RAID AUTODETECT |
| Partitionstyp-Code | fd |
Dann werden die Partitionen zum Raid-Array zusammengeschlossen:
lexi:~# mdadm --create <devicename> --level=<raid-level> --raid-devices=<number of component devices> <component devices>
| Platzhalter | Beispiel | Bedeutung |
|---|---|---|
devicename |
/dev/md0 | Name des zu erstellenden mdX-Devices. Möglicherweise - so war es bei mir - müssen zuvor einige mdX-Devices angelegt werden. |
raid-level |
5 | Welcher Raid-Level soll eingerichtet werden? |
number of component devices |
4 | Anzahl der Partitionen die zum Raid-Array gehören sollen. |
component devices |
hde1 hdf1 hdg1 hdh1 | Auf diesen Partitionen wird das Raid-Array erzeugt. |
Verschlüsseln
Das Array wird mit der Option luksFormat verschlüsselt, weil dadurch angeblich ein besseres Schlüsselmanagement gewährleistet wird.
lexi:~# cryptsetup luksFormat /dev/<devicename>
Zur Zeit sind auf Lexi folgende Arrays eingerichtet:
| raid5_250 | raid5_500 | |
|---|---|---|
devicename |
md0 | md1 |
raid-level |
5 | 5 |
# of devices |
6 | 4 |
component devices |
hd[gmecki]1 | sd[abcd]1 |
volume-name |
raid5_250 | raid5_500 |
mountpoint |
/mount/raid5_250 | /mount/raid5_500 |
Einbinden in den Verzeichnisbaum
Die mdX-Devices werden während des Boot-Vorgangs automatisch erkannt und in /dev eingebunden. Sie sind aber zu dem Zeitpunkt verschlüsselt und müssen durch das Kommando
lexi:~# cryptsetup luksOpen /dev/<devicename> <volume-name>
geöffnet werden.
Arrays automatisch einbinden
Beide Raid-Devices werden während des Boot-Vorgangs geöffnet, indem die Passwörter aus einer Datei gelesen und in das o.g. Kommando eingesetzt werden. Das ist noch nicht optimal.
#! /bin/sh
# /etc/init.d/cryptdrives
case "$1" in
start)
wget -q -O - [URI_1] |
cryptsetup luksOpen /dev/md0 raid5_250
mount /dev/mapper/raid5_250 /mount/raid5_250
wget -q -O - [URI_2] |
cryptsetup luksOpen /dev/md1 raid5_500
mount /dev/mapper/raid5_500 /mount/raid5_500
;;
stop)
umount -l /dev/mapper/raid5_500
cryptsetup luksClose /dev/mapper/raid5_500
umount -l /dev/mapper/raid5_250
cryptsetup luksClose /dev/mapper/raid5_250
;;
*)
echo "Usage: cryptdrives {start|stop}"
exit 1
;;
esac
exit 0
Wie das ganze dann als Init-Skript ausgeführt wird, ist hier nachzulesen.
Array vergrößern
Ausgangszustand: Das Array ist entschlüsselt und ins Dateisystem eingebunden.
Bevor der Raid-Verbund vergrößert werden kann, muss mindestens eine weitere Partition vorbereitet werden. Dabei sind dieselben Schritte erforderlich wie beim Einrichten der Anfangspartitionen.
Die vorbereitete Partition wird dem Array hinzugefügt:
lexi:~# mdadm --add /dev/<devicename> /dev/<new disc name>
Das Array wird auf die neue Partition ausgedehnt:
lexi:~# mdadm --grow /dev/<devicename> --raid-devices=<new no. of raid devices>
Dieser Vorgang dauert ziemlich genau eine halbe Ewigkeit. Beim Warten kann mit
lexi:~# cat /proc/mdstat
der Fortschritt überprüft werden.
Das Raid-Array ist nun vergrößert, nicht aber das darauf enthaltene Dateisystem. Dazu wird das verschlüsselte Array aus dem Verzeichnisbaum genommen.
lexi:~# umount /dev/mapper/<volume-name>
Dann wird die crypto-Partition geschlossen, kann aber gleich wieder geöffnet werden.
lexi:~# cryptsetup luksClose <volume-name> lexi:~# cryptsetup luksOpen /dev/<devicename> <volume-name>
Cryptsetup kennt nun auch die neue Größe des Arrays. Jetzt wird das Dateisystem überprüft,
lexi:~# e2fsck -f /dev/mapper/<volume-name>
vergrößert,
lexi:~# resize2fs /dev/mapper/<volume-name>
und wieder in den Verzeichnisbaum gehängt.
lexi:~# mount /dev/mapper/<volume-name> <mountpoint>
