Was bedeutet die "Ersatz" -Nummer von mdadm?

8

Mit dem folgenden Befehl habe ich aus sechs Festplatten ein mdadm-basiertes RAID 5 erstellt:

# mdadm --create /dev/md0 --level=5 --raid-devices=5 \
/dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1 /dev/sdf1 \
--spare-devices=1 /dev/sdg1

Ich habe erwartet, dass das Array ein Ersatzlaufwerk hat, nämlich / dev / sdg1. Die Überprüfung mdadm --detailzeigt jedoch 2 Ersatzteile:

# mdadm --detail --scan 
ARRAY /dev/md0 metadata=1.2 spares=2 name=...

Die Array-Größe dfbeträgt 2 TB, was nur vier meiner 500-GB-Laufwerke entspricht.

Was genau ist die Semantik von --spare-devices? In der Manpage heißt es, dass "die Anzahl der Ersatzgeräte (eXtra) im ursprünglichen Array angegeben wird". Dies scheint hier jedoch nicht der Fall zu sein.

jstarek
quelle
1
RAID 5 verwendet die Parität eines Geräts. Ich weiß nicht, weshalb ich dies zu einem Kommentar mache, aber könnte das möglicherweise etwas damit zu tun haben? ( mdadm --detaileinschließlich des Paritätslaufwerks in der Anzahl der "Ersatzteile".) Sie können dies überprüfen, indem Sie ein RAID 6-Array ohne Ersatzlaufwerk erstellen. Wenn meine Theorie zutrifft, wird auch Ersatzteile = 2 angezeigt.
Ein Lebenslauf vom
2
In der Standard-RAID-Terminologie ist ein Ersatzlaufwerk nur eine inaktive, meist leere Festplatte, die automatisch aktiviert werden kann, um das Array nach einem Ausfall einer anderen Festplatte neu zu erstellen. Eine Paritätsfestplatte ist keine Ersatzfestplatte. Die Anzahl der Ersatzfestplatten entspricht nicht der Anzahl der Festplatten, die ausfallen können, bevor Ihre Daten gefährdet sind. (Die Anzahl ist nicht genau definiert. Ein RAID 10 mit vier Festplatten kann bis zu zwei Festplattenfehler behandeln, aber es kann auch mit zwei Festplattenfehlern tot sein.)
200_success
4
Ich vermute, Sie sehen zwei Ersatzteile, weil es immer noch die anfängliche Array-Initialisierung ausführt - es wird auf einem der beiden Ersatzteile "neu aufgebaut". Sobald dies erledigt ist (überprüfen Sie den Fortschritt bis cat /proc/mdstat), werden Sie
wahrscheinlich
@derobert, Sie haben Recht: Nachdem der erste Wiederaufbau abgeschlossen war, erhielt ich ARRAY / dev / md0 Metadaten = 1.2 Ersatzteile = 1 Name = [...] von mdadm --detail --scan und eine entsprechende Information von / proc / mdstat.
Jstarek

Antworten:

4

Diese Ausgabe ist korrekt. Sie haben ein RAID 5 mit 5 Festplatten erstellt (nur 4 davon werden für den Speicherplatz "verwendet"). Und Sie haben ein zusätzliches Ersatzlaufwerk hinzugefügt.

Sie haben also tatsächlich ein RAID 5, das einen Festplattenausfall + ein zusätzliches Ersatzlaufwerk zulässt.

Wenn Sie tatsächlich RAID 5 mit 6 Festplatten und einem Speicherplatz von 5 Festplatten möchten, müssen Sie Ihren Befehl ändern in:

mdadm --create /dev/md0 --level=5 --raid-devices=6 \
/dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1 /dev/sdf1 /dev/sdg1

In diesem Fall können Sie jedoch nur einen Festplattenfehler gemäß den Spezifikationen von RAID 5 tolerieren.

BEARBEITEN: Hinzufügen des Links von der offiziellen RAID-Seite: Sie können einen RAID 5 mit 6 Festplatten sehen und es heißt Spare = 1: Initial Array Creation

UPDATE: Ich habe beschlossen, einen RAID 5 in meinem System zu erstellen, und der Ersatzwert verschwindet, sobald sich das Array in einem sauberen Zustand befindet:

   Raid Devices : 4
  Total Devices : 4
              State : clean, degraded, recovering
     Active Devices : 3
    Working Devices : 4
     Failed Devices : 0
      Spare Devices : 1

Sauberer Zustand:

   Raid Devices : 4
  Total Devices : 4
          State : clean
 Active Devices : 4
Working Devices : 4
 Failed Devices : 0
  Spare Devices : 0

So wie es der OP-Kommentar ist, hat es während der ersten Erstellung von RAID 5 das Ersatzlaufwerk, bis der RAID-Build / die Synchronisierung abgeschlossen ist.

BitsOfNix
quelle
1
Ich denke, die wichtigsten Informationen auf der Wiki-Seite, auf die Sie verlinkt haben, sind folgende: "Für raid5 gibt es eine Optimierung: mdadm nimmt eine der Festplatten und markiert sie als 'Ersatz'; dann wird das Array im herabgesetzten Modus erstellt." - Dies würde gut zu der Beobachtung passen, die derobert in den obigen Kommentaren gemacht hat. Abgesehen davon befürchte ich, dass Sie meine Frage falsch verstanden haben: Ich wollte keine 5 Laufwerke im Wert von Speicherplatz haben. Die Erwähnung der 2 TB war nur eine Beobachtung.
Jstarek
3

Aus Gründen der Klarheit werde ich die Informationen von Derobert und Alexandre Alves sowie einige weitere Tests von mir hier zusammenfassen:

mdadmDer --spare-devicesParameter von ' funktioniert wie in der Manpage angegeben, dh er definiert die Anzahl der "Hot Spare" -Laufwerke in einem Array. Ein "Hot Spare" hat, wie in der normalen RAID-Terminologie, nichts mit den zusätzlichen Laufwerken in einem RAID 5- oder RAID 6-Array zu tun - es ist ein zusätzliches Laufwerk, das die Kontrolle übernehmen soll, sobald sich ein Laufwerk im Array befindet ist fehlgeschlagen.

Die Anzahl der Ersatzlaufwerke wird zum Zeitpunkt der Array-Erstellung angegeben. Später kann es mit überprüft werden #mdadm --detail --scan.

Doch während der kurzen Zeit der Initialisierung eines mdadm-basierte RAID - 5, es ist eine Optimierung, in beschrieben https://raid.wiki.kernel.org/index.php/Initial_Array_Creation , dass ein zusätzliches Ersatzlaufwerk macht erscheint in die Ausgabe dieses Befehls:

"Für raid5 gibt es eine Optimierung: mdadm nimmt eine der Festplatten und markiert sie als 'Ersatz'; dann erstellt es das Array im herabgesetzten Modus. Der Kernel markiert die Ersatzfestplatte als 'Neuaufbau' und beginnt, aus dem 'Guten' zu lesen. Festplatten, berechnen die Parität und bestimmen, was auf der Ersatzfestplatte sein soll, und schreiben dann einfach darauf. "

Nach Abschluss der Array-Initialisierung wird die Anzahl der gemeldeten Ersatzteile auf die zum Zeitpunkt der Erstellung ausgewählte Anzahl zurückgesetzt.

jstarek
quelle