mdadm RAID / luksCrypt
Im Büro haben wir früher ein USB-RAID aus zwei Platten genutzt um ein Inhouse-Backup abzubilden. Die Konfiguration ist unten aufgeführt, das Gebilde würde aber mittlerweile zugunsten eines 4TB-NAS-Laufwerks (RAID 10) abgelöst. Da die Laufwerke leicht zugänglich und beweglich waren wurden sie verschlüsselt.## Software-RAID ##
Um ein Software-RAID zu erstellen sind zunächst auf mind. 2 Festplatten gleich große Partitionen zu erstellen:
cfdisk /dev/sda
cfdisk /dev/sdb
Nun wird ein neues RAID-Array erstellt:
mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sda1 /dev/sdb1
Das Array erhält den Namen md0
und besteht aus zwei Laufwerken (-raid-devices=2
). Es ist ein Level 1-RAID (--level=1
), sprich die Daten werden gespiegelt.
Nachdem das Array erstellt wurde, wird es synchronisiert. Den aktuellen Status kann man mit dem Befehl cat /proc/mdstat
abfragen:
$ cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 sdd1[1] sdc1[0]
1465135869 blocks super 1.1 [2/2] [UU]
[>....................] resync = 0.0% (70016/1465135869) finish=2440.6min speed=10002K/sec
unused devices:
Alternativ kann man mdadm
verwenden:
$ mdadm --detail --scan
ARRAY /dev/md0 metadata=1.01 name=foobar:0 UUID=1234578:1234578:1234578:1234578
$ mdadm --detail /dev/md0
/dev/md0:
Version : 1.01
Creation Time : Sat Feb 6 23:42:21 2010
Raid Level : raid1
Array Size : 1465135869 (1397.26 GiB 1500.30 GB)
Used Dev Size : 1465135869 (1397.26 GiB 1500.30 GB)
Raid Devices : 2
Total Devices : 2
Persistence : Superblock is persistent
Update Time : Sun Feb 7 00:03:21 2010
State : active, resyncing
Active Devices : 2
Working Devices : 2
Failed Devices : 0
Spare Devices : 0
Rebuild Status : 0% complete
Name : foobar:0 (local to host foobar)
UUID : 1234578:1234578:1234578:1234578
Events : 1
Number Major Minor RaidDevice State
0 8 33 0 active sync /dev/sda1
1 8 49 1 active sync /dev/sdb1
Als nächstes wird eine neue Partition auf dem RAID erstellt:
cfdisk /dev/md0
Damit ist das RAID einsatzbereit und kann nun formatiert und gemountet werden:
mkfs.ext4 -j -m 0 /dev/md0
mount /dev/md0 /mnt
Den Status des RAID kann man mit mdadm --detail /dev/md0
jederzeit überprüfen. Sollte das RAID nach einem Neustart nicht automatisch neu zusammengefügt werden, kann man dies nachträglich mit dem Befehl mdadm --assemble /dev/md0 /dev/sda1 /dev/sdb1
tun, anschließend kann das RAID wie gewohnt gemountet werden.
luksCrypt
Um das RAID (z.B. für ein Backup) zu verschlüsseln geht man (auf einer unformatierten aber partitionierten Platte) wie folgt vor:
cryptsetup --verbose --verify-passphrase luksFormat /dev/md0
Enter your desired pasphrase here (twice)
cryptsetup luksOpen /dev/md0 myraid
Anschließend kann der Crypt-Container geöffnet werden:
cryptsetup luksOpen /dev/md0 cryptraid
Das Laufwerk kann nun über /dev/mapper/cryptraid
angesprochen und formatiert werden.
mkfs.ext4 -j -m 0 /dev/mapper/cryptraid
In Zukunft kann das Crypt-RAID wie folgt eingebunden werden:
$ mdadm --assemble /dev/md0 /dev/sda1 /dev/sdb1
$ cryptsetup luksOpen /dev/md0 cryptraid
$ mount -t ext4 /dev/mapper/cryptraid /mnt
Um das RAID wieder zu verschließen geht man so vor:
$ umount /mnt
$ cryptsetup luksClose myraid
$ mdadm --stop /dev/md0
RAID-Wiederherstellung
Fällt im RAID-Verbund auf einem der Server ein Laufwerk aus, wird automatisch eine E-Mail an root
versendet.
From : mdadm monitoring <root@example.de>
To : root@vortis.local
Subject: Fail event on /dev/md/0:vortis
This is an automatically generated mail message from mdadm
running on vortis
A Fail event had been detected on md device /dev/md/0.
It could be related to component device /dev/sda1.
Faithfully yours, etc.
[...]
Ein solcher Fehler kann auch testweise selbst provoziert werden:
mdadm -manage -set-faulty /dev/md0 /dev/sda1
Hier wird das Laufwerk /dev/sda1
im RAID /dev/md0
als beschädigt (faulty) markiert. Resultat sollte die oben erwähnte Mail sein. Der Aufruf von mdadm --detail /dev/md0
sollte folgendes zeigen:
/dev/md0:
Version : 00.90.03
Creation Time : Fri Nov 2 15:52:45 2007
Raid Level : raid1
Array Size : 14651136 (13.97 GiB 15.00 GB)
Device Size : 14651136 (13.97 GiB 15.00 GB)
Raid Devices : 2
Total Devices : 2
Preferred Minor : 0
Persistence : Superblock is persistent
Update Time : Sat Nov 10 15:11:48 2007
State : clean, degraded
Active Devices : 1
Working Devices : 1
Failed Devices : 1
Spare Devices : 0
UUID : 644f52f2:66ea4422:1ae79331:d593083b
Events : 0.48895
Number Major Minor RaidDevice State
0 0 0 - removed
1 8 17 1 active sync /dev/sdb1
2 8 1 - faulty /dev/sda1
Um eine neue Festplatte in das RAID aufzunehmen ist zunächst die beschädigte Festplatte zu entfernen:
mdadm /dev/md0 -r /dev/sda1
Klappt dies erscheint folgende Meldung:
mdadm: hot removed /dev/sda1
Das Resultat kann auch noch einmal mit mdadm --detail /dev/md0
bestätigt werden:
/dev/md0:
Version : 00.90.03
Creation Time : Fri Nov 2 15:52:45 2007
Raid Level : raid1
Array Size : 14651136 (13.97 GiB 15.00 GB)
Device Size : 14651136 (13.97 GiB 15.00 GB)
Raid Devices : 2
Total Devices : 1
Preferred Minor : 0
Persistence : Superblock is persistent
Update Time : Sat Nov 10 15:19:54 2007
State : clean, degraded
Active Devices : 1
Working Devices : 1
Failed Devices : 0
Spare Devices : 0
UUID : 644f52f2:66ea4422:1ae79331:d593083b
Events : 0.48944
Number Major Minor RaidDevice State
0 0 0 - removed
1 8 17 1 active sync /dev/sdb1
Nun kann das Laufwerk auch physikalisch aus dem Server entfernt und gegen ein neues Laufwerk gleicher (oder höherer) Kapazität ausgetauscht werden. Dies kann im laufenden Betrieb geschehen.
Anschließend wird das neue Laufwerk dem RAID hinzugefügt:
mdadm /dev/md0 -a /dev/sda1
Das Resultat sollte lauten:
mdadm: hot added /dev/sda1
Auch dies lässt sich mit mdadm --detail /dev/md0
noch einmal überprüfen:
/dev/md0:
Version : 00.90.03
Creation Time : Fri Nov 2 15:52:45 2007
Raid Level : raid1
Array Size : 14651136 (13.97 GiB 15.00 GB)
Device Size : 14651136 (13.97 GiB 15.00 GB)
Raid Devices : 2
Total Devices : 2
Preferred Minor : 0
Persistence : Superblock is persistent
Update Time : Sat Nov 10 15:25:21 2007
State : clean, degraded, recovering
Active Devices : 1
Working Devices : 2
Failed Devices : 0
Spare Devices : 1
Rebuild Status : 40% complete
UUID : 644f52f2:66ea4422:1ae79331:d593083b
Events : 0.48999
Number Major Minor RaidDevice State
0 0 0 - removed
1 8 17 1 active sync /dev/sdb1
2 8 1 0 spare rebuilding /dev/sda1
Wie hier zu erkennen wird das neue Laufwerk zunächst als Spare Device
eingebunden und synchronisiert. Ist der Rebuild-Prozess erfolgreich beendet gibt mdadm --detail /dev/md0
wieder das gewohnte Bild zurück:
/dev/md0:
Version : 00.90.03
Creation Time : Fri Nov 2 15:52:45 2007
Raid Level : raid1
Array Size : 14651136 (13.97 GiB 15.00 GB)
Device Size : 14651136 (13.97 GiB 15.00 GB)
Raid Devices : 2
Total Devices : 2
Preferred Minor : 0
Persistence : Superblock is persistent
Update Time : Sat Nov 10 14:54:36 2007
State : clean
Active Devices : 2
Working Devices : 2
Failed Devices : 0
Spare Devices : 0
UUID : 644f52f2:66ea4422:1ae79331:d593083b
Events : 0.48810
Number Major Minor RaidDevice State
0 8 1 0 active sync /dev/sda1
1 8 17 1 active sync /dev/sdb1