debian 8 - mdadm - raid 5 - defekte HDD tauschen

MrChaos

Admiral Special
Mitglied seit
11.11.2001
Beiträge
1.901
Renomée
2
Standort
LE
Hallo zusammen,

seit ein paar Tagen experimentiere ich mit einem Software RAID 5 auf einem Debian 8.
Ich möchte euch gerne an meinen Erfahrungen teilhaben lassen.

Zum Verwalten und Erstellen eines RAID 5 wird "mdadm" benutzt. Wie man damit ein RAID erstellt möchte ich hier nicht weiter ausführen, dazu gibt es viele Anleitungen / Tutorials im Netz.
Mir geht es hier vorallem um den Austausch einer defekten Festplatte in einem RAID 5.

Das RAID 5 besteht zum testen im Moment aus 3 Festplatten
/dev/sdb
/dev/sdc
/dev/sdd

Ich möchte jetzt den Fehlerfall simulieren und habe dazu einfach eine HDD vom System abgezogen.
Nach dem reboot sieht das "defekte" RAID 5 so aus:

Code:
root@mate:/home/user# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
md0 : active (auto-read-only) raid5 sdc[1] sdb[3]
      312316928 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/2] [_UU]
      bitmap: 0/2 pages [0KB], 65536KB chunk

unused devices: <none>
Code:
root@mate:/home/user# mdadm --detail /dev/md0
/dev/md0:
        Version : 1.2
  Creation Time : Wed Oct  5 17:08:14 2016
     Raid Level : raid5
     Array Size : 312316928 (297.85 GiB 319.81 GB)
  Used Dev Size : 156158464 (148.92 GiB 159.91 GB)
   Raid Devices : 3
  Total Devices : 2
    Persistence : Superblock is persistent

  Intent Bitmap : Internal

    Update Time : Thu Oct  6 11:12:44 2016
          State : clean, degraded
 Active Devices : 2
Working Devices : 2
 Failed Devices : 0
  Spare Devices : 0

         Layout : left-symmetric
     Chunk Size : 512K

           Name : mate:0  (local to host mate)
           UUID : f8bc63a2:62349f1f:39f79de9:76834885
         Events : 6273

    Number   Major   Minor   RaidDevice State
       0       0        0        0      removed
       1       8       32        1      active sync   /dev/sdc
       3       8       16        2      active sync   /dev/sdb

Dies könnte der Zustand sein, wenn eine HDD sich nicht mehr am System anmeldet.
Nachdem /dev/sdb entfernt ist ... rückt erst einmal /dev/sdd auf und wird zu /dev/sdb. <- dieses Verhalten verursacht immer einen Logicbruch bei mir *chatt*

An dieser Stelle, habe ich erst einmal folgende Frage:
- Muss ich die HDD die als "removed" markiert ist, aus dem RAID Verbund entferne? Wenn ja wie?
(zum Ziel kam ich auch ohne das ich Sie entfernt habe, siehe unten)

Die meisten How to's im Netz beschäftigen sich damit, wie man eine HDD als "fail" markiert und dann entfernt. In diesen Fällen ist diese aber immer noch vorhanden und funktioniert und kann ordentlich aus dem RAID 5 removed werden.

Wenn ich jetzt versuche die defekte HDD (sdb) aus dem RAID zu entfernen [physisch ist sie nicht mehr im System] {sdd ist im Moment zu sdb geworden}, sieht das so aus:
Code:
root@mate:/home/user# mdadm --manage /dev/md0 --remove /dev/sdb
mdadm: hot remove failed for /dev/sdb: Device or resource busy
Dann stoppe ich das RAID:
Code:
root@mate:/home/user# mdadm --stop /dev/md0
mdadm: stopped /dev/md0
Ich versuche erneut die alte /dev/sdb zu entfernen: [wobei ja jetzt die sdd die sdb ist *buck*]
Code:
root@mate:/home/user# mdadm --manage /dev/md0 --remove /dev/sdb
mdadm: error opening /dev/md0: No such file or directory

An dieser Stelle bin ich mir unsicher ob das mit dem "remove" in diesem Fall wirklich sein muss. Was sagt ihr?
Muss ich die nicht mehr vorhandene /dev/sdb überhaupt extra aus dem RAID 5 Verbund löschen?

Ich habe das ganze weiter probiert: Und zwar habe ich an den gleichen SATA Anschluss wo die "defekte" /dev/sdb hängt eine andere HDD vom gleichen Typ mit gleicher Größe gesteckt.

