RAID


Mit einem RAID-Verbund (Redundant Array of Independent Disks) lassen sich mehrere physikalische Festplatten logisch miteinander verknüpfen. Es kann z.B. die Datenübertagung dadurch gesteigert werden, indem der Datenzugriff paralell von mehreren Festplatten gesteuert werden kann. Es kann auch die Datensicherheit erhöht werden, indem die Daten redundant gespeichert werden, was jedoch dann auf kosten der Geschwindigkeit geht.
Grundsätzlich kann zwischen Hardware, Software RAID über das BIOS und Software RAID über das Betriebssystem unterschieden werden, wobei sich bei Hardware RAID Systeme der RAID Controller um die Verwaltung der Festplatten kümmert und die CPU nicht belastet. Beim Software RAID über das BIOS regeln die IDE, SATA oder SCSI Controller in Kombination mit dem Betriebssystemtreiber die RAID Level. Hier kümmert sich dann die CPU mit der Steuerung des RAID Verbundes.
Um mehr Flexibilität bei der Partitionsgröße zu haben, kann auch LVM (Logical Volume Manager) aufbauend auf RAID konfiuriert werden.

Zudem gibt es sehr viele verschiedene RAID Level, die verschiedene Aufgaben wahrnehmen. Die wichtigsten RAID Level sind:


RAID 0
Hier werden physische Festplatten so zusammengeschaltet, dass sie gleichzeitig gelesen und beschrieben werden können. Die Daten werden in kleinen Blöcken auf den Partitionen verteilt und die Kapazität entspricht die der ursprünglichen Festplatte und bietet eine Geschwindigkeitssteigerung des Systems, jedoch keine Ausfallsicherheit. Dieser RAID Level (Striping) ist z.B. sinnvoll, sollten oft große Daten bearbeitet werden.

RAID 1
Ein RAID 1 Verbund darf zwei Festplatten enthalten, die gepiegelt werden (Mirroring). Die Festplatten enthalten die gleichen Daten, fällt eine Festplatte aus, stehen die Daten auf der anderen Festplatte zur verfügung und bietet daher eine große Ausfallsicherheit, jedoch nur die halbe Kapazität.

RAID 4
Ähnlich wie RAID 5, jedoch werden die Paritätsinformationen auf einen Datenträger geschrieben.

RAID 5
Wie bei RAID 0 werden hier die Daten auf mehrere Festplatten verteilt. Es werden Paritätsdaten durch logische XOR Verknüpfungen erzeugt und verteilt auf die Datenträger geschrieben. Bei Ausfall eines Datenträgers kommt es darurch zu keinen Verlusten, da über die Paritätsinformationen die gesamten Daten rekonstruiert werden können. Schließt man mehrere Festplatten zu einem RAID 5 Verbund zusammen, wird ein Teil der Kapazität für die Paritätsdaten verwendet. Es werden mindestens drei Festplatten benötigt.

RAID 6
Ähnlich wie RAID 5, toleriert jedoch den Ausfall von zwei Festplatten.

RAID 10
Ist ein Zusammenschluss von mehreren RAID 1 Systemen zu einem RAID 0 Verbund.




Für die Erstellung eines Software RAID Verbundes benötigt der Kernel das Multiple Disk Modul. Hierfür sollte das Paket „mdadm“ installiert und das Kernelmodul „md_mod“ oder bei Red Hat Systeme „dm_mod“ geladen sein, oder mit modprobe nachgeladen werden.

Das einrichten von verschiedenen RAID Level ist bis auf die Option „--level=[n]“ identisch.

[root@localhost ~]# lsmod | grep dm_mod 
dm_mod                 63993  11 dm_multipath,dm_raid45,dm_snapshot,dm_zero,dm_mirror,dm_log



