Software-RAID 1|5 Installation eines eisfair-Servers

Prolog

Dieses Dokument beschreibt die Software-RAID Root-Installation eines taufrischen eisfair Servers oder das Nachrüsten eines dieser Server mit Hilfe des Paketes raidtools 0.1.1.

Das Dokument darf als Rezept verstanden werden, um mit dem Hilfsmittel raidtools ein RAID 1 (Mirroring) einzurichten. Ergänzende Betrachtungen zu RAID 5 (Performance + Parität) sind am Ende des Dokumentes zu finden. Es sei angemerkt, dass RAID 5 in der Handhabung des hier beschriebenen Setups lediglich eine weitere Spielart darstellt.

Das Dokument schließt das Upgrade einer konventionellen eisfair Installation zu einem Software RAID System ein. All das ohne Datenverlust auf dem ursprünglichen Laufwerk.

RAID Root gibt den Hinweis, dass sich das RAID Setup auf ein vollständiges System, einschließlich der Root Partition bezieht.

Das hier vorgeschlagene Setup lässt sich problemlos über eine Secure Shell ssh durchführen. Kein eisfair Administrator muss beispielsweise nach Redmond eilen, um dort auf seinen eisfair Servern ein RAID System zu installieren. Sicherlich findet sich vor Ort genügend fachkundiges Personal, das den Einbau hinreichender Hardware übernimmt. Sämtliche Tests zu diesem Dokument wurden im Übrigen vollständig über ssh durchgeführt.

Bitte vor Beginn unbedingt darauf achten, dass alle wichtigen Daten auf einem gesonderten, vom betroffenen eisfair System vollkommen unabhängigen Datenträger, gesichert sind.

Kein noch so funktionstüchtiges RAID System kann im Nachhinein über den Verlust von unersetzlichen Daten hinwegtrösten.

Hinweis in eigener Sache. Dieser Artikel wurde unter größter Sorgfalt erstellt und jeder Einzelschritt vor der Veröffentlichung getestet. Dennoch kann der Autor in keinem Falle die Funktion im Einzelnen oder Gesamten gewährleisten und muss jede Art von Haftung ausschließen.

0. Das Kopieren und Einfügen

Alle Schritte zum erfolgreichen Setup eines Software RAID Systems können über Copy and Paste durchgeführt werden. Damit auch hierbei keine Missverständnisse auftreten, nachfolgend jeweils ein Screen Dump für Copy und  Paste.


Abb 01 - Kopieren aus dem Dokument Abb 01 - Kopieren aus dem Dokument


Abb 02 - Einfügen in die Secure Shell Abb 02 - Einfügen in die Secure Shell

1. Die Situation

Im Folgenden wird vorausgesetzt, dass ein funktionstüchtiges eisfair System auf dem Laufwerk /dev/hda installiert ist und dass ein weiteres Laufwerk /dev/hdc bereits hardwareseitig korrekt eingebaut und konfiguriert ist.

1.1 Anmerkungen

Wenn im Folgenden von RAID die Rede ist, wird ausschließlich Software RAID gemeint.

Wer hier eine erläuternde Einführung zu RAID im Allgemeinen oder Software RAID im Besonderen erwartet, wird auf einschlägige Seiten im www verwiesen. Besonders hervorzuheben ist das Linux Software-RAID HOWTO [1], quasi als Standardwerk.

Am sinnvollsten und leichtesten ist ein RAID Setup im Zuge einer Neuinstallation des Systems durchzuführen. Da der eisfair Server derlei Erleichterungen erst in mittelbarer Zukunft anbieten wird, kann auf die folgende Möglichkeit verwiesen werden. Hierbei wird ein bestehendes NON RAID System in ein RAID System umgewandelt.

Das Problem bei dieser Vorgehensweise besteht im Einbinden des laufenden Root Filesystems in eine Mehrfachplatte (Multiple Device). Um dennoch das Ziel Root RAID zu erreichen, ist ein kleiner Umweg erforderlich, der hier in allen Einzelheiten beschrieben wird.

1.2 System

