server:raid

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
server:raid [2013/10/08 16:26] – [Syncronisationsgeschwindigkeit festlegen] stserver:raid [2022/09/08 16:40] (aktuell) – [Raid wieder zusammensetzen] st
Zeile 1: Zeile 1:
 +====== RAID ======
  
 +[[wpde>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: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 [[wpde>RAID#Hot-Spare-Laufwerk|Hot-Spare-Laufwerk]] vorhanden, das dann gleich beim Ausfall als Ersatz einspringt.
 +
 +Das alleinige Durchreichen einer oder mehrerer Festplatten bezeichnet man als [[wpde>RAID#JBOD|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 [[wpde>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
 +  - ein RAID nur gegen Festplattenausfall absichert, 
 +  - andere logische Fehler wie fehlerhafte Daten/gelöschte Dateien (auf Betriebssystemebene) auf alle Datenträger syncronisiert werden
 +  - 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 =====
 +
 +
 +^  Vergleich Software zu Hardware-RAID  ^^^
 +^ Kriterium ^ Software-RAID ^ Hardware-Raid ((mit extra Controller)) ^
 +^ 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 ((um die Wiederherstellzeit zu verringern, Rebuild beginnt sofort und nicht erst nach Austausch defekter Datenträger durch das Personal)) ("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, ((z.B. bei [[linux:Linux]] in initrd bzw. [[linux:bootmanager und bootprozess#Bootmanager]])) | 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: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 |
 +===== Links =====
 +  * [[http://www.tecchannel.de/storage/grundlagen/401665/|RAID im Überblick]]
 +  * [[http://www.elektronik-kompendium.de/sites/com/1001011.htm|RAID - Redundant Array of Independent Disk]] [[http://www.elektronik-kompendium.de/sites/com/1001021.htm|RAID-Level 2 / 3 / 4 / 5]]
 +
 +
 +===== RAID-Level =====
 +
 +^^  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 | {{server:raid_0.png?50|Abbildung Raid 0, Lizenz:public domain}} | {{server:raid_1.png?50|Abbildung Raid 1, Lizenz:public domain}}| {{server:raid_10.png?50|Abbildung Raid 10, Lizenz:public domain}} | {{server:raid_5.png?50|Abildung Raid 5, Lizenz:public domain}}| {{:server:raid_6.png?50|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 ((Implementierung entweder mit XOR oder Mehrbit-Fehlerkorrektur)). |
 +^ primäre Verwendung|temporä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** ([[wpde>RAID#RAID_0.2B1|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:Linux]] das tool zum verwalten von Software-RAIDs. In der Datei ''/proc/mdstat'' findet man Informationen zum aktuellen Status des RAIDs.
 +
 +
 +
 +
 +===== Software RAID mit Linux =====
 +
 +Software RAID unter [[linux: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
 +
 +==== Links ====
 +
 +  * [[http://tldp.org/HOWTO/Software-RAID-HOWTO-6.html|The Software-RAID HOWTO]]
 +
 +==== Informationen anzeigen ====
 +
 +
 +  * **Übersicht über vorhandene RAIDs**:<code bash>cat /proc/mdstat</code>
 +  * **Details zu einem bestimmten SW-Raid anzeigen**<code bash>mdadm --detail /dev/md0</code> ergibt z.B. <file>/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: (local to host server1)
 +           UUID : 12f8f3bd:792688d6:b4fd0515:761df8cf
 +         Events : 0
 +
 +    Number   Major   Minor   RaidDevice State
 +                   33        0      active sync   /dev/sdc1
 +                   49        1      active sync   /dev/sdd1</file>
 +  * **Details zu einem bestimmten Datenträger anzeigen** (Beispiel ''/dev/sda1''): <code bash>mdadm --examine /dev/sda1</code><file>/dev/sdh1:
 +          Magic : a92b4efc
 +        Version : 1.2
 +    Feature Map : 0x0
 +     Array UUID : a2c97c53:23c5345e:734833ff:e67d1e29
 +           Name : storage: (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)</file>
 +
 +==== manuelle Überprüfung starten ====
 +
 +Soll ein Software-Raid auch ohne zwingenden Grund (wie Ausfall eines Mitglieds) überprüft werden, dann reicht ein einfacher Aufruf (Beispiel für ''md0''):
 +
 +<code bash>echo check > /sys/block/md0/md/sync_action</code>
 +Alternativ:
 +<code bash>/usr/share/mdadm/checkarray /dev/md0</code>
 +
 +Falls die Fehlermeldung "checkarray: W: array md1 in auto-read-only state, skipping..." kommt:
 +<code bash>mdadm --readwrite /dev/md0</code>
 +
 +==== Überprüfung stoppen ====
 +
 +<code bash>echo "idle" > /sys/block/md0/md/sync_action</code>
 +
 +Falls sofort wieder ein resync startet, hilft möglicherweise <code bash>/usr/share/mdadm/checkarray -x --all</code>oder
 +<code bash>echo 0 > /proc/sys/dev/raid/speed_limit_max</code>
 +
 +==== Datenträger aus einem RAID entfernen ====
 +
 +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.
 +
 +<code bash>mdadm /dev/md1 -r /dev/sdf2</code>
 +<file>mdadm: hot remove failed for /dev/sdf2: Device or resource busy</file>
 +
 +Die korrekte Vorgehensweise ist also **zuerst die Partitionen als fehlerhaft zu kennzeichnen**:
 +
 +<code bash>mdadm --manage /dev/md1 --fail /dev/sdf2</code>
 +<file>mdadm: set /dev/sdf2 faulty in /dev/md1</file>
 +
 +<code bash>mdadm --manage /dev/md2 --fail /dev/sdf3</code>
 +<file>mdadm: set /dev/sdf3 faulty in /dev/md2</file>
 +
 +Nun werden sie als "faulty" angezeigt:
 +<code bash>cat /proc/mdstat</code>
 +<file>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></file>
 +
 +**Anschließend können diese Partitionen vollständig aus dem Raid entfernt werden**:
 +<code bash>mdadm /dev/md1 -r /dev/sdf2</code>
 +<file>mdadm: hot removed /dev/sdf2 from /dev/md1</file>
 +<code bash>mdadm /dev/md2 -r /dev/sdf3</code>
 +<file>mdadm: hot removed /dev/sdf3 from /dev/md2</file>
 +
 +Die Integrationen einer neuen Festplatte ist nun möglich, das Raid kann damit wieder zusammengesetzt werden (siehe nächster Abschnitt).
 +
 +
 +==== Mailbenachrichtigung ====
 +
 +Die Mailbenachrichtigung ist in der ''/etc/mdadm/mdadm.conf''
 +
 +<file>MAILADDR root
 +MAILFROM my-server-name - mdadm</file>
 +oder
 +<file>MAILADDR admin@domain.net
 +MAILFROM my-server-name - mdadm</file>
 +
 +Mehrere Empfänger (leider nicht in mdadm.conf machbar), dazu wäre bei [[server:Postfix]] ein Eintrag in ''/etc/postfix/virtual_domains'' nötig:
 +<file>raid-notification@domain.tld admin1@domain1.tld, admin2@domain2.tld</file>
 +<code bash>postmap /etc/postfix/virtual_domains</code>
 +
 +**E-Mail-Benachrichtigung testen**: <code bash>mdadm --monitor --scan --test --oneshot /dev/md[[:digit:]]*</code>
 +
 +
 +
 +
 +==== Raid wieder zusammensetzen ====
 +
 +Wenn das raid-Array keine Fehler hatte und nur nicht automatisch gefunden wurde: <code bash>mdadm --assemble --scan</code>
 +
 +:!: 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!)<code bash>sgdisk -R ZIEL QUELLE</code>((Bei [[debian:Debian]] wheezy im Paket ''gdisk'')) im Beispiel also<code bash>sgdisk -R /dev/sda /dev/sdb</code> und danach neue UUID erzeugen: <code bash>sgdisk -G /dev/sda</code>
 +    * **MBR**: <code bash>sfdisk -d QUELLE | sfdisk ZIEL</code>also hier von sdb auf sda:<code bash>sfdisk -d /dev/sdb | sfdisk /dev/sda</code>Ausgabe:<file>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    Empty
 +/dev/sda4                              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).)
 +</file>
 +    * ggf. Partitionen einlesen wenn nicht sichtbar: <code bash>sfdisk -R /dev/sda</code>
 +  * **Einbinden der neuen Festplatte**: <code bash>mdadm --assemble /dev/md0 /dev/sda1 /dev/sdb1</code>oder <code bash>mdadm /dev/md0 -a /dev/sda1</code>
 +  * Boot-manager (grub) auf die neue Festplatte installieren <code bash>grub-install /dev/sda</code>
 +  * der **Syncronisationsfortschritt** kann mit <code bash>cat /proc/mdstat</code> beobachtet werden
 +
 +
 +**Links**:
 +  * [[http://wiki.hetzner.de/index.php/Austausch_einer_defekten_Festplatte_im_Software-RAID|Austausch einer defekten Festplatte im Software-RAID]]
 +==== Syncronisationsgeschwindigkeit festlegen ====
 +
 +Maximale Syncronisationsgeschwindigkeit anzeigen: <code bash>cat /proc/sys/dev/raid/speed_limit_max</code> <file>100000</file>
 +
 +Hier ist also 100 MB/s eingestellt (100000K/s).
 +Geschwindigkeit auf 200 MB/s stellen (**gültig bis zum reboot**): <code bash>echo 200000 > /proc/sys/dev/raid/speed_limit_max</code>
 +
 +Minimal garantierte Syncronisationsgeschwindigkeit anzeigen: <code bash>cat /proc/sys/dev/raid/speed_limit_min</code> <file>1000</file>
 +
 +**Dauerhafte Einstellungen** in der Datei ''/etc/sysctl.conf'':<file>dev.raid.speed_limit_min = 50000
 +dev.raid.speed_limit_max = 200000</file>
 +
 +
 +==== Beispiel: Partitionierung >2TB und Raid 5 bei 4 identischen Platten anlegen ====
 +
 +Beispiel: 4 Festplatten mit 4TB (/dev/sda bis /dev/sdd), GPT-Partionierung, Raid 5 mit vier Festplatten.
 +
 +**passende Partitionstabelle auf der ersten Festplatte anlegen:**
 +<code bash>sudo parted /dev/sda</code>
 +<file>
 +(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</file>
 +<file>Informationen: Möglicherweise müssen Sie /etc/fstab anpassen.</file>
 +**Nun die Partitionstabelle auf die anderen Festplatten clonen (Schema: sgdisk -R Ziel Quelle):**
 +<code bash>sgdisk -R /dev/sdb /dev/sda</code>
 +<file>The operation has completed successfully.</file>
 +<code bash>sgdisk -R /dev/sdc /dev/sda</code>
 +<file>The operation has completed successfully.</file>
 +<code bash>sgdisk -R /dev/sdd /dev/sda</code>
 +**Anschließend auf den geclonten Festplatten neue GUIDs erzeugen (GPT-Bezeichner):**
 +<code bash>sudo sgdisk -G /dev/sdb</code>
 +<file>The operation has completed successfully.</file>
 +<code bash>sudo sgdisk -G /dev/sdc</code>
 +<file>The operation has completed successfully.</file>
 +<code bash>sudo sgdisk -G /dev/sdd</code>
 +<file>The operation has completed successfully.</file>
 +<code bash>sudo mdadm --create /dev/md0 --level=5 --raid-devices=4 /dev/sda1 /dev/sdb1 /dev/sdc1 /dev/sdd1</code>
 +<file>mdadm: Defaulting to version 1.2 metadata
 +mdadm: array /dev/md0 started.</file>
 +
 +
 +==== Beispiel: Raid 1 mit 2 identischen Platten anlegen ====
 +
 +Beispiel: Raid 1 mit 2 identischen Platten anlegen:
 +
 +  - **passende Partitionstabelle** anlegen (**Partitionen mit Typ fd** Linux raid-autodetect): Hier ergibt die Ausgabe von <code bash>sfdisk -d /dev/sda</code>eine Partition mit ungefähr 1,5TB:<file># 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</file>
 +  - **Partitionierung syncronisieren**: <code bash>sfdisk -d /dev/sda > parttab.txt && sfdisk /dev/sdb < parttab.txt</code>
 +  - **Raiddevices mit mdadm erstellen**: <code bash>mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sda1 /dev/sdb1</code><file>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.</file>
 +  - Die Syncronisation beider Datenträger beginnt nicht automatisch: <code bash>cat /proc/mdstat</code>ergibt<file>
 +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</file> damit es los geht, muss noch ein weiterer Befehl ausgeführt werden:<code bash>mdadm --readwrite /dev/md0</code>Danach lässt sich der Fortschritt beobachten <code bash>cat /proc/mdstat</code><file>
 +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</file>Diese Ausgabe kann mit dem Befehl watch auch dauernd aktualisiert werden: <code bash>watch cat /proc/mdstat</code>
 +  - **neue Config nach ''/etc/mdadm/mdadm.conf''  schreiben**:<code bash>mv /etc/mdadm/mdadm.conf /etc/mdadm/mdadm.conf.backup && mdadm --detail --scan > /etc/mdadm/mdadm.conf</code>
 +  - Optional: **Initialsyncronisierung beschleunigen** (siehe oben): <code bash>echo 200000 > /proc/sys/dev/raid/speed_limit_max</code>
 +
 +
 +==== Beispiel: Raid 1 mit 1 defekter Platte ====
 +
 +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.
 +
 +<file>
 +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>
 +</file>
 +
 +Wenn dann noch die Resync-Versuche scheitern sieht es so aus:
 +<file>
 +# 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: (local to host serverXY)
 +           UUID : 12f8e3be:792688d6:b4fd0515:761df8cf
 +         Events : 2022
 +
 +    Number   Major   Minor   RaidDevice State
 +                   33        0      active sync   /dev/sda1
 +                    0        1      removed
 +
 +                   49        -      faulty spare   /dev/sdb1
 +</file>
 +
 +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.
 +
 +  * https://systemausfall.org/wikis/howto/SoftwareRaidminiHowTo
 +  * http://www.devil-linux.org/documentation/1.0.x/ch01s05.html
 +  * http://www.coresoft.de/blog/79/mdadm-vermeldet-faulty-spare/
 +  * https://www.linuxquestions.org/questions/linux-server-73/mdadm-removing-faulty-spare-701607/
 +  * http://consultancy.edvoncken.net/index.php/HOWTO_Replace_a_failing_disk_on_Linux_Software_RAID-5
 +
 +==== Beispiel: Raid stoppen / entfernen ====
 +
 +  - unmounten: <code bash>umount /dev/md0</code>
 +  - ggf. LVM inaktiv schalten: <code bash>vgchange -a n vg_daten</code><file>  0 logical volume(s) in volume group "vg_daten" now active</file>
 +  - stoppen:<code bash>mdadm --stop /dev/md0</code><file>mdadm: stopped /dev/md0</file>
 +  - entfernen: <code bash>mdadm --remove /dev/md0</code>
 +  - optional: das RAID zerstören (kann dann nicht mehr zusammengesetzt werden!)<code bash>mdadm --zero-superblock /dev/sda</code>
 +
 +==== asynchron schreiben (write-mostly write-behind)====
 +
 +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: <code bash>echo writemostly > /sys/block/md0/md/dev-sda1/state</code>
 +  * deaktivieren: <code bash>echo -writemostly > /sys/block/md0/md/dev-sda1/state</code>
 +:!: gut möglich das diese Einstellung [[https://superuser.com/questions/379472/how-does-one-enable-write-mostly-with-linux-raid|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.
 +
 +<code bash>--bitmap=internal --write-behind=4096</code>
 +
 +
 +Beides Einstellungen sollte mit [[https://raid.wiki.kernel.org/index.php/Growing|grow]] auch nachträglich permanent hinzugefügt werden können indem das bitmap gelöscht und neu hingefügt wird (:!: nicht von mir getestet!):
 +<code bash>
 +mdadm /dev/md0 --grow --bitmap=none
 +mdadm /dev/md0 --grow --bitmap=internal --write-behind=4096
 +</code>
 +
 +Links:
 +  * https://raid.wiki.kernel.org/index.php/Write-mostly
 +
 +
 +
 +==== Links ====
 +
 +  * [[http://aplawrence.com/Linux/rebuildraid.html|Anleitung zum rebuild im Fehlerfall]]
 +  * [[http://forums.gentoo.org/viewtopic-t-673067-highlight-raid5.html|Schreibgeschwindigkeit beim software RAID5 verbessern]]
 +  * [[https://systemausfall.org/wikis/howto/SoftwareRaidminiHowTo|Kurzbeschreibung der Einrichtung eines Software Raids]]
 +  * [[http://svenkalinowski.de/linux-wiki/LinuxRaid|LinuxRaid]]
 +  * [[http://wiki.debian.org/LinuxRaidForAdmins|Linux and HW raid - an administrators summary]]
 +  * Artikel "Software-RAID im laufenden Betrieb unter Linux einrichten" iX 10/2011 S.136
 +
 +===== Software RAID mit Windows =====
 +
 +FIXME
 +
 +==== Links ====
 +
 +FIXME