|
|
(225 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt) |
Zeile 1: |
Zeile 1: |
| =Vorbereitung=
| | '''Linux/RAID/Erstellung''' - Einrichtung eines Software-RAID |
|
| |
|
| ==Beschriftung== | | == Beschreibung == |
| | [[mdadm|mdadm]] - Schnittstelle zu den RAID-Funktionen des Kernels |
|
| |
|
| *Datentrager beim Einbau eindeutig beschriften.
| | == RAID hinzufügen == |
| *Am besten nimmt man dazu die Seriennummer.
| | ; Analyse |
| | Hier sind die Laufwerke <tt>/dev/sda</tt> bereits <tt>/dev/sdb</tt> in RAID1-Arrays konfiguriert, welche das Betriebssystem enthalten |
| | <syntaxhighlight lang="bash" highlight="1" line copy> |
| | cat /proc/mdstat |
| | Personalities : [raid1] |
| | md2 : active raid1 sda3[2] sdb3[1] |
| | 234405504 blocks super 1.2 [2/2] [UU] |
| | bitmap: 0/2 pages [0KB], 65536KB chunk |
|
| |
|
| ===Seriennummer herausfinden===
| | md1 : active raid1 sda2[2] sdb2[1] |
| *Ein Terminal öffnen.
| | 523712 blocks super 1.2 [2/2] [UU] |
|
| |
|
| ====Mit udevadm====
| | md0 : active raid1 sda1[2] sdb1[1] |
| | 33521664 blocks super 1.2 [2/2] [UU] |
|
| |
|
| # /sbin/udevadm info --query=property --name=sda | grep ID_SERIAL | | unused devices: <none> |
| | </syntaxhighlight> |
|
| |
|
| ====Mit hdparm====
| | ; Weitere Laufwerke |
| | Es sind jedoch zwei weitere Laufwerke vorhanden (<tt>/dev/sdc</tt> und <tt>/dev/sdd</tt>), die wir als Daten-Laufwerk in einem RAID1-Array nutzen möchten |
|
| |
|
| # hdparm -i /dev/sda | grep SerialNo
| | Dazu muss zuerst das RAID-Array hinzugefügt werden |
| | <syntaxhighlight lang="bash" highlight="1" line copy> |
| | mdadm --create --verbose /dev/md3 --level=1 --raid-devices=2 /dev/sdc /dev/sdd |
| | </syntaxhighlight> |
|
| |
|
| *Mit "-i /dev/sda" übergibt man "hdparm" einen Parameter, der die konkrete Information zur Festplatte sda liefert.
| | Anschließend sollte die RAID-Konfiguration wie folgt aussehen |
| *Die zu überprüfende Festplatte kann jedoch von der Schnittstelle aus variieren:
| | <syntaxhighlight lang="bash" highlight="1" line copy> |
| | cat /proc/mdstat |
| | Personalities : [raid1] |
| | md3 : active raid1 sdc1[0] sdd1[1] |
| | 2095040 blocks super 1.2 [2/2] [UU] |
| | [====>................] resync = 32.7% (418656/2095040) finish=4.2min speed=131219K/sec |
|
| |
|
| IDE / ATA Gerät : "-i /dev/hd[a-t]"
| | md2 : active raid1 sda3[2] sdb3[1] |
| SCSI / SATA Geräte : "-i /dev/sd[a-z]"
| | 234405504 blocks super 1.2 [2/2] [UU] |
| | bitmap: 0/2 pages [0KB], 65536KB chunk |
|
| |
|
| *Danach filtert man mit " | grep SerialNo" die Seriennummer der Festplatte aus der Ausgabe hinaus.
| | md1 : active raid1 sda2[2] sdb2[1] |
| | 523712 blocks super 1.2 [2/2] [UU] |
|
| |
|
| *Wenn dieser Befehl einen Fehler zurück gibt, muss wahrscheinlich noch das Programm selbst installiert werden:
| | md0 : active raid1 sda1[2] sdb1[1] |
| | 33521664 blocks super 1.2 [2/2] [UU] |
|
| |
|
| #apt install hdparm | | unused devices: <none> |
| | </syntaxhighlight> |
|
| |
|
| ==Partitionierung== | | Nun kann die neue Partition nach Belieben formatiert (hier EXT4) und eingehängt werden |
| | <syntaxhighlight lang="bash" highlight="1" line copy> |
| | mkfs.ext4 /dev/md3 |
| | mount /dev/md3 /mnt |
| | </syntaxhighlight> |
|
| |
|
| *Zunächst müssen die Bezeichnungen der zu verwendenden Datenträger bekannt sein.
| | ; Partitionsgröße |
| *Auf jedem Datenträger wird eine Partition erstellt, die '''fast''' den gesamten Platz der Platte einnimmt.
| | Alle verwendeten Partitionen eines RAIDs haben die gleiche Größe. |
| *Die Schritte müssen für jedes Laufwerk, das am RAID teilnehmen soll, mit der entsprechenden Bezeichnung vom eigenen System wiederholt werden.
| |
|
| |
|
| ===Neue, leere Partitionstabelle auf dem Laufwerk erstellen=== | | == RAID anlegen == |
| | ; Beispiel |
| | Zwei Partitionen |
| | <syntaxhighlight lang="bash" highlight="1" line copy> |
| | sudo mdadm --create /dev/Name_des_RAIDs \ |
| | --auto md \ |
| | --level=RAID-Level \ |
| | --raid-devices=Anzahl_der_Partitionen \ |
| | /dev/Name_der_Partition /dev/Name_der_Partition |
| | </syntaxhighlight> |
|
| |
|
| <!--TODO fdisk statt parted-->
| | == Dateisystem == |
| ====Neuere PCs mit UEFI Bios====
| | Um den RAID-Verbund als Datenträger zu nutzen, muss noch ein Dateisystem erstellt werden, beispielsweise ext4 |
| # parted /dev/sda mklabel gpt
| |
|
| |
|
| ====Ältere PCs mit altem Bios==== | | <syntaxhighlight lang="bash" highlight="1" line copy> |
| # parted /dev/sda mklabel msdos
| | sudo mkfs.ext4 /dev/Name_des_RAIDs |
| | </syntaxhighlight> |
|
| |
|
| ====Einzelne Partition erstellen==== | | == Anwendung == |
| | === RAID 1 === |
| | ; RAID 1 über zwei Partitionen |
| | Partitionen sde1 und sdf1 |
| | <syntaxhighlight lang="bash" highlight="1" line copy> |
| | sudo mdadm --create /dev/md0 \ |
| | --auto md \ |
| | --level=1 \ |
| | --raid-devices=2 |
| | /dev/sde1 /dev/sdf1 |
| | </syntaxhighlight> |
|
| |
|
| # parted -a optimal -- /dev/sda mkpart primary 2048s -8192s | | === RAID 5 === |
| | ; RAID 5 über vier Partitionen |
| | Partitionen sde1, sdf1, sdg1 und sdh1 |
| | <syntaxhighlight lang="bash" highlight="1" line copy> |
| | sudo mdadm --create /dev/md0 --auto md --level=5 --raid-devices=4 /dev/sde1 /dev/sdf1 /dev/sdg1 /dev/sdh1 |
| | </syntaxhighlight> |
|
| |
|
| *Möchte man die gesamte Platte nutzen, gibt man statt "2048s -8192s" einfach "0% 100%" an.
| | === RAID 6 === |
| *Über den Parameter -a optimal kümmert sich parted um weitere Anpassungen, falls nötig.
| | <syntaxhighlight lang="bash" highlight="1" line copy> |
| *Es ist auch möglich, die Laufwerke unpartitioniert zusammenzufassen.
| | sudo mdadm --create --verbose /dev/md3 --level=6 --raid-devices=4 /dev/sda /dev/sdb missing missing |
| *Dies birgt jedoch einige Nachteile.
| | </syntaxhighlight> |
| **Zunächst verkompliziert es das Alignment und kann damit zu Geschwindigkeitseinbußen führen.
| |
| **Außerdem kann im Falle eines Defekts nur ein Laufwerk mit genau gleicher oder höherer Sektorzahl als Ersatz benutzt werden.
| |
|
| |
|
| Hinweis:
| | === Komplexe RAIDs === |
| Am Anfang der Datenträger werden 2048 Sektoren ungenutzt gelassen, um ein optimales Alignment zu ermöglichen.
| | Bei komplexeren Verbunden wie RAID 0, 5, 6 oder 10 sollte auf das optimale [[RAID#Alignment (Ausrichtung)|Alignment]] geachtet werden, um optimale Leistung zu ermöglichen |
| Am Ende der Datenträger werden bewusst 8192 Sektoren ungenutzt gelassen, um für Ausfälle gewappnet zu sein.
| | <syntaxhighlight lang="bash" highlight="1" line copy> |
| Falls nach Jahren kein baugleicher Datenträger mehr beschafft werden kann, ermöglicht es der frei gelassene Platz auch Laufwerke als Ersatz zu nehmen, die einige Sektoren weniger haben.
| | sudo mkfs.ext4 -b 4096 -E stride=128,stripe-width=384 /dev/Name_des_RAIDs |
| | </syntaxhighlight> |
|
| |
|
| ====Neue Partition als RAID-Partition markieren====
| | <noinclude> |
|
| |
|
| # parted /dev/sda set 1 raid on
| | == Anhang == |
| | === Siehe auch === |
| | {{Special:PrefixIndex/Linux/RAID}} |
|
| |
|
| =Software-RAID anlegen= | | === Links === |
| | ==== Weblinks ==== |
| | # [https://wiki.ubuntuusers.de/Software-RAID/ https://wiki.ubuntuusers.de/Software-RAID/] |
| | # [https://www.thomas-krenn.com/de/wiki/Linux_Software_RAID https://www.thomas-krenn.com/de/wiki/Linux_Software_RAID] |
| | # [https://wiki.hetzner.de/index.php/Seriennummern_von_Festplatten_und_Hinweise_zu_defekten_Festplatten#Ermitteln_der_Seriennummer_einer_Festplatte https://wiki.hetzner.de/index.php/Seriennummern_von_Festplatten_und_Hinweise_zu_defekten_Festplatten#Ermitteln_der_Seriennummer_einer_Festplatte] |
|
| |
|
| *Das Hauptwerkzeug für alle Arbeiten an Software-RAIDs unter Linux ist [[Linux:Befehl:mdadm|mdadm]].
| | [[Kategorie:Linux/RAID]] |
|
| |
|
| *mdadm bildet die Schnittstelle zu den RAID-Funktionen des Kernels.
| | </noinclude> |
| | |
| *Hiermit werden auch RAID-Verbunde erstellt.
| |
| | |
| ==Software-RAID 1 über zwei Partitionen==
| |
| | |
| *z.B mit den Partitionen sde1 und sdf1:
| |
| # mdadm --create /dev/md0 --auto md --level=1 --raid-devices=2 /dev/sde1 /dev/sdf1
| |
| | |
| ==Software-RAID 5 über vier Partitionen==
| |
| | |
| *z.B. mit den Partitionen sde1, sdf1, sdg1 und sdh1:
| |
| # mdadm --create /dev/md0 --auto md --level=5 --raid-devices=4 /dev/sde1 /dev/sdf1 /dev/sdg1 /dev/sdh1
| |
| | |
| =Dateisystem=
| |
| | |
| *Um den RAID-Verbund als normales Speicherlaufwerk zu nutzen, muss noch ein Dateisystem darauf erstellt und dieses in das System eingebunden werden, z.B. ext4.
| |
| | |
| ==RAID 1==
| |
| | |
| # mkfs.ext4 /dev/md0
| |
| | |
| ==RAID 0, 5, 6 oder 10==
| |
| *Bei komplexeren Verbunden wie RAID 0, 5, 6 oder 10 sollte das Dateisystem auf das RAID angepasst werden, um optimale Leistung zu ermöglichen.
| |
| *Dafür muss zunächst die sog. [https://raid.wiki.kernel.org/index.php/RAID_setup#Chunk_sizes '''Chunk Size'''], also die Datenmenge, die in einem einzelnen Schreibvorgang geschrieben wird, bekannt sein.
| |
| | |
| ==[[Hardware:Storage:RAID#Alignment|Alignment (Ausrichtung)]]==
| |
| *Datenträger, RAID-Verbunde und Dateisysteme fassen Daten jeweils für sich in Blöcke zusammen, bevor sie gespeichert werden.
| |
| *Diese Blöcke haben im Allgemeinen alle unterschiedliche Größen.
| |
| *Um eine optimale Performance zu erzielen, sollten die Größen aufeinander abgestimmt sein.
| |
| | |
| ===Ermittlung der Chunk Size===
| |
| | |
| # mdadm -D /dev/md0 | grep "Chunk Size"
| |
| | |
| *Bei einem RAID 5 mit Standardeinstellungen liefert dies z.B.:
| |
| | |
| Chunk Size : 512K
| |
| | |
| *Es werden also 512 [https://de.wikipedia.org/wiki/Byte#Vergleichstabelle KiB] Chunks verwendet.
| |
| | |
| ===Änderung der Chunk Size===
| |
| *Chunk Size auf 64 KiB ändern.
| |
| *Macht nur Sinn, wenn auf dem RAID hauptsächlich sehr kleine Dateien geschrieben bzw. gelesen werden sollen.
| |
| | |
| # mdadm --grow -c 64 /dev/md0
| |
| | |
| ===Berechnung des Alignments===
| |
| *Hieraus können, zusammen mit der Anzahl der Partitionen und des RAID-Levels, die Dateisystem-Parameter berechnet werden.
| |
| | |
| *Am einfachsten geht das mittels eines [https://busybox.net/~aldot/mkfs_stride.html Raid-Stride-Calculators].
| |
| | |
| *Alternativ können die Parameter auch von Hand ermittelt werden.
| |
| **'''block-size''' - Die Größe der Dateisystemblöcke in Bytes. Heutzutage werden fast ausschließlich '''4096 Byte''' (4 KiB) Blöcke verwendet.
| |
| **'''stride-size''' - Die Chunk Size umgerechnet in Dateisystemblöcke. Bei 512 KiB Chunk Size mit 4 KiB Blöcken ergibt sich '''512 KiB/ 4 KiB = 128'''.
| |
| **'''stripe-width''' - Die Größe eines Datenstreifens, also die Menge an Blöcken, die geschrieben wird, wenn ein voller Chunk auf jedes Laufwerk geschrieben wird. Diese berechnet sich aus '''stride-size * Anzahl der effektiv nutzbaren Partitionen'''. Bei einem RAID 5 über 4 Partitionen ergibt sich hier '''128 * 3 = 384'''.
| |
| | |
| *Details zur Anzahl der effektiv nutzbaren Partitionen findet man im Artikel [[Hardware:Storage:RAID#RAID-Level|Hardware:Storage:RAID]].
| |
| | |
| *Sind die Parameter ermittelt, wird das Dateisystem erstellt:
| |
| | |
| # mkfs.ext4 -b 4096 -E stride=128,stripe-width=384 /dev/md0
| |
| | |
| =RAID mounten=
| |
| | |
| *Das RAID muss noch in die Verzeichnisstruktur eingebunden werden.
| |
| | |
| *Dies geschieht einfach mittels mount, z.B. am Mountpunkt /media/daten.
| |
| | |
| # mount /dev/md0 /media/daten
| |
| | |
| *Damit das System beim Start das Dateisystem selber einhängt, muss eine entsprechende Zeile in die Datei /etc/fstab eingetragen werden:
| |
| | |
| /dev/md0 /media/daten ext4 defaults 0 2
| |
| | |
| =mdadm.conf=
| |
| | |
| *Alle Informationen zum RAID werden auf jeder verwendeten Partition in den sog. [[Linux:Software-RAID#RAID Superblock|Superblock]] geschrieben (auch Metadaten genannt).
| |
| | |
| *Der Kernel sucht beim Starten automatisch nach diesen Superblöcken und startet alle voll funktionsfähigen RAIDs, ohne dass eine Konfigurationsdatei nötig ist.
| |
| | |
| *Trotzdem kann es sinnvoll sein, eine Konfigurationsdatei zu erstellen, z.B. wenn man über Ausfälle am RAID per E-Mail benachrichtigt werden möchte.
| |
| | |
| *Über die Konfigurationsdatei können sehr viele Details der RAIDs angepasst werden.
| |
| | |
| *Generell gilt bei neu aufgesetzten RAIDs allerdings: Je weniger, desto besser.
| |
| | |
| *Nähere Informationen liefert die Manpage von [https://linux.die.net/man/5/mdadm.conf mdadm.conf].
| |
| | |
| ==Erstellen der mdadm.conf==
| |
| | |
| *Die Konfigurationsdatei kann bequem mit einem Skript von mdadm erstellt werden und enthält dann direkt alle Definitionen aller momentan aktiven RAIDs:
| |
| | |
| # su -c "/usr/share/mdadm/mkconf > /etc/mdadm/mdadm.conf"
| |
| | |
| *Standardmäßig werden alle wichtigen Informationen (Metadaten) direkt auf den beteiligten Partitionen gespeichert, auch wenn nachträglich Änderungen vorgenommen werden.
| |
| | |
| *Andererseits haben die Parameter aus der mdadm.conf Vorrang.
| |
| | |
| *So ist es z.B. möglich, alle am RAID beteiligten Partitionen in der Datei anzugeben.
| |
| | |
| *Ändert sich jedoch die Reihenfolge der Datenträger (z.B. bei Austausch des Controllers, Umstecken der Kabel, Anschließen eines USB-Sticks etc.) ließe sich das RAID nicht mehr starten.
| |
| | |
| *Auch dann nicht, wenn in den Superblöcken der RAID-Laufwerke die richtigen Metadaten (unabhängig von den Buchstabenbezeichnungen) gespeichert sind.
| |
| | |
| *Dieses Problem lässt sich nur dann beheben, wenn die falschen Angaben in der mdadm.conf korrigiert oder explizit übergangen werden.
| |
| | |
| *Damit die Konfiguration beim Booten verfügbar ist, muss schließlich noch die Initrd aktualisiert werden:
| |
| | |
| # update-initramfs -u -k all
| |
| | |
| ==Über Ausfälle am RAID per E-Mail benachrichtigt werden==
| |
| *In der mdadm.conf muss dafür in der Zeile...
| |
| '''MAILADDR root'''
| |
| *...root durch die gewünschte E-Mail-Adresse ersetzt werden.
| |
| '''MAILADDR xzy@abc.org'''
| |
| *Dafür muss der E-Mail-Versand durch das System eingerichtet sein, z.B. via Postfix als Satellitensystem.
| |
| | |
| ==Fehlerbehebung==
| |
| *Je nach Konfiguration kann es zu Fehlern durch die mdadm.conf kommen.
| |
| *Daher ist es sinnvoll diese zu überprüfen.
| |
| | |
| ===Selbstständige Änderung der RAID-Bezeichnung===
| |
| *Manchmal kommt es vor, dass das RAID md0 nach dem Neustart plötzlich md127 heißt.
| |
| *Das System kommt mit der Option "-name" in der mdadm.conf nicht klar.
| |
| | |
| *Lösung: Diese Option auskommentieren und System neu starten.
| |
| | |
| =RAID-Optimierung=
| |
| | |
| ==Datenträger-Cache==
| |
| | |
| *Bei einem Software-RAID ist es empfehlenswert den Schreib-Cache von Datenträger zu deaktivieren, um bei einem Stromausfall keinen Datenverlust zu erleiden.
| |
| *Ausnahme sind dabei SSDs mit integrierten Kondensatoren, die den Cache-Inhalt bei einem Stromausfall noch auf den Flash-Speicher schreiben (z.B. Intel DC S3510 Series SSDs).
| |
| | |
| ===Status Datenträger-Cache überprüfen===
| |
| | |
| *Überprüfen, ob der Write-Cache einer Datenträger aktiviert oder deaktiviert ist. Hier bei der Datenträger sda.
| |
| | |
| # hdparm -i /dev/sda
| |
| | |
| *Ausgabe:
| |
| | |
| Model=INTEL SSDMCEAC060B3, FwRev=LLLi, SerialNo=CVLI303201QK060K
| |
| Config={ Fixed }
| |
| RawCHS=16383/16/63, TrkSize=0, SectSize=0, ECCbytes=0
| |
| BuffType=unknown, BuffSize=unknown, MaxMultSect=16, MultSec=16
| |
| CurrCHS=16383/16/63, CurSecs=16514064, LBA=yes, LBAsects=117231408
| |
| IORDY=on/off, tPIO={min:120,w/IORDY:120}, tDMA={min:120,rec:120}
| |
| PIO modes: pio0 pio3 pio4
| |
| DMA modes: mdma0 mdma1 mdma2
| |
| UDMA modes: udma0 udma1 udma2 udma3 udma4 udma5 *udma6
| |
| AdvancedPM=yes: unknown setting '''WriteCache=enabled'''
| |
| Drive confirms to: unknown: ATA/ATAP-2,3,4,5,6,7
| |
| | |
| * signifies the current active mode
| |
| | |
| *'''WriteCache=enabled''': Datenträger-Cache ist hier also zur Zeit aktiviert.
| |
| ===Datenträger-Cache deaktivieren===
| |
| | |
| *Mit einem Editor die Konfigurationsdatei von hdparm unter /etc/hdparm.conf öffnen, z.B. mit vim.
| |
| *Dort in der Zeile '''#write_cache = off''' Auskommentierung aufheben und Änderung speichern.
| |
| | |
| # -W Disable/enable the IDE drive's write-caching feature
| |
| write_cache = off
| |
| | |
| *Nach einem Systemneustart sieht das Ergebnis wie folgt aus:
| |
| | |
| # hdparm -i /dev/sda
| |
| | |
| *Ausgabe:
| |
| | |
| Model=INTEL SSDMCEAC060B3, FwRev=LLLi, SerialNo=CVLI303201QK060K
| |
| Config={ Fixed }
| |
| RawCHS=16383/16/63, TrkSize=0, SectSize=0, ECCbytes=0
| |
| BuffType=unknown, BuffSize=unknown, MaxMultSect=16, MultSec=16
| |
| CurrCHS=16383/16/63, CurSecs=16514064, LBA=yes, LBAsects=117231408
| |
| IORDY=on/off, tPIO={min:120,w/IORDY:120}, tDMA={min:120,rec:120}
| |
| PIO modes: pio0 pio3 pio4
| |
| DMA modes: mdma0 mdma1 mdma2
| |
| UDMA modes: udma0 udma1 udma2 udma3 udma4 udma5 *udma6
| |
| AdvancedPM=yes: unknown setting '''WriteCache=disabled'''
| |
| Drive confirms to: unknown: ATA/ATAP-2,3,4,5,6,7
| |
| | |
| * signifies the current active mode
| |
| | |
| *Der Datenträger-Cache ist nun deaktiviert.
| |
| | |
| =weiterführende Artikel=
| |
| | |
| [[Linux:Software-RAID:Wartung]]
| |
| | |
| [https://wiki.itw-berlin.net/index.php?title=Linux:Software-RAID:Fehlerbehebung Linux:Software-RAID:Fehlerbehebung]
| |
| | |
| =Quellen=
| |
| [https://wiki.ubuntuusers.de/Software-RAID/ https://wiki.ubuntuusers.de/Software-RAID/]
| |
| | |
| [https://www.thomas-krenn.com/de/wiki/Linux_Software_RAID https://www.thomas-krenn.com/de/wiki/Linux_Software_RAID]
| |
| | |
| [https://wiki.hetzner.de/index.php/Seriennummern_von_Festplatten_und_Hinweise_zu_defekten_Festplatten#Ermitteln_der_Seriennummer_einer_Festplatte https://wiki.hetzner.de/index.php/Seriennummern_von_Festplatten_und_Hinweise_zu_defekten_Festplatten#Ermitteln_der_Seriennummer_einer_Festplatte]
| |
| | |
| [[Category:Linux:Storage]]
| |