Donnerstag, 9. Juni 2011
Nachdem ich meine Acer Easystore H340 endlich vom WHS befreit habe und Linux, in dem Fall Ubuntu, installiert habe, bin ich auf das Problem gestoßen ein RAID nachträglich einzurichten. Da die eine Platte kaputt war, und ich nicht warten wollte, bis diese wieder da ist, konnte ich anfangs (zum Installationszeitpunkt) kein RAID nutzen.
Da es sich bei dem nachträglichen RAID nur um ein “Storage”-RAID handelt, ist dies auch gar nicht so schwer. Trotzdem fasse ichs mal kurz zusammen.
Das System
Kurz zum System.
- Ubuntu 11.04 Desktop mit Gnome
- 1 Systemplatte sda
- 2 Storageplatten sdb und sdc (die neue)
Die neue Platte vorbereiten
Die Platten, die im RAID enthalten sein sollen, sollten gleich groß sein. Ich hab zweimal das gleiche Modell von WD.
sdc ist ja noch jungfräulich und muss fürs RAID vorbereitet werden.
Hierzu sollen zunächst die Partitionstabellen von sdb eingerichtet werden:
sudo su -
sfdisk -d /dev/sdb | sfdisk /dev/sdc
Anschließend markieren wir die Partition(en) als RAID und vergewissern uns, dass alles passt:
parted /dev/sdc
(parted) toggle 1 raid
(parted) print
Damit ist die Vorbereitung der zweiten Platte soweit fertig.
Erstellen des RAID
Als nächstes erstellen wir das RAID mittels folgendem Befehl:
mdadm -C /dev/md0 --force --level=1 --raid-devices=2 /dev/sdc1 missing
Das missing markiert für die zweite noch normal eingehängte Platte den Platzhalter. Das RAID ist nun so benutzbar und kann eingehängt werden.
Kopieren der Daten auf das RAID
Jetzt können wir die Daten von der einzelnen Platte auf das RAID kopieren.
Dafür hängen wir das RAID ein.
mkdir /tmp/raid1
mount /dev/md0 /tmp/raid1
Gucken, ob alle Berechtigungen passen. Anschließend kopieren wir alles von sdb1 auf md0. Ich hab das wieder als Normaluser gemacht, so dass die Berechtigungen passen. Man kann es auch mit dem p-Parameter kopieren (gibt’s das bei cp?) und rsyncen, so dass die Berechtigungen erhalten bleiben.
cp -v /storage/* /tmp/raid1
Das -v kann man auch weglassen, bietet sich nur als ungefährer Fortschrittsindikator an (v.a. bei größeren Datenmengen).
Die zweite Platte ins RAID einbinden
Nun haben wir zweimal das gleiche, was ja schon nahe an ein RAID1 rankommt. Jetzt nehmen wir sdb noch in den RAID-Verbund auf.
Hierzu muss bei sdb nur noch das RAID-Flag gesetzt (siehe den parted-Teil oben) und folgender Befehl ausgeführt werden.
mdadm /dev/md0 --add /dev/sdb1
Jetzt beginnt das RAID sich zu syncen. Das dauert etwas.
Syncstatus beobachten
Da ich gerne sehe, wie viel Zeit ich überbrücken muss, hab ich hier mal etwas gesucht und ein kleines Skript geschrieben, um den Status des resync beobachten zu können.
1
2
3
4
5
6
7
8
9
10
11
12
13
| raidstat() {
P="0.0%"
while [ $P != "100.0%" ]
do
sleep 1
S=`grep -A2 "$1" /proc/mdstat | tail -n1`
P=`grep -A2 "$1" /proc/mdstat | tail -n1 | egrep -o "[0-9]+\.[0-9]%"`
clear
echo $1: $S
done
}
raidstat md0 |
Ich hab das einfach in eine Datei gepackt ein chmod a+x und angeschmissen. Da ist noch einiges an Potential drinnen, was man verbessern kann, aber so ein kompletter resync passiert ja nicht so oft, deswegen hab ichs mal so “roh” gelassen.
fstab anpassen
Abschließend muss man noch die /etc/fstab anpassen. Hier muss /dev/sdb oder dessen (G|U)UID durch /dev/md0 ersetzt werden.
Damit sollte alles passen. Ein Reboot ist hier nicht notwendig.
Bei Fehlern, Anmerkungen, Verbesserungsvorschlägen bitte in den Commentsbereich schreiben.
Quellen:
Edit:
Scheinbar gab es eine Änderung bei mdadm, so dass sich hier die dev-Bezeichnungen geändert haben bzw. ändern. Aus meinem md0 wurde ein md127. So hab ichs jetzt zumindest eingetragen.
Quellen hierfür:
http://ubuntuforums.org/showthread.php?t=1772692
https://bugs.launchpad.net/ubuntu/+source/mountall/+bug/776908