• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

RAID 1 auflösen?

mairo

Hacker
Hallöchen,
ich habe unter Opensuse 12.2 zwei Festplatten in einem Raid 1 - Verbund (Software-Raid!!). Diesen möchte ich nun auflösen. Aber wie ohne Datenverlust? Eigentlich müsste ja auf beiden Platten der selbe Inhalt gespeichert sein.
Wie bekomme ich es also hin, eine Festplatte wieder als "normale Datenfestplatte" zu nutzen?
Übrigens: Der Raid - Verbund ist NICHT die Systemplatte, sondern nur eine "Daten-Platte"!

Danke für eure Hilfen

mairo
 
A

Anonymous

Gast
zuerst einen Überblick verschaffen und folgende Ausgaben mal sicherheitshalber alle in einer Datei sammeln.
Code:
cat /proc/mdstat
cat /etc/fstab
cat /etc/mdadm.conf
fdisk -l
lsblk
dann eine von beiden Platten aussuchen die du zuerst raus nimmst
Beispielkonfiguration die hier im weiteren Vorgehen angenommen wird.: (/dev/sda1 und /dev/sdb1 sind zu /dev/md0 gespiegelt)
Code:
mdadm /dev/md0  -r  -f  /dev/sdb1
setzt /dev/sdb1 vom Raid1 md0 auf failed und entfernt es aus dem aktuellem Raid,, das Raid läuft nur mit /dev/sda1 weiter.

Je nach verwendeten Metadaten des Raid muss der RaidSuperblock auf /dev/sdb1 gelöscht werden. bei V0.9 und V1.0 liegt er am Ende , bei V1.1 und V1.2 liegt er am Anfang
entweder löschen mit (Befehl sollte den Superblock automatisch an der richtigen Position finden und löschen)
Code:
mdadm --zero-superblock /dev/sdb1
oder komplette /dev/sdb1 mit dd überschreiben
Code:
dd if=/dev/zero of=/dev/sdb1 bs=4K

Anschließend kannst du die Platte neu partitionieren wenn notwendig, zumindestens solltest du die Parittions Kennung von sdb1 von derzeit "fd" auf "83" setzen
dann neues Dateisystem darauf anlegen und temporär mounten zB:
Code:
mkfs.ext4 /dev/sdb1
mount /dev/sdb1 /mnt

Jetzt kannst du die Daten vom Raid rüber kopieren auf das Dateisystem unterhalb von /mnt zB mir rync /src/foo ist der derzeitige Mountpoint des Raid1
Code:
rsync -av /src/foo/ /mnt/
eventuell wenn dort ACLs drauf sind (zB bei Samba Freigaben) besser folgende, das erschlägt wahrscheinlich Alles.
Code:
rsync -AHPSXavx  /src/foo/ /mnt/

wenn fertig prüfen ob alles ok ist auf /mnt, erst dann gehts weiter.
Code:
umount /mnt

Als nächstes dein Raid1 umounten, sollte möglich sein, wenn du alle Programme schließt und alle User abmeldest die derzeit darauf zugreifen, Notfalls vorher in Runleve1 fahren.
Code:
umount /dev/md0
wenn der umount erfolgreich Raid anhalten.
Code:
mdadm -S /dev/md0

mit dieser Platte jetzt genauso verfahren, Raidsuperblock löschen oder Partition überschreiben, und Partitionstabelle das "fd" Flag in "83" oder was immer für die Weiterverwendung benötigt wird,ändern, wenn du die Platte anderweitig verwenden möchtes. Wenn nicht, kannst du diese Platte noch eine Zeit aufheben (nur das fd Flag muss weg wenn die Platte im System bleiben soll,, sonst versucht Linux jedes mal beim Start das Raid aufzusetzen.), wenn du sonst nichts an der Platte änderst, ist das Raid jederzeit wieder aufsetzbar.

die Konfigurationsdatei /dev/mdadm.conf , entweder alle Spuren von md0 dort rausnehmen, oder wenn es das einzige Raid war dann die ganze Datei löschen.
die /etc/fstab ändern, die Zeile mit /dev/md0 löschen oder auskommentieren und eine neue Zeile mit dem selben Optionen und Mountpoint für /dev/sdb1
Code:
mount -a
sollte jetzt automatisch dein /dev/sdb1 richtig mounten.

