Linux/Software-RAID/Anlegen

Aus Foxwiki

Vorbereitung

Prüfung der Datenträger auf (baldigen) Defekt

  • Über smart z.B. mit smartctl prüfen.
    • Short-, Long- und Offline-Test

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

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 herausfinden

#fdisk -l

Neue Partitionstabelle erstellen

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 (GUID-Partition-Table) wird angelegt.
Command (m for help): g
Created a new GPT disklabel (GUID: 748568BC-EC8C-F34A-B822-45C2E267CFFB).

Partitionstabelle anlegen

  • E
Command (m for help): n
Partition number (1-128, default 1): 1
First sector (2048-3907029134, default 2048): 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.
  • 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.
  • 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:Wartung

Linux:Software-RAID:Fehlerbehebung

Quellen

https://wiki.ubuntuusers.de/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