server:raid

RAID

RAID (Redundant Array of Inexpensive Disks) ist eine Organisation zweier oder mehrerer physikalischer Festplatten eines Computers zu einem logischen Laufwerk, das eine größere Speicherkapazität, eine höhere Datensicherheit bei Ausfall einzelner Festplatten und/oder einen größeren Datendurchsatz erlaubt als eine physikalische Platte.

RAID kann sowohl in Hardware als auch in Software erfolgen. Hardwarecontroller entlasten die CPU, da sie eine eigene haben, dafür kosten sie aber auch einiges. Mainboard-RAID-chips sind oft billig (und laufen manchmal nur unter einem Betriebsystem wie Windows), außerdem ist der Controller natürlich ans mainboard gebunden. Beim Defekt muss man versuchen ein identisches Modell aufzutreiben.

Idealerweise (im professionellen Bereich) ist ein Hot-Spare-Laufwerk vorhanden, das dann gleich beim Ausfall als Ersatz einspringt.

Das alleinige Durchreichen einer oder mehrerer Festplatten bezeichnet man als JBOD (Just a Bunch Of Disks). Oft wird auch die Zusammenfassung zu einer (virtuelle) großen Festplatte so bezeichnet. Dabei entsteht kein RAID und auch keine erhöhte Datensicherheit/Geschwindigkeit da der Controller grundsätzlich wie ein normaler Festplatten-Controller arbeitet.

Ordentliche RAID-Controller haben eine schnelle bzw. spezialisierte CPU und einen internen RAID#Cache. So werden häufige Lesezugriff schneller fertiggestellt und beim schreiben wird dem Betriebbsystem schneller der Erfolg gemeldet. Beim Stromausfall wäre aber der Inhalt des Caches verloren, deshalb sollte er Batteriegepuffert sein.

:!: RAID ist kein Ersatz für Backups, da

  1. ein RAID nur gegen Festplattenausfall absichert,
  2. andere logische Fehler wie fehlerhafte Daten/gelöschte Dateien (auf Betriebssystemebene) auf alle Datenträger syncronisiert werden
  3. und bei größeren physikalischen Schäden (Brand, …) die zusätzliche Redundanz nichts nützt.

Außerdem ist der Ausfall des Controller ein Schwachpunkt („single point of failure“) der allerdings sehr selten auftreten wird, für professionelle Anwendungen sollte man aber einen Ersatzcontroller ähnlicher oder gleicher Bauart bereithalten.

:!: Auf jeden Fall sollte man den Ausfall einer Festplatte schon einmal simuliert haben, damit ist der Stress beim realen Ausfall geringer und man bekommt ein Gefühl für die zu erwartende Rebuild-Zeit (die Zeit bis das RAID wieder komplett berechnet ist).

Zur Geschwindigkeit lässt sich allgemein sagen, dass je mehr Festplatten die Schreibzugriffe teilen, desto schneller ist es (außer im Fall das die Berechnung der Parity/Prüfsummen ausbremst).