RAID kann auch für Systempartitionen verwendet werden, es sollte allerdings schon während der Installation des Systems eingerichtet werden. Bei vielen Linux Distributionen ist während der Installation eine RAID Konfiguration möglich. Um Probleme zu vermeiden sollte die „/boot“ Partition außerhalb des RAID Verbundes liegen und das RAID Kernelmodul (md_mod/dm_mod) sollte in der initrd (Initialen Ramdisk) Datei enthalten sein.


Zunächst müssen alle Festplatten, die im RAID Verbund verwendet werden mit dem Partitionstyp „FD“ (Linux RAID) angelegt werden.

[root@localhost ~]# cat /proc/partitions
major minor  #blocks  name

   8     0    8388608 sda
   8     1     104391 sda1
   8     2    8281507 sda2
 253     0    6684672 dm-0
 253     1    1572864 dm-1
   8    16    1048576 sdb
   8    32    1048576 sdc
   8    48    1048576 sdd
   8    64    1048576 sde
   8    80    1048576 sdf



Für dieses Beispiel wurden fünf Festplatten zu je 1 GB hinzugefügt (sdb-sdf). Die jeweiligen Festplatten werden mit fdisk für die Verwendung mit RAID formatiert und mit der Option [w] geschrieben.

[root@localhost ~]# fdisk /dev/sdb

Befehl (m für Hilfe): n
Befehl  Aktion
   e      Erweiterte
   p      Primäre Partition (1-4)
p
Partitionsnummer (1-4): 1
Erster Zylinder (1-130, Vorgabe: 1): 
Benutze den Standardwert 1
Letzter Zylinder oder +Größe, +GrößeK oder +GrößeM (1-130, Vorgabe: 130): 
Benutze den Standardwert 130

Befehl (m für Hilfe): t
Partition 1 ausgewählt
Hex code (L um eine Liste anzuzeigen): fd
Der Dateisystemtyp der Partition 1 ist nun fd (Linux raid autodetect)

Befehl (m für Hilfe): w
Die Partitionstabelle wurde verändert!

Rufe ioctl() um Partitionstabelle neu einzulesen.
Synchronisiere Platten.




Nun kann das RAID, hier im Beispiel RAID5 mit vier Geräten (sdb1, sdc1, sdd1, sde1) erstellt werden.

[root@localhost ~]# mdadm --create --verbose /dev/md0 --auto=yes --level=5 --raid-devices=4 /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1
mdadm: layout defaults to left-symmetric
mdadm: chunk size defaults to 64K
mdadm: size set to 1044096K
mdadm: array /dev/md0 started.




Die Gerätedatei „/dev/md0“ wurde mit den Festplatten des RAID Arrays erstellt. Diese muß jetzt noch mit dem gewünschtem Dateisystem formatiert werden. Informationen über RAID Arrays können im „/proc“ Verzeichnis abgefragt werden.

[root@localhost ~]# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4] 
md0 : active raid5 sde1[3] sdd1[2] sdc1[1] sdb1[0]
      3132288 blocks level 5, 64k chunk, algorithm 2 [4/4] [UUUU]
      
unused devices: <none>


[root@localhost ~]# mkfs.ext3 /dev/md0
mke2fs 1.39 (29-May-2006)
Dateisystem-Label=
OS-Typ: Linux
Blockgröße=4096 (log=2)
Fragmentgröße=4096 (log=2)
391680 Inodes, 783072 Blöcke
39153 Blöcke (5.00%) reserviert für den Superuser
erster Datenblock=0
Maximum filesystem blocks=805306368
24 Blockgruppen
32768 Blöcke pro Gruppe, 32768 Fragmente pro Gruppe
16320 Inodes pro Gruppe
Superblock-Sicherungskopien gespeichert in den Blöcken: 
	32768, 98304, 163840, 229376, 294912

Schreibe Inode-Tabellen: erledigt                           
Erstelle Journal (16384 Blöcke): erledigt
Schreibe Superblöcke und Dateisystem-Accountinginformationen: erledigt