Ein fdisk -l sagt mir das eine neue hdd wieder da ist. aktuell sind dann sdb,sdc,sdd im System.
Um rauszufinden, welche jetzt die neue ist habe ich hdparm bemüht und mir die Seriennummern der Festplatten anzeigen lassen.
Code:
root@mate:/home/user# hdparm -i /dev/sdb | grep SerialNo
 Model=ST3160811AS, FwRev=3.AAE, SerialNo=6PT2BRF9
root@mate:/home/user# hdparm -i /dev/sdc | grep SerialNo
 Model=ST3160812AS, FwRev=3.AAH, SerialNo=5LS3X5B4
root@mate:/home/user# hdparm -i /dev/sdd | grep SerialNo
 Model=ST3160318AS, FwRev=HP11, SerialNo=9VY178FZ
Hier sieht man, wenn man die SN vergleichen kann ;) das /dev/sdb jetzt die "neue" Festplatte ist.

Was aber würde passieren, wenn ich für die neue Festplatte einen anderen SATA Anschluss verwende? <- das habe ich noch nicht ausprobiert.

Jetzt mit :
Code:
root@mate:/home/user# mdadm --manage /dev/md0 --add /dev/sdb
mdadm: added /dev/sdb
die neue /dev/sdb ins RAID 5 einfügen

Im Moment sieht der Status vom RAID5 wie folgt aus:
Code:
root@mate:/home/user# mdadm --detail /dev/md0
/dev/md0:
        Version : 1.2
  Creation Time : Wed Oct  5 17:08:14 2016
     Raid Level : raid5
     Array Size : 312316928 (297.85 GiB 319.81 GB)
  Used Dev Size : 156158464 (148.92 GiB 159.91 GB)
   Raid Devices : 3
  Total Devices : 3
    Persistence : Superblock is persistent

  Intent Bitmap : Internal

    Update Time : Thu Oct  6 11:51:27 2016
          State : clean, degraded, recovering
 Active Devices : 2
Working Devices : 3
 Failed Devices : 0
  Spare Devices : 1

         Layout : left-symmetric
     Chunk Size : 512K

 Rebuild Status : 0% complete

           Name : mate:0  (local to host mate)
           UUID : f8bc63a2:62349f1f:39f79de9:76834885
         Events : 6276

    Number   Major   Minor   RaidDevice State
       4       8       16        0      spare rebuilding   /dev/sdb
       1       8       32        1      active sync   /dev/sdc
       3       8       48        2      active sync   /dev/sdd
Code:
root@mate:/home/user# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
md0 : active raid5 sdb[4] sdc[1] sdd[3]
      312316928 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/2] [_UU]
      [==>..................]  recovery = 13.7% (21445468/156158464) finish=52.1min speed=43015K/sec
      bitmap: 0/2 pages [0KB], 65536KB chunk

unused devices: <none>

Nach der kurzen Wartezeit von 52.1min war der Rebuild vom RAID 5 erfolgreich erledigt.


<- das war mein erster Versuch ein Software RAID 5 wieder herzustellen.
Meint Ihr das ist so der richtige weg? Habe ich etwas übersehen? Könnte ich noch etwas anders machen?
Danke fürs feedback :)

Gruß
MrChaos
 
Eine disk die auf Status faulty war, muss man removen, damit man sie ersetzen kann.
Nach dem remove kann man dann die neue Disk wieder zum Raid-set hinzufügen.

Insofern war alles richtig.

Man muss aber nicht die Platte abziehen, sondern es reicht ein:

Code:
mdadm /dev/md0 -f /dev/sdb

um das device auf faulty zu setzen. Mit "-r" ist es dann zu entfernen.

lg
__tom

PS: wegen der Ausrichtung der Blöcke auf 4K sollte man nicht direkt das /dev/sdx zu einem RAID machen, sondern eine ausgerichtete Partition auf der Platte.
 
Nachdem /dev/sdb entfernt ist ... rückt erst einmal /dev/sdd auf und wird zu /dev/sdb. <- dieses Verhalten verursacht immer einen Logicbruch bei mir *chatt*
Code:
       --prefer=
              When mdadm needs to print the name for a device it normally finds the name in /dev which refers to the device and is shortest.  When a path component is given with --prefer mdadm will prefer a longer name if it contains that com?
              ponent.  For example --prefer=by-uuid will prefer a name in a subdirectory of /dev called by-uuid.
Heißt: Um die Ausgabe kurz zu halten gibt mdadm dir /dev/sdb aus.
Der Name für die HDD ist aber schlecht, da – wie du ja schon bemerkt hast – veränderlich.
Besser ist es hier die UUID zu verwenden, die du auch von mdadm ausgegeben bekommst, wenn du --prefer=by-uuid wählst.