jetzt noch eine neue initrd erstellen, damit die alte Raid Konfiguration auch aus der initrd entfernt ist.
bei den meisten Distributionen reicht
Code:
mkinitrd

Danach Rechner runterfahren und wenn die ID "fd" noch nicht von der 2. Platte entfernt ist, dann diese aus dem System jetzt ausbauen.
booten fertig.

Sache von 5 Minuten ;) (Späßle gemacht) dauert natürlich seine Zeit, da du sicherlich auch jeden Befehl noch ein wenig auf deine Gegebenheiten auf dem Rechner anpassen musst. Devicenamen können und werden wahrscheinlich bei dir komplizierter aussehen, also mal innerhalb von /dev suchen und den Softlinks dort folgen wo sie genau hinzeigen. ZB
Code:
find /dev/disk -ls
lsblk
könnte eine Hilfe sein um den Überblick zu behalten.

Die Befehle sind Hirndump, also ohne Gewähr, aber das kann man so schnell auch auf keinem Rechner ausprobieren.

robi
 
OP
M

mairo

Hacker
Wow.. doch so kompliziert...
Vielleicht sollte ich alle Daten auf einer Externen Festplatte sichern und dann "Raid löschen" und die Festplatte neu formatieren... ist sicher einfacher.. oder?

Mal eine Zusatzfrage: Wenn ich dieses Raid-Array in einen neuen PC einbauen würde, könnte ich dieses dort auch einbinden? (Also, beide Festplatten ausbauen, in einen neuen PC einbauen...) Ginge das?

Gruß
mairo
 

josef-wien

Ultimate Guru
mairo schrieb:
doch so kompliziert
robi hat einen Weg des schrittweisen Auflösens dargelegt, das kannst Du auch abkürzen. Aber Du solltest einmal das Ergebnis von
Code:
cat /proc/mdstat
zeigen, damit wir wissen, wie es bei Dir aussieht.

mairo schrieb:
ist sicher einfacher
Das sehe ich nicht so. Außerdem kostet es ein Vielfaches an Zeit.

mairo schrieb:
Ja. Aber was ist eigentlich Dein Ziel?
 
OP
M

mairo

Hacker
Also, hier wie gewünscht die Ausgabe:

Code:
linuxserver:~ # cat /proc/mdstat
Personalities : [raid1] 
md0 : active raid1 sdc1[1] sdb1[0]
      976759864 blocks super 1.0 [2/2] [UU]
      bitmap: 5/466 pages [20KB], 1024KB chunk

unused devices: <none>

Hilft das?
 

josef-wien

Ultimate Guru
Wenn Du /dev/md0 rückstandsfrei entfernen willst (die Daten auf /dev/sdb1 und /dev/sdc1 bleiben erhalten):
Code:
umount /dev/md0
mdadm --stop /dev/md0
mdadm --zero-superblock /dev/sdb1
mdadm --zero-superblock /dev/sdc1
sfdisk --change-id /dev/sdb 1 83
sfdisk --change-id /dev/sdc 1 83
tune2fs -U random /dev/sdc1
==> fstab anpassen
==> Zeile aus /etc/mdadm.conf oder ganze Datei entfernen
Einen systemd-Service für den Überwachungs-Dämon mdadmd scheint es nicht zu geben, vermutlich funktioniert insserv -r mdadmd noch, falls der Dienst bisher aktiviert war.
 
A

Anonymous

Gast
Achtung: für alle die das nachmachen wollen,
Diese Abkürzung die hier josef-wien aufzeigt, geht nur wenn Raid-Superblock-Version nicht 1.1 oder 1.2 ist..

1.2 ist der Defaultwert von mdadm, also wenn ihr Raid per Hand angelegt habt. Der Yast Installer nimmt bis jetzt immer nur 1.0
hier ist es 1.0 da geht das so einfach, auch bei 0.9 würde es gehen, ersichtlich die Version zB. hier:
linuxserver:~ # cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 sdc1[1] sdb1[0]
976759864 blocks super 1.0 [2/2] [UU]
bitmap: 5/466 pages [20KB], 1024KB chunk

unused devices: <none>

zB. bei 1.2 , dem default von mdadm werdet ihr hinterher so schnell die Dateien nicht in den Partitionen finden können, da das Dateisystem hier weiter hinten in der Partition anfängt als normal und sich das Dateisystem nicht ohne zusätzliche Offsetparameter mounten lässt.

robi
 
Oben