Das Dateisystem wird automatisch alle 33 Mounts bzw. alle 180 Tage überprüft,
je nachdem, was zuerst eintritt. Veränderbar mit tune2fs -c oder -i .



Bei einem Neustart des Systems kann es vorkommen, dass die Gerätedatei des RAID Arrays automatisch in „/dev/md127“ umbenannt wird.




Nun erstellt man noch eine Datei als Einhängepunkt.

[root@localhost ~]# mkdir /data




Jetzt kann die RAID Gerätedatei gemountet werden…

[root@localhost ~]# mount -t ext3 /dev/md0 /data



oder in die Datei „/etc/fstab“ eingetragen werden.

...
/dev/md0                /data                   ext3    defaults        0 0
...



Da alle an einem RAID teilnehmenden Festplatten die gleiche UUID besitzen, kann man diese auch anstelle der Gerätedatei benutzen.



[root@localhost ~]# df -h /dev/md0
Dateisystem          Größe Benut  Verf Ben% Eingehängt auf
/dev/md0              3,0G   69M  2,8G   3% /data

Jetzt steht der RAID Verbund zur Verfügung. Es wurden vier Festplatten zu je 1GB dem RAID Array hinzugefügt, 1GB wird für Paritätsinformationen reserviert.




Um Informationen zu den RAID Arrays zu bekommen kann man das „/proc“ Device abfragen.

[root@localhost ~]# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4] 
md0 : active raid5 sde1[3] sdd1[2] sdc1[1] sdb1[0]
      3132288 blocks level 5, 64k chunk, algorithm 2 [4/4] [UUUU]
      
unused devices: <none>




Detailiertere Informationen zu einer RAID Partition erhält man mit „mdadm --detail [device]“.

[root@localhost ~]# mdadm --detail /dev/md0
/dev/md0:
        Version : 0.90
  Creation Time : Wed Jan  9 17:47:33 2013
     Raid Level : raid5
     Array Size : 3132288 (2.99 GiB 3.21 GB)
  Used Dev Size : 1044096 (1019.80 MiB 1069.15 MB)
   Raid Devices : 4
  Total Devices : 4
Preferred Minor : 0
    Persistence : Superblock is persistent

    Update Time : Wed Jan  9 19:10:21 2013
          State : clean
 Active Devices : 4
Working Devices : 4
 Failed Devices : 0
  Spare Devices : 0

         Layout : left-symmetric
     Chunk Size : 64K

           UUID : d5404dd3:8324d67f:22856a6c:e1352a0f
         Events : 0.4

    Number   Major   Minor   RaidDevice State
       0       8       17        0      active sync   /dev/sdb1
       1       8       33        1      active sync   /dev/sdc1
       2       8       49        2      active sync   /dev/sdd1
       3       8       65        3      active sync   /dev/sde1




Informationen zu einer Partition eines RAID Verbundes mit „mdadm --examine [device]“.

[root@localhost ~]# mdadm --examine /dev/sdb1
/dev/sdb1:
          Magic : a92b4efc
        Version : 0.90.00
           UUID : d5404dd3:8324d67f:22856a6c:e1352a0f
  Creation Time : Wed Jan  9 17:47:33 2013
     Raid Level : raid5
  Used Dev Size : 1044096 (1019.80 MiB 1069.15 MB)
     Array Size : 4176384 (3.98 GiB 4.28 GB)
   Raid Devices : 5
  Total Devices : 5
Preferred Minor : 0

    Update Time : Fri Jan 11 12:43:42 2013
          State : clean
 Active Devices : 5
Working Devices : 5
 Failed Devices : 0
  Spare Devices : 0
       Checksum : a7399807 - correct
         Events : 738

         Layout : left-symmetric
     Chunk Size : 64K

      Number   Major   Minor   RaidDevice State
