Ich wurde im Februar 2015 bei einem erfolglosen Bewerbungsgespräch Zeuge, wie auf einem Arbeitsplatz-Computer das Dateisystem, welches ohne RAID-Verbund eingerichtet wurde, das System auf mittels mdadm in ein RAID 1 umgewandelt werden sollte.
Ich fand die Idee einen Arbeitsplatz Computer nachträglich, scheinbar direkt nach der Neuinstallation auf ein RAID zu verschieben überflüssig und umständlich.
Persönlich nutze ich lieber das Backup des Systems welches in jedem Fall vorhanden ist um nach einer Neuinstallation des Computers mit Einrichtung eines RAID Verbundes, zur Wiederherstellung der Daten.
Als Fingerübung fand ich die Idee jedoch interessant.
In meinen eigenen Überlegung gehe ich davon aus das im Notfall eine solche Nachträgliche Verschiebung der Daten in ein RAID die offline-Zeit eines Systems zugunsten einiger Arbeit und der zusätzlichen Chance das das System unerkannte Schäden enthält, reduziert werden. Daher ziehe ich auch in diesen Fällen eine saubere Neuinstallation vor.
Während des Bewerbungsgesprächs hörte ich nur ein paar Fetzen, ein Mitarbeiter fragte tatsächlich den Leiter seiner Abteilung wie mdadm und die Grub Installation erfolgreich durchzuführen seien. (Nein, es war ein fest eingestellter Mitarbeiter in der Administration, kein Azubi)
Nach nur zwei Versuchen, die beide erfolgreich waren, kann ich guten Gewissens berichten das die Umstellung eines Systems in ein RAID 1 ist tatsächlich so kompliziert nicht ist.
1.) Partitionierung klonen
Nach dem Einbau der zweiten Festplatte muss die Partitionierung der ersten Festplatte auf die neue Festplatte übertragen werden.
Auf der ersten Festplatte befinden sich 3 Partitionen, Boot, Swap und die eigentliche Datenpartition.
Der folgende Befehl liest die Partitionierung der Festplatte /dev/sda aus und schreibt diese auf die Festplatte /dev/sdb.
sfdisk -d /dev/sda | sfdisk /dev/sdb
„sfdisk -d“ gibt die aktuelle Partitionstabelle der Festplatte /dev/sda aus und „sfdisk“, ohne Parameter, nimmt diesen Export und schreibt die Partitionen auf die Festplatte /dev/sdb.
Das die Übertragung der Partitionen erfolgreich war prüfe ich vor dem nächsten Schritt mit Hife der Eingabe von „sfdisk -l /dev/sdb“.
Im Anschluss wechseln wir die Partitions-ID von den für das RAID vorgesehenen Partitionen /dev/sdb1 und /dev/sdb3 auf fd (Linux raid autodetect).
Mit fdisk kann dies über das Kommando t, zum ändern der Partitions-ID, gefolgt von der Nummer der gewünschten Partition, zuerst 1 für die erste Partition später 3 für die dritten Partition, und in Folge die Eingabe der Zeichenfolge fd erfolgen.
fdisk /dev/sdb
Command (m for help): t
Partition number (1-4): 1
Hex code (type L to list codes): fd
Command (m for help): t
Partition number (1-4): 3
Hex code (type L to list codes): fd
Command (m for help): w
The partition table has been altered!
2.) Raid initialisieren
Anschließend erstellen wir das RAID 1 Arrays mit den neuen Partitionen und „mit fehlendem zweiten Datenträger“.
Hierbei ist missing der Platzhalter für die aktuell fehlenden, da „aktiven“ und mit den Daten des Systems belegten Partitionen. „-l 1“ steht für RAID 1, „-n 2“ dafür daß das RAID 1 aus zwei Datenträgern bestehen wird.
(Bei einer minimal-Debian Installation muss mdadm zuvor mit dem Aufruf „apt install mdadm“ installiert werden.)
# mdadm -C /dev/md0 -l 1 -n 2 missing /dev/sdb1 --metadata=0.90
mdadm: array /dev/md0 started
# mdadm -C /dev/md1 -l 1 -n 2 missing /dev/sdb3
mdadm: Note: this array has metadata at the start and
may not be suitable as a boot device. If you plan to
store '/boot' on this device please ensure that
your boot-loader understamds md/v1.x metadata, or use
--metadata=0.90
Continue creating array? y
mdadm: Defaulting to version 1.2 metadata
msads: array /dev/md1 started.
3.) Daten übertragen
Nach dem Anlegen der beiden neuen RAID 1 Arrays erzeuge ich ein ext3-Dateisystem auf den neuen Partitionen und erzeuge die neue swap-Partition.:
mkfs.ext3 /dev/md0
mkfs.ext3 /dev/md1
mkswap /dev/sdb2
Nach dem anlegen des Dateisystems können die Datenträger eingehängt werden…
mount /dev/md1 /mnt
mkdir /mnt/boot
mount /dev/md0 /mnt/boot
…und im Anschluss die Daten auf den neuen Datenträger kopieren:
cp --no-dereference --preserve --recursive --one-file-system / /mnt
cp --no-dereference --preserve --recursive --one-file-system /boot/ /mnt/
4.) RAID ergänzen
Wie bereits im ersten Schritt, werden nun die Partitions-IDs angepasst. Diesmal jedoch für die Festplatte /dev/sda auf welcher zuvor noch unsere Nutzdaten gespeichert waren:
fdisk /dev/sda
Command (m for help): t
Partition number (1-4): 1
Hex code (type L to list codes): fd
Command (m for help): t
Partition number (1-4): 3
Hex code (type L to list codes): fd
Command (m for help): w
The partition table has been altered!
Im Anschluss muss in der Datei /etc/fstab für / den Eintrag /dev/md0 und für /boot den Eintrag /dev/md1 hinerlegt werden.
Anschließend kann der Computer neu gestartet werden.
Sobald der Grub2 Bootloader erscheint mit der Taste e den Editor für den Booteintrag atarten. In dem Booteintarg die Zeile „linux /vmlinux-3.3 root=UUID=“ in das aktuell verwendete „linux /vmlinux-3.3 root=/dev/md1“ korrigieren und im Anschluss mit F10 den Bootvorgang starten.
Das RAID mit den folgenden beiden Befehlen vervollständigen.:
mdadm --add /dev/md0 /dev/sda1
mdadm --add /dev/md1 /dev/sda3
Der erste Aufruf fügt dem RAID Array md0 den Fehlenden Datenträger sda1 hinzu. Nicht schwer zu erraten fügt zweite Aufruf den Datenträger sda3 dem RAID md1 hinzu.
5.) Grub für das neue RAID Installieren
Jetzt abschließend den Grub Bootloader für beide Festplatten konfiguriert und auf diese Installieren.
nur noch die Zeile „GRUB_TERMINAL=console“ in der Datei /etc/default/grub auskommentieren und mit den folgenden Befehlen eine neue Grub Konfiguration schreiben.
grub-mkdevicemap -n
update-grub
grub-install /dev/sda
grub-install /dev/sdb
Jetzt kann der Computer auch mit nur einer einzelnen Festplatte, /dev/sda oder /dev/sdb, erfolgreich starten.