Linux/Software-RAID/Anlegen
Vorbereitung
Prüfung der Datenträger auf (baldigen) Defekt
Beschriftung
- Datentrager beim Einbau eindeutig beschriften.
- Am besten nimmt man dazu die Seriennummer.
Seriennummer herausfinden
- Ein Terminal öffnen.
hdparm
# hdparm -i /dev/sda | grep SerialNo
- Mehr Info: Linux:Befehl:hdparm
Datenträger löschen
- Wenn die vorherige Nutzung der Datenträger unklar ist, Datenträger löschen.
dd
- Kapazität des Datenträgers sda: 1,8 TiB
- Vollständig - Ist sicher, aber zeitaufwendig.
# dd if=/dev/zero of=/dev/sda status=progress
- Teilweise - Ist schnell, aber die vorherige Nutzung des Datenträgers sollte bekannt sein.
# dd if=/dev/zero of=/dev/sda bs=1M count=2
2+0 Datensätze ein 2+0 Datensätze aus 2097152 bytes (2,1 MB, 2,0 MiB) copied, 0,0952489 s, 22,0 MB/s
Partitionierung
- Alle Datenträger des geplanten RAIDs identisch partitionieren.
fdisk
Bezeichnungen der Datenträger herausfinden
#fdisk -l
Neue, leere Partitionstabelle auf dem Laufwerk erstellen mit fdisk
Wechsel in interaktiven Modus
# fdisk /dev/sdc Welcome to fdisk (util-linux 2.33.1). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Device does not contain a recognized partition table. Created a new DOS disklabel with disk identifier 0xdfca4904. Command (m for help):
Disklabel festlegen
GPT oder DOS (MBR)?
Es soll eine GPT (GUID-Partition-Table) angelegt werden.
Command (m for help): g
Created a new GPT disklabel (GUID: 748568BC-EC8C-F34A-B822-45C2E267CFFB).
Partitionstabelle anlegen
Command (m for help): n
Partition number (1-128, default 1): First sector (2048-3907029134, default 2048): Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-3907029134, default 3907029134): +1842G
Created a new partition 1 of type 'Linux filesystem' and of size 1,8 TiB.
Partition als RAID-Partition markieren
Ändern vom Partitionstyp "Linux Filesystem" auf "Linux RAID".
Command (m for help): t
Selected partition 1 Partition type (type L to list all types): 29
Changed type of partition 'Linux filesystem' to 'Linux RAID'.
Software-RAID anlegen
- Das Hauptwerkzeug für alle Arbeiten an Software-RAIDs unter Linux ist mdadm.
- mdadm bildet die Schnittstelle zu den RAID-Funktionen des Kernels.
- 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. Chunk Size, also die Datenmenge, die in einem einzelnen Schreibvorgang geschrieben wird, bekannt sein.
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 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 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.
- 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.
Manuell und transient (nicht dauerhaft)
# mount /dev/md0 /media/daten
Automatisch und persistent (dauerhaft)
- Damit das System beim Start das Dateisystem selber einhängt, muss eine entsprechende Zeile in die Datei /etc/fstab eingetragen werden.
- Man kann zum beim Eintrag den Namen des RAIDs oder seine UUID (Universally Unique Identifier) verwenden.
- Bei Verwendung des Namens kann es u.U. zu Problemen führen.
- Besser man verwendet die UUID, diese ist absolut eindeutig.
UUID=ausgelesene UUID /media/daten ext4 defaults 0 2
UUID auslesen
Name des RAID-Array hier md0.
# blkid –c /dev/md0
/dev/md0: UUID="e5e4d736-b1a8-4400-bda6-1a4c44bbe783" TYPE="ext4"
mdadm.conf
- Alle Informationen zum RAID werden auf jeder verwendeten Partition in den sog. 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 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"
Ü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.
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
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
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:Fehlerbehebung
Quellen
https://wiki.ubuntuusers.de/Software-RAID/