In der Beschreibung wird von einem Standard eisfair System ausgegangen mit hinlänglich bekannter Aufteilung des Laufwerkes /dev/hda. Systeme mit anderer Aufteilung sind analog zu handhaben.

Ein fdisk -ul /dev/hda auf der Konsole bzw. in der ssh zeigt uns die Aufteilung von Platte hda. Parameter -l listet die einzelnen Partitionen und -u zeigt die Anzahl der Sektoren an.

Die Handhabung des Tools fdisk erklärt das zugehörige fdisk Manual.


eisfair # fdisk -ul /dev/hda

Disk /dev/hda: 128 heads, 63 sectors, 520 cylinders
Units = sectors of 1 * 512 bytes

   Device Boot    Start       End    Blocks   Id  System
/dev/hda1   *        63     16127      8032+  83  Linux
/dev/hda2         16128    548351    266112   82  Linux swap
/dev/hda3        548352   4193279   1822464   83  Linux
eisfair #

Secure Shell Abb 1 - Einteilung der alten Platte (/dev/hda)

Wir gehen wie oben angerissen von einem konventionellen System aus und erweitern es um die notwendige RAID Funktionalität. Ein RAID Upgrade ist damit bis ins Detail identisch mit einem RAID Setup auf einer bestehenden Neuinstallation. Dieses Konzept ist zum einen auch für unerfahrene Administratoren noch gut nachzuvollziehen und zum anderen extrem leicht zu handhaben. Es genügt bereits die einzelnen Schritte in der beschriebenen Folge nachzuvollziehen, um zum Ziel zu gelangen. Bei korrekter Handhabung bleiben die vorhandenen Daten auf dem Original-Laufwerk /dev/hda unversehrt.

Dennoch, ein wiederholter Hinweis auf ein funktionstuechtiges Backup!

1.3 Helfer

1.3.1 Die Raidwerkzeuge

Ein aktuelles Paket raidtools in der Version 0.1.2, speziell für den eisfair Server aufbereitet, erhält man als Tarball auf http://ice.computerkramer.de oder direkt ueber das eisfair-Menu Search packages with Pack-Eis.

Das Setup des Paketes raidtools übernimmt selbstständig die Überprüfung auf hinreichende RAID Funktionalität des Kernels.

Weiterhin wird neben den erforderlichen Binaries die Konfigurations-Datei /etc/raidtab mitinstalliert.

Das Setup legt bereits Device Nodes, md0, md1, ... md15, für die neuen Multiple Devices an. MAKEDEV ist für das RAID Setup obsolet.

Die Frage, ob es sinnvoller ist raidtools oder mdadm einzusetzen, kann lediglich angerissen werden. Hier fällt die Entscheidung zugunsten der älteren raidtools, da diese im Gegensatz zu mdadm die Möglichkeit bieten, RAID 5 Arrays mit hinzugekommenen neuen Laufwerken zu erweitern.

1.3.2 Der Tuxlader

Um unter dem Aspekt höchster Ausfallsicherheit von einem Multiple Device zu booten, ist Lilo in der Version 22.6.1 erforderlich. Seit eisfair base 1.1.0 wird Lilo in der erforderlichen Version 22.6.1 bereits installiert. Für den Defektfall einer Platte schreibt Lilo 22.6.1 Bootcode in den MBR aller Laufwerke des Arrays. Lilo garantiert somit bei einem Ausfall der Boot Platte, dass eisfair von einer der funktionsfähig verbliebenen Laufwerke hochfährt. Dies erhöht auch hierdurch die Ausfallsicherheit auf ein Maximum. Bleibt anzumerken, dass Grub solche Möglichkeiten zur Zeit leider nicht bietet.

2. Das Aufbereiten

2.1 Einteilen

Einteilen kann man Festplatten auf zweierlei Weise. Zum einen über die Kommandozeile mit sfdisk, zum anderen manuell mit fdisk.

Die erste Variante soll hier exemplarisch gezeigt werden, da die Benutzung des Tools fdisk für manchen Anwender etwas mühsam erscheint. Eine Partitionierung mit sfdik ist hingegen über einfaches Copy and Paste wie in
Secure Shell Abb 2 gezeigt realisierbar.