Vergleich Software zu Hardware-RAID
Kriterium Software-RAID Hardware-Raid 1)
Kosten keine, da im OS enthalten (ggf. Lizenzfrage) hoch, da gute Controller ihr Geld kosten
Komplexität mittel bis hoch da keine Status-LEDs den Ausfall einzelner Platten anzeigen, man muss i.d.R. nach den Seriennummern gehen niedrig, Verwaltungsoberfläche hilft, Status-LEDs helfen, Automatiken (auto-rebuild etc.)
Batteriepufferung (mit Herstellerspezifischer BBU oder NAND-Flash) verhindert verlorene Daten bei Schreibzugriff Nein Ja, wird normalerweise als Option dazu gekauft
Schreibcache „Write back caching“ mit BBU) Ja, bei Aktivierung ist ohne weitere Sicherungsmaßnahmen (USV) Datenverlust bei Stromausfall sehr wahrscheinlich ja, oft nur mit BBU/NAND-Pufferung aktivierbar. Server muss wieder angeschaltet werden solange Batterie hält, ansonsten Datenverlust
Performance sehr gut wenn Prozessor nicht am Limit gefahren wird gut bis sehr gut
Overhead (CPU, RAM etc): Je nach Nutzung, i.d.R. wenig wenn Server ausreichend dimensioniert Nein, CPU und RAM wird nicht belastet
Austausch defekter Datenträger im laufenden Betrieb („hot swapping“) möglich wenn Controller hot-swap unterstützt Ja
Datenträger im stand-by der bei Ausfall sofort einspringt 2) („Hot spare“) Ja, hot-spare muss einem Raid zugeordnet sein Ja, oft globaler hot-spare für alle Raid-volumen möglich
Berücksichtigung des RAID im Betriebssystem nötig, 3) Ja, unbedingt Nein, transparente Nutzung solange das Betriebsystem einen Treiber für den Controller hat
Wiederherstellung ohne laufendes Betriebssystem Nein Ja
RAID einbauen in anderes System Ja, bei gleicher Architektur (Betriebsystem muss dort grundsätzlich laufen können) zusammen mit dem Controller möglich, ansonsten nur eingeschränkt im Einzelfall mit anderen Modellen des gleichen Herstellers möglich
als Backup tauglich Nein, schützt nur gegen einfachen Hardwareausfall Nein, schützt nur gegen einfachen Hardwareausfall
Verwaltung Reguläre Programme des Betriebssystems, Tools für Software-raid (mdadm bei Linux) spezielle, herstellerspezifische Programme (Web, extra Clientsoftware über Netzwerk, Textmodus/Kommandozeile). Betriebssystemtools sehen nicht die einzelne Festplatte, daher Einzelinfos wie Seriennummern und S.M.A.R.T.-Infomationen nur über Herstellertool sichtbar
Zusammenfassung preiswert, für Heimbereich und kleine Unternehmen mit einzelnen bis sehr wenigen Servern Für ausfallkritische Systeme, high-performance Anwendung wie Datendanken
verbreitete RAID Level
Merkmale Level 0 (Striping) Level 1 (Drive Mirroring) Level 10 oder 0+1 (Mirrored Striping Array) Level 5 (Block Striping mit verteilter Parität) Level 6 (Block-Level Striping mit doppelter verteilter Paritätsinformation)
Abbildungen Abbildung Raid 0, Lizenz:public domain Abbildung Raid 1, Lizenz:public domain Abbildung Raid 10, Lizenz:public domain Abildung Raid 5, Lizenz:public domain Abildung Raid 6, Lizenz:public domain
Funktionsweise Aufteilung der Daten in Blöcke (4-128 KB groß, üblicherweise 64 KB), Verteilung auf die Festplatten Spiegelung der Daten auf die Festplatten. Variante Duplexing: jede Festplatte über einen eigenen Controller) striping + Mirroring. RAID 10: ein RAID 0 über mehrere RAID 1; RAID 0+1: Ein RAID 1 über mehrere RAID 0 . Vorteil ist Datensicherheit und Geschwindigkeit zur gleichen Zeit. Aufteilung der Blöcke (Stripes) und Verteilung über die Festplatten (mit Prüfsummen) wie RAID 5 nur statt dessen Striping mit doppelten, auf Block-Level verteilten Paritäts-Informationen 4).
primäre Verwendungtemporäre Daten (Auslagerungsdatei / Swap-Partition) hohe Sicherheitsanforderungen Echtzeitanwendungen mit hoher Verfügbarkeit hohen Speicherplatzanforderungen mit (vorrangig) Lesezugriffen hohen Sicherheitsanforderungen mit (vorrangig) Lesezugriffen
Kapazitätsverlust/Kosten Addition der Kapazitäten, kein Verlust, niedrige Kosten kleinste Platte legt Gesamtgröße fest (Verlust mind. 100%, hohe Kosten) hoher Verlust (wie RAID 1) kostengünstig: nutzbare Kapazität = kleinste Festplatte * (Anzahl der Festplatten - 1). Hohe Anforderungen an Controller, je mehr Festplatten desto günstiger nutzbare Kapazität = kleinste Festplatte * (Anzahl der Festplatten - 2). Hohe Anforderungen an Controller, je mehr Festplatten desto günstiger
Minimum Anzahl Festplatten 2 2 (Anzahl immmer gerade) 4 (Spezialfall: Bei manchen Controllern reichen 3) 3 4
Geschwindigkeitsvorteil allgemein sehr hoch (lesen+schreiben) schreiben: so schnell wie die langsamste Festplatte lesen: schneller Kombination aus RAID 0 und 1 mittel: gut beim lesen, langsamere Schreibgeschwindigkeit als andere RAID-Level, deshalb Einsatz bei schreibintensiven Umgebungen (mit eher zufälligen und nicht zusammenhängenden Änderungen) nicht zu empfehlen. mittelmäßig: ok beim lesen, noch langsamere Schreibgeschwindigkeit als RAID 5, deshalb Einsatz bei schreibintensiven Umgebungen (mit eher zufälligen und nicht zusammenhängenden Änderungen) nicht zu empfehlen.
lesen sequentiell ++ + ++ ++ ?
lesen zufällig ? + ++ + ?
schreiben sequentiell ++ ? ++ ? ?
schreiben zufällig ? ? ? ?
Sicherheit vor Datenverlust schlecht, sogar erhöhte Ausfallwahrscheinlichkeit, da EINE ausgefallene Festplatte ALLE Daten unbrauchbar macht. sehr gut (Spiegelung) gut (Spiegelung) gut (bei schnellem Austausch bzw. „hot-spare“) sehr gut (zusätzlicher Schutz während rebuild)
RAID-Verhalten beim Ausfall Daten weg, kein Zugriff keine Beeinträchtigung keine Beeinträchtigung; RAID 10: 1 Platte wird rekonstruiert, RAID 0+1: 1 Set muss rekonstruiert werden. Verlangsamung: Daten werden nach Austausch der defekten Platte während der Laufzeit im Hintergrund rekonstruiert, Zugriff vor dem Austausch im nur-lese-modus! Verlangsamung: Daten werden nach Austausch der defekten Platte während der Laufzeit im Hintergrund rekonstruiert.
verkraftet den Ausfall von keiner Festplatte alle bis auf eine Festplatte allen stripesets bis auf eins einer Festplatte zwei beliebigen Festplatten