An dieser Stelle, habe ich erst einmal folgende Frage:
- Muss ich die HDD die als "removed" markiert ist, aus dem RAID Verbund entferne? Wenn ja wie?
(zum Ziel kam ich auch ohne das ich Sie entfernt habe, siehe unten)
Wenn du die HDD nicht entfernst, dann geht das RAID davon aus, dass sie evtl. wieder hinzugefügt wurde (und würde nach Hinzufügen anfangen wieder zu synchronisieren).

Wenn ich jetzt versuche die defekte HDD (sdb) aus dem RAID zu entfernen [physisch ist sie nicht mehr im System] {sdd ist im Moment zu sdb geworden}, sieht das so aus:
Code:
root@mate:/home/user# mdadm --manage /dev/md0 --remove /dev/sdb
mdadm: hot remove failed for /dev/sdb: Device or resource busy
Dann stoppe ich das RAID:
Code:
root@mate:/home/user# mdadm --stop /dev/md0
mdadm: stopped /dev/md0
Ich versuche erneut die alte /dev/sdb zu entfernen: [wobei ja jetzt die sdd die sdb ist *buck*]
Code:
root@mate:/home/user# mdadm --manage /dev/md0 --remove /dev/sdb
mdadm: error opening /dev/md0: No such file or directory
Du versuchst die Disk zu entfernen die in deinem RAID aktiv ist, das muss ja fehlschlagen (und ist auch gut so).
mdadm interessiert sich auch erstmal nicht dafür ob das Teil sdb, sdc oder sdd heißt, sondern erkennt die richtige Disk anhand der Metadaten.
Wenn du die Anschlüsse deiner Disks vertauschst, dann sollte das z.B. immer noch funktionieren, da so eine Änderung für mdadm transparent ist.
(Im Gegensatz übrigens zu einem Fakeraid, was da gerne mal Probleme verursacht, wie ich neulich erst feststellen durfte.)

Mit anderen Worten: Lieber UUID verwenden, dann hast du das Problem nicht und dann sollte das Entfernen der Disks auch funktionieren, wenn diese nicht mehr existiert.

Generell sei dir die manpage von mdadm empfohlen. Ich weiß, manpages sind oft sehr technisch und rel. schwer zu verstehen, die von mdadm finde ich aber wirklich sehr gut.
 
Wenn ich das so richtig verstanden habe, dann kann ich doch das Laufwerk nur auf "faulty" setzten, wenn dieses vom System noch erkannt wird oder?

UUID's zu verwenden hatte ich schon überlegt, (mache ich auch in der fstab so) allerdings waren die Tutorials im Netz alle mit sda / sdb / ... daher habe ich das erst einmal so probiert.
Dazu habe ich noch ein paar Fragen:
- kann man die Laufwerke schon mit einer UUID an mdadm übergeben?
- um die Disk per UUID zu entfernen, setzt das vorraus das man die UUID von jedem Laufwerk kennt :) oder?
- wie müsste der Befehl aussehen wenn man eine UUID zum entfernen / hinzufügen benutzen möchte?
So habe ich das RAID erstellt
Code:
mdadm --create --verbose /dev/md0 --auto=yes --level=5 --raid-devices=3 /dev/sdb /dev/sdc /dev/sdd
Könnte das so mit UUID funktionieren: (kann es erst später heute testen)
Code:
mdadm --create --verbose /dev/md0 --auto=yes --level=5 --raid-devices=3 UUID="<hier die UUID>" UUID="<hier die UUID>" ...
 
Wenn ich das so richtig verstanden habe, dann kann ich doch das Laufwerk nur auf "faulty" setzten, wenn dieses vom System noch erkannt wird oder?
Ja klar, dazu ist es ja auch da - zum Testen. Anschließend kann das device mit -r entfernt werden.

Du hast es abgezogen, das einem faulty und remove gleich kommt.
Was schon erhöhtes Risiko für die Laufwerkselektronik bedeutete.
 
Ja, wie gesagt, mdadm versteht uuid. Ob die Syntax so richtig ist kann ich spontan nicht sagen, da ich schon länger kein mdadm mehr verwende.

Prinzipiell sollte dir mdadm, wenn du dir die Daten des raids anzeigen lässt alle devices anzeigen, die dem raid zugeordent sind.
Also auch die, die eigentlich erwartet werden, aber nicht vorhanden sind.

Ausprobieren kann ich es wie gesagt aber nicht.
 
Danke euch für die Tipps!
Das RAID läuft jetzt. Wenn auch im Moment ohne UUID, was aber kein wirkliches Problem ist.
 
Zurück
Oben Unten