Parameter des Tools sfdisk erklärt das zugehörige sdisk Manual.


eisfair # sfdisk --change-id /dev/hda 1 fd && \
          sfdisk --change-id /dev/hda 2 fd && \
          sfdisk --change-id /dev/hda 3 fd && \
          sfdisk -d /dev/hda > /tmp/hda.part.tab && \
          sfdisk -f /dev/hdc < /tmp/hda.part.tab
eisfair # 

Secure Shell Abb 2 - Aufbereiten der Festplatten

In Secure Shell Abb 2 wird demonstriert wie die Einteilung der Systemplatte komplett ausgelesen und anschließend auf die neue Platte übertragen wird.

Unterschiede zu RAID 5 beim Partitionieren siehe Secure Shell Abb 19

2.2 Kontrolle

Im Ergebnis sollten die beiden Laufwerke so partitioniert sein wie in Secure Shell Abb 3 abgebildet. Zu kontrollieren ist, ob alle Partitionen die gleiche Größe besitzen (Spalte #sectors) und ob alle vom Typ Linux raid autodetect (Spalte System)sind.


eisfair # sfdisk -luS

Disk /dev/hda: 520 cylinders, 128 heads, 63 sectors/track
Units = sectors of 512 bytes, counting from 0

   Device Boot    Start       End  #sectors  Id  System
/dev/hda1   *        63     16127     16065  fd  Linux raid autodetect
/dev/hda2         16128    282239    266112  fd  Linux raid autodetect
/dev/hda3        282240   4193279   3911040  fd  Linux raid autodetect
/dev/hda4             0         -         0   0  Empty

Disk /dev/hdc: 8322 cylinders, 16 heads, 63 sectors/track
Units = sectors of 512 bytes, counting from 0

   Device Boot    Start       End  #sectors  Id  System
/dev/hdc1   *        63     16127     16065  fd  Linux raid autodetect
/dev/hdc2         16128    282239    266112  fd  Linux raid autodetect
/dev/hdc3        282240   4193279   3911040  fd  Linux raid autodetect
/dev/hdc4             0         -         0   0  Empty
eisfair #

Secure Shell Abb 3 - Ergebnis Partitionierung (hda, hdc)

3. Die Raidtabelle

Die Tabelle /etc/raidtab kann für eine Basisinstallation so übernommen werden, wie sie von den raidtools mitgeliefert wird. Ein Editieren ist nicht erforderlich.

Damit die Platte /dev/hda, auf dem das System aktuell läuft, bei der RAID Erstellung zunächst ausgeklammert bleibt, wird diese in der raidtab mit dem Parameter failed-disk gekennzeichnet. Dieses Ausklammern muss später nicht mehr abgeändert werden, da die betreffenden Partitionen mit dem Befehl raidhotadd eingebunden werden und der Kernel seine Informationen über die Multiple Devicesnicht aus dieser Tabelle bezieht.


eisfair # cat /etc/raidtab
#-------------------------------------------------------------------------
# /etc/raidtab - raiddev configuration file
#
# Creation:     03.02.2005 mnr
# Last Update:  28.02.2005 mnr
#
# Copyright (c) 2005 - Manfred N. Reiland - info[at]eis.it-reiland[dot]de
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#-------------------------------------------------------------------------

   # md1 is the /boot array
   #------------------------
   raiddev          /dev/md1
   raid-level              1
   nr-raid-disks           2
   chunk-size             32
   nr-spare-disks          0
   persistent-superblock   1

   device          /dev/hdc1
   raid-disk               0

   device          /dev/hda1
   failed-disk             1

   # md2 is the swap array
   #------------------------
   raiddev          /dev/md2
   raid-level              1
   nr-raid-disks           2
   chunk-size             32
   nr-spare-disks          0
   persistent-superblock   1

   device          /dev/hdc2
   raid-disk               0

   device          /dev/hda2
   failed-disk             1

   # md3 is the / array
   #------------------------
   raiddev          /dev/md3
   raid-level              1
   nr-raid-disks           2
   chunk-size             32
   nr-spare-disks          0
   persistent-superblock   1

   device          /dev/hdc3
   raid-disk               0

   device          /dev/hda3
   failed-disk             1
eisfair #

Secure Shell Abb 4 - Raidtabelle (raidtab)

Bitte unbedingt beachten!

Der failed-disk Parameter muss jeweils der letzte Eintrag in der raidtab Tabelle sein!

Unterschiede der RAID-Tabelle zu RAID 5 siehe Secure Shell Abb 20

4. Die Schöpfung

Das Erstellen der RAID Arrays erfolgt wie in Secure Shell Abb 5 dargestellt mit dem Shell Kommando mkraid --really-force /dev/mdx (x als Platzhalter für die Partitions-Nummern).


eisfair # mkraid --really-force /dev/md1 && \
          mkraid --really-force /dev/md2 && \
          mkraid --really-force /dev/md3

DESTROYING the contents of /dev/md1 in 5 seconds, Ctrl-C if unsure!
handling MD device /dev/md1
analyzing super-block
disk 0: /dev/hdc1, 8032kB, raid superblock at 7936kB
disk 1: /dev/hda1, failed
DESTROYING the contents of /dev/md2 in 5 seconds, Ctrl-C if unsure!
handling MD device /dev/md2
analyzing super-block
disk 0: /dev/hdc2, 133056kB, raid superblock at 132992kB
disk 1: /dev/hda2, failed
DESTROYING the contents of /dev/md3 in 5 seconds, Ctrl-C if unsure!
handling MD device /dev/md3
analyzing super-block
disk 0: /dev/hdc3, 1955520kB, raid superblock at 1955456kB
disk 1: /dev/hda3, failed
eisfair #

Secure Shell Abb 5 - Make RAID

In Secure Shell Abb 5 gut zu erkennen sind die planmäßig erzeugten failed Devices und die bereits integrierten Laufwerke mit der Kennzeichnung raid superblock.

Befindet sich bereits ein Persistent Superblock auf einer Partition, wird dieser nach 5 Sekunden ueberschrieben. Innerhalb dieser 5 Sekunden je Partition hat der Admin die Möglichkeit den Vorgang mit CTRL + c abzubrechen.

5. Die Nachsicht

Kontrollieren des Fortschritts beim Erstellen der Multiple Devices.

eisfair # cat /proc/mdstat
Personalities : [linear] [raid0] [raid1] [raid5] [multipath]
read_ahead 1024 sectors
md3 : active raid1 hdc3[0]
      1822400 blocks [2/1] [U_]

md2 : active raid1 hdc2[0]
      266048 blocks [2/1] [U_]

md1 : active raid1 hdc1[0]
      7936 blocks [2/1] [U_]

unused devices:<none>eisfair #

Secure Shell Abb 5 - Kontrolle der RAID Arrays

Es werden Einzelheiten des Kernels über das RAID Array aufgezeigt. Auch hier ist wieder deutlich zu erkennen, dass Laufwerk /dev/hda gemäß Planung noch nicht in das RAID Array eingebunden ist.

6. Das Dateisystem

Auf den neu erzeugten Multiple Devices /dev/md1 für /boot sowie /dev/md3 für / wird je ein File System ext3 erstellt und auf /dev/md2 eine swap Partition angelegt.

eisfair # mkfs.ext3 /dev/md1 && \
          mkfs.ext3 /dev/md3 && \
          mkswap /dev/md2
eisfair #

Secure Shell Abb 6 - Anlegen der Dateisysteme

7. Das Übertragen

7.1 Multiple Devices einhängen

Nachdem das neue Root Device nach /mnt eingehängt ist, wird ein neues Verzeichnis boot auf /mnt angelegt und dieses ebenfalls eingehängt.

eisfair # mount /dev/md3 /mnt && \
          mkdir /mnt/boot && \
          mount /dev/md1 /mnt/boot
eisfair # 

Secure Shell Abb 7 - Root und Boot einhängen

7.2 /etc/init.d/boot editieren

Um das komplette RAID Setup über eine Secure Shell durchführen zu können, sollte man vor dem ersten Reboot die Überprüfung des Root Filesystems unterbinden. Dazu ist in der Datei /etc/init.d/boot die Zeile /sbin/fsck -A -p 2>/dev/null auszukommentieren.
Dies sieht dann folgendermaßen aus: #/sbin/fsck -A -p 2>/dev/null
Möchte man dies aus irgendwelchen Gründen nicht tun, bleibt lediglich der Weg über die Konsole, da beim Bootvorgang die Bestätigung der Überprüfung eines eingehängten Gerätes erwartet wird.

Der Befehlsausdruck in Secure Shell Abb 8 kommentiert die erwähnte Zeile aus.


eisfair # sed -e 's/\/sbin\/fsck/#\/sbin\/fsck/g' \
          /etc/init.d/boot  > /tmp/boot && \
          cp /tmp/boot /etc/init.d/boot
eisfair # 

Secure Shell Abb 8 - fsck auskommentieren

7.3 Kopieren

Die Partitionen mit dem Root-Verzeichnis sowie dem Boot-Verzeichnis werden auf die neu erstellten Multipl-Devices kopiert.

Per Copy and Paste laut Secure Shell Abb 9 wird der Kopiervorgang jedem eisfair Administrator gelingen. Einfach die folgenden Zeilen im Block auf eine ssh Shell verfrachten und abschicken. Da der Kopiervorgang selbst einige Minuten andauern kann, wartet man solange bis der Eingabe-Prompt wieder erscheint.


eisfair # cd / && \
          find . -xdev | cpio -pmv /mnt && \
          cd /boot && \
          find . -xdev | cpio -pmv /mnt/boot
eisfair # 

Secure Shell Abb 9 - Kopieren des Root Filesystems

8. Das Hochfahren

8.1 Dateisystemtabelle

/mnt/etc/fstab wird an die neuen Einhängepunkte angepasst.

eisfair # joe /mnt/etc/fstab
/dev/md3    /        ext3     defaults,errors=remount-ro 0 1
/dev/md1    /boot    ext3     defaults,errors=remount-ro 0 1
/dev/md2    none     swap     sw                         0 0
proc        /proc    proc     defaults                   0 0
/dev/fd0    /floppy  auto     defaults,user,noauto       0 0
/dev/cdrom  /cdrom   iso9660  defaults,ro,user,noauto    0 0

Secure Shell Abb 10 - fstab editieren

8.2 /mnt/lilo.conf

Jetzt kann die aktuelle /boot Partition ausgehängt und stattdessen /dev/hda1 nach /mnt/boot eingehängt werden. Grund dieser Aktion ist die korrekte Installation des Bootloaders Lilo.

eisfair # cd / && \
          umount /boot && \
          mount /dev/hda1 /mnt/boot
eisfair #  

Secure Shell Abb 11 - Boot Device umhängen

Im nächsten Schritt wird die /mnt/etc/lilo.conf insoweit editiert, dass das Boot Device immer noch ein herkömmliches Laufwerk, /dev/hda bleibt, das Root Filesystem sich aber bereits auf einem Multiple Device befindet.

eisfair # joe /mnt/etc/lilo.conf
disk = /dev/hda
  bios = 0x80
boot = /dev/hda
read-only
prompt
timeout = 5
vga = normal

image = /boot/kernel
root = /dev/md3
label = eis
initrd = /boot/initrd.gz

Secure Shell Abb 12 - /mnt/etc/lilo.conf editieren

Nach korrekter Änderung der Datei /mnt/etc/lilo.conf als Voraussetzung für einen fehlerfreien Neustart, kann Lilo auf dem Verzeichnis /mnt ausgeführt und das System neu gestartet werden.

eisfair # lilo -r /mnt && \
          reboot
eisfair # 			 

Secure Shell Abb 13 - Lilo ausführen und Reboot

9. Der Gleichheitsgrundsatz

Wenn alle bisherigen Schritte ohne Probleme durchgeführt werden konnten, ist das RAID Array bereits aktiv, jedoch noch ohne Redundanz.

9.1 Heißes Einfügen

Das Device /dev/hda wird mit raidhotadd in das RAID Array integriert.

eisfair # raidhotadd /dev/md1 /dev/hda1 && \
          raidhotadd /dev/md2 /dev/hda2 && \
          raidhotadd /dev/md3 /dev/hda3
eisfair #

Secure Shell Abb 14 - Heißes Einfügen

Eine Synchronisation der Daten auf den neuen Partitionen sollte nun starten. Die Dauer dieses Rekonstruktionsvorgangs ist abhängig von der jeweiligen Partitionsgröße und kann eine gewisse Zeit in Anspruch nehmen.

9.2 Synchron-Kontrolle

eisfair # cat /proc/mdstat
Personalities : [linear] [raid0] [raid1] [raid5] [multipath]
read_ahead 1024 sectors
md1 : active raid1 hda1[1] hdc1[0]
      7936 blocks [2/2] [UU]

md2 : active raid1 hda2[1] hdc2[0]
      266048 blocks [2/2] [UU]

md3 : active raid1 hda3[3] hda[2] hdc3[0]
      1822400 blocks [2/1] [U_]
      [====>................]  recovery = 21.6% (396160/1822400)...
unused devices:<none>eisfair # 

Secure Shell Abb 15 - Überwachen der Synchronisation

9.3 Ergebnis-Kontrolle

eisfair # cat /proc/mdstat
Personalities : [linear] [raid0] [raid1] [raid5] [multipath]
read_ahead 1024 sectors
md1 : active raid1 hda1[1] hdc1[0]
      7936 blocks [2/2] [UU]

md2 : active raid1 hda2[1] hdc2[0]
      266048 blocks [2/2] [UU]

md3 : active raid1 hda3[3] hda[1] hdc3[0]
      1822400 blocks [2/2] [UU]

unused devices:<none>eisfair #

Secure Shell Abb 16 - Ergebnis der Synchronisation

10. Der Abschluss

10.1 Filesystemcheck schärfen

eisfair # sed -e 's/#\/sbin\/fsck/\/sbin\/fsck/g' \
          /etc/init.d/boot  > /tmp/boot && \
          cp /tmp/boot /etc/init.d/boot
eisfair # 

Secure Shell Abb 17 - Filesystem Check wieder aktivieren

Die Auskommentierung der Zeile #/sbin/fsck -A -p 2>/dev/null wird wieder entfernt damit das System bei jedem Start einen Filesystem-Check durchführen kann.

10.2 Boot für Alle

Lilo ist schließlich an die veränderten Rahmenbedingungen anzupassen, damit es in der Lage ist von allen Laufwerken des Arrays zu booten. Die Veränderungen sind in der Secure Shell Abb 18 nachzulesen.


eisfair # joe /etc/lilo.conf
disk = /dev/hda
  bios = 0x80
boot = /dev/md1
raid-extra-boot=/dev/hda,/dev/hdc
read-only
prompt
timeout = 5
vga = normal

image = /boot/kernel
root = /dev/md3
label = eisfair-raid1
initrd = /boot/initrd.gz

Secure Shell Abb 18 - Boot Ausfallsicherung

eisfair # lilo
Added eisfair-raid1 *
The boot record of  /dev/md1  has been updated.
The boot record of  /dev/hda  has been updated.
Warning: /dev/hdc is not on the first disk
The boot record of  /dev/hdc  has been updated.
eisfair #


lilo beschreibt den MBR aller in der /etc/lilo.config angegebenen Platten.

Unterschiede zu RAID 5 siehe Secure Shell Abb 21 und Secure Shell Abb 22

Ein letztes reboot startet das System neu. Wenn es wie erwartet hochfährt, ist das RAID Setup erfolgreich beendet.

Test

Weitere Tests lassen sich realisieren, indem man einzelne Platten nacheinander hardwareseitig abklemmt. Ist alles korrekt konfiguriert, muss das System von jedem Laufwerk ohne Fehlermeldungen hochfahren. Dazu bitte auch die Hinweise in Kapitel Ausfallerscheinungen beachten.


RAID 5

RAID 5 ist im Grunde wie RAID 1 zu handhaben. Die Unterschiede im Einzelnen werden an einem System mit drei Festplatten demonstriert. Hierbei wird angenommen, dass die dritte Platte als Slave am ersten IDE Kanal angeschlossen ist.


eisfair # sfdisk --change-id /dev/hda 1 fd && \
          sfdisk --change-id /dev/hda 2 fd && \
          sfdisk --change-id /dev/hda 3 fd && \
          sfdisk -d /dev/hda > /tmp/hda.out && \
          sfdisk /dev/hdb < /tmp/hda.out && \
          sfdisk /dev/hdc < /tmp/hda.out

eisfair # 

Secure Shell Abb 19 - Aufbereiten der Festplatten (RAID 5)

Partitionsdaten von Platte /dev/hda werden zusätzlich auf das neue Laufwerk /dev/hdb geschrieben.


#-------------------------------------------------------------------------
# /etc/raidtab - raiddev configuration file
#
# Creation:     03.02.2005 mnr
# Last Update:  28.02.2005 mnr
#
# Copyright (c) 2005 - Manfred N. Reiland - info[at]eis.it-reiland[dot]de
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#-------------------------------------------------------------------------

#-------------------------------------------------------------------------
# RAID 5
#-------------------------------------------------------------------------

   # md1 is the /boot array
   #------------------------
   raiddev          /dev/md1
   raid-level              1      # RAID-Level 1!
   nr-raid-disks           3
   chunk-size             32
   nr-spare-disks          0
   persistent-superblock   1

   device          /dev/hdb1
   raid-disk               0

   device          /dev/hdc1
   raid-disk               1

   device          /dev/hda1
   failed-disk             2

   # md2 is the swap array
   #------------------------
   raiddev          /dev/md2
   raid-level              5      # RAID-Level 5!
   nr-raid-disks           3
   chunk-size             32
   nr-spare-disks          0
   persistent-superblock   1

   device          /dev/hdb2
   raid-disk               0

   device          /dev/hdc2
   raid-disk               1

   device          /dev/hda2
   failed-disk             2

   # md3 is the / array
   #------------------------
   raiddev          /dev/md3
   raid-level              5      # RAID-Level 5!
   nr-raid-disks           3
   chunk-size             32
   nr-spare-disks          0
   persistent-superblock   1

   device          /dev/hdb3
   	

   device          /dev/hdc3
   raid-disk               1

   device          /dev/hda3
   failed-disk             2

Secure Shell Abb 20 - Raidtabelle (raidtab - RAID 5)

Lilo ist nicht in der Lage von einem RAID 5 Array zu booten. Deshalb muss die Boot-Partition /dev/md1 als RAID 1 realisiert werden.


disk = /dev/hda
  bios = 0x80
boot = /dev/md1
raid-extra-boot=/dev/hda,/dev/hdb,/dev/hdc
read-only
prompt
timeout = 5
vga = normal

image = /boot/kernel
root = /dev/md3
label = eisfair-raid5
initrd = /boot/initrd.gz

Secure Shell Abb 21 - Boot Ausfallsicherung (RAID 5)


eisfair # lilo
Added eisfair-raid5 *
The boot record of  /dev/md1  has been updated.
The boot record of  /dev/hda  has been updated.
Warning: /dev/hdb is not on the first disk
The boot record of  /dev/hdb  has been updated.
Warning: /dev/hdc is not on the first disk
The boot record of  /dev/hdc  has been updated.
eisfair #

Secure Shell Abb 22 - Lilo Ergebnis (RAID 5)

Die markantesten Unterschiede zu RAID 1 sind in den Tabellen
Secure Shell Abb 19,
Secure Shell Abb 20 und
Secure Shell Abb 21 dargestellt.

Wer Wert auf ein hochperformantes System legt, muss im Wesentlichen den chunk-size Parameter in der raidtab justieren und beim Formatieren den Parameter stride nutzen.

mkfs.ext3 -b 4096 -R stride=8 /dev/md1

Zu tiefergehenden Einzelheiten wird auf die einschlägige Literatur verwiesen.

Der Mühen Lohn

Als Lohn für all die Mühen erhält der eisfair Administrator ein System, dass höchste Ausfallsicherheit bietet.

Das System ist fortan nicht nur vor Datenverlust auf allen Platten, einschließlich der Speicherauslagerung swap geschützt, sondern es ist bei einem Plattencrash in der Lage von irgendeinem der intakten Laufwerke zu booten, die in dem RAID Array integriert sind.


Ausfallerscheinungen

Bei Ausfall einer Platte fährt der Administrator das System herunter und startet es erneut nachdem er die defekte Hardware ausgetauscht hat. Analog zu Secure Shell Abb 2 wird die neue Platte partitioniert und mit raidhotadd wieder in das Array integriert.

Bei den Tests ist präzise darauf zu achten, dass ein RAID 5 System vollkommen synchronisiert ist, bevor man es herunterfährt und weitere Platten entfernt oder hinzufügt.

Der Anhänger

eisfair # cat /etc/raidtab
#-------------------------------------------------------------------------
# /etc/raidtab - raiddev configuration file
#
# Creation:     03.02.2005 mnr
# Last Update:  28.02.2005 mnr
#
# Copyright (c) 2005 - Manfred N. Reiland - info[at]eis.it-reiland[dot]de
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#-------------------------------------------------------------------------

   # md1 is the /boot array
   #------------------------
   raiddev          /dev/md1
   raid-level              1
   nr-raid-disks           2
   chunk-size             32
   nr-spare-disks          0
   persistent-superblock   1

   device          /dev/hdc1
   raid-disk               0

   device          /dev/hda1
   failed-disk             1

   # md2 is the swap array
   #------------------------
   raiddev          /dev/md2
   raid-level              1
   nr-raid-disks           2
   chunk-size             32
   nr-spare-disks          0
   persistent-superblock   1

   device          /dev/hdc2
   raid-disk               0

   device          /dev/hda2
   failed-disk             1

   # md3 is the / array
   #------------------------
   raiddev          /dev/md3
   raid-level              1
   nr-raid-disks           2
   chunk-size             32
   nr-spare-disks          0
   persistent-superblock   1

   device          /dev/hdc3
   raid-disk               0

   device          /dev/hda3
   failed-disk             1
	
eisfair #

Abb A1 - /etc/raidtab - RAID 1

#-------------------------------------------------------------------------
# /etc/lilo.conf - Lilo Configuration File
#
# Creation:     15.02.2005  mnr
# Last Update:  -
#
# Copyright (c) 2005 - Manfred N. Reiland - info[at]eis.it-reiland[dot]de
#-------------------------------------------------------------------------

   disk = /dev/hda
     bios = 0x80

   # boot devices
   boot=/dev/md1                       # <--- boot from multiple device
   raid-extra-boot=/dev/hda,/dev/hdc   # <--- rescue boot device

   #
   read-only
   prompt
   timeout = 5
   vga = normal

   #
   image = /boot/kernel
   root = /dev/md3                      # <--- root
   label = eisfair-raid1
   initrd = /boot/initrd.gz

Abb A2 - /etc/lilo.conf - RAID 1

#-------------------------------------------------------------------------
# /etc/fstab - File system
#
# Creation:     15.02.2005  mnr
# Last Update:  -
#
# Copyright (c) 2005 - Manfred N. Reiland - info[at]eis.it-reiland[dot]de
#-------------------------------------------------------------------------

/dev/md3    /        ext3     defaults,errors=remount-ro 0 1
/dev/md1    /boot    ext3     defaults,errors=remount-ro 0 1
/dev/md2    none     swap     sw                         0 0
proc        /proc    proc     defaults                   0 0
/dev/fd0    /floppy  auto     defaults,user,noauto       0 0
/dev/cdrom  /cdrom   iso9660  defaults,ro,user,noauto    0 0

Abb A3 - /etc/fstab - RAID 1




Literatur

[1] Linux Software-RAID HOWTO (german)
[2] Boot + Root + Raid + Lilo : Software Raid mini-HOWTO



Urheberrecht

Copyright (C) 2005 Manfred N. Reiland - info@ice.it-reiland.de

Wortgetreues Kopieren sowie die Verbreitung des kompletten Dokumentes ist mit jedem Medium gestattet, soweit dieser Vermerk erhalten bleibt.

Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved.



Aktualisiert: 03.01.2007