Software-RAID

Software-RAID kostet etwas CPU-Leistung, dafür ist man flexibel und kostengünstig dabei (da schon im Betriebssystem enthalten). Parallele (und unterschiedliche) Betriebssysteme sind allerdings nicht auf dem gleichen RAID-Volume möglich, da das SW-RAID nicht transparent für das jeweilig andere Betriebssystem ist und demzufolge unterstützt werden müsste.

Betriebssystem RAID-Level
Windows 2000 oder Windows XP Pro RAID 0
Server-Versionen (2000, 2003) RAID 0, RAID 1
Linux mindestens RAID 0, 1, 5 (+ mehr?)

mdadm ist unter Linux das tool zum verwalten von Software-RAIDs. In der Datei /proc/mdstat findet man Informationen zum aktuellen Status des RAIDs.

Software RAID unter Linux ist mit den mdadm-Tools verwaltbar. Auf Wunsch kann man mdadm als Daemon laufen lassen und bei Fehlern eine mail verschicken lassen.

dpkg-reconfigure mdadm
  • Übersicht über vorhandene RAIDs:
    cat /proc/mdstat
  • Details zu einem bestimmten SW-Raid anzeigen
    mdadm --detail /dev/md0

    ergibt z.B.

    /dev/md0:
            Version : 1.2
      Creation Time : Sat Aug 27 04:51:31 2011
         Raid Level : raid1
         Array Size : 1465134841 (1397.26 GiB 1500.30 GB)
      Used Dev Size : 1465134841 (1397.26 GiB 1500.30 GB)
       Raid Devices : 2
      Total Devices : 2
        Persistence : Superblock is persistent
    
        Update Time : Sat Aug 27 04:51:31 2011
              State : clean, resyncing
     Active Devices : 2
    Working Devices : 2
     Failed Devices : 0
      Spare Devices : 0
    
     Rebuild Status : 0% complete
    
               Name : server1:3  (local to host server1)
               UUID : 12f8f3bd:792688d6:b4fd0515:761df8cf
             Events : 0
    
        Number   Major   Minor   RaidDevice State
           0       8       33        0      active sync   /dev/sdc1
           1       8       49        1      active sync   /dev/sdd1
  • Details zu einem bestimmten Datenträger anzeigen (Beispiel /dev/sda1):
    mdadm --examine /dev/sda1
    /dev/sdh1:
              Magic : a92b4efc
            Version : 1.2
        Feature Map : 0x0
         Array UUID : a2c97c53:23c5345e:734833ff:e67d1e29
               Name : storage:0  (local to host storage)
      Creation Time : Sat Oct 12 02:37:44 2013
         Raid Level : raid1
       Raid Devices : 2
    
     Avail Dev Size : 5860529039 (2794.52 GiB 3000.59 GB)
         Array Size : 2930264383 (2794.52 GiB 3000.59 GB)
      Used Dev Size : 5860528766 (2794.52 GiB 3000.59 GB)
        Data Offset : 2048 sectors
       Super Offset : 8 sectors
              State : clean
        Device UUID : c6cfec2d:12b5658a:e342ff27:18a85343
    
        Update Time : Tue Oct 15 17:00:06 2013
           Checksum : b2431147 - correct
             Events : 37
    
    
       Device Role : Active device 0
       Array State : AA ('A' == active, '.' == missing)