this     0       8       17        0      active sync   /dev/sdb1

   0     0       8       17        0      active sync   /dev/sdb1
   1     1       8       33        1      active sync   /dev/sdc1
   2     2       8       49        2      active sync   /dev/sdd1
   3     3       8       65        3      active sync   /dev/sde1
   4     4       8       81        4      active sync   /dev/sdf1




In allen Festplatten, die mit „mdadm“ konfiguriert wurden, werden Informationen zum RAID System gepeichert. Mit dem Kommando „mdadm --query [device]“ kann man den Status eines RAID Systems ermitteln.

[root@localhost ~]# mdadm --query /dev/sdb1
/dev/sdb1: is not an md array
/dev/sdb1: device 0 in 5 device active raid5 /dev/md0.  Use mdadm --examine for more detail.


[root@localhost ~]# mdadm --query /dev/md0
/dev/md0: 3.98GiB raid5 5 devices, 0 spares. Use mdadm --detail for more detail.
/dev/md0: No md super block found, not an md component.






Will man eine RAID Partition deaktivieren muß diese zuerst aus dem System ausgehängt werden und danach mit „mdadm --stop [device]“ deaktiviert werden.

[root@localhost ~]# umount /data


[root@localhost ~]# mdadm --stop /dev/md0
mdadm: stopped /dev/md0




Wenn keine Veränderungen an den zum RAID Verbund gehörenden Partitionen vorgenommen wurden, können diese ohne Datenverlust mit der Option „--assemble“ wieder zusammengesetzt und aktiviert werden.

[root@localhost ~]# mdadm --assemble /dev/md0 /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1 /dev/sdf1
mdadm: /dev/md0 has been started with 5 drives.






Um einem vorhandenen RAID Array eine Festplatte hinzuzufügen, sollte diese wie beim erstellen eine RAID Partittionstabelle besitzen. Dies kann man auch mit sfdisk erreichen.

[root@localhost ~]# sfdisk /dev/sde -d | sfdisk /dev/sdf




Mit dem Befehl „mdadm --add“ kann nun die neue Festplatte in das RAID Array aufgenommen werden.

[root@localhost ~]# mdadm --add /dev/md0 /dev/sdf1
mdadm: added /dev/sdf1


[root@localhost ~]# mdadm --detail /dev/md0
/dev/md0:
        Version : 0.90
  Creation Time : Wed Jan  9 17:47:33 2013
     Raid Level : raid5
     Array Size : 3132288 (2.99 GiB 3.21 GB)
  Used Dev Size : 1044096 (1019.80 MiB 1069.15 MB)
   Raid Devices : 4
  Total Devices : 5
Preferred Minor : 0
    Persistence : Superblock is persistent

    Update Time : Wed Jan  9 20:44:06 2013
          State : clean
 Active Devices : 4
Working Devices : 5
 Failed Devices : 0
  Spare Devices : 1

         Layout : left-symmetric
     Chunk Size : 64K

           UUID : d5404dd3:8324d67f:22856a6c:e1352a0f
         Events : 0.6

    Number   Major   Minor   RaidDevice State
       0       8       17        0      active sync   /dev/sdb1
       1       8       33        1      active sync   /dev/sdc1
       2       8       49        2      active sync   /dev/sdd1
       3       8       65        3      active sync   /dev/sde1

       4       8       81        -      spare   /dev/sdf1




Das Device wurde in das Array aufgenommen, jedoch als Reserveplatte betrachtet. Um das Device als Aktive Festplatte einzubinden ist „mdadm“ mit der Option „--grow“ notwendig.

[root@localhost ~]# mdadm --grow --raid-devices=5 /dev/md0
mdadm: Need to backup 768K of critical section..
mdadm: ... critical section passed.




Dieser Vorgang kann sehr lange dauern und das System darf in dieser Zeit nicht heruntergefahren werden. Mit dem folgenden Kommando kann geprüft werden, wie weit der Vorgang fortgeschritten ist.

