Dadurch wird das Laufwerk einfach in das Array geworfen, ohne tatsächlich etwas damit zu tun, dh es ist ein Mitglied des Arrays, aber nicht darin aktiv. Standardmäßig wird es dadurch zu einem Ersatz:
sudo mdadm /dev/md0 --add /dev/sdb1
Wenn Sie über ein Ersatzlaufwerk verfügen, können Sie es vergrößern, indem Sie die Anzahl der aktiven Laufwerke für das Array erhöhen. Mit 3 Laufwerken und 2 voraussichtlich aktiv, müssten Sie die aktive Anzahl auf 3 erhöhen.
mdadm --grow /dev/md0 --raid-devices=3
Der Raid-Array-Treiber wird feststellen, dass Ihnen ein Laufwerk "zu kurz" ist, und dann nach einem Ersatz suchen. Wenn das Ersatzlaufwerk gefunden wird, wird es als aktives Laufwerk in das Array integriert. Öffnen Sie ein Ersatzterminal und lassen Sie diese ziemlich grobe Befehlszeile darin laufen, um den Fortschritt der erneuten Synchronisierung im Auge zu behalten. Stellen Sie sicher, dass Sie es als eine Zeile eingeben oder das Zeilenumbruchzeichen (\) verwenden, und sobald der Neuaufbau abgeschlossen ist, geben Sie einfach Strg-C im Terminal ein.
while true; do sleep 60; clear; sudo mdadm --detail /dev/md0; echo; cat /proc/mdstat; done
Ihr Array verfügt nun über zwei aktive Laufwerke, die synchron sind, aber da es keine 3 Laufwerke gibt, ist es nicht 100 % sauber. Entfernen Sie das ausgefallene Laufwerk und ändern Sie dann die Größe des Arrays. Beachten Sie, dass --grow
flag ist ein bisschen irreführend - es kann entweder bedeuten wachsen oder schrumpfen:
sudo mdadm /dev/md0 --fail /dev/{failed drive}
sudo mdadm /dev/md0 --remove /dev/{failed drive}
sudo mdadm --grow /dev/md0 --raid-devices=2
In Bezug auf Fehler reicht ein Verbindungsproblem mit dem Laufwerk (d. h. dem PATA/SATA-Port, Kabel oder Laufwerksanschluss) nicht aus, um ein Failover eines Hotspare auszulösen, da der Kernel normalerweise auf die Verwendung des anderen „guten“ wechselt. Laufwerk, während es die Verbindung zum "schlechten" Laufwerk zurücksetzt. Ich weiß das, weil ich ein Array mit 3 Laufwerken betreibe, 2 Hot, 1 Spare, und eines der Laufwerke erst kürzlich beschlossen hat, ein wenig in den Protokollen zu kotzen. Als ich alle Laufwerke im Array getestet habe, haben alle 3 die "lange" Version des SMART-Tests bestanden, also ist es kein Problem mit den Platten, mechanischen Komponenten oder dem Onboard-Controller - was ein flockiges Verbindungskabel oder ein schlechter SATA-Port. Vielleicht ist es das, was Sie sehen. Versuchen Sie, das Laufwerk auf einen anderen Motherboard-Anschluss umzuschalten oder ein anderes Kabel zu verwenden, und sehen Sie, ob es besser wird.
Ein Follow-up:Ich habe meine Erweiterung des Spiegels auf 3 Laufwerke abgeschlossen, bin fehlgeschlagen und habe das fehlerhafte Laufwerk aus dem MD-Array entfernt, das Kabel im laufenden Betrieb gegen ein neues ausgetauscht (das Motherboard unterstützt dies) und das Laufwerk erneut hinzugefügt. Beim erneuten Hinzufügen wurde sofort eine erneute Synchronisierung des Laufwerks gestartet. Bisher ist kein einziger Fehler im Protokoll aufgetaucht obwohl das Laufwerk stark beansprucht wird. Also, ja, Laufwerkskabel können brüchig werden.
Ich hatte genau das gleiche Problem und in meinem Fall habe ich herausgefunden, dass die aktive RAID-Festplatte während der Synchronisierung unter Lesefehlern litt. Daher wurde die neue Festplatte erfolgreich synchronisiert und als Ersatz markiert gehalten.
Möglicherweise möchten Sie Ihre /var/log/messages und andere Systemprotokolle auf Fehler überprüfen. Darüber hinaus kann es auch eine gute Idee sein, den SMART-Status Ihrer Festplatte zu überprüfen:
1) Führen Sie den Kurztest durch:
"smartctl -t short /dev/sda"
2) Testergebnisse anzeigen:
"smartctl -l selftest /dev/sda"
In meinem Fall hat dies etwa Folgendes zurückgegeben:
===ANFANG VON READ SMART DATA ABSCHNITT ===
Revisionsnummer 1 der Protokollstruktur des SMART-Selbsttests
Num Test_Description Status Remaining LifeTime(hours) LBA_of_first_error
1 Extended offline Completed:Lesefehler 90 % 7564 27134728
2 Kurz offline Abgeschlossen:Lesefehler 90 % 7467 1408449701
Ich musste eine Live-Distribution booten und die Daten manuell von der defekten Festplatte auf die neue (derzeit "Ersatz") kopieren.
Ich hatte genau das gleiche Problem und dachte immer, dass meine zweite Platte, die ich wieder dem Array hinzufügen wollte, Fehler hatte. Aber es war meine ursprüngliche Festplatte hatte Lesefehler.
Sie können dies mit smartctl -t short /dev/sdX
überprüfen und sehen Sie sich die Ergebnisse ein paar Minuten später mit smartctl -l selftest /dev/sdX
an . Bei mir sah es so aus:
=== START OF READ SMART DATA SECTION ===
SMART Self-test log structure revision number 1
Num Test_Description Status Remaining LifeTime(hours) LBA_of_first_error
# 1 Short offline Completed: read failure 20% 25151 734566647
Ich habe versucht, sie mit dieser Anleitung zu beheben. Das hat Spaß gemacht :-). Ich weiß, dass Sie beide Festplatten auf Fehler überprüft haben, aber ich denke, Ihr Problem ist, dass die Festplatte, die sich noch im MD-Array befindet, Lesefehler aufweist, sodass das Hinzufügen einer zweiten Festplatte fehlschlägt.
Aktualisieren
Sie sollten zusätzlich smartctl -a /dev/sdX
ausführen Wenn Sie Current_Pending_Sector> 0 sehen, stimmt etwas nicht
197 Current_Pending_Sector 0x0012 098 098 000 Old_age Immer - 69
Bei mir war es definitiv das Problem, dass ich eine Platte nur zum Testen aus dem Raid entfernt habe und die Resynchronisierung wegen Lesefehlern nicht durchgeführt werden konnte. Die Synchronisierung wurde auf halbem Weg abgebrochen. Als ich meine Festplatte überprüfte, die sich noch im Raid-Array befand, meldete smartctl Probleme.
Ich konnte sie mit dem obigen Handbuch beheben und sah, dass die Anzahl der ausstehenden Sektoren reduziert wurde. Aber es waren zu viele und es ist ein langwieriger und langweiliger Vorgang, also habe ich mein Backup verwendet und die Daten auf einem anderen Server wiederhergestellt.
Da Sie nicht die Gelegenheit hatten, SMART zu verwenden, schätze ich, dass Ihr Selbsttest diese defekten Sektoren nicht gezeigt hat.
Für mich ist es eine gelernte Lektion:Überprüfen Sie Ihre Festplatten, bevor Sie eine aus Ihrem Array entfernen.