Soll ein Software-Raid auch ohne zwingenden Grund (wie Ausfall eines Mitglieds) überprüft werden, dann reicht ein einfacher Aufruf (Beispiel für md0):

echo check > /sys/block/md0/md/sync_action

Alternativ:

/usr/share/mdadm/checkarray /dev/md0

Falls die Fehlermeldung „checkarray: W: array md1 in auto-read-only state, skipping…“ kommt:

mdadm --readwrite /dev/md0
echo "idle" > /sys/block/md0/md/sync_action

Falls sofort wieder ein resync startet, hilft möglicherweise

/usr/share/mdadm/checkarray -x --all

oder

echo 0 > /proc/sys/dev/raid/speed_limit_max

Beispiel: Die Festplatte /dev/sdf soll präventiv ausgetauscht werden. Sie enthält die Partitionen /dev/sdf2 und /dev/sdf3 die Mitglied in /dev/md1 bzw. /dev/md2 sind.

Ein einfaches entfernen von /dev/sdf2 schlägt fehl weil diese Partition noch vollwertiges Mitglied im Raid ist und auch /dev/sdf3 noch Teil eines Raid ist.

mdadm /dev/md1 -r /dev/sdf2
mdadm: hot remove failed for /dev/sdf2: Device or resource busy

Die korrekte Vorgehensweise ist also zuerst die Partitionen als fehlerhaft zu kennzeichnen:

mdadm --manage /dev/md1 --fail /dev/sdf2
mdadm: set /dev/sdf2 faulty in /dev/md1
mdadm --manage /dev/md2 --fail /dev/sdf3
mdadm: set /dev/sdf3 faulty in /dev/md2

Nun werden sie als „faulty“ angezeigt:

cat /proc/mdstat
Personalities : [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] 

md2 : active raid6 sdc3[8] sda3[0] sdg3[6] sdf3[7](F) sde3[4] sdd3[3] sdb3[1]
      52421120 blocks super 1.2 level 6, 512k chunk, algorithm 2 [7/6] [UUUUU_U]
      
md1 : active raid1 sdc2[8] sda2[0] sdg2[6] sdf2[7](F) sde2[4] sdd2[3] sdb2[1]
      524276 blocks super 1.2 [7/6] [UUUUU_U]
      
unused devices: <none>

Anschließend können diese Partitionen vollständig aus dem Raid entfernt werden:

mdadm /dev/md1 -r /dev/sdf2
mdadm: hot removed /dev/sdf2 from /dev/md1
mdadm /dev/md2 -r /dev/sdf3
mdadm: hot removed /dev/sdf3 from /dev/md2

Die Integrationen einer neuen Festplatte ist nun möglich, das Raid kann damit wieder zusammengesetzt werden (siehe nächster Abschnitt).

Die Mailbenachrichtigung ist in der /etc/mdadm/mdadm.conf

MAILADDR root
MAILFROM my-server-name - mdadm

oder

MAILADDR admin@domain.net
MAILFROM my-server-name - mdadm