[root@localhost ~]# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4] 
md0 : active raid5 sdf1[4] sde1[3] sdd1[2] sdc1[1] sdb1[0]
      3132288 blocks super 0.91 level 5, 64k chunk, algorithm 2 [5/5] [UUUUU]
      [==>..................]  reshape = 13.9% (145408/1044096) finish=29.7min speed=500K/sec
      
unused devices: <none>




Ist dieser Vorgang abgeschlossen muß noch die Partitionsgröße des RAID Systems angepaßt werden. Bei ext Dateisysteme kann hierfür „resize2fs“ angewandt werden.

[root@localhost ~]# resize2fs /dev/md0
resize2fs 1.39 (29-May-2006)
Filesystem at /dev/md0 is mounted on /data; on-line resizing required
Performing an on-line resize of /dev/md0 to 1044096 (4k) blocks.
The filesystem on /dev/md0 is now 1044096 blocks long.


[root@localhost ~]# df -h /dev/md0
Dateisystem          Größe Benut  Verf Ben% Eingehängt auf
/dev/md0              4,0G   71M  3,7G   2% /data






Sollten auf einer Festplatte einmal Fehler auftreten oder komlett ausfallen, kann die defekte Festplatte ohne Datenverlust ausgetauscht werden.
Die defekte Festplatte kann vom RAID Verbund gelöst werden.

Es ist nicht möglich RAID Devices aus dem Verbund zu entfernen.



Eine defekte Festplatte erkennt man an [UU_], wäre alles in Ordnung würde hier [UUU] stehen. In folgendem Beispiel Fall ist die Festplatte „/dev/sdd1“ defekt.

[root@localhost ~]# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4] 
md0 : active raid5 sdd1[3](F) sdc1[1] sdb1[0]
      2088192 blocks level 5, 64k chunk, algorithm 2 [3/2] [UU_]
      
unused devices: <none>




Zuerst wird die Festplatte als „faulty spare“ deklariert.

[root@localhost ~]# mdadm --manage /dev/md0 --fail /dev/sdd1
mdadm: set /dev/sdd1 faulty in /dev/md0


[root@localhost ~]# mdadm /dev/md0 --remove /dev/sdd1
mdadm: hot removed /dev/sdd1


[root@localhost ~]# mdadm --detail /dev/md0
/dev/md0:
        Version : 0.90
  Creation Time : Fri Jan 11 22:58:36 2013
     Raid Level : raid5
     Array Size : 2088192 (2039.59 MiB 2138.31 MB)
  Used Dev Size : 1044096 (1019.80 MiB 1069.15 MB)
   Raid Devices : 3
  Total Devices : 2
Preferred Minor : 0
    Persistence : Superblock is persistent

    Update Time : Sat Jan 12 00:08:47 2013
          State : clean, degraded
 Active Devices : 2
Working Devices : 2
 Failed Devices : 0
  Spare Devices : 0

         Layout : left-symmetric
     Chunk Size : 64K

           UUID : 3f13f1dd:75d9a50e:15f7104a:87259596
         Events : 0.8

    Number   Major   Minor   RaidDevice State
       0       8       17        0      active sync   /dev/sdb1
       1       8       33        1      active sync   /dev/sdc1
       2       0        0        2      removed

Die Partition „/dev/sdd1“ wurde als fehlerhaft deklariert und aus dem Verbund entfernt. Ist eine Reservefestplatte im System vorhanden, kann diese ohne Systemneustart in das RAID System eingebunden werden. Ansonsten sollte das System heruntergefahren und eine gleich große Festplatte eingebaut und formatiert werden.


Mit dem Kommando „mdadm --add [dev]“ fügt man dem RAID Verbund die neue Festplatte hinzu.

[root@localhost ~]# mdadm /dev/md0 --add /dev/sdd1
mdadm: added /dev/sdd1



Die neue Festplatte wird nun in den RAID Verbund eingefügt oder bei RAID 1 mit der vorhandenen Festplatte synchronisiert. Den Fortschritt dieses Prozesses kann man wie folgt ermitteln.