Mehrere Empfänger (leider nicht in mdadm.conf machbar), dazu wäre bei Postfix ein Eintrag in /etc/postfix/virtual_domains nötig:

raid-notification@domain.tld		admin1@domain1.tld, admin2@domain2.tld
postmap /etc/postfix/virtual_domains

E-Mail-Benachrichtigung testen:

mdadm --monitor --scan --test --oneshot /dev/md[[:digit:]]*

Wenn das raid-Array keine Fehler hatte und nur nicht automatisch gefunden wurde:

mdadm --assemble --scan

:!: Die anschließenden Schritte funktionieren nur wenn das System die fehlerhafte Platte bereits selbstständig aus dem Raid entfernt hat. Sollte die Festplatte noch als Teil des Raids, z.B. als „faulty“ (Zusatz „F“), angezeigt werden, muss die Platte zuerst aus dem RAID entfernt werden (s.o.) bevor eine neue integriert werden kann.

Beispiel: raid1 mit /dev/sda defekt, /dev/sdb intakt

  • Partitionieren der neuen (Austausch-) Festplatte durch Clonen der Partionierung einer vorhandenen Festplatte (hier /dev/sdb):
    • GPT: clonen mit (von sdb auf sda!)
      sgdisk -R ZIEL QUELLE

      5) im Beispiel also

      sgdisk -R /dev/sda /dev/sdb

      und danach neue UUID erzeugen:

      sgdisk -G /dev/sda
    • MBR:
      sfdisk -d QUELLE | sfdisk ZIEL

      also hier von sdb auf sda:

      sfdisk -d /dev/sdb | sfdisk /dev/sda

      Ausgabe:

      Checking that no-one is using this disk right now ...
      OK
      
      Disk /dev/sda: 243201 cylinders, 255 heads, 63 sectors/track
      
      sfdisk: ERROR: sector 0 does not have an msdos signature
       /dev/sda: unrecognized partition table type
      Old situation:
      No partitions found
      New situation:
      Units = sectors of 512 bytes, counting from 0
      
         Device Boot    Start       End   #sectors  Id  System
      /dev/sda1          2048   1050624    1048577  fd  Linux raid autodetect
      /dev/sda2       1052672 2930275120 2929222449  fd  Linux raid autodetect
      /dev/sda3             0         -          0   0  Empty
      /dev/sda4             0         -          0   0  Empty
      Warning: partition 1 does not end at a cylinder boundary
      Warning: partition 2 does not start at a cylinder boundary
      Warning: partition 2 does not end at a cylinder boundary
      Warning: no primary partition is marked bootable (active)
      This does not matter for LILO, but the DOS MBR will not boot this disk.
      Successfully wrote the new partition table
      
      Re-reading the partition table ...
      
      If you created or changed a DOS partition, /dev/foo7, say, then use dd(1)
      to zero the first 512 bytes:  dd if=/dev/zero of=/dev/foo7 bs=512 count=1
      (See fdisk(8).)
    • ggf. Partitionen einlesen wenn nicht sichtbar:
      sfdisk -R /dev/sda
  • Einbinden der neuen Festplatte:
    mdadm --assemble /dev/md0 /dev/sda1 /dev/sdb1

    oder

    mdadm /dev/md0 -a /dev/sda1
  • Boot-manager (grub) auf die neue Festplatte installieren
    grub-install /dev/sda
  • der Syncronisationsfortschritt kann mit
    cat /proc/mdstat

    beobachtet werden

Links:

Maximale Syncronisationsgeschwindigkeit anzeigen:

cat /proc/sys/dev/raid/speed_limit_max
100000

Hier ist also 100 MB/s eingestellt (100000K/s). Geschwindigkeit auf 200 MB/s stellen (gültig bis zum reboot):

echo 200000 > /proc/sys/dev/raid/speed_limit_max

Minimal garantierte Syncronisationsgeschwindigkeit anzeigen:

cat /proc/sys/dev/raid/speed_limit_min
1000

Dauerhafte Einstellungen in der Datei /etc/sysctl.conf:

dev.raid.speed_limit_min = 50000
dev.raid.speed_limit_max = 200000

Beispiel: 4 Festplatten mit 4TB (/dev/sda bis /dev/sdd), GPT-Partionierung, Raid 5 mit vier Festplatten.