[root@localhost ~]# mdadm --detail /dev/md0
/dev/md0:
        Version : 0.90
  Creation Time : Fri Jan 11 22:58:36 2013
     Raid Level : raid5
     Array Size : 2088192 (2039.59 MiB 2138.31 MB)
  Used Dev Size : 1044096 (1019.80 MiB 1069.15 MB)
   Raid Devices : 3
  Total Devices : 3
Preferred Minor : 0
    Persistence : Superblock is persistent

    Update Time : Sat Jan 12 00:33:03 2013
          State : clean, degraded, recovering
 Active Devices : 2
Working Devices : 3
 Failed Devices : 0
  Spare Devices : 1

         Layout : left-symmetric
     Chunk Size : 64K

 Rebuild Status : 39% complete

           UUID : 3f13f1dd:75d9a50e:15f7104a:87259596
         Events : 0.10

    Number   Major   Minor   RaidDevice State
       0       8       17        0      active sync   /dev/sdb1
       1       8       33        1      active sync   /dev/sdc1
       3       8       65        2      spare rebuilding   /dev/sdd1


[root@localhost ~]# mdadm --detail /dev/md0
/dev/md0:
        Version : 0.90
  Creation Time : Fri Jan 11 22:58:36 2013
     Raid Level : raid5
     Array Size : 2088192 (2039.59 MiB 2138.31 MB)
  Used Dev Size : 1044096 (1019.80 MiB 1069.15 MB)
   Raid Devices : 3
  Total Devices : 3
Preferred Minor : 0
    Persistence : Superblock is persistent

    Update Time : Sat Jan 12 00:34:46 2013
          State : clean
 Active Devices : 3
Working Devices : 3
 Failed Devices : 0
  Spare Devices : 0

         Layout : left-symmetric
     Chunk Size : 64K

           UUID : 3f13f1dd:75d9a50e:15f7104a:87259596
         Events : 0.14

    Number   Major   Minor   RaidDevice State
       0       8       17        0      active sync   /dev/sdb1
       1       8       33        1      active sync   /dev/sdc1
       2       8       65        2      active sync   /dev/sdd1






Normalerweise benötigt Software RAID keine Konfigurationsdatei. In manchen fällen kann eine solche Datei jedoch nützlich sein, um z.B. eine Mail im Fehlerfall zu senden. Das Kommando „mdadm“ wertet die Konfigurationsdatei nicht aus. Es kann aber „mdadm“ mit der Option „--scan“ dazu aufgefordert werden diese zu benutzen, das erspart bei einigen Kommandos Tipparbeit.


Mit folgenden Kommandos kann eine „/etc/mdadm/mdadm.conf“ erstellt werden.

[root@localhost ~]# echo DEVICE /dev/sd*[0-9] /dev/sd*[0-9] > /etc/mdadm/mdadm.conf



Die DEVICE Zeile sollte dann so bearbeitet werden, dass alle Festplatten die Teil eines RAID Systems dort eingetragen sind. Um die RAID Array Zeile hinzuzufügen, folgendes Kommando verwenden.

[root@localhost ~]# echo mdadm --detail --scan >> /etc/mdadm/mdadm.conf


[root@localhost ~]# mdadm --stop /dev/md0
# mit Konfigurationsdatei
[root@localhost ~]# mdadm --assemble --scan /dev/md0
# ohne Konfigurationsdatei
[root@localhost ~]# mdadm --assemble /dev/md0 /dev/sdb1 /dev/sdc1 dev/sdd1




Konfigurieren einer Mailbenachrichtigung im Fehlerfall in der „/etc/mdadm/mdadm.conf“.

...
MAILADDR admin@mydomain.de
MAILFROM servername@mydomain.de
...



Falls eine mdadm.conf eingerichtet wurde sollte die Datei bei allen Änderungen an der RAID Konfiguration aktualisiert werden.





Cloud