passende Partitionstabelle auf der ersten Festplatte anlegen:

sudo parted /dev/sda
(parted) mklabel gpt                                                      
(parted) mkpart primary ext4 2048s -1s                                       
Warnung: Sie haben eine Partition von 1049kB nach 4000GB angefordert.     
Der nächste Ort, der verwaltet werden kann, ist von 1049kB nach 4000GB.
Ist das noch annehmbar?
Ja/Yes/Nein/No? j                                                                     
(parted) set 1 raid on                                                   
(parted) quit
Informationen: Möglicherweise müssen Sie /etc/fstab anpassen.

Nun die Partitionstabelle auf die anderen Festplatten clonen (Schema: sgdisk -R Ziel Quelle):

sgdisk -R /dev/sdb /dev/sda
The operation has completed successfully.
sgdisk -R /dev/sdc /dev/sda
The operation has completed successfully.
sgdisk -R /dev/sdd /dev/sda

Anschließend auf den geclonten Festplatten neue GUIDs erzeugen (GPT-Bezeichner):

sudo sgdisk -G /dev/sdb
The operation has completed successfully.
sudo sgdisk -G /dev/sdc
The operation has completed successfully.
sudo sgdisk -G /dev/sdd
The operation has completed successfully.
sudo mdadm --create /dev/md0 --level=5 --raid-devices=4 /dev/sda1 /dev/sdb1 /dev/sdc1 /dev/sdd1
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.

Beispiel: Raid 1 mit 2 identischen Platten anlegen:

  1. passende Partitionstabelle anlegen (Partitionen mit Typ fd Linux raid-autodetect): Hier ergibt die Ausgabe von
    sfdisk -d /dev/sda

    eine Partition mit ungefähr 1,5TB:

    # partition table of /dev/sda
    unit: sectors
    
    /dev/sdc1 : start=       63, size=2930272002, Id=fd
    /dev/sdc2 : start=        0, size=        0, Id= 0
    /dev/sdc3 : start=        0, size=        0, Id= 0
    /dev/sdc4 : start=        0, size=        0, Id= 0
  2. Partitionierung syncronisieren:
    sfdisk -d /dev/sda > parttab.txt && sfdisk /dev/sdb < parttab.txt
  3. Raiddevices mit mdadm erstellen:
    mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sda1 /dev/sdb1
    mdadm: Note: this array has metadata at the start and
        may not be suitable as a boot device.  If you plan to
        store '/boot' on this device please ensure that
        your boot-loader understands md/v1.x metadata, or use
        --metadata=0.90
    Continue creating array? y
    mdadm: Defaulting to version 1.2 metadata
    mdadm: array /dev/md0 started.
  4. Die Syncronisation beider Datenträger beginnt nicht automatisch:
    cat /proc/mdstat

    ergibt

    Personalities : [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] 
    md0 : active (auto-read-only) raid1 sda1[1] sdb1[0]
          1465134841 blocks super 1.2 [2/2] [UU]
          	resync=PENDING

    damit es los geht, muss noch ein weiterer Befehl ausgeführt werden:

    mdadm --readwrite /dev/md0

    Danach lässt sich der Fortschritt beobachten

    cat /proc/mdstat
    Personalities : [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] 
    md0 : active raid1 sdd1[1] sdc1[0]
          1465134841 blocks super 1.2 [2/2] [UU]
          [>....................]  resync =  0.0% (606848/1465134841) finish=321.7min speed=75856K/sec

    Diese Ausgabe kann mit dem Befehl watch auch dauernd aktualisiert werden:

    watch cat /proc/mdstat
  5. neue Config nach /etc/mdadm/mdadm.conf schreiben:
    mv /etc/mdadm/mdadm.conf /etc/mdadm/mdadm.conf.backup && mdadm --detail --scan > /etc/mdadm/mdadm.conf
  6. Optional: Initialsyncronisierung beschleunigen (siehe oben):
    echo 200000 > /proc/sys/dev/raid/speed_limit_max

Wenn man eine Mailbenachrichtigung eingerichtet hat (was man tun sollte!) bekommt man Warnungen falls das Raid Probleme hat.

Info: Die Mailbenachrichtigung ist in der /etc/mdadm/mdadm.conf mit einer Zeile wie „MAILADDR root“ oder „MAILADDR admin@domain.net“ eingestellt.

This is an automatically generated mail message from mdadm
running on serverXY

A Fail event had been detected on md device /dev/md0.

It could be related to component device /dev/sdb1.

Faithfully yours, etc.

P.S. The /proc/mdstat file currently contains the following:

Personalities : [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] 
md0 : active raid1 sda1[0] sdb1[1](F)
      1465134841 blocks super 1.2 [2/1] [U_]
      [>....................]  check =  0.8% (12747520/1465134841) finish=71354.2min speed=339K/sec
     
unused devices: <none>

Wenn dann noch die Resync-Versuche scheitern sieht es so aus:

# mdadm --detail /dev/md0
/dev/md3:
        Version : 1.2
  Creation Time : Sat Aug 27 04:51:31 2011
     Raid Level : raid1
     Array Size : 1465134841 (1397.26 GiB 1500.30 GB)
  Used Dev Size : 1465134841 (1397.26 GiB 1500.30 GB)
   Raid Devices : 2
  Total Devices : 2
    Persistence : Superblock is persistent

    Update Time : Sun Mar  4 02:13:22 2012
          State : clean, degraded
 Active Devices : 1
Working Devices : 1
 Failed Devices : 1
  Spare Devices : 0

           Name : serverXY:0  (local to host serverXY)
           UUID : 12f8e3be:792688d6:b4fd0515:761df8cf
         Events : 2022

    Number   Major   Minor   RaidDevice State
       0       8       33        0      active sync   /dev/sda1
       1       0        0        1      removed

       1       8       49        -      faulty spare   /dev/sdb1

Die Festplatte /dev/sdb (Partition /dev/sdb1) scheint also tatsächlich defekt zu sein, so dass nur eine Platte betriebsbereit ist. Der Status ist „degraded“, Redundandanz ist also keine mehr vorhanden, d.h. die verbleibende Platte sollte nicht auch noch kaputt gehen damit die Daten erhalten bleiben.

  1. unmounten:
    umount /dev/md0
  2. ggf. LVM inaktiv schalten:
    vgchange -a n vg_daten
      0 logical volume(s) in volume group "vg_daten" now active
  3. stoppen:
    mdadm --stop /dev/md0
    mdadm: stopped /dev/md0
  4. entfernen:
    mdadm --remove /dev/md0
  5. optional: das RAID zerstören (kann dann nicht mehr zusammengesetzt werden!)
    mdadm --zero-superblock /dev/sda

Die Option „write-mostly“ legt ein Gerät fest das vorrangig beschrieben wird. Das kann nützlich sein um unterschiedlich schnelle Geräte einzusetzen.

Beim anlegen des Raid wird das festgelegt: –write-mostly /dev/sda1

Zur Laufzeit (Beispiel array md0 mit /dev/sda1):

  • aktivieren:
    echo writemostly > /sys/block/md0/md/dev-sda1/state
  • deaktivieren:
    echo -writemostly > /sys/block/md0/md/dev-sda1/state

:!: gut möglich das diese Einstellung nur bis zum reboot überlebt - nicht getestet.

write-behind“ legt dagegen fest wie viele ausstehende Schreibvorgänge (Standard ist: 256) das angegebene Gerät hinterher sein darf.

--bitmap=internal --write-behind=4096

Beides Einstellungen sollte mit grow auch nachträglich permanent hinzugefügt werden können indem das bitmap gelöscht und neu hingefügt wird (:!: nicht von mir getestet!):

mdadm /dev/md0 --grow --bitmap=none
mdadm /dev/md0 --grow --bitmap=internal --write-behind=4096

Links:

FIXME

FIXME


1)
mit extra Controller
2)
um die Wiederherstellzeit zu verringern, Rebuild beginnt sofort und nicht erst nach Austausch defekter Datenträger durch das Personal
3)
z.B. bei Linux in initrd bzw. Bootmanager
4)
Implementierung entweder mit XOR oder Mehrbit-Fehlerkorrektur
5)
Bei Debian wheezy im Paket gdisk