

	\documentclass[a4paper,11pt]{article}
	\usepackage{ngerman}
	\usepackage[latin1]{inputenc}
	\setlength\parskip{\medskipamount}
	\setlength\parindent{0pt}
	\begin{document}

	
 % software_raid
 % Copyright Niels Happel
 % Lizenz: GPL
 % 
 % $Name: $
 % $Revision: 1.2.2.12 $
 % $Source: /cvsroot/selflinux/tutorial/advanced/hardware_advanced/festplatten/filesysteme/raid/software_raid/software_raid,v $
 % SelfLinux-0.7.2
 %
 % Diese Datei ist Teil von SelfLinux http://www.selflinux.de
 %
 %%% $Id: software_raid,v 1.2.2.12 2003/03/10 20:05:12 fboerner Exp $

	\title{
Linux Software-RAID HOWTO
 }


	
	    \author{
Niels Happel
  }
	    %\url{mailto:
happel@resultings.de
  }
    

	\maketitle

	
	
	%\ref{../index.tex}
	
		%\ref{systemverwaltung_2.tex}
		Fortgeschrittene Systemverwaltung
	\ref{software_raid}

    \par{Layout}
    
Matthias Hagedorn
  
	    %\url{mailto:
herbert_kw@t-online.de
  }
    
    	\par{Lizenz}
	GPL
 
	\tableofcontents{}

        
	\section{Einführung} \label{d35e54}
        

   
	  
   
  \par
  
  Ziel dieses Dokumentes ist es, das grundlegende Verständnis der
  unterschiedlichen RAID-Möglichkeiten und das Erstellen von RAID-
  Verbunden anhand der - teilweise - neuen Möglichkeiten des 2.2er
  Kernels zu erklären.  Des weiteren wird auf die Besonderheiten mehrerer
  RAID-Verbunde, die Nutzung dieser als Root-Partition und deren
  Verhalten bei Fehlern eingegangen. Zu guter Letzt finden Sie noch
  einige Tipps \& Tricks rund um Linux allgemein sowie Software-RAID im
  speziellen.
   
	  
   \subsection{Warnung} \label{d35e67}
        

	
		
	
  \par
  
  Dieses Dokument beinhaltet keine Garantie für das Gelingen der hier
  beschriebenen Sachverhalte. Obwohl alle Anstrengungen unternommen
  wurden, um die Genauigkeit der hier dokumentierten Informationen
  sicherzustellen, übernimmt der Autor keine Verantwortung für Fehler
  jeglicher Art oder für irgendwelche Schäden, welche direkt oder als
  Konsequenz durch die Benutzung der hier dokumentierten Informationen
  hervorgerufen werden.
	

	
  \par
  
  RAID, obwohl es dafür entwickelt wurde, die Zuverlässigkeit des
  Systems zu steigern, indem es Redundanz gewährleistet, kann auch zu
  einem falschen Gefühl der Sicherheit führen, wenn es unsachgemäß
  benutzt wird. Dieses falsche Vertrauen kann dann zu wesentlich
  größeren Desastern führen. Im einzelnen sollte man beachten, dass RAID
  konstruiert wurde, um vor Festplattenfehlern zu schützen und nicht vor
  Stromunterbrechungen oder Benutzerfehlern.  Stromunterbrechungen,
  instabile Entwicklerkernel oder Benutzerfehler können zu
  unwiederbringlichen Datenverlusten führen! RAID ist kein Ersatz für
  ein Backup Ihres Systems.
	
   

   \subsection{Begrifflichkeiten} \label{d35e81}
        

	

	
  \par
  
  Auf den folgenden Seiten werden Sie mit vielen Ausdrücken rund um
  Software-RAID, Festplatten, Partitionen, Tools, Patches und Devices
  bombardiert. Um als RAID-Einsteiger mit den oft gebrauchten Ausdrücken
  nicht ins Schleudern zu geraten, erhalten Sie hier eine Einführung in
  die Begrifflichkeiten.
	

	
  \par
  
	 {\bf Chunk-Size}
	
		
	
        Eine genaue Beschreibung, was die Chunk-Size ist, ist im
		  Abschnitt Spezielle Optionen der RAID-Devices zu finden.
	

	
  \par
  
	 {\bf Devices}
	

	
		{\bf Devices} sind unter Linux Stellvertreter für Geräte
		aller Art, um sie {\bf beim Namen} nennen zu können. Sie
	    liegen alle unter {\bf /dev/} in Ihrem Linux-Verzeichnisbaum.
		Beispiel dafür sind {\bf /dev/hda}
		für die erste (E)IDE-Festplatte im System (analog {\bf /dev/hdb},
		{\bf /dev/hdc}), {\bf /dev/sda}
		für die erste SCSI-Festplatte oder {\bf /dev/fd0}
        für das erste Diskettenlaufwerk.
	

	
  \par
  
	 {\bf  Festplatten}
	

	
		{\bf Festplatten} sollten Ihnen bekannt sein. RAID nutzt mehrere
        Festplatten, um entweder deren Gesamtgeschwindigkeit, deren
        Sicherheit oder beides zu erhöhen.
	

	
  \par
  
	 {\bf Hot Plugging}
	

	
        {\bf Hot Plugging} bezeichnet die Möglichkeit, einzelne Festplatten
        ohne ein Abschalten oder Herunterfahren des Rechners innerhalb
        eines redundanten RAID-Verbundes abzuschalten, auszutauschen und
        wieder einzufügen. Im günstigsten Fall bietet einem Hot Plugging
        also die Möglichkeit, eine defekte Festplatte auszutauschen,
        ohne den Rechner neu starten zu müssen und ohne die
        Verfügbarkeit Ihres Servers zu beeinträchtigen. Für die Benutzer
        würde ein Austausch einer defekten Festplatte absolut
        transparent erfolgen.
	

	
  \par
  
	 {\bf MD-Device}
	

	
		{\bf MD} steht für Multiple-Disk oder Multiple-Device und bedeutet
        dasselbe wie ein RAID-Device. Um Sie nicht weiter in die Irre zu
        führen, wird im folgenden auf die Bezeichnung MD-Device bewusst
        verzichtet.
	

	
  \par
  
	 {\bf MD-Tools}
	

	
		Die {\bf MD-Tools} sind Hilfsprogramme, die Ihnen die Möglichkeit zur
        Einrichtung oder änderung von RAID-Verbunden zur Verfügung
        stellen, welche mit denen im Standardkernel Version 2.0.x oder
        2.2.x enthaltenen RAID-Treibern erstellt wurden. Sie beinhalten
		als {\bf MD-Tools} bis einschließlich Version 0.4x für ältere
        RAID-Verbunde dieselbe Grundfunktionalität wie die RAID-Tools
        Version 0.9x für die aktuellen RAID-Treiber. Ihre Entwicklung
        ist zwar eingestellt worden, dennoch sind sie auf vielen älteren
        Linux-Distributionen vertreten. Die einzelnen Programme dieses
		{\bf MD-Tools} Paketes zur Verwaltung von älteren RAID-Verbunden der
        Version 0.4x werden im entsprechenden Abschnitten abgehandelt.
	

	
  \par
  
	 {\bf  md0}
	

	
		{\bf /dev/md0} ist ein Stellvertreter für den erste RAID-Verbund in
		Ihrem System.  Das Verzeichnis {\bf /dev/} zeigt an, dass es sich um
        ein Device handelt, md meint ein Multiple-Disk oder
        Multiple-Device und damit einen Verbund aus mehreren Partitionen
        Ihrer Festplatte(n). Das erste Device jeglicher Art ist immer
        entweder mit einer 0 gekennzeichnet und wird weiter aufsteigend
		nummeriert (also {\bf /dev/md0}, {\bf /dev/md1}, usw.) oder beginnt mit
		{\bf /dev/hda} und wird alphabetisch aufsteigend durchgezählt
		({\bf /dev/hdb}, {\bf /dev/hdc}, usw.).
	

	
  \par
  
	 {\bf  Partitionen}
	

	
		{\bf Partitionen} bezeichnen die Einteilung Ihrer Festplatte in
        mehrere Segmente.  RAID-Verbunde können aus mehreren Partitionen
        derselben Festplatte oder aus mehrere Partitionen verschiedener
        Festplatten bestehen.
	

	
  \par
  
	 {\bf Persistent-Superblock}
	

	
		Eine Beschreibung, was ein {\bf Persistent-Superblock} ist, ist im
		Abschnitt 
		Weitere Optionen des neuen RAID-Patches
        nachzulesen.
	

	
  \par
  
	 {\bf RAID-Device}
	

	
		{\bf RAID-Device} ist die Bezeichnung für einen neu erstellten
        RAID-Verbund, der jetzt unter einem eigenen Namen anzusprechen ist.
        Unter Linux entspricht jedes Gerät letztendlich einem Device.
		Die RAID-Devices sind im Linux-Verzeichnisbaum unter {\bf /dev/}
	 	abgelegt und heißen {\bf md0-15}.
	

	
  \par
  
	 {\bf RAID-Partition}
	

	
		{\bf RAID-Partition} bezeichnet eine einzelne Festplattenpartition,
        die für die Verwendung in einem RAID-Verbund genutzt werden
        soll.
	

	
  \par
  
	 {\bf RAID-Patch}
	

	
		Der {\bf RAID-Patch} bezeichnet ein Paket aktueller RAID-Treiber, die
        neuer als die im Standardkernel enthaltenen sind. Sie weisen in
        ihrem Namen eine Zeichenfolge auf, die sich mit der von Ihnen
        verwendeten Kernel-Version decken sollte. Z.B.  braucht der
        Kernel 2.2.10 den RAID-Patch für den 2.2.10er Kernel. Dieser
        RAID-Patch aktualisiert also im Endeffekt die originalen
        RAID-Treiber in Ihrem Kernel-Sourcetree.
	

	
  \par
  
	 {\bf RAID-Tools}
	

	
		Die {\bf RAID-Tools} sind Hilfsprogramme, um den Umgang mit
        RAID-Verbunden in Form von Einrichtung, Wartung und änderung
        überhaupt zu ermöglichen. Sie existieren für die im
        Standardkernel 2.0.x und 2.2.x vorhandenen RAID-Treiber als
		{\bf MD-Tools} in der Version 0.4x, für die aktuellen RAID-Treiber als
		{\bf RAID-Tools} mit der Versionsnummer 0.9x. Der Funktionsumfang der
		{\bf RAID-Tools} Version 0.9x überwiegt gegenüber dem der {\bf MD-Tools} und
        erlaubt einen einfacheren Umgang mit den RAID-Systemen. Sie
		sollten bei der Verwendung der {\bf RAID-Tools} prüfen, ob sie auch
        die passende Version haben.
	

	
  \par
  
	 {\bf RAID-Verbund}
	

	
		{\bf RAID-Verbund}, oder synonym RAID-Array ist die Bezeichnung für
        eine Zusammenfügung von mehrerer Partitionen einzelner
        Festplatten, um sie nachher als eine Einheit ansprechen zu
        können. Ein anschauliches Beispiel wären zwei Partitionen
        jeweils einer Festplatte, welche als eine komplett neue
        Partition und damit als ein neuer RAID-Verbund zur Verfügung
		stehen würden. über den Stellvertreter {\bf /dev/md0} würde dieser
        RAID-Verbund auf Linux Ebene als ein RAID-Device angesprochen
        werden, der als eine einzelne Zuweisung für zwei
        darunterliegende Partitionen fungiert.
	

	
  \par
  
	 {\bf Redundanz}
	

	
		{\bf Redundanz} kommt aus dem Lateinischen, bedeutet überfülle und
        meint auf einen RAID-Verbund bezogen das Vorhandensein
        zusätzlicher Kapazitäten, die keine neuen Daten enthalten, also
        speziell das ein Datenträger ausfallen kann, ohne den
        vorhandenen Datenbestand zu beeinträchtigen.
	

	
  \par
  
	 {\bf Spare-Disk}
	

	
		Informationen hierzu sind im Abschnitt 
		Weitere Optionen des neuen RAID-Patches zu finden.
	
   

   \subsection{Literatur} \label{d35e356}
        

	
		
	
  \par
  
  Obwohl in dieser HOWTO alles nötige Wissen zum Erstellen von
  Software-RAID Verbunden unter Linux vermittelt werden sollte, sei hier
  Trotzdem zum besseren Verständnis und als weiterführende Texte auf folgende
  HOWTOs und entsprechende Fachliteratur verwiesen:
	

	\begin{list}{*}{}
	 
	\item 
BootPrompt HOWTO
	 
	 
	\item 
Kernel HOWTO
	 
	 
	\item 
Root-RAID HOWTO
	 
	 
	\item 
Software-RAID mini-HOWTO
	 
	 
	\item 
The Software RAID HOWTO
	 
	\end{list}

   

   \subsection{Wer hat dieses Dokument zu verantworten?} \label{d35e406}
        

	

	
  \par
  
  Niels Happel hat zwar die Informationen zusammengetragen, getestet und
  neu geschrieben, jedoch beruht der größte Teil des Erfolgs dieser
  HOWTO natürlich auf der Arbeit der Programmierer der
  RAID-Kernelerweiterungen. Mein besonderer Dank gilt denen, die mir
  teilweise mit vielen Anregungen, Tipps, Texten und Unermüdlichkeit
  weitergeholfen haben und allen anderen, die mich dahingehend
  unterstützt haben. Die fleißigsten waren:
	

	\begin{list}{*}{}
	 
	\item 
	  Uwe Beck 
				<ubeck@debis.com>
			
	 
	 
	\item 
	  Robert Dahlem 
				<robert.dahlem@gmx.net>
			
	 
	 
	\item 
	  Ulrich Herbst 
				<ulrich.herbst@debis.com>
			 
	 
	 
	\item 
	  Werner Modenbach 
				<modenbach@alc.de>
			 
	 
	\end{list}
   

   \subsection{Copyright} \label{d35e450}
        

    

	
  \par
  
  Dieses Dokument ist urheberrechtlich geschützt. Das Copyright für
  dieses Dokument liegt bei Niels Happel und
  Marco Budde.
	

	
  \par
  
  Das Dokument darf gemäß der GNU General Public License verbreitet
  werden.  Insbesondere bedeutet dieses, dass der Text sowohl über
  elektronische wie auch physikalische Medien ohne die Zahlung von
  Lizenzgebühren verbreitet werden darf, solange dieser
  Copyright-Hinweis nicht entfernt wird. Eine kommerzielle Verbreitung 
  ist erlaubt und ausdrücklich erwünscht. Bei einer Publikation in Papierform
  ist das Deutsche Linux HOWTO Projekt hierüber zu informieren.
	
   

   \subsection{Info} \label{d35e476}
        

	

	
  \par
  
  Wenn Sie irgendwelche Ideen zu dieser HOWTO haben, positive wie
  negative Kritiken, Korrekturen, oder Wünsche für die nächste Version
  ... eine E-Mail ist wirklich schnell geschrieben.
	

	
	  Niels Happel \linebreak 
	  E-Mail:  
				<happel@resultings.de>
			
	

	
  \par
  
  Die jeweils aktuellste Version finden Sie unter:
	

	\begin{list}{*}{}
	 
	\item 
	  http://www.resultings.de/linux/
	 
	 
	\item 
	  http://www.tu-harburg.de/dlhp/
	 
	\end{list}
   
  \section{Was bedeutet RAID?} \label{d35e521}
        

   
	  
   
  \par
  
  {\bf RAID} steht entweder für {\bf Redundant Array of Independent Disks} oder
  für {\bf Redundant Array of Inexpensive Disks} und bezeichnet eine
  Technik, um mehrere Partitionen miteinander zu verbinden. Die beiden
  verschiedenen Bezeichnungen und teilweise auch die Grundidee von
  RAID-Systemen rühren daher, dass Festplattenkapazität zu besitzen früher
  eine durchaus enorm kostspielige Angelegenheit werden konnte. Kleine
  Festplatten waren recht günstig, große Festplatten aber unangemessen
  teuer. Man suchte also eine Möglichkeit, mehrere Festplatten
  kostengünstig zu einer großen zu verbinden.  Aufgrund der plötzlichen
  sprunghaften Erweiterung der erreichbaren Festplattenkapazitäten und
  der unaufhaltsam sinkenden Preise pro Megabyte Festplattenplatz hat
  sich das Erreichen des damaligen wichtigsten Zieles eines
  RAID-Verbundes von selbst erledigt. Dennoch war man gewillt, den bis dahin
  erzielten Entwicklungsstand eines RAID-Systems auch anderweitig zu
  nutzen.
   
	  
   
  \par
  
  Das Ziel eines RAID-Verbundes ist heutzutage deshalb entweder eine
  Performancesteigerung, eine Steigerung der Datensicherheit oder eine
  Kombination aus beidem. RAID kann vor Festplattenfehlern schützen und
  kann auch die Gesamtleistung im Gegensatz zu einzelnen Festplatten
  steigern.
   
	  
   
  \par
  
  Dieses Dokument ist eine Anleitung zur Benutzung der Linux
  RAID-Kernelerweiterungen und den dazugehörigen Programmen. Die
  RAID-Erweiterungen implementieren den {\bf Linear (Append) Modus}, {\bf RAID-0
  (Striping)}, {\bf RAID-1 (Mirroring)}, {\bf RAID-4 (Striping \& Dedicated Parity)}
  und {\bf RAID-5 (Striping \& Distributed Parity)} als Software-RAID. Daher
  braucht man mit Linux Software RAID keinen speziellen Hardware- oder
  Festplattenkontroller, um viele Vorteile von RAID nutzen zu können.
  Manches lässt sich mit Hilfe der RAID-Kernelerweiterungen sogar
  flexibler lösen, als es mit Hardwarekontrollern möglich wäre.
   

   
  \par
  
  Folgende RAID Typen werden unterschieden:
   

   
  \par
  
	{\bf Linear (Append) Mode}
   

   
  Hierbei werden Partitionen unterschiedlicher Größe über mehrere
  Festplatten hinweg zu einer großen Partition zusammengefügt und linear
  beschrieben. Hier ist kein Geschwindigkeitsvorteil zu erwarten. Fällt
  eine Festplatte aus, so sind alle Daten verloren.
   
	  
   
  \par
  
	{\bf RAID-0 (Striping) Mode}
   
 
   
  Auch hier werden zwei oder mehr Partitionen zu einer großen
  zusammengefügt, allerdings erfolgt hier der Schreibzugriff nicht
  linear (erst die 1.Platte bis sie voll ist, dann die 2.Platte usw.),
  sondern parallel. Dadurch wird ein deutlicher Zuwachs der Datenrate
  insbesondere bei SCSI-Festplatten erzielt, welche sich für die Dauer
  des Schreibvorgangs kurzfristig vom SCSI Bus abmelden können und ihn
  somit für die nächste Festplatte freigeben. Die erzielten
  Geschwindigkeitsvorteile gehen allerdings zu Lasten der CPU Leistung.
  Bei einer Hardware RAID Lösung würde der Kontroller diese Arbeit
  übernehmen. Allerdings steht der Preis eines guten RAID Kontrollern in
  keinem Verhältnis zur verbrauchten CPU Leistung eines
  durchschnittlichen Computers mit Software-RAID.
   
	  
   
  \par
  
	{\bf RAID-1 (Mirroring) Mode}
   
	  
   
  Der {\bf Mirroring Mode} erlaubt es, eine Festplatte auf eine weitere
  gleichgroße Festplatte oder Partition zu duplizieren. Dieses Verfahren
  wird auch als Festplattenspiegelung bezeichnet. Hierdurch wird eine
  erhöhte Ausfallsicherheit erreicht - streckt die eine Festplatte die
  Flügel, funktioniert die andere noch. Allerdings ergibt das auch
  wieder nur Sinn, wenn die gespiegelten Partitionen auf
  unterschiedlichen Festplatten liegen. Die zur Verfügung stehende
  Festplattenkapazität wird durch dieses Verfahren halbiert. Ein
  Geschwindigkeitsgewinn ist hierbei nur beim Lesezugriff zu erwarten,
  jedoch erbringt der aktuelle Stand der RAID-Treiber für Linux nur beim
  nicht sequentiellen Lesen vom {\bf RAID-1} Geschwindigkeitsvorteile.
   
	  
   
  \par
  
	{\bf RAID-4 (Striping \& Dedicated Parity) Mode}
   

	  
   
  {\bf RAID-4} entspricht dem {\bf RAID-0} Verfahren, belegt allerdings eine
  zusätzliche Partition mit Paritätsinformationen, aus denen eine
  defekte Partition wieder hergestellt werden kann. Allerdings kostet
  diese Funktion wieder zusätzliche CPU Leistung.
   
	  
   
  \par
  
	{\bf RAID-5 (Striping \& Distributed parity)Mode}
   

	  
   
  Hier werden die Paritätsinformationen zum Restaurieren einer defekten
  Partition zusammen mit den tatsächlichen Daten über alle Partitionen
  verteilt.  Allerdings erkauft man sich diese erhöhte Sicherheit durch
  einen Kapazitätsverlust. Will man 5x1 GB zu einem {\bf RAID-5}
  zusammenfassen, so bleiben für die eigentlichen Daten noch 4x1 GB
  Platz übrig. Beim Schreibvorgang auf einen {\bf RAID-5} Verbund wird erst
  ein Datenblock geschrieben, dann erfolgt die Berechnung der
  Paritätsinformationen, welche anschließend auch auf den RAID-Verbund
  geschrieben werden. Hierher rührt die schlechtere
  Schreibgeschwindigkeit der Daten. Der Lesevorgang ähnelt allerdings
  dem {\bf RAID-0} Verbund. Das Resultat ist deshalb eine Steigerung der
  Lesegeschwindigkeit im Gegensatz zu einer einzelnen Festplatte.
   
	  
   
  \par
  
	{\bf RAID-10 (Mirroring \& Striping) Mode}
   

	  
   
  {\bf RAID-10} bezeichnet keinen eigenständigen RAID-Modus, sondern ist ein
  Kombination aus {\bf RAID-0} und {\bf RAID-1}. Hierbei werden
  zuerst zwei {\bf RAID-0} Verbunde erstellt, die dann mittels
  {\bf RAID-1} gespiegelt werden. Der Vorteil von einem
  {\bf RAID-10}im Gegensatz zu einem {\bf RAID-5} ergibt sich aus
  der höheren Performance.  Während ein {\bf RAID-5} nur relativ wenig
  Geschwindigkeitsvorteile bietet, ist ein {\bf RAID-10} durch die beiden
  {\bf RAID-0} Verbunde für den Fall besser geeignet, wenn man sowohl
  Redundanz als auch einen hohen Geschwindigkeitsvorteil erzielen will.
  Sogar die anschließend notwendige {\bf RAID-1} Spiegelung bringt noch einen
  Vorteil bei der Lesegeschwindigkeit. Weiterhin fällt hierbei die
  notwendige Berechnung von Paritätsinformationen weg. Erkauft wird dies
  allerdings durch eine sehr viel schlechtere Nutzung des vorhandenen
  Festplattenplatzes, da immer nur 50% der tatsächlichen Kapazität mit
  den eigentlichen Daten beschrieben werden kann.
   
  \section{Voraussetzungen} \label{d35e676}
        

   
   \subsection{Hardware} \label{d35e683}
        

	
		
	
  \par
  
  Zum Erstellen von {\bf RAID-Devices} werden für den Linear, {\bf RAID-0} und
  {\bf RAID-1} Modus mindestens zwei leere Partitionen auf möglichst
  unterschiedlichen Festplatten benötigt. Für {\bf RAID-4} und {\bf RAID-5} sind
  mindestens drei Partitionen nötig und für den {\bf {\bf RAID-10}} Modus vier.
  Dabei ist es egal, ob die Partitionen auf (E)IDE- oder
  SCSI-Festplatten liegen.
	
		
	
  \par
  
  Will man Software-RAID mit (E)IDE-Festplatten benutzen, so empfiehlt
  es sich, jeweils nur eine (E)IDE-Festplatte an einem (E)IDE Kontroller
  zu benutzen. Im Gegensatz zu SCSI beherrschen (E)IDE-Festplatten
  keinen Disconnect - können sich also nicht vorübergehend vom BUS
  abmelden - und können dementsprechend nicht {\bf parallel} angesprochen
  werden. An zwei unterschiedlichen (E)IDE Kontrollern ist dies jedoch
  in Grenzen möglich, wenn auch immer noch nicht so gut wie bei SCSI
  Kontrollern. Besser als an einem Strang ist es aber auf jeden Fall.
	
		
	
  \par
  
  Des weiteren können Sie die überlegung, Hot Plugging mit
 (E)IDE-Festplatten zu benutzen, gleich wieder ad acta legen. Hierbei gibt
  es mehr Probleme als Nutzen. Wie das jedoch mit eigenen (E)IDE RAID
  Kontrollern aussieht, kann ich mangels passender Hardware nicht
  sagen.
	
		
	
  \par
  
  SCSI Kontroller werden entweder als PCI Steckkarte zusätzlich in den
  Computer eingebaut, oder sind in Form eines SCSI Chips bereits auf dem
  Mainboard integriert. Letztere so genannte {\bf On Board Controller}''
  hatten bei älteren Mainboards die unangenehme Eigenart, die Interrupt
  Leitungen für den AGP Steckplatz und den SCSI Chip zusammenzulegen und
  waren so die Ursache für manche Konfigurations-, Stabilitäts- und
  daraus resultierend auch Geschwindigkeitsprobleme. Inzwischen
  funktionieren Mainboards mit integriertem SCSI Chip meist ebenso gut
  wie externe SCSI Kontroller und stehen in ihrer Leistung einander in
  nichts nach. Aktuelle Probleme können lediglich aus der mangelnden
  Treiberunterstützung der verwendeten Distribution resultieren und auf
  diese Weise eine Linux Installation erschweren.
	
		
	
  \par
  
  Das Software-RAID unter Linux bietet zwar die Möglichkeit, einzelne
  Partitionen einer Festplatte in einen RAID-Verbund einzubauen, um
  jedoch einen nennenswerten Geschwindigkeitsvorteil oder entsprechende
  Redundanz zu erzielen, sind generell die RAID-Partitionen auf
  unterschiedliche Festplatten zu verteilen. Sinnvoll wäre es, das erste
  RAID zum Beispiel auf drei Partitionen unterschiedlicher Festplatten
  zu legen; {\bf /dev/md0} bestünde dann
  z.B. aus{\bf /dev/sda1}, {\bf /dev/sdb1} und
  {\bf /dev/sdc1}. Das zweite RAID würde man ebenso
  verteilen: {\bf /dev/md1} wäre
  dann also ein Verbund aus {\bf /dev/sda2},
  {\bf /dev/sdb2} und {\bf /dev/sdc2}. Damit
  hat man zwei RAID-Verbunde ({\bf /dev/md0} und
  {\bf /dev/md1}), die sich - als einzelnes Device
  angesprochen -jeweils über alle drei Festplatten ziehen.
	
		
	
  \par
  
  Da es so gut wie immer unsinnig ist, innerhalb eines RAID-Verbundes
  mehrere Partitionen auf dieselbe Festplatte zu legen (z.B. {\bf /dev/md0}
  bestehend aus {\bf /dev/sdb1},
  {\bf /dev/sdb2} und {\bf /dev/sdc1}), kann oft der
  Begriff RAID-Festplatte mit RAID-Partition synonym verwendet werden.
	
   

   \subsection{Software} \label{d35e776}
        

	
		
	
  \par
  
  Die Prozedur wird hier zum einen mit Hilfe der alten RAID-Tools
  Version 0.4x anhand einer DLD 6.0 und DLD 6.01 beschrieben, zum
  anderen wird ein aktueller Installationsablauf erläutert, der sich auf
  den neuen RAID-Patch und die RAID-Tools Version 0.9x bezieht. Der neue
  Weg hält sich an den Kernel 2.2.10 in Verbindung mit dem passenden
  RAID-Patch und den RAID-Tools und sollte unabhängig von der von Ihnen
  benutzten Linux-Distribution funktionieren. Dieser Weg gilt vom Ablauf
  her auch für alle neueren Kernel der 2.2.xer Reihe. In die Kernel der
  2.4.xer Reihe hat der neue RAID-Patch bereits Einzug in den Standard
  Kernel-Sourcetree erlangt, wodurch diese Kernel nicht mehr
  aktualisiert werden müssen.
	
		
	
  \par
  
  Im allgemeinen ist, vor allem durch die Tatsache, dass die 2.4.xer
  Kernel nicht mehr gepatcht werden müssen, die Benutzung des neuen
  RAID-Patches dringend den alten MD-Tools vorzuziehen. Allein der unter
  Linux sonst unüblich große Versionssprung von 0.4x auf 0.9x zeigt die
  starken einhergegangenen Veränderungen. Allerdings kann auch das
  Verfahren mit Hilfe der MD-Tools für ältere Distributionen von Vorteil
  sein, in denen diese bereits vorkonfiguriert sind oder für eine
  Situation, in der bereits mit den älteren MD-Tools Version 0.4x
  eingerichtete RAID-Verbunde vorhanden sind.
	
		
	
  \par
  
  Generell sei hier schon gesagt, dass die Lösung durch die MD-Tools und
  die mit dem aktuellen RAID-Patch unterschiedliche Wege gehen. Bitte
  beachten Sie das bei der Ihnen vorliegenden Distribution und
  entscheiden Sie sich frühzeitig für eine Variante. Glauben Sie,
  zusammen mit einer guten Anleitung mit {\bf fdisk} und
  {\bf patch} zurecht zu kommen, so wählen Sie ruhig den neuen Weg.
	

	
  \par
  
  Für den aktuellen Abschnitt, welcher die Verwendung der neuen
  RAID-Kernelerweiterungen Version 0.9x beschreibt, werden neben einem
  lauffähigen Linuxsystem zwei Archive benötigt. Zum einen der zur
  Kernelversion passende RAID-Patch und zum anderen die aktuellsten
  RAID-Tools. Beide Archive gibt es im Internet:
	

	
	 
			ftp.//ftp.kernel.org:/pub/linux/daemons/raid/alpha/
	

	
  \par
  
  Aktuelle Distributionen, welche bereits auf einem 2.4.xer Kernel
  basieren, enthalten neben den aktuellen RAID-Treibern meistens auch
  ein RPM-Paket mit den aktuellen RAID-Tools. Im Falle einer RedHat 7.2
  Linux Distribution heißt das entsprechende Paket
  {\bf raidtools-0.90-23.i386.rpm} und ist bei einer Standardinstallation
  bereits eingerichtet. Der gesamte Einrichtungsteil zur
  Kernel-Aktualisierung fällt dann angenehmer Weise weg. Alles andere
  funktioniert allerdings genauso wie mit dem als Beispiel angeführten
  Kernel 2.2.10.
	
		
	
  \par
  
  Generell aktualisiert der RAID-Patch Ihren vorhandenen Linux
  Kernel-Sourcetree wobei die RAID-Tools die zur Verwaltung von RAID-Verbunden
  benötigten Programme zur Verfügung stellen. Die einzelnen Programme
  oder {\bf Kommandos der aktuellen RAID-Tools vom 24.08.1999} werden hier mit
  einer kurzen Erläuterung zu Ihrem Verwendungszweck beschrieben:
	

	
  \par
  
	 {\bf {\bf ckraid}}
	
		
	
        Dieses Programm testete in älteren Software-RAID Versionen, die
        noch mit den MD-Tools Version 0.4x erstellt wurden, die
        Konsistenz eines RAID-Verbundes.  Mit dem aktuellen Kernel-Patch
        übernimmt der Linux-Kernel diese Arbeit und behandelt die RAID-
        Verbunde genauso wie alle anderen Partitionen. Dieses Programm
        ist aus Gründen der Rückwärtskompatibilität noch vorhanden.
	

	
  \par
  
	 {\bf {\bf mkraid}}
	
		
	
        Dies ist das zentrale Verwaltungsprogramm, um RAID-Verbunde
        aller RAID-Modi anhand einer Konfigurationsdatei - meist
        {\bf /etc/raidtab} - zu initialisieren, erstellen oder upzugraden.
	

	
  \par
  
	 {\bf {\bf raid0run}}
	
		
	
		Aus Gründen der Rückwärtskompatibilität kann man mit Hilfe
        dieses Kommandos Linear und {\bf RAID-0} Verbunde starten, welche noch
        mit den alten MD-Tools Version 0.4x erstellt wurden.
	

	
  \par
  
	 {\bf {\bf raidhotadd}}
	
		
	
        Hiermit wird das sogenannte Hot Plugging, in diesem Fall das
        Hinzufügen einer RAID-Partition in einen laufenden RAID-Verbund,
        ermöglicht.
	

	
  \par
  
	 {\bf {\bf raidhotremove}}
	
		
	
        Dies ermöglicht in Analogie zum Kommando raidhotadd das
        Entfernen einer RAID-Partition aus einem aktiven RAID-Verbund.
	

	
  \par
  
	 {\bf {\bf raidsetfaulty}}
	
		
	
        Um raidhotremove z.B. auf ein laufendes RAID-Array mit
        {\bf Spare-Disks} anwenden zu können, muss zuerst die zu entnehmende
        Festplatte als defekt markiert werden. Ist dies nicht von
	    alleine korrekt geschehen, muss das Kommando {\bf raidsetfaulty} dazu
		bemüht werden.  Andernfalls erhält man von {\bf raidhotremove}
        lediglich eine Fehlermeldung.
	

	
  \par
  
	 {\bf {\bf raidstart}}
	
		
	
        Ist ein RAID-Verbund erst einmal initialisiert, kann er mit
        diesem Programm gestartet werden. Durch den neuen RAID-Patch und
		mit den entsprechenden Optionen in der {\bf /etc/raidtab} kann dies
        allerdings der Kernel beim Startup des Rechners bereits
        automatisch erledigen.
	

	
  \par
  
	 {\bf {\bf raidstop}}
	
		
	
        Erlaubt das Deaktivieren eines RAID-Verbundes, um z.B. den
        Rechner sicher herunterfahren zu können. Auch dies lässt sich mit
		den nötigen Einträgen in der {\bf /etc/raidtab} automatisch durch den
        Kernel erledigen.
	

	
  \par
  
	 {\bf {\bf raidtab}}
	
		
	
        Dies ist die zentrale Konfigurationsdatei für die gesamten
        RAID-Verbunde Ihres Systems, die erst neu erstellt werden muss. Die
        Parameter für die einzelnen RAID-Verbunde werden in den
		entsprechenden Kapiteln dieser HOWTO beschrieben. Standardmäßig
		suchen die RAID-Tools nach {\bf /etc/raidtab}. Hier sollte also diese
        Datei auch erst mal mit diesem Namen erstellt werden.
	
   
  \section{Generelles zum Umgang mit Linux} \label{d35e945}
        

   
   \subsection{Möglichkeiten des Bootens von Linux} \label{d35e952}
        

	
		
	
  \par
  
  Linux kann auf vielfältige Weise gebootet werden. Gerade im Umgang mit
  zu testenden RAID-Verbunden und spätestens bei dem Versuch das
  Root-Verzeichnis auf einen RAID-Verbund verlegen zu wollen, stellt sich
  einem die Frage, ob und wie Linux bei einem Misserfolg wieder zum
  sauberen Startup zu bewegen ist. Je nach Zielvorstellung sind dafür
  unterschiedlich trickreiche Wege zu verfolgen. Diese zahlreichen
  Möglichkeiten sollen hier erläutert werden.  Welche nun speziell für
  einen beschriebenen RAID-Verbund nötig ist, wird nochmals in den
  jeweiligen Kapiteln genannt.
	


	\subsubsection{Linux von der Festplatte booten} \label{d35e962}
        

	 
		  
	 
  \par
  
  So normal sich das Booten von der Festplatte auch anhört, so treten
  doch gerade in Verbindung mit RAID-Verbunden als Root-Partition einige
  Probleme zu Tage die es hierbei zu umschiffen gilt. Andererseits ist
  es auch oft gerade die Vielfalt der Bootmöglichkeiten, welche den
  einen oder anderen in Verwirrung stürzt.
	 
		  
	 
  \par
  
	  {\bf DOS Partition mit Loadlin}
	 
		  
	 
  \par
  
        Ein relativ sicherer und einfacher Weg zugleich Linux zu Booten
        und schnell die Bootkonfiguration zwischen einem RAID-Verbund
        und einer normalen ext2-Partition zu wechseln, stellt das Booten
        per loadlin von einer kleinen DOS-Partition dar. Außer den DOS
        Systemdateien, einem Linux-Kernel mit RAID-Unterstützung,
        loadlin und einer Loadlin-Konfigurationsdatei wird nur noch ein
        DOS Editor benötigt, um simpel die Root-Partition in der
        Loadlin-Konfigurationsdatei zu ändern.
	 

	 
  \par
  
	  {\bf Extra-Partition für LILO mit Root-RAID}
	 
		  
	 
  \par
  
		{\bf Root-RAID} in Verbindung mit LILO braucht noch etwas mehr
		Fürsorge. Zuerst müssen Sie wissen, ob Ihr {\bf LILO} im {\bf MBR} Ihrer
        Festplatte oder im Superblock Ihrer Root-Partition installiert
        ist. Ist Linux z.B. das einzige Betriebsystem auf Ihrem Rechner,
		ist {\bf LILO} vermutlich im {\bf MBR} installiert, booten Sie jedoch
		mittels eines fremden Bootmanagers ({\bf OS/2 Bootmanager}, {\bf XFDisk},
		oder ähnliche) wird {\bf LILO} im Superblock Ihrer Root-Partition
		liegen. Noch einfacher kann das Ihre bisherige {\bf /etc/lilo.conf}
		herausstellen: Der Parameter {\bf boot=} gibt an, wo sich {\bf LILO}
        aufhält. Steht dort etwa
	 

	 \begin{tabular}{|l|}
                  \hline
                  \begin{tt} 
        
	  /etc/lilo.conf
	  \end{tt} \\ 
                  \hline
                  \begin{minipage}{130mm} 
                  \begin{scriptsize} 
                  \begin{verbatim} 
        
	   
       boot = /dev/sda
	    
	  \end{verbatim} 
                  \end{scriptsize} 
                  \end{minipage} \\
                  \hline
                  \end{tabular}


	 
  \par
  
	 so residiert Ihr{\bf  LILO} im {\bf MBR} der ersten SCSI-Festplatte, bei der
     Angabe
	 

	 \begin{tabular}{|l|}
                  \hline
                  \begin{tt} 
        
	  /etc/lilo.conf
	  \end{tt} \\ 
                  \hline
                  \begin{minipage}{130mm} 
                  \begin{scriptsize} 
                  \begin{verbatim} 
        
	   
       boot = /dev/sda2
	    
	  \end{verbatim} 
                  \end{scriptsize} 
                  \end{minipage} \\
                  \hline
                  \end{tabular}

	 
  \par
  
     handelt es sich um den Superblock Ihrer zweiten primären
     Partition.
	 
		  
	 
  \par
  
	 {\bf LILO} braucht zum Booten die Information, wo der Linux-Kernel auf
	 der Festplatte liegt. Da {\bf LILO} das aber zu einer Zeit erfahren muss,
     zu der noch gar keine Partition gemountet ist, behilft sich LILO,
     indem er Plattengeometriedaten in den {\bf MBR} oder Superblock schreibt,
     die die genaue Anfangslage des Linux-Kernel beschreiben. Die
	 meisten Distributionen legen Ihre Kernel unter {\bf /boot} ab. Diesen
     Umstand kann man nun dahingehend ausnutzen, dass man sich ein kleine
     Extra-Partition (etwa 10-20 MB) erstellt, welche unterhalb der 1024
	 Zylindergrenze liegt. Diese formatiert man mit {\bf ext2} und {\bf mountet} sie
	 als {\bf /boot} in seinen Root-RAID-Device-Verzeichnisbaum, kopiert den
	 gesamten Inhalt von dem originalen {\bf /boot} Verzeichnis in das neue
	 {\bf /boot} Verzeichnis und ändert die Dateien {\bf /etc/lilo.conf} und
	 {\bf /etc/fstab} dementsprechend:
	 

	 \begin{tabular}{|l|}
                  \hline
                  \begin{tt} 
        
	  /etc/lilo.conf
	  \end{tt} \\ 
                  \hline
                  \begin{minipage}{130mm} 
                  \begin{scriptsize} 
                  \begin{verbatim} 
        
	   
          boot = boot-Partition-ohne-RAID (/dev/sda2),
                 oder: MBR-der-Festplatte (/dev/sda)
          image = /boot/vmlinuz-2.2.10
          root = /dev/md0
          read only
	    
	  \end{verbatim} 
                  \end{scriptsize} 
                  \end{minipage} \\
                  \hline
                  \end{tabular}

	 \begin{tabular}{|l|}
                  \hline
                  \begin{tt} 
        
      /etc/fstab
	  \end{tt} \\ 
                  \hline
                  \begin{minipage}{130mm} 
                  \begin{scriptsize} 
                  \begin{verbatim} 
        
	   
        /dev/md0 / ext2 exec,dev,suid,rw 1 1
        /dev/sda2 /boot ext2 exec,dev,suid,rw 1 1
	    
	  \end{verbatim} 
                  \end{scriptsize} 
                  \end{minipage} \\
                  \hline
                  \end{tabular}

		  
	 
  \par
  
     Das Ausführen von lilo sollte dann bescheinigen, dass der Kernel
	 {\bf vmlinuz-2.2.10} korrekt initialisiert wurde.
	 
		  
	 
  \par
  
	 Haben Sie nun {\bf LILO} im Superblock Ihrer neuen {\bf /boot} Partition
     angelegt, so müssen Sie dies noch Ihrem Bootmanager bekannt geben
     und ihn eben diese booten lassen. Dem Beispiel zufolge wäre das die
	 Partition {\bf /dev/sda2}. Liegt Ihr {\bf LILO}
     im {\bf MBR} der Festplatte, so
     brauchen Sie nichts weiter tun, als neu zu booten.
	 
		  
	 
  \par
  
     Dieses Verfahren bootet zwar Linux mit einem Root-RAID, ist aber im
     Fehlerfall der ersten Festplatte nicht redundant!
	 

	 
  \par
  
	  {\bf Extra-Partition für {\bf LILO} mit
		redundantem  Root-RAID}
	 
		  
	 
  \par
  
        Die hier beschriebene Vorgehensweise bezieht sich auf die
        folgende Konstellation: Zwei (E)IDE-Platten sind beide als
        Master gejumpert und hängen an verschiedenen (E)IDE Kontrollern:
		{\bf /dev/hda} und {\bf /dev/hdc}.
	 
		  
	 
  \par
  
        Die Partitionstabelle ist für beide Festplatten gleich:
	 

	 \begin{tabular}{|l|}
                  \hline
                  \begin{tt} 
        
		Partitionstabelle
	  \end{tt} \\ 
                  \hline
                  \begin{minipage}{130mm} 
                  \begin{scriptsize} 
                  \begin{verbatim} 
        
	   
          /dev/hd?1   primary   Linux native (83)      ca. 10 MB (fuer /boot)
          /dev/hd?2   primary   Linux swap (82)        128 MB (fuer swap)
          /dev/hd?3   primary   Linux raid auto (fd)   den Rest (fuer /dev/md0)
	    
	  \end{verbatim} 
                  \end{scriptsize} 
                  \end{minipage} \\
                  \hline
                  \end{tabular}




	 
  \par
  
	  Wenn im folgenden von {\bf Backup-Fall} gesprochen wird, dann ist damit
     der Fall gemeint, dass die erste Festplatte ausgefallen ist und
     irgendwie von der verbliebenen zweiten Festplatte gebootet werden
     soll.
	 

	 
  \par
  
	 Wir gehen von folgender {\bf /etc/lilo.conf} für die erste Festplatte
     aus:
	 

	 \begin{tabular}{|l|}
                  \hline
                  \begin{tt} 
        
			  /etc/lilo.conf
	  \end{tt} \\ 
                  \hline
                  \begin{minipage}{130mm} 
                  \begin{scriptsize} 
                  \begin{verbatim} 
        
	   
          boot=/dev/hda

          image=/boot/vmlinuz
                  root=/dev/md0
                  label=linux
	   
	  \end{verbatim} 
                  \end{scriptsize} 
                  \end{minipage} \\
                  \hline
                  \end{tabular}
		  
	 
  \par
  
     Nun muss auch auf der zweiten Platte eine Boot-Partition erzeugt
     werden. Dazu erstellt man auf der zweiten Festplatte eine
     identische Partition und kopiert mittels einer der im Abschnitt
	 {\bf Möglichkeiten zum Kopieren von Daten} beschriebenen Methoden das
     originale Boot-Verzeichnis auf die zweite Festplatte.
	 
		  
	 
  \par
  
	 Jetzt kopiert man die {\bf /etc/lilo.conf} der zweiten Festplatte nach
	 {\bf /etc/lilo.conf.backup} und passt sie an die neuen Bedingungen an. Die
	 endgültige {\bf /etc/lilo.conf.backup} sollte dann
	 wie folgt aussehen:
	 

	 \begin{tabular}{|l|}
                  \hline
                  \begin{tt} 
        
		 /etc/lilo.conf.backup
	  \end{tt} \\ 
                  \hline
                  \begin{minipage}{130mm} 
                  \begin{scriptsize} 
                  \begin{verbatim} 
        
	   
          boot=/dev/hdc
          disk=/dev/hdc bios=0x80
          map=/boot2/map
          install=/boot2/boot.b

          image=/boot2/vmlinuz
                  root=/dev/md0
                  label=linux
	   
	  \end{verbatim} 
                  \end{scriptsize} 
                  \end{minipage} \\
                  \hline
                  \end{tabular}



	 
  \par
  
	 Der Parameter {\bf disk=/dev/hdc}
	 {\bf bios=80} ist nötig,
	 um {\bf LILO}
     vorzuspiegeln, dass die Festplatte /dev/hdc mit 0x80 eingeloggt ist.
     Der Grund dafür ist, dass das BIOS normalerweise die ersten beiden
     Festplatten mit den Adressen 0x80 und 0x81 einloggt. Wir
	 konfigurieren die Platte 0x81 ({\bf /dev/hdc}).  Im Backup-Fall wird die
     Festplatte aber als 0x80 eingeloggt, da die ursprüngliche erste
     Festplatte ja defekt ist.
	 
		  
	 
  \par
  
     Ein
	 
		  
	 
	   \begin{tt} \begin{scriptsize} root@linux / \# 
      lilo -C /etc/lilo.conf.backup
	   \end{scriptsize} \end{tt} \linebreak 
	 
		  
	 
  \par
  
     schreibt die Bootinformationen in den {\bf MBR}. Es erscheint eine
	 Warnung {\bf {\bf /dev/hdc} is not on the first
	 disk}, aber das soll uns nicht
     stören, denn im Backup-Fall wird diese Festplatte ja zur ersten
     Festplatte im System. Dafür muss sie natürlich noch an den ersten
     (E)IDE Kanal gehängt werden.
	 

	 
  \par
  
     In komplexeren Fällen ist unter Umständen noch die Optionen
	 {\bf ignore-table} hilfreich.
	 
	 
	 
  \par
  
     Zu bedenken ist noch, dass man nach dem Kompilieren eines neuen
     Kernels das Boot-Verzeichnis der zweiten Festplatte anpasst und {\bf LILO}
     auch mit dem entsprechenden Befehl
	 
		  
	 
	   \begin{tt} \begin{scriptsize} root@linux / \# 
       lilo -C /etc/lilo.conf.backup
	   \end{scriptsize} \end{tt} \linebreak 
	 
		  
	 
  \par
  
     für die zweite Festplatte ausführt.
	 
 
	 
  \par
  
       {\bf LILO} im {\bf MBR}
	 
		  
	 
  \par
  
        Benutzen Sie Linux als einziges Betriebsystem, bietet es sich
        an, {\bf LILO} direkt im {\bf MBR}
        Ihrer Festplatte unterzubringen.
	 

	 
  \par
  
       {\bf LILO} im Superblock mit externem Bootmanager
	 
		  
	 
  \par
  
        Um auch Betriebsysteme neben Linux zu starten, mit denen {\bf LILO}
        nicht zurecht kommt, bietet es sich an, einen externen
        Bootmanager wie etwa den OS/2-Bootmanager oder XFDisk zu
        benutzen. Hierbei wird {\bf LILO} im Superblock Ihrer Root-Partition
        untergebracht und der externe Bootmanager im
        {\bf MBR} der Festplatte.
	 

	 
  \par
  
      {\bf LILO} direkt vom RAID im {\bf MBR}
	 
		  
	 
  \par
  
        Das grundsätzliche {\bf LILO} Problem, die Geometriedaten des Kernels
        wissen zu müssen und somit nicht direkt von einem RAID-Device
        booten zu können, kann man umgehen, indem man {\bf LILO} in der
  	    {\bf /etc/lilo.conf} auf dem Root-RAID diese Parameter schon mit
        übergibt. Prinzipiell funktioniert dies für alle RAID-Modi.
        Wirklich Sinn macht das aber nur für RAID-Modi wie {\bf RAID-1},
        {\bf RAID-4} und {\bf RAID-5}, welche auch irgendeine Form von Redundanz
        versprechen.  Im Gegenzug ist das direkte Booten von einem
        {\bf RAID-0}-Verbund schon deshalb einfacher zu realisieren, weil man
        sich beim Defekt einer Festplatte keine Gedanken mehr um die
        Datenrettung oder das Booten von der zweiten Festplatte zu
        machen braucht: Diese Daten sind dann ohnehin verloren.
	 

	 
  \par
  
        Wie funktioniert nun das direkte Booten von einem RAID-Verbund?
	    Hier ein Beispiel der Datei {\bf /etc/lilo.conf} für den wohl
        sinnvollsten RAID-Modus für einen Root-RAID Verbund: {\bf RAID-1} auf
        SCSI-Festplatten:
	 


	 \begin{tabular}{|l|}
                  \hline
                  \begin{tt} 
        
		/etc/lilo.conf
	  \end{tt} \\ 
                  \hline
                  \begin{minipage}{130mm} 
                  \begin{scriptsize} 
                  \begin{verbatim} 
        
	   
          disk=/dev/md15
                        bios=0x80
                        sectors=63
                        heads=255
                        cylinders=1106
                        partition=/dev/md0
                        start=1028160
          boot=/dev/sda
          image=/boot/vmlinux-2.2.10
                        label=autoraid
                        root=/dev/md0
                        read-only
	   
	  \end{verbatim} 
                  \end{scriptsize} 
                  \end{minipage} \\
                  \hline
                  \end{tabular}



	 
  \par
  
	 Der Eintrag {\bf disk=/dev/md15} mit seinen Parametern übergibt {\bf LILO} die
	 benötigten Geometriedaten einer fiktiven Festplatte {\bf /dev/md15}.
	 Hierbei ist es einerlei, ob dieses Device{\bf  /dev/md15} oder {\bf /dev/md27}
	 heißt. Wichtig ist nur, dass es per {\bf mknod} mit der Major-Number eines
     RAID-Devices erstellt wurde. Sind Sie sich nicht sicher, ob dies
	 der Fall ist, lassen Sie sich einfach unter {\bf /dev/} alle Devices, die
	 mit md anfangen, zeigen. Standardmäßig werden {\bf /dev/md0} bis
	 {\bf /dev/md15} erstellt. Die Parameter der Sektoren, Köpfe und Zylinder
	 unterhalb von {\bf disk=/dev/md15} geben die Geometriedaten der ersten
     Festplatte Ihres Systems an, welche man mittels
	 

	 
	   \begin{tt} \begin{scriptsize} root@linux / \# 
          fdisk -lu /dev/sda
	   \end{scriptsize} \end{tt} \linebreak 
	 

	 
  \par
  
     erhält. Die Angabe der Partition soll Ihr Root-RAID Verbund sein.
     Der letzte Parameter start=1028160 bezeichnet den Sektor, in dem
     Ihre RAID-Partition auf der ersten Festplatte beginnt. Auch diese
     Information erhalten Sie durch:
	 

	 
	   \begin{tt} \begin{scriptsize} root@linux / \# 
          fdisk -lu /dev/sda
	   \end{scriptsize} \end{tt} \linebreak 
	 

	 
  \par
  
     Des weiteren muss als Sitz des {\bf LILO} der {\bf MBR} Ihrer ersten Festplatte
	 angegeben werden. Hier geschehen durch den Eintrag: {\bf boot=/dev/sda}.
     Der letzte Bereich beschreibt ganz normal die Lokalisation Ihres
     Kernels mit dem Verweis, als Root-Partition Ihren RAID-Verbund zu
     nutzen.
	 
		  
	 
  \par
  
     Haben Sie den RAID-Verbund nach der weiter unten beschriebenen
     Methode erstellt und haben sowohl die Option persistent-superblock
     aktiviert als auch den Partitionstyp der Festplatten auf 0xfd
     geändert, fehlen dem Master-Boot-Record der SCSI-Festplatten nur
     noch die Boot-Informationen.  Mit dem Aufruf
	 

	 
	   \begin{tt} \begin{scriptsize} root@linux / \# 
     lilo -b /dev/sda
	   \end{scriptsize} \end{tt} \linebreak 
	 

	 
  \par
  
	 werden die Informationen der Datei {\bf /etc/lilo.conf} in den {\bf MBR} der
     ersten SCSI-Festplatte geschrieben. Anschließend muss man den Befehl
     ein zweites Mal aufrufen. Diesmal allerdings für den {\bf MBR} der
     zweiten Festplatte des {\bf RAID-1} Verbundes:
	 

	 
	   \begin{tt} \begin{scriptsize} root@linux / \# 
          lilo -b /dev/sdb
	   \end{scriptsize} \end{tt} \linebreak 
	 

	 
  \par
  
     Achtung: Hierbei wird davon ausgegangen, dass die im RAID-Verbund
     laufenden Festplatten identisch sind und damit auch die gleichen
     Geometriedaten besitzen!  Ein {\bf RAID-0} so zu booten, funktioniert
     auch mit unterschiedlichen Festplatten, da hierbei nur die erste
     Festplatte berücksichtigt wird. In diesem Beispiel eines {\bf RAID-1}
     liegen jedoch auf allen RAID-Partitionen die gleichen Daten und
	 somit auch die gleiche {\bf /etc/lilo.conf}. Haben die Festplatten
     unterschiedliche Geometriedaten und fällt im {\bf RAID-1} die erste
     Festplatte aus, so stehen im {\bf MBR} der zweiten Festplatte Daten,
     welche nicht mit denen der zweiten Festplatte übereinstimmen. Ein
     Workaround könnte sein, zwei {\bf LILO} Konfigurationsdateien zu pflegen
     und mit unterschiedlichen Geometriedaten in den {\bf MBR} der jeweiligen
     Festplatten zu schreiben. Da mir aber nur mehrere Exemplare
     dergleichen Festplatte zum Testen von RAID-Verbunden vorliegen, ist
     dies ein ungesicherter Tipp.
	 

		  
	 
  \par
  
     Der Erfolg ist ein {\bf RAID-1} Verbund, den man auch nach einem erneuten
     Kernelkompilierungslauf durch zweimaliges Aufrufen des {\bf LILO} mit den
     Parametern für die unterschiedlichen {\bf MBRs} von beiden beteiligten
     RAID-Festplatten booten kann.
	 

	 
  \par
  
     {\bf LILO} direkt vom {\bf RAID-1} im
     {\bf MBR} oder Superblock
	 

	 
  \par
  
        Will man die Root-Partition direkt von einem {\bf RAID-1} Verbund
        booten, bietet sich einem noch die weitaus eleganteste
        Möglichkeit: Die {\bf LILO}-Version des aktuellen RPM-Archives
	    {\bf lilo-0.21-10.i386.rpm} kann bereits von sich aus mit {\bf RAID-1}
        Verbunden umgehen. Andere RAID-Modi werden allerdings nicht
        unterstützt.
	 
	
   

   \subsection{Möglichkeiten zum Kopieren von Daten} \label{d35e1510}
        

	
	
	
  \par
  
  Zu den ersten Methoden muss vorab gesagt werden, dass je nach
  Distribution bei der Verwendung der Root-Partition als RAID einige
  Verzeichnisse entweder gar nicht kopiert werden dürfen, oder aber nur
  als leere Verzeichnisse erstellt werden müssen. Im einzelnen sollte
  man auf folgende achten:
	

	
  \par
  
	 {\bf {\bf proc}}
	

	
        Dieses Verzeichnis bitte nur als leeres Verzeichnis auf dem
	    RAID-Device erstellen, da unter {\bf /proc} ein Pseudo-Dateisystem
        erstellt wird, welches im Prinzip keinen Platz
	    beansprucht - bitte nicht versuchen, {\bf /proc} auf eine andere
        Partition zu kopieren.
	
	
	
  \par
  
     {\bf {\bf mnt}}
	
	
	
        Dieses Verzeichnis oder das, wo Ihr RAID-Device gemountet ist,
        darf nicht kopiert werden, sonst würden die bereits vorhandenen
        Daten nochmals überschrieben werden.
	

	
  \par
  
     {\bf {\bf cdrom}}
	

	
        Die Daten der CDs selbst möchte man natürlich nicht kopieren. Es
        sollten daher nur die passenden Mountpoints erstellt werden.
	

	
  \par
  
     {\bf {\bf dos}}
	

	
        Auch die DOS-Partition, falls eine vorhanden ist, möchte man
        nicht mit rüberkopieren. Es sollte also nur ein passender
        Mountpoint erstellt werden.
	

	
  \par
  
     {\bf {\bf floppy}}
	

	
        Das gleiche gilt auch für eine gemountete Diskette.
	

	
  \par
  
  Als generelle Kopiermethoden bieten sich folgende Möglichkeiten
  an:
	


	
  \par
  
	 {\bf {\bf cp}}
	

	
	Der normale Copy-Befehl eignet sich für das Kopieren
    Naheliegenderweise sehr gut und funktioniert problemlos.
	

	
  \par
  
     {\bf {\bf dd}}
	

	
	Auch eine saubere Möglichkeit, Verzeichnisse zu kopieren, bietet
	das Programm {\bf dd}.
	

	
  \par
  
     {\bf {\bf dump und restore}}
	

	
	 Mittels {\bf dump} und {\bf restore} lässt sich ohne viel Aufwand z.B. das
     ganze Root-Verzeichnis kopieren oder auf Band-Streamer sichern,
	 wobei die unnötigen Verzeichnisse wie {\bf /proc} oder {\bf /mnt} fast
	 {\bf automatisch} ausgelassen werden. Zu diesem Zweck wechselt man
     in das Verzeichnis, in dem der neue RAID-Verbund gemountet ist
     und führt die folgenden Befehle aus, um z.B.  das Verzeichnis
	 {\bf /usr} zu kopieren:
	

	
	  \begin{tt} \begin{scriptsize} root@linux \~{}/ \# 
	 	  dump 0Bf 1000000000 - /usr | restore rf -
	  \end{scriptsize} \end{tt} \linebreak 
	  \begin{tt} \begin{scriptsize} root@linux \~{}/ \# 
          rm restoresymtable
	  \end{scriptsize} \end{tt} \linebreak 
	
	 
	
  \par
  
     {\bf {\bf Midnight Commander}}
	

	
	    Zwar liegt der {\bf Midnight Commander} zum Kopieren von
        Verzeichnissen auf ein neues RAID-Array sehr nahe, jedoch haben
        einige ältere Versionen die bisweilen sehr unangenehme Eigenart,
        symbolische Links beim Kopieren zu stabilisieren.  In den
        aktuellen Versionen sollte dieses Fehlverhalten jedoch behoben
        sein.
	

	
  \par
  
     {\bf {\bf tar}}
	

	
        Ebenso zuverlässig und mit einigen Extraoptionen kann man tar
        benutzen, um ganze Verzeichnisstrukturen zu kopieren.
	
   

   \subsection{Möglichkeiten zum Verändern ganzer Partitionen} \label{d35e1663}
        

	

	
  \par
  
	 {\bf {\bf ext2resize}}
	

	
	    Eine native Möglichkeit unter Linux, {\bf ext2}-Partitionen zu
        verändern, die noch dazu der GPL unterliegt, bietet das Programm
	 {\bf ext2resize}, das von folgender Adresse bezogen
	 werden kann: \linebreak  \linebreak 

     
        http://ext2resize.sourceforge.net/
	  \linebreak  \linebreak 
	
     Da es aber offiziell noch Beta-Status hat, ist beim Umgang mit
     diesem Programm Vorsicht geboten.
	

	
  \par
  
     {\bf {\bf Partition Magic}}
	

	
	    Seit der Version 4.0 kann {\bf Partition Magic} auch mit Linux
   	    {\bf ext2}-Partitionen umgehen. Eine Version, die unter Linux selbst
	    lauffähig ist, gibt es allerdings nicht. Das Produkt {\bf Partition
	    Magic} stammt von der Firma PowerQuest.
	

	
  \par
  
     {\bf {\bf resize2fs}}
	

	
        Dieses Programm ist eine Auskopplung aus Partition Magic, ist
        unter Linux lauffähig und ermöglicht das Vergrößern und
        Verkleinern von ext2-Partitionen.  Sollten Sie mal über ein
        gleichnamiges tar-Archiv stolpern, stellt sich hier jedoch noch
        die Lizenzfrage. Registrierte Benutzer können sich das RPM-Paket
	 von \linebreak  \linebreak 

	 http://www.powerquest.com/ \linebreak  \linebreak 


     herunterladen. Innerhalb der Firma überlegt man aber, diesen Teil
     eventuell frei zu geben.
	
   
  \section{RAID-Verbunde mit den RAID-Tools Version 0.4x erstellen} \label{d35e1739}
        

   
	  
   
  \par
  
  Dieses Kapitel bezieht sich auf die Erstellung von RAID-Verbunden
  unter Zuhilfenahme der alten MD-Tools Version 0.4x. Die aktuellen
  RAID-Tools Version 0.9x und der RAID-Patch werden in allen
  Einzelheiten im Abschnitt RAID-Verbunde mit den RAID-Tools Version
  0.9x erstellen beschrieben.
   

	  \subsection{Vorbereiten des Kernels} \label{d35e1752}
        

		
		
	
  \par
  
  Der Standardkernel Ihrer Distribution besitzt prinzipiell schon gleich
  nach der Installation alle Optionen, um RAID-Devices zu erstellen.
	

	
  \par
  
  Des weiteren ist noch das Paket {\bf md-0.35-2.i386.rpm} nötig, welches zum
  Beispiel für die DLD auf der ersten DLD CD unter delix/RPMS/i386/ zu
  finden ist. Auch wenn dieses Paket bei Ihrer Distribution eine andere
  Versionsnummer haben sollte, können Sie es ruhig benutzen.
	

	
  \par
  
  Der Vollständigkeit halber wird hier trotzdem auf die nötigen
  Kernel-Parameter hingewiesen:
	

	
  \par
  
 Nach der Anmeldung als {\bf root}, dem Wechsel in das Verzeichnis
 {\bf /usr/src/linux} und dem Aufruf von {\bf make menuconfig} sollte sich Ihnen
 das Menü mit den unterschiedlichen Kerneloptionen präsentieren. Bitte
 benutzen Sie nicht {\bf make config} oder {\bf make xconfig}, da sich diese
 Beschreibung ausschließlich auf {\bf make menuconfig} stützt.
	
	
	
  \par
  
	 {\bf Kernel 2.0.36}
	
	
	
  \par
  
  Unter dem Verweis {\bf Floppy, IDE, and other block devices ---\verb+>+} werden
  je nach RAID Wunsch folgende Optionen benötigt:
	

	\begin{tabular}{|l|}
                  \hline
                  \begin{tt} 
        
	Floppy, IDE, and other block devices ---\verb+>+
	 \end{tt} \\ 
                  \hline
                  \begin{minipage}{130mm} 
                  \begin{scriptsize} 
                  \begin{verbatim} 
        
	  
       [*] Multiple devices driver support
       <*> Linear (append) mode
       <*> RAID-0 (striping) mode
       <*> RAID-1 (mirroring) mode
       <*> RAID-4/RAID-5 mode
	  
	 \end{verbatim} 
                  \end{scriptsize} 
                  \end{minipage} \\
                  \hline
                  \end{tabular}

	
  \par
  
	 {\bf Kernel 2.2.x bis einschließlich 2.2.10}
	
	
  \par
  
	 Hier stehen die RAID Optionen unter {\bf Block devices ---\verb+>+}:
	

	\begin{tabular}{|l|}
                  \hline
                  \begin{tt} 
        
	Block devices ---\verb+>+
	 \end{tt} \\ 
                  \hline
                  \begin{minipage}{130mm} 
                  \begin{scriptsize} 
                  \begin{verbatim} 
        
	  
       [*] Multiple devices driver support
       <*> Linear (append) mode (NEW)
       <*> RAID-0 (striping) mode (NEW)
       <*> RAID-1 (mirroring) mode (NEW)
       <*> RAID-4/RAID-5 mode (NEW)
       [*] Boot support (linear, striped) (NEW)
	  
	 \end{verbatim} 
                  \end{scriptsize} 
                  \end{minipage} \\
                  \hline
                  \end{tabular}

	
  \par
  
  Zusätzlich wird bei den 2.2.xer Kerneln bei der Auswahl des Linear
  oder {\bf RAID-0} Modes der Boot Support angeboten. Von
  {\bf RAID-1},{\bf 4} und {\bf 5}
  Devices kann mit den hier gegebenen Möglichkeiten nicht gebootet
  werden. Das funktioniert erst mit dem neuen RAID-Patch; siehe
  Abschnitt RAID-Verbunde mit den RAID-Tools Version 0.9x
  erstellen.
	

	
  \par
  
  Nach Auswahl der nötigen Parameter erfolgt das {\bf Backen} des Kernels
  mittels:
	

	
	  \begin{tt} \begin{scriptsize} root@linux \~{}/ \# 
	make dep \&\& make clean \&\& make bzImage
	  \end{scriptsize} \end{tt} \linebreak 
	
	

	
  \par
  
  Das Kompilieren und Installieren der Module nicht vergessen:
	

	
	  \begin{tt} \begin{scriptsize} root@linux \~{}/ \# 
       make modules \&\& make modules\_install
	  \end{scriptsize} \end{tt} \linebreak 
	
	
	
  \par
  
  Den Kernel zusammen mit der {\bf System.map} umkopieren und zu guter Letzt
  den Aufruf von {\bf LILO} nicht vergessen. Die Benutzer eines
  SCSI-Kontrollers müssen noch die initiale RAM-Disk mittels
	
	
	  \begin{tt} \begin{scriptsize} root@linux \~{}/ \# 
       mkinitrd /boot/initrd Kernelversion
	  \end{scriptsize} \end{tt} \linebreak 
	
	
	
  \par
  
  erstellen, falls der SCSI-Kontroller als Modul eingeladen wird.
	
	
	
  \par
  
  Nach einem Neustart hat man nun alle Voraussetzungen erfüllt, um ein
  RAID-Device zu erstellen.
	
   

   \subsection{Erstellen eines RAID-0 Devices} \label{d35e1895}
        

	

	
  \par
  
  Die RAID-Arrays oder RAID-Verbunde werden nachher über {\bf /dev/md*}
  angesprochen. Bei der DLD 6.0 sind diese Devices bereits eingerichtet.
  Schauen Sie zur Sicherheit unter {\bf /dev/} nach.
	

	
  \par
  
  Jetzt wird das Erstellen eines RAID-Verbundes anhand eines {\bf RAID-0}
  Devices erklärt.  Andere RAID-Modi lassen sich analog erstellen.
  Zuerst sollte man sich darüber im klaren sein, welche und wie viele
  Partitionen man zusammenfassen möchte.  Diese Partitionen sollten leer
  sein; eine Einbindung von Partitionen, die Daten enthalten, welche
  nachher wieder zugänglich sein sollen, ist bisher meines Erachtens
  nicht möglich. Man sollte sich die Devices und ihre Reihenfolge nicht
  nur gut merken, sondern besser aufschreiben.
	
	
	
  \par
  
  Als Beispiel werden die zwei SCSI-Festplatten {\bf /dev/sda} und {\bf /dev/sdb}
  benutzt. Bei (E)IDE würden sie dann {\bf /dev/hda}, {\bf /dev/hdb} heißen. Auf
  diesen Festplatten liegen nun zwei leere Partitionen im erweiterten
  Bereich {\bf /dev/sda6} und
  {\bf /dev/sdb6}, welche zu einem {\bf RAID-0} Device
  zusammengefasst werden sollen.
	

	
	  \begin{tt} \begin{scriptsize} root@linux \~{}/ \# 
       mdadd /dev/md0 /dev/sda6 /dev/sdb6
	  \end{scriptsize} \end{tt} \linebreak 
	

	
  \par
  
  Sind diese Partitionen nicht gleich groß, so ist der zu erwartende
  Geschwindigkeitsvorteil nur auf dem Bereich gegeben, der von beiden
  Partitionen abgedeckt wird. Zum Beispiel sind eine 200 MB große und
  eine 300 MB große Partition als {\bf RAID-0} Device nur über die ersten 400
  MB doppelt so schnell. Die letzten 100 MB der zweiten Festplatte
  werden ja nun nur noch mit einfacher Geschwindigkeit beschrieben.
	

	
  \par
  
  Wieder anders sieht das bei der Einrichtung eines {\bf RAID-1} Verbundes
  aus. Hierbei wird der überschüssige Platz von der größeren Partition
  nicht genutzt und liegt damit brach auf der Festplatte.
	

	
  \par
  
  Allgemein heißt das also, dass man für RAID-Devices jeder Art möglichst
  gleich große Partitionen benutzen sollte. Die Ausnahme bildet der
  Linear Modus, bei dem es wirklich egal ist, wie groß die einzelnen
  Partitionen sind.
	

	
  \par
  
  Nun muss Linux noch erfahren, als was für ein RAID-Device es dieses
  {\bf /dev/md0} ansprechen soll:
	

	
	  \begin{tt} \begin{scriptsize} root@linux \~{}/ \# 
	mdrun -p0 /dev/md0
	  \end{scriptsize} \end{tt} \linebreak 
	

	
  \par
  
  Hierbei steht{\bf  -p0} für {\bf RAID-0}. Anschließend muss auf diesem neuen
  RAID-Device ein Dateisystem erstellt werden:
	

	
	  \begin{tt} \begin{scriptsize} root@linux \~{}/ \# 
	mke2fs /dev/md0
	  \end{scriptsize} \end{tt} \linebreak 
	

	
  \par
  
  Testweise kann man das RAID-Device nun nach {\bf /mnt} mounten und ein paar
  kleine Kopieraktionen drüberlaufen lassen:
	

	
	  \begin{tt} \begin{scriptsize} root@linux \~{}/ \# 
       mount -t ext2 /dev/md0 /mnt
	  \end{scriptsize} \end{tt} \linebreak 
	

	
  \par
  
  Hat man an den unterschiedlichen Festplatten jeweils einzelne LEDs,
  sieht man jetzt schon sehr eindrucksvoll, wie das RAID arbeitet. Alle
  Daten, die ab jetzt auf {\bf /dev/md0} geschrieben werden, nutzen den {\bf RAID-0}
  Modus.
	
	
	
  \par
  
  Bevor der Rechner runtergefahren wird, müssen die RAID-Devices jedoch
  noch gestoppt werden:
	

	
	  \begin{tt} \begin{scriptsize} root@linux \~{}/ \# 
       umount /mnt
	  \end{scriptsize} \end{tt} \linebreak 
	  \begin{tt} \begin{scriptsize} root@linux \~{}/ \# 
       mdstop /dev/md0
	  \end{scriptsize} \end{tt} \linebreak 
	
	
   

   \subsection{Automatisierung} \label{d35e2023}
        

	

	
  \par
  
  Um nicht nach jedem Bootvorgang diese Prozedur wiederholen zu müssen,
  benötigt man eine Datei {\bf /etc/mdtab}, welche - analog
  zu {\bf /etc/fstab} - die Mountparameter enthält. Dies erledigt der
  Befehl:
	

	
      \begin{tt} \begin{scriptsize} root@linux / \# 
      mdcreate raid0 /dev/md0 /dev/sda6 /dev/sdb6
	  \end{scriptsize} \end{tt} \linebreak 
	

	
  \par
  
  Dadurch wird die Datei {\bf /etc/mdtab} erstellt, welche zusätzlich noch
  eine Prüfsumme enthält und das Aktivieren des RAID-Devices durch den
  einfachen Befehl
	

	
      \begin{tt} \begin{scriptsize} root@linux / \# 
      mdadd -ar
	  \end{scriptsize} \end{tt} \linebreak 
	

	
  \par
  
  erlaubt. Nun trägt man das RAID-Device ({\bf /dev/md0}) noch unter
  {\bf /etc/fstab} mit der Zeile
	

	\begin{tabular}{|l|}
                  \hline
                  \begin{tt} 
        
		/etc/fstab
	 \end{tt} \\ 
                  \hline
                  \begin{minipage}{130mm} 
                  \begin{scriptsize} 
                  \begin{verbatim} 
        
	  
       /dev/md0 /mnt ext2 defaults 0 1
	  
	 \end{verbatim} 
                  \end{scriptsize} 
                  \end{minipage} \\
                  \hline
                  \end{tabular}

	
  \par
  
  ein, wobei natürlich {\bf /mnt} durch jeden beliebigen Mountpoint ersetzt
  werden kann. Ein
	

	
	  \begin{tt} \begin{scriptsize} root@linux \~{}/ \# 
	mount /mnt
	  \end{scriptsize} \end{tt} \linebreak 
	
	
		
	
  \par
  
  führt nun auch zum Mounten des {\bf RAID-0} Devices.
	

	
  \par
  
  Leider berücksichtigen die Init-Skripte der DLD 6.0 keine
  RAID-Devices, wodurch man noch einmal auf Handarbeit angewiesen ist.
  Inwieweit andere Distributionen bereits RAID-Verbunde berücksichtigen,
  sollten Sie durch einen Blick in die Startskripte feststellen und
  gegebenenfalls ähnlich den hier abgedruckten Beispielen anpassen.
	

	
  \par
  
  Zum Starten des RAID-Devices ist es unerlässlich den, Befehl {\bf mdadd -ar}
  unterzubringen. Will man nicht von dem RAID-Device booten, so reicht
  es, den Befehl in die Datei {\bf /etc/init.d/bc.fsck\_other} eine Zeile über
  den fsck Befehl einzutragen.
	

	\begin{tabular}{|l|}
                  \hline
                  \begin{tt} 
        
	/etc/init.d/bc.fsck\_other
	 \end{tt} \\ 
                  \hline
                  \begin{minipage}{130mm} 
                  \begin{scriptsize} 
                  \begin{verbatim} 
        
	  
       #################################################
       # Filesystem check und u.U sulogin bei Problemen
       #################################################
       if [ ! -f /fastboot ]
       then
          mini_text="überprüfe Filesysteme..."
          mini_startup "$mini_text" start
          log_msg_buf=`(


       mdadd -ar


             fsck -R -A -a
             ) 2>&1`
          fsck_result=$?
          old_fsck_result=$fsck_result

       [... Teile gelöscht ...]

       #################################################
	  
	 \end{verbatim} 
                  \end{scriptsize} 
                  \end{minipage} \\
                  \hline
                  \end{tabular}

	
  \par
  
  Analog sollte der Befehl {\bf mdstop -a} in die zuletzt ausgeführte Datei
  nach dem {\bf umount} Befehl eingetragen werden. Bei der DLD heißt die Datei
  {\bf /etc/init.d/halt} und sollte nach dem Eintrag an der richtigen Stelle
  so aussehen:
	

	\begin{tabular}{|l|}
                  \hline
                  \begin{tt} 
        
	/etc/init.d/halt
	 \end{tt} \\ 
                  \hline
                  \begin{minipage}{130mm} 
                  \begin{scriptsize} 
                  \begin{verbatim} 
        
	  
       #################################################
       # Umount all FS
       #################################################
       mini_text="Die Filesysteme werden gelöst"
       mini_shutdown "$mini_text" start
       LC_LANG=C
       LC_ALL=C
       export LC_LANG LC_ALL
       # Gib den sleeps der busy_wait_loops zeit sich zu beenden.
       # sonst gibt es :/usr device busy.
       sleep 1
       umount -a

       mdstop -a

       mini_shutdown "$mini_text" stop 0
       #################################################
	  
	 \end{verbatim} 
                  \end{scriptsize} 
                  \end{minipage} \\
                  \hline
                  \end{tabular}

	
  \par
  
  Damit kann man nun recht komfortabel das RAID-Device benutzen.
	
		
	
  \par
  
  Weitere RAID-Verbunde erstellt man auf dieselbe Weise, jedoch sind die
  Einträge in den Init-Skripten nur einmal zu setzen.
	
   
  \section{RAID-Verbunde mit den RAID-Tools Version 0.9x erstellen} \label{d35e2146}
        

	  

	  \subsection{Vorbereiten des Kernels} \label{d35e2153}
        

		

	
  \par
  
  Sie benötigen hierfür den aktuellen, {\bf sauberen}, ungepatchten
  Sourcetree des 2.2.10er Kernels. Bitte tun Sie sich selbst einen
  Gefallen und nehmen Sie keinen Sourcetree Ihrer Distribution. Diese
  sind meist schon mit Patches aller Art versehen und ein zusätzliches
  ändern mit dem RAID-Patch würde die Sourcen eventuell sogar zerstören.
  Die kompletten Kernel-Sourcen erhält man auf:
	
	
	
  \par
  
	 ftp://ftp.kernel.org:/pub/linux/kernel/v.2.2/
	

	
  \par
  
  Des weiteren benötigen Sie den für diesen Kernel passenden RAID-Patch
  (raid0145-19990724-2.2.10) und die aktuellsten RAID-Tools
  ({\bf raidtools-19990724-0.90.tar.gz}). Diese sind hier zu finden:
	

	
  \par
  
	 
	  ftp://ftp.kernel.org:/pub/linux/daemons/raid/alpha/

	
  \par
  
	 Bitte achten Sie genau auf die passende Kernelversion! \linebreak 

	 Zuerst muss der Kernel nach {\bf /usr/src/linux} kopiert und mittels
	

	
	  \begin{tt} \begin{scriptsize} root@linux \~{}/ \# 
       tar xvfz kernelfile.tar.gz
	  \end{scriptsize} \end{tt} \linebreak 
	

	
  \par
  
  entpackt werden. Alternativ und bei Benutzung mehrerer Kernel entpackt
  man ihn nach {\bf /usr/src/linux-2.2.10} und setzt den vermutlich schon
  vorhandenen symbolischen Link von {\bf /usr/src/linux} auf
  {\bf /usr/src/linux-2.2.10}. Dies ist für das Patchen wichtig, da sonst der
  falsche Sourcetree gepatcht werden könnte. Auch ist es immer schlau,
  sich einen ungepatchten Original-Sourcetree aufzuheben, falls mal
  etwas schief geht.
	

	
  \par
  
  Nun wird der RAID-Patch nach {\bf /usr/src/linux-2.2.10} kopiert und dort
  mittels
	

	
	  \begin{tt} \begin{scriptsize} root@linux \~{}/ \# 
       patch -p1 \verb+<+ raidpatchfilename
	  \end{scriptsize} \end{tt} \linebreak 
	

	
  \par
  
  in den Sourcetree eingearbeitet. Es sollten nun etwa 20 Dateien
  kopiert und teilweise geändert werden.
	

	
  \par
  
  Nach dem Aufruf von
	

	
	  \begin{tt} \begin{scriptsize} root@linux \~{}/ \# 
       make menuconfig
	  \end{scriptsize} \end{tt} \linebreak 
	

	
  \par
  
 sollte sich Ihnen das Menü mit den unterschiedlichen Kerneloptionen
 präsentieren. Bitte benutzen Sie nicht {\bf make config} oder {\bf make xconfig},
 da sich diese Beschreibung ausschließlich auf {\bf make menuconfig} stützt.
 Hier aktivieren Sie unter {\bf Block devices ---\verb+>+} folgende Optionen:
	

	\begin{tabular}{|l|}
                  \hline
                  \begin{tt} 
        
	Block devices ---\verb+>+
	 \end{tt} \\ 
                  \hline
                  \begin{minipage}{130mm} 
                  \begin{scriptsize} 
                  \begin{verbatim} 
        
	   
       [*] Multiple devices driver support
       [*] Autodetect RAID partitions
       <*> Linear (append) mode
       <*> RAID-0 (striping) mode
       <*> RAID-1 (mirroring) mode
       <*> RAID-4/RAID-5 mode
       < > Translucent mode
       < > Logical Volume Manager support (NEW)
       [*] Boot support (linear, striped)
	   
	  \end{verbatim} 
                  \end{scriptsize} 
                  \end{minipage} \\
                  \hline
                  \end{tabular}

	
  \par
  
  Da immer wieder einige Fehler durch modularisierte RAID-Optionen
  auftauchen, nehmen Sie sich an den obigen Einstellungen ein Beispiel
  und kompilieren Sie den benötigten RAID-Support fest in den Kernel
  ein.
	

	
  \par
  
  Passen Sie nun noch alle übrigen Kerneleinstellungen Ihren Wünschen
  an, verlassen Sie das Menü und kompilieren Sie Ihren neuen Kernel:
	

	
	  \begin{tt} \begin{scriptsize} root@linux \~{}/ \# 
       make dep \&\& make clean \&\& make bzImage
       \&\& make modules
	  \end{scriptsize} \end{tt} \linebreak 
	  \begin{tt} \begin{scriptsize} root@linux \~{}/ \# 
       make modules\_install
	  \end{scriptsize} \end{tt} \linebreak 
	

	
  \par
  
  Die Benutzer eines SCSI-Controllers sollten daran denken, die initiale
  RAM-Disk mittels
	

	
	  \begin{tt} \begin{scriptsize} root@linux \~{}/ \# 
       mkinitrd /boot/initrd Kernelversion
	  \end{scriptsize} \end{tt} \linebreak 
	

	
  \par
  
  neu zu erstellen, falls der SCSI-Kontroller als Modul eingeladen wird.
  Anschließend noch den neuen Kernel und die System.map Datei
  umkopieren, die {\bf /etc/lilo.conf} bearbeiten, {\bf lilo} ausführen und das
  System neu starten.
	

	
  \par
  
  Ihr Kernel unterstützt nun alle nötigen RAID Optionen.
	

	
  \par
  
  Weiter geht es mit den RAID-Tools. Entpacken Sie die RAID-Tools z.B.
  nach {\bf /usr/local/src}, führen Sie das enthaltene Konfigurationsskript
  aus und kompilieren Sie die Tools:
	

	
	  \begin{tt} \begin{scriptsize} root@linux \~{}/ \# 
       ./configure \&\& make \&\& make install
	  \end{scriptsize} \end{tt} \linebreak 
	

	
  \par
  
  Die RAID-Tools stellen Ihnen zum einen (unter anderem) die Datei
  {\bf mkraid} zur Verfügung und erstellen zum anderen die {\bf /dev/md0-15}
  Devices.
	

	
  \par
  
  Ob Ihr Kernel die RAID Optionen wirklich unterstützt können Sie
  mittels
	

	
	  \begin{tt} \begin{scriptsize} root@linux \~{}/ \# 
       cat /proc/mdstat
	  \end{scriptsize} \end{tt} \linebreak 
	

	
  \par
  
  in Erfahrung bringen. Diese Pseudodatei wird auch in Zukunft immer
  Informationen über Ihr RAID System enthalten. Ein Blick hierher lohnt
  manchmal. Zu diesem Zeitpunkt sollte zumindest ein Eintrag enthalten
  sein, der Ihnen zeigt, dass die RAID Personalities registriert sind.
	

	
  \par
  
  Die RAID-Devices, was dasselbe bezeichnet wie das RAID-Array oder den
  RAID-Verbund, werden nachher über {\bf /dev/md*}
  angesprochen.
	

	
  \par
  
  Zuerst sollte man sich darüber im klaren sein, welche und wie viele
  Partitionen man zusammenfassen möchte. Diese Partitionen sollten leer
  sein und man sollte sich die Devices und ihre Reihenfolge nicht nur
  gut merken, sondern besser aufschreiben. Eine Einbindung von
  Partitionen, die Daten enthalten, welche nachher wieder zugänglich
  sein sollen, ist bisher nur über einen Umweg möglich und das auch nur
  bei Verwendung eines {\bf RAID-0} Verbundes.
	

	
  \par
  
  Als Beispiel werden die zwei SCSI-Festplatten {\bf /dev/sda} und {\bf /dev/sdb}
  benutzt. Bei (E)IDE heißen sie dann {\bf /dev/hda}, {\bf /dev/hdb} usw. Auf diesen
  Festplatten liegen nun zwei leere Partitionen im erweiterten Bereich
  {\bf /dev/sda6} und {\bf /dev/sdb6},
  welche zu einem {\bf RAID-0} Device zusammenfasst
  werden sollen.
	
   

   \subsection{Erstellen eines RAID-0 Devices} \label{d35e2363}
        

		

	
  \par
  
  Die Grundkonfiguration der zu erstellenden RAID-Devices werden hier
  unter {\bf /etc/raidtab} gespeichert. Diese Datei enthält alle nötigen
  Angaben für ein oder mehrere RAID-Devices. Generelle Hilfe findet man
  in den Manual Pages von raidtab und mkraid. Eine{\bf  raidtab} für ein
  {\bf RAID-0} System mit den oben beschriebenen zwei Partitionen müsste so
  aussehen:
	


	
	  \begin{tt} \begin{scriptsize} root@linux \~{}/ \# 
  raiddev /dev/md0
	  \end{scriptsize} \end{tt} \linebreak 
	 \begin{tt} \begin{scriptsize} raid-level\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +0\end{scriptsize} \end{tt} \linebreak
	 \linebreak\begin{tt} \begin{scriptsize} nr-raid-disks\verb+  +\verb+  +\verb+  +\verb+  +\verb+  + 2\end{scriptsize} \end{tt} \linebreak
	 \linebreak\begin{tt} \begin{scriptsize} persistent-superblock\verb+  + 1\end{scriptsize} \end{tt} \linebreak
	 \linebreak\begin{tt} \begin{scriptsize} chunk-size\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +4\end{scriptsize} \end{tt} \linebreak
	 \linebreak\begin{tt} \begin{scriptsize} \end{scriptsize} \end{tt} \linebreak
	 \linebreak\begin{tt} \begin{scriptsize} device\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +/dev/sda6\end{scriptsize} \end{tt} \linebreak
	 \linebreak\begin{tt} \begin{scriptsize} raid-disk\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  + 0\end{scriptsize} \end{tt} \linebreak
	 \linebreak\begin{tt} \begin{scriptsize} device\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +/dev/sdb6\end{scriptsize} \end{tt} \linebreak
	 \linebreak\begin{tt} \begin{scriptsize} raid-disk\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  + 1\end{scriptsize} \end{tt} \linebreak
	

	
  \par
  
	 Sind die Eintragungen in Ordnung, kann das RAID mittels
	

	
	  \begin{tt} \begin{scriptsize} root@linux \~{}/ \# 
       mkraid /dev/md0
	  \end{scriptsize} \end{tt} \linebreak 
	

	
  \par
  
  gestartet werden. Formatieren Sie Ihr neues Device:
	

	
	  \begin{tt} \begin{scriptsize} root@linux \~{}/ \# 
       mke2fs /dev/md0
	  \end{scriptsize} \end{tt} \linebreak 
	

	
  \par
  
  Dieses Device kann nun - wie jedes andere Blockdevice auch - irgendwo
  in den Verzeichnisbaum gemountet werden.
	

	
  \par
  
  Um das RAID-Device wieder zu stoppen, unmounten Sie es und führen
  Sie
	

	  
	
	  \begin{tt} \begin{scriptsize} root@linux \~{}/ \# 
       raidstop /dev/md0
	  \end{scriptsize} \end{tt} \linebreak 
	

	
  \par
  
  aus. Nach einem Reboot kann das Device mittels
	

	
	  \begin{tt} \begin{scriptsize} root@linux \~{}/ \# 
       raidstart /dev/md0
	  \end{scriptsize} \end{tt} \linebreak 
	

	
  \par
  
  wieder aktiviert und anschließend überall hin gemountet werden.
	
   

   \subsection{Automatisierung} \label{d35e2457}
        

	

	
  \par
  
  Wie viel Komfort einem der neue RAID-Patch bringt, zeigt sich bei
  diesem Automatisierungsprozess. Das bei der Verwendung der MD-Tools
  Version 0.4x beschriebene Bearbeiten der Init-Skripte fällt völlig
  weg. Allerdings ist dafür der einmalige Umgang mit dem nicht ganz
  ungefährlichen Tool fdisk vonnöten. Bitte seien Sie sich absolut
  sicher mit der Einteilung Ihrer Festplattenpartitionen, bevor Sie sich
  damit beschäftigen.
	

	
  \par
  
  Dieses Beispiel sieht nun vor, den {\bf RAID-0} Verbund {\bf /dev/md0} bestehend
  aus {\bf /dev/sda6} und {\bf /dev/sdb6} komfortabel bei jedem Startup zu mounten
  und automatisch auch wieder herunterzufahren.
	

	
  \par
  
  Der Trick liegt hierfür in der von Ihnen im Kernelmenü gewählten
	 Option {\bf Autodetect RAID partitions}. Der Kernel findet damit
  bestehende RAID-Arrays beim Booten automatisch und aktiviert sie.
	

	
  \par
  
  Voraussetzungen dafür sind:
	

	\newcounter{d6e2491} 
                  \begin{list}{\arabic{d6e2491}}
                  {\usecounter{d6e2491}}
        
	 
	\item 
	  {\bf Autodetect RAID partitions} ist im Kernel aktiviert.
	 
	 
	\item 
	 {\bf persistent-superblock 1} ist in der Datei {\bf /etc/raidtab} für Ihr
     Device gesetzt.
	 
	 
	\item 
     Der Partitionstyp, der von Ihnen für das RAID genutzten
     Partitionen, muss auf ''0xFD'' gesetzt werden.
	 
	\end{list}
	
	
  \par
  
  Sind Sie dieser Anleitung bis hierher gefolgt, dann enthält Ihr Kernel
  bereits die Autodetection und Sie haben Ihr RAID-Device auch mit dem
  persistent-superblock Modus erstellt. Bleibt noch das ändern des
  Partitionstyps.
	

	
  \par
  
  Stellen Sie sicher, dass das RAID-Device gestoppt ist, bevor Sie
  anfangen, mit {\bf fdisk} zu arbeiten:
	

	
	  \begin{tt} \begin{scriptsize} root@linux \~{}/ \# 
	  umount /dev/md0
	  \end{scriptsize} \end{tt} \linebreak 
	  \begin{tt} \begin{scriptsize} root@linux \~{}/ \# 
       raidstop /dev/md0
	  \end{scriptsize} \end{tt} \linebreak 
	

	
  \par
  
  Bei der vorliegenden Konfiguration müssten die Typen der Partitionen
  {\bf /dev/sda6} und {\bf /dev/sdb6}
  geändert werden. Dafür wird {\bf fdisk} zuerst für
  die erste SCSI-Festplatte aufgerufen:
	

	
	  \begin{tt} \begin{scriptsize} root@linux \~{}/ \# 
       fdisk /dev/sda
	  \end{scriptsize} \end{tt} \linebreak 
	

	
  \par
  
  Man wählt nun die Option {\bf t} für {\bf toggle partition type} und wird dann
  aufgefordert, den Hexcode oder einen Partitionstypen einzugeben. {\bf l}
  liefert eine Liste der unterstützten Codes, welche aber im Moment
  uninteressant ist. Geben Sie nun einfach {\bf fd} ein und prüfen Sie mit
  {\bf p}, ob die Partition tatsächlich geändert wurde. In der {\bf Id}-Spalte
  sollte nun {\bf fd} auftauchen. Beenden Sie anschließend {\bf fdisk} mit der
  Option {\bf w}. Verfahren Sie analog mit den anderen zu Ihrem RAID
  gehörenden Partitionen. Um z.B. {\bf /dev/sdb6} zu ändern, rufen Sie {\bf fdisk}
  so auf:
	

	
	  \begin{tt} \begin{scriptsize} root@linux \~{}/ \# 
       fdisk /dev/sdb
	  \end{scriptsize} \end{tt} \linebreak 
	


	
  \par
  
  Haben Sie das erfolgreich hinter sich gebracht, wird Ihnen beim
  nächsten Startup der Kernel mitteilen, dass er Ihr RAID-Device gefunden
  hat und es aktivieren. Schauen Sie ruhig noch mal mittels cat
  /proc/mdstat Ihr Device an. Es sollte nach diesem Neustart bereits
  aktiviert sein.
	
	
	
  \par
  
  Anschließend können Sie Ihr {\bf /dev/md0} RAID-Device wie jede andere
  Partition in die {\bf /etc/fstab} eintragen und so automatisch an einen
  beliebigen Ort mounten. Das Dateisystem auf dem RAID ist {\bf ext2}, obwohl
  Sie den RAID-Verbund natürlich mit jedem beliebigen Dateisystem
  formatieren können.
	
   

   \subsection{Anmerkung} \label{d35e2606}
        

	
	
  \par
  
  Manche Distributionen sehen es innerhalb ihrer Init-Skripte bereits
  vor, eventuell vorhandene RAID-Devices beim Herunterfahren des Systems
  zu deaktivieren oder aber beim Booten zu aktivieren. Dieser Umstand
  kann zu Fehlermeldungen führen, die Sie jedoch nicht weiter
  beeindrucken sollten. Diese Distributionen gehen meist davon aus, dass
  Sie die alten MD-Tools Version 0.4x benutzen. Ihr gepatchter Kernel
  übernimmt aber ab sofort das Aktivieren und Deaktivieren Ihrer mit den
  neuen RAID-Tools erstellten RAID-Devices für Sie.  Um die
  Fehlermeldungen zu unterdrücken, kommentieren Sie einfach in den
  passenden Init-Skripten (z.B. /etc/rc.d/init.d/halt) die Abfrage nach
  RAID-Devices und deren nachfolgender Deaktivierung mittels z.B.
  mdstop -a - oder was auch immer dort angegeben ist - aus.
	
   
  \section{Root-Partition oder Swap-Partition als RAID} \label{d35e2621}
        

   

   \subsection{Root-Partition als RAID} \label{d35e2628}
        

	

	
  \par
  
  Eine existierende HOWTO beschäftigt sich bereits mit dem Thema,
  allerdings ist Sie erstens auf Englisch und zweitens geht es durch
  neue Kerneloptionen auch eleganter als dort beschrieben.
	

	
  \par
  
  Bitte erleichtern Sie sich Ihre Arbeit und senken Sie das
  Frustniveau, indem Sie vorab noch drei Tipps beherzigen:
	

	\newcounter{d6e2644} 
                  \begin{list}{\arabic{d6e2644}}
                  {\usecounter{d6e2644}}
        
	 
	\item 
     Erstellen Sie ein Backup Ihrer Daten.
	 
	 
	\item 
     Erstellen Sie sowohl eine funktionierende und getestete DOS als
     auch Linux Bootdiskette.
	 
	 
	\item 
     Lesen Sie diese Ausführungen erst mal komplett durch, bevor Sie
     mittendrin feststellen müssen, etwas wichtiges vergessen zu haben,
     das Sie zu so spätem Zeitpunkt nicht mehr nachholen können.
	 
	\end{list}


   \subsubsection{DLD 6.0} \label{d35e2656}
        

	

	 
  \par
  
  Für dieses Verfahren wird noch eine DOS oder Win95 Partition in
  Verbindung mit dem {\bf Loadlin} benötigt. {\bf Loadlin} befindet sich - so das
  Programm nicht schon eingesetzt wird - auf der ersten DLD CD unter
  {\bf /delix/RPMS/i386/loadlin-1.6.2.i386.rpm}.  Alternativ kann man sich
  auch eine Bootdiskette anfertigen.
	 

	 
  \par
  
  Der Hintergrund ist ganz einfach der, dass {\bf LILO} mit dem RAID-Device
  nicht zurechtkommt und man somit nicht explizit von diesem RAID-Device
  booten kann.  Daher behilft man sich hier entweder mit {\bf Loadlin}, oder
  aber mit einem Mini Linux auf einer kleinen Extra-Partition. Weitere
  Möglichkeiten zum Booten von Linux auch von RAID-Verbunden wurden
  bereits im Abschnitt Möglichkeiten des Bootens von Linux
  behandelt.
	 
	 
	 
  \par
  
  Nichts desto trotz bleiben wir bei dem Verfahren mit {\bf Loadlin}. Das
  Programm befindet sich nach erfolgreicher Installation des
  RPMS-Paketes unter {\bf /dos/loadlin/}. Auf der oben genannten nötigen DOS
  Partition richtet man sich nun ein Verzeichnis wie z.B. Linux ein und
  kopiert die Dateien {\bf loadlin.bat} und {\bf loadlin.exe} zusammen mit dem
  frischen Kernel, in den die RAID-Parameter einkompiliert wurden,
  hinein.
	 
	 
	 
  \par
  
  Um sicherzugehen, dass auch wirklich nichts passiert, sollte man
  entweder die nötigen Treiber für den (E)IDE Kontroller oder des
  passenden SCSI Kontroller auch mit in den Kernel einkompiliert
  haben.
	 

	 
  \par
  
  Die Batchdatei {\bf loadlin.bat} wird nun dahingehend angepasst, dass wir die
  Parameter für das zu bootende RAID-Device gleich mit angeben:
	 

	 \begin{tabular}{|l|}
                  \hline
                  \begin{tt} 
        
	   linux.bat
	  \end{tt} \\ 
                  \hline
                  \begin{minipage}{130mm} 
                  \begin{scriptsize} 
                  \begin{verbatim} 
        
	   
       md=&lt;md device no.>,&lt;raid level>,&lt;chunk
       size>,dev0,...,devn
	   
	  \end{verbatim} 
                  \end{scriptsize} 
                  \end{minipage} \\
                  \hline
                  \end{tabular}	


	 
  \par
  
	  {\bf md device no}
	 
	 
	  Die Nummer des RAID (md) Devices: {\bf 1} steht für {\bf /dev/md1}, {\bf 2}
	  für {\bf /dev/md2} usw.
	 

	 
  \par
  
	  {\bf raid level}
	 
	 
	  Welches RAID Level wird verwendet: {\bf -1} für Linear Modus, {\bf 0}
        für {\bf RAID-0} (Striping).
	 

	 
  \par
  
	  {\bf chunk size}
	 
	 
        Legt die Chunk Size fest bei {\bf RAID-0} und
        {\bf RAID-1} fest.
	 

	 
  \par
  
	  {\bf dev0-devn}
	 
	 
	  Eine durch Kommata getrennte Liste von Devices, aus denen das md
      Device gebildet wird, z.B.{\bf 
      /dev/hda1},{\bf /dev/hdc1},{\bf /dev/sda1}.
	 
	 
	 
  \par
  
  Andere RAID-Modi außer Linear und {\bf RAID-0} werden im Moment nicht
  unterstützt.  Gemäß der vorher beschriebenen Anleitung würde die Zeile
  in der {\bf linux.bat} dann so aussehen:
	 


	 \begin{tabular}{|l|}
                  \hline
                  \begin{tt} 
        
	   linux.bat
	  \end{tt} \\ 
                  \hline
                  \begin{minipage}{130mm} 
                  \begin{scriptsize} 
                  \begin{verbatim} 
        
	   
       c:\linux\loadlin c:\linux\zimage root=/dev/md0
       md=0,0,0,0,/dev/sda6,/dev/sdb6 ro
	   
	  \end{verbatim} 
                  \end{scriptsize} 
                  \end{minipage} \\
                  \hline
                  \end{tabular}
	 
	 
  \par
  
  Dies soll nur eine einzige Zeile sein; außerdem ist auch hier wieder
  auf die richtige Reihenfolge der Partitionen zu achten. Weiterhin
  müssen natürlich zwei oder mehrere Partitionen - zu entweder einem
  {\bf RAID-0} oder einem Linear Device zusammengefasst - bereits vorliegen.
  Der Kernel muss die o.a. Bootoption und die nötigen RAID oder Linear
  Parameter in den Kernel einkompiliert haben; man beachte: Nicht als
  Module. Dann mountet man das RAID-Device, welches später die
  Root-Partition werden soll, nach z.B. {\bf /mnt}, kopiert mittels einer der
  im Abschnitt 
  Möglichkeiten zum Kopieren von Daten beschriebenen
  Methoden die benötigten Verzeichnisse auf das RAID-Device.
	 

	 
  \par
  
  Speziell für die DLD 6.0, aber auch für alle anderen Distributionen
  sei hier gesagt, dass beim Booten von einem RAID-Device der oben
  beschriebene Befehl {\bf mdadd -ar} vor dem ersten {\bf mount} Befehl auszuführen
  ist. Für die DLD 6.0 heißt das konkret, dass der Befehl bereits in das
  Skript {\bf /etc/init.d/bc.mount\_root} eingetragen werden muss, da dort der
  erste {\bf mount} Befehl ausgeführt wird. Benutzer anderer Distributionen
  sind hier auf sich gestellt oder schauen sich zur Not die Methode mit
  den neuen RAID-Tools Version 0.9x an; siehe Abschnitt
  
   RAID-Verbunde mit den RAID-Tools Version 0.9x erstellen.
	 

	 
  \par
  
  Jetzt fehlen nur noch die passenden Einträge in {\bf /etc/fstab} und
  {\bf /etc/lilo.conf}, in denen man auf dem neuen RAID-Device die
  ursprüngliche Root-Partition in {\bf /dev/md0} umändert - im Moment liegen
  diese Dateien natürlich noch unter {\bf /mnt}.
	 

	 
  \par
  
  An dieser Stelle sollte man die obige Liste noch einmal in Ruhe
  durchsehen, sich vergewissern, dass alles stimmt, und dann die DOS oder
  Win95 Partition booten. Dort führt man nun die Batchdatei
  {\bf linux.bat} aus.
	 
	

   \subsubsection{Generisch} \label{d35e2862}
        

	

	 
  \par
  
  Im Abschnitt RAID-Verbunde mit den RAID-Tools Version
  0.9x erstellen wurde bereits auf die vorzügliche Eigenschaft des
  automatischen Erkennens von RAID-Devices durch den Kernel-Patch beim
  Startup des Linuxsystems hingewiesen. Dieser Umstand legt die
  Vermutung nahe, dass es mit dieser Hilfe noch einfacher ist, die
  Root-Partition als RAID-Device laufen zu lassen. Das ist auch wirklich so,
  allerdings gibt es auch hierbei immer noch einige Kleinigkeiten zu
  beachten.  Generell kann man Linux entweder mittels {\bf Loadlin} oder mit
  Hilfe von {\bf LILO} booten. Je nach Bootart ist die Vorgehensweise
  unterschiedlich aufwendig.
	 

	 
  \par
  
  Für beide Fälle braucht man jedoch erst mal ein RAID-Device. Um bei dem
  Beispiel des {\bf RAID-0} Devices mit den Partitionen {\bf /dev/sda6} und
  {\bf /dev/sdb6} zu bleiben, nehmen wir dieses Device und mounten es in
  unseren Verzeichnisbaum.
	 

	 
  \par
  
  Hier muss allerdings noch einmal darauf hingewiesen werden, dass ein
  {\bf RAID-0} Device als Root-Partition ein denkbar schlechtes Beispiel ist.
  {\bf RAID-0} besitzt keinerlei Redundanz; fällt eine Festplatte aus, ist das
  Ganze RAID im Eimer.  Für eine Root-Partition sollte man deshalb auf
  jeden Fall ein {\bf RAID-1} oder {\bf RAID-5} Device vorziehen. Auch das
  funktioniert Dank der neuen Autodetect Funktion und wird analog dem
  beschriebenen {\bf RAID-0} Verbund eingerichtet.
	 

	 
  \par
  
  Auf das gemountete RAID-Device {\bf /dev/md0} kopiert man nun ganz simpel
  mittels einer der im Abschnitt Möglichkeiten zum Kopieren von Daten
  beschriebenen Methoden das komplette Root-Verzeichnis.
	 

	 
  \par
  
  Danach muss auf dem RAID-Device noch die Datei {\bf /etc/fstab} so angepasst
  werden, das als Root-Partition {\bf /dev/md0} benutzt wird und nicht mehr
  die originale Root-Partition.
	 

	 
  \par
  
  Erstellen Sie sich eine DOS-Bootdiskette - das pure DOS von Win95 tut
  es auch - und auf dieser ein Verzeichnis Linux. Hierher kopieren Sie
  nun aus dem passenden RPM-Paket Ihrer Distribution das DOS-Tool
	  {\bf loadlin} und Ihren aktuellen Kernel. Manchmal befindet sich {\bf loadlin}
  auch unkomprimiert im Hauptverzeichnis der Distributions-CD. Der
  Kernel sollte natürlich die RAID-Unterstützung bereits implementiert
  haben. Nun erstellen Sie mit Ihrem Lieblingseditor in dem neuen Linux
	  Verzeichnis eine {\bf loadlin.bat}. Haben Sie Ihren Kernel z.B. {\bf vmlinuz}
	  genannt, sollte in der Datei {\bf loadlin.bat} etwas in dieser Art stehen:
	 

     \begin{tabular}{|l|}
                  \hline
                  \begin{tt} 
        
	   loadlin.bat
	  \end{tt} \\ 
                  \hline
                  \begin{minipage}{130mm} 
                  \begin{scriptsize} 
                  \begin{verbatim} 
        
	   
       a:\linux\loadlin a:\linux\vmlinuz root=/dev/md0 ro vga=normal
	   
	  \end{verbatim} 
                  \end{scriptsize} 
                  \end{minipage} \\
                  \hline
                  \end{tabular}

	 
  \par
  
  Die Pfade müssen natürlich angepasst werden. Ein Reboot und das Starten
  von der Diskette mit der zusätzlichen Ausführung der {\bf linux.bat} sollte
  Ihnen ein vom RAID-Device gebootetes Linux bescheren. Booten Sie
  generell nur über {\bf Loadlin}, so endet für Sie hier
  die Beschreibung.
	 

	 
  \par
  
  Möchten Sie allerdings Ihr neues Root-RAID mittels {\bf LILO} booten, finden
  Sie im Abschnitt Möglichkeiten des Bootens von Linux diverse
  Methoden aufgelistet und teilweise sehr genau beschrieben, mit denen
  Sie sich noch bis zum endgültigen Erfolg beschäftigen müssten.
	 
	

	\subsubsection{Anmerkung zum redundanten Root-RAID} \label{d35e2975}
        

	 

	 
  \par
  
  Hat man sich bei einer anderen Distribution als SuSE 6.2 für einen
  Root-RAID Verbund entschieden, der im Fehlerfall auch von der zweiten
  Festplatte booten soll, muss man noch folgendes beachten: Da auch auf
  der zweiten Festplatte eine Boot-Partition benötigt wird, die zwar
  ebenso in der {\bf /etc/fstab} aufgenommen wurde, aber im Fehlerfall nicht
  mehr vorhanden ist, fällt die SuSE 6.2 Distribution in einen
  Notfall-Modus, in dem das root-Paßwort eingegeben werden muss und
  das fragliche Dateisystem repariert werden soll. Dies kann Ihnen auch
  bei anderen Distributionen passieren.
	 

	 
  \par
  
  Es wird also ein Weg benötigt, die beiden Boot-Partitionen {\bf /boot} und
  {\bf /boot2} nur dann zu mounten, wenn sie tatsächlich körperlich im Rechner
  vorhanden sind. Hierbei hilft ihnen das Skript {\bf mntboot}:
	 


     \begin{tabular}{|l|}
                  \hline
                  \begin{tt} 
        
		 mntboot 
	  \end{tt} \\ 
                  \hline
                  \begin{minipage}{130mm} 
                  \begin{scriptsize} 
                  \begin{verbatim} 
        
	   
  #!/bin/sh

  MNTBOOTTAB=/etc/mntboottab

  case "$1" in
    start)
      [ -f $MNTBOOTTAB ] || {
        echo "$0: *** $MNTBOOTTAB: not found" >&2
        break
      }

      PARTS=`cat $MNTBOOTTAB`

      for part in $PARTS ; do
        [ "`awk '{print $2}' /etc/fstab | grep "^$part$"`" == "" ] && {
          echo "$0: *** Partition $part: not in /etc/fstab" >&2
          continue
        }

        [ "`awk '{print $2}' </proc/mounts | grep "^$part$"`" != "" ] && {
          echo "$0: *** Partition $part: already mounted" >&2
          continue
        }

        fsck -a $part
        [ $? -le 1 ] || {
          echo "$0: *** Partition $part: Defect? Unavailable?" >&2
          continue
        }

        mount $part || {
          echo "$0: *** Partition $part: cannot mount" >&2
          continue
        }
      done

      exit 0
      ;;

    *)
      echo "usage: $0 start" >&2
      exit 1
      ;;
  esac
	   
	  \end{verbatim} 
                  \end{scriptsize} 
                  \end{minipage} \\
                  \hline
                  \end{tabular}

	 
  \par
  
  Das Skript gehört bei SuSE Distributionen nach {\bf /sbin/init.d}, bei
  vermutlich allen anderen Linux Distributionen nach {\bf /etc/rc.d/init.d}.
  Auf das Skript sollte ein symbolischer Link
  {\bf /sbin/init.d/rc2.d/S02mntboot} zeigen. Für alle anderen gilt es hier
  einen Link nach {\bf /etc/rc.d/rc3.d/S02mntboot} zu setzen, da außer den
  SuSE Distributionen wohl alle im Runlevel 3 starten und Ihre Links
  dafür in diesem Verzeichnis haben. Das Skript prüft ein paar
  Nebenbedingungen für diejenigen Partitionen, die in {\bf /etc/mntboottab}
  eingetragen sind (darin sollten {\bf /boot} und {\bf /boot2} stehen) und ruft
  jeweils {\bf fsck} und {\bf mount} für diese Partitionen auf. Da es bei allen
  anderen Distributionen keine {\bf /etc/mntboottab} gibt, gilt es hier diese
  zu erstellen oder anzupassen.
	 

	 
  \par
  
  In der {\bf /etc/fstab} sollten diese Partitionen mit {\bf noauto} statt
  {\bf defaults} eingetragen werden. Außerdem muss im sechsten Feld der Wert
  {\bf 0} stehen, da die Distribution im Backup-Fall sonst in den
  Notfall-Modus fällt.
	 
	
   

   \subsection{RAID auch für Swap-Partitionen?} \label{d35e3068}
        

	

	\subsubsection{RAID-Technik mit normalen Swap-Partitionen} \label{d35e3075}
        

	 

	 
  \par
  
  Sie überlegen sich, RAID auch für Swap Partitionen einzurichten? Diese
  Mühe können Sie sich sparen, denn der Linux-Kernel unterstützt ein
  RAID-Verhalten auf Swap-Partitionen ähnlich dem {\bf RAID-0} Modus quasi
  {\bf von Haus aus}. Legen Sie einfach auf verschiedenen Festplatten ein
  paar Partitionen an, ändern Sie den Partitionstyp mittels
	 

	 
	   \begin{tt} \begin{scriptsize} root@linux \~{}/ \# 
       fdisk /dev/Ihre-Partition
	   \end{scriptsize} \end{tt} \linebreak 
	 

	 
  \par
  
	  und der Option {\bf t} auf 82 und erstellen Sie das Swap Dateisystem:
	 

	 
	   \begin{tt} \begin{scriptsize} root@linux \~{}/ \# 
       mkswap /dev/Ihre-neue-Swap-Partition
	   \end{scriptsize} \end{tt} \linebreak 
	 

	 
  \par
  
  Nun fügen Sie diese in die {\bf /etc/fstab} ein und geben allen
  Swap-Partitionen dieselbe Priorität.
	 

	 \begin{tabular}{|l|}
                  \hline
                  \begin{tt} 
        
	   fstab
	  \end{tt} \\ 
                  \hline
                  \begin{minipage}{130mm} 
                  \begin{scriptsize} 
                  \begin{verbatim} 
        
	   
       /dev/hda3 swap swap defaults,pri=1    0 0
       /dev/hdb3 swap swap defaults,pri=1    0 0
       /dev/sda4 swap swap defaults,pri=1    0 0
	   
	  \end{verbatim} 
                  \end{scriptsize} 
                  \end{minipage} \\
                  \hline
                  \end{tabular}

	 
  \par
  
  Vom nächsten Startup an werden die Swap Partitionen wie ein {\bf RAID-0}
  Device behandelt, da die Lese- und Schreibzugriffe ab jetzt
  gleichmäßig über die Swap-Partitionen verteilt werden.
	 

	 
  \par
  
  Will man aus irgendwelchen Gründen zwei Swap-Partitionen höher
  priorisieren als eine Dritte, so kann man das auch über den Parameter
  {\bf pri=} ändern, wobei die Priorität einen Wert zwischen {\bf 0} und {\bf 32767}
  annehmen kann. Ein höherer Wert entspricht einer höheren Priorität. Je
  höher die Priorität desto eher wird die Swap-Partition beschrieben.
  Bei der folgenden Konfiguration würde also {\bf /dev/hda3} wesentlich
  stärker als Swap-Partition genutzt werden als {\bf /dev/hdb3}.
	 

	 \begin{tabular}{|l|}
                  \hline
                  \begin{tt} 
        
	   fstab
	  \end{tt} \\ 
                  \hline
                  \begin{minipage}{130mm} 
                  \begin{scriptsize} 
                  \begin{verbatim} 
        
	   
       /dev/hda3 swap swap defaults,pri=5    0 0
       /dev/hdb3 swap swap defaults,pri=1    0 0
	   
	  \end{verbatim} 
                  \end{scriptsize} 
                  \end{minipage} \\
                  \hline
                  \end{tabular}
	

	\subsubsection{Swap-Partitionen auf RAID-1 Verbunden} \label{d35e3158}
        

     

	 
  \par
  
  Erstellt man die Swap-Partition auf einem vorhandenen {\bf RAID-1} Verbund,
  formatiert sie dann mittels {\bf mkswap /dev/mdx} und trägt sie als
  Swap-Partition in die {\bf /etc/fstab} ein, so hat man zwar keinen, oder nur
  einen kleinen lesenden Geschwindigkeitsvorteil, jedoch den großen,
  nicht zu unterschätzenden Vorteil, dass man bei einem Festplattendefekt
  nach dem Ausschalten des Rechners und dem Austausch der defekten
  Festplatte, ohne weitere manuelle Eingriffe wieder ein vollständig
  funktionierendes System hat.  Der einzige Wermutstropfen betrifft
  hierbei die Freunde des Hot Plugging.  Erfahrungsgemäß verkraftet
  Linux das Hot Plugging eines dermaßen gestalteten {\bf RAID-1} Verbundes
  nur, wenn vorher die Swap-Partitionen mittels {\bf swapoff -a} abgeschaltet
  wurden.
	 

	 
  \par
  
  Als Warnung seien hier aber noch zwei der schlimmsten Fälle genannt,
  über die man sich Gedanken machen sollte und die noch dazu voneinander
  abhängig sind:
	 

	 
  \par
  
  Der erste Fall beschreibt die Situation, Swap auf einem {\bf RAID-1} Verbund
  mit den alten RAID-Tools und damit den sowohl in den 2.0.xer als auch
  in den 2.2.xer original im Kernel vorhandenen RAID Treibern zu
  benutzen. Hierbei können nach einer gewissen Laufzeit des
  Linuxsystems unweigerliche Abstürze auftreten. Der Grund dafür liegt in der
  Problematik der unterschiedlichen Cachestrategie von Software-RAID
  einerseits und Swap-Partitionen andererseits. Erst mit den aktuellen
  RAID-Treibern ist der Betrieb einer Swap-Partition auf einem
  RAID-Verbund stabil geworden. Wollen Sie also einen sicheren RAID-Verbund
  erstellen, der nachher aus Gründen der Ausfallsicherheit auch die
  Swap-Partition beinhalten soll, benutzen Sie bitte immer die aktuellen
  RAID-Treiber in Form des aktuellen RAID-Patches.  Dies entspricht dann
  der Einrichtfunktionalität der RAID-Tools Version 0.9x.
	 

	 
  \par
  
  Der zweite Fall beschreibt die generelle Problematik, mit der Sie sich
  bei der Einrichtung von Swap-Partitionen in Bezug auf Software-RAID
  auseinandersetzen müssen:
	 

	 
  \par
  
  Hat man die Swap-Partition auf einen {\bf RAID-1} Verbund gelegt und
  zusätzlich dafür eine Spare-Disk reserviert, würde diese Spare-Disk
  natürlich bei einem Festplattendefekt sofort eingearbeitet werden. Das
  ist zwar erwünscht und auch so gedacht, jedoch funktioniert das
  Resynchronisieren dieses {\bf RAID-1} Verbundes mit einer aktiven
  Swap-Partition nicht. Die Software-RAID Treiber nutzen beim
  Resynchronisieren den Puffer-Cache, die Swap-Partition aber nicht. Das
  Ergebnis ist eine defekte Swap-Partition.
	 

	 
  \par
  
  Als Lösung bleibt nur die Möglichkeit, keine Spare-Disks zu benutzen
  und nach einem Festplattenausfall {\bf swapoff -a} per Hand auszuführen, die
  defekte Festplatte auszutauschen und nach dem Erstellen der
  Partitionen und des Swap-Dateisystems mit {\bf swapon -a} wieder zu
  aktivieren.
	 

	 
  \par
  
  Ein Problem bleibt dennoch: Gesetzt den Fall der Linux-Rechner würde
  aufgrund eines Stromausfalls nicht sauber heruntergefahren worden
  sein, so werden die RAID-Verbunde beim nächsten Startup automatisch
  resynchronisiert. Dies erfolgt mit einem automatischen {\bf ge-nice-ten}
  Aufruf des entsprechenden RAID-Daemons im Hintergrund bereits zu
  Anfang der Bootprozedur. Im weiteren Bootverlauf werden aber
  irgendwann die Swap-Partitionen aktiviert und treffen auf ein nicht
  synchronisiertes RAID. Das Aktivieren der Swap-Partitionen muss also
  verzögert werden, bis die Resynchronisation abgeschlossen ist.
	 

	 
  \par
  
  Wie unter Linux üblich lässt sich auch dieses Problem mit einem Skript
  lösen.  Der Gedanke dabei ist, den Befehl {\bf swapon -a} durch ein Skript
  zu ersetzen, welches die Pseudodatei {\bf /proc/mdstat} nach der
  Zeichenfolge {\bf resync=} durchsucht und im Falle des Verschwindens dieser
  Zeichenfolge die Swap-Partitionen aktiviert. Im folgenden finden Sie
  ein Beispiel dazu abgedruckt:
	 

	 \begin{tabular}{|l|}
                  \hline
                  \begin{tt} 
        
	   swapon -a
	  \end{tt} \\ 
                  \hline
                  \begin{minipage}{130mm} 
                  \begin{scriptsize} 
                  \begin{verbatim} 
        
	   
       #!/bin/sh
       #

       RAIDDEVS=`grep swap /etc/fstab | grep /dev/md|cut -f1|cut -d/ -f3`

       for raiddev in $RAIDDEVS
       do
       #  echo "testing $raiddev"
           while grep $raiddev /proc/mdstat | grep -q "resync="
           do
       #     echo "`date`: $raiddev resyncing" >> /var/log/raidswap-status
             sleep 20
            done
            /sbin/swapon /dev/$raiddev
       done

       exit 0
	   
	  \end{verbatim} 
                  \end{scriptsize} 
                  \end{minipage} \\
                  \hline
                  \end{tabular}
	
   
  \section{Spezielle Optionen der RAID-Devices Version 0.9x} \label{d35e3246}
        

	  

	  \subsection{Was bedeutet Chunk-Size?} \label{d35e3253}
        

		

	
  \par
  
  Mit dem Chunk-Size Parameter legt man die Größe der Blöcke fest, in
  die eine Datei zerlegt wird, die auf einen RAID-Verbund geschrieben
  werden soll. Diese ist nicht mit der Blockgröße zu verwechseln, die
  beim Formatieren des RAID-Verbundes als Parameter eines bestimmten
  Dateisystems angegeben werden kann. Vielmehr können die beiden
  verschiedenen Blockgrößen variabel verwendet werden und bringen je
  nach Nutzung unterschiedliche Geschwindigkeitsvor- wie auch
  -nachteile.
	

	
  \par
  
 Nehmen wir das Standardbeispiel: {\bf RAID-0} ({\bf /dev/md0}) bestehend aus
 {\bf /dev/sda6} und {\bf /dev/sdb6} soll als angegebene Chunk-Size in der
 {\bf /etc/raidtab} 4 kB haben. Das würde heißen, dass bei einem Schreibprozess
 einer 16 KB großen Datei der erste 4 KB Block und der dritte 4 KB
 Block auf der ersten Partition ({\bf /dev/sda6}) landen würden, der zweite
 und vierte Block entsprechend auf der zweiten Partition ({\bf /dev/sdb6}).
 Bei einem RAID, das vornehmlich große Dateien schreiben soll, kann man
 so bei einer größeren Chunk-Size einen kleineren Overhead und damit
 einen gewissen Performancegewinn feststellen. Eine kleinere Chunk-Size
 zahlt sich dafür bei RAID-Devices aus, die mit vielen kleinen Dateien
 belastet werden. Somit bleibt auch der {\bf Verschnitt} in einem
 erträglichen Rahmen. Die Chunk-Size sollte also jeder an seine
 jeweiligen Bedürfnisse anpassen.
	

	
  \par
  
 Der Chunk Size Parameter in der {\bf /etc/raidtab} funktioniert für alle
 RAID-Modi und wird in Kilobyte angegeben. Ein Eintrag von {\bf 4} bedeutet
 also 4096 Byte. Mögliche Werte für die Chunk-Size sind 4 KB bis
 128 KB, wobei sie immer einer 2er Potenz entsprechen müssen.
	
	
	
  \par
  
  Wie wirkt sich die Chunk-Size jetzt speziell auf die RAID-Modi aus?
	

	
  \par
  
     {\bf Linear Modus}
	
	
        Beim Linear Modus wirkt sich die Chunk-Size mehr oder minder
        direkt auf die benutzten Daten aus. Allgemein gilt hier, bei
        vielen kleinen Dateien eher eine kleine Chunk-Size zu wählen und
        umgekehrt.
	

	
  \par
  
     {\bf RAID-0}
	
	
	    Da die Daten auf ein {\bf RAID-0} {\bf parallel} geschrieben werden,
        bedeutet hier eine Chunk-Size von 4 KB, dass bei einem
        Schreibprozess mit einer Größe von 16 KB in einem RAID-Verbund
        aus zwei Partitionen die ersten beiden Blöcke parallel auf die
        beiden Partitionen geschrieben werden und anschließend die
        nächsten beiden wieder parallel. Hier kann man auch erkennen,
        das die Chunk-Size in engem Zusammenhang mit der verwendeten
        Anzahl der Partitionen steht. Eine generelle optimale
        Einstellung kann man also nicht geben. Diese hängt vielmehr vom
        Einsatzzweck des RAID-Arrays in bezug auf die Größe der
        hauptsächlich verwendeten Dateien, der Anzahl der Partitionen
        und den Einstellungen des Dateisystems ab.
	

	
  \par
  
     {\bf RAID-1}
	
	
        Beim Schreiben auf ein {\bf RAID-1} Device ist die verwendete
        Chunk-Size für den ''parallelen'' Schreibprozess unerheblich, da
        sämtliche Daten auf beide Partitionen geschrieben werden müssen.
        Die Abhängigkeit besteht hier also wie beim Linear-Modus von den
        verwendeten Dateien. Beim Lesevorgang allerdings bestimmt die
        Chunk-Size, wie viele Daten zeitgleich von den unterschiedlichen
        Partitionen gelesen werden können. Der Witz ist hierbei, dass
        alle Partitionen dieselben Daten enthalten (Spiegel-Partitionen
        eben) und dadurch Lesevorgänge wie eine Art {\bf RAID-0} arbeiten.
        Hier ist also mit einem Geschwindigkeitsgewinn zu rechnen.
	

	
  \par
  
     {\bf RAID-4}
	
	
        Hier beschreibt die Chunk-Size die Größe der Paritätsblöcke auf
        der Paritäts-Partition, welche nach dem eigentlichen
        Schreibzugriff geschrieben werden. Wird auf einen {\bf RAID-4} Verbund
        1 Byte geschrieben, so werden die Bytes, die die Blockgröße
        bestimmen, von den {\bf RAID-4} Partitionen abzüglich der
        Paritäts-Partition (X-1, wobei X die Gesamtzahl der {\bf RAID-4} Partitionen
        ist) gelesen, die Paritäts-Information berechnet und auf die
        Paritäts-Partition geschrieben. Die Chunk-Size hat auf den
        Lesevorgang denselben geschwindigkeitsgewinnenden Einfluss wie
        bei einem {\bf RAID-0} Verbund, da der Lesevorgang auf eine ähnliche
        Weise realisiert ist.
	

	
  \par
  
     {\bf RAID-5}
	
	
        Beim {\bf RAID-5} Verbund bezeichnet die Chunk-Size denselben Vorgang
        wie beim {\bf RAID-4}. Eine allgemein vernünftige Chunk-Size läge hier
        zwischen 32 KB und 128 KB, jedoch treffen auch hier die Faktoren
        wie Nutzung des RAIDs und verwendete Partitionen auf den
        Einzelfall zu und die Chunk-Size sollte dementsprechend angepasst
        werden.
	

	
  \par
  
     {\bf RAID-10}
	
	
        Bei dieser Art des RAID-Verbundes bezieht sich die Chunk-Size
        auf alle integrierten RAID-Verbunde, also beide {\bf RAID-0} Verbunde
        und das {\bf RAID-1} Array.  Als Richtwert kann man hier 32 KB angeben
        - experimentieren ist hierbei natürlich wie bei allen anderen
        RAID-Modi auch ausdrücklich erlaubt.
	
   

   \subsection{Spezielle Optionen von mke2fs für RAID-4 und RAID-5 Systeme} \label{d35e3393}
        

	

	
  \par
  
  Die Option {\bf -R stride=nn} von {\bf mke2fs} erlaubt es, verschiedene ext2
  spezifische Datenstrukturen auf eine intelligentere Weise auf das RAID
  zu verteilen. Ist die Chunk-Size mit 32 KB angegeben, heißt das, dass
  32 KB fortlaufende Daten als Block auf dem RAID-Verbund liegen. Danach
  würde der nächste 32 KB Block kommen. Will man ein ext2 Dateisystem
  mit 4 KB Blockgröße erstellen, erkennt man, dass acht Dateisystemblöcke
  in einem Verbundblock (Chunk Block; durch Chunk-Size angegeben)
  untergebracht werden. Diese Information kann man dem ext2 Dateisystem
  beim Erstellen mitteilen:
	

	
	  \begin{tt} \begin{scriptsize} root@linux \~{}/ \# 
       mke2fs -b 4096 -R stride=8 /dev/md0
	  \end{scriptsize} \end{tt} \linebreak 
	

	
  \par
  
  Die {\bf RAID-4} und {\bf RAID-5} Performance wird durch diesen Parameter
  erheblich beeinflusst. Das Benutzen dieser Option ist dringend
  anzuraten.
	
   

   \subsection{Beispiel-raidtab Einträge für alle RAID-Modi} \label{d35e3425}
        

	
		
	
  \par
  
  Hier werden nur der neue RAID-Kernel-Patch in Verbindung mit den
  passenden RAID-Tools Version 0.9x und der entsprechenden
  Kernel-Version beschrieben.  Die älteren RAID-Tools der Version 0.4x finden
  keine Berücksichtigung. Der Kernel-Patch sollte installiert sein.
  Ebenso sollten die RAID-Optionen im Kernel aktiviert sein und der
  Kernel neu kompiliert und neu gebootet sein.
	

	\subsubsection{Linear (Append) Modus} \label{d35e3435}
        

	 
		  
	 
  \par
  
  Der Linear Modus verbindet mehrere Partitionen unterschiedlicher Größe
  zu einem Gesamtverbund, der allerdings nicht parallel, sondern
  nacheinander beschrieben wird. Ist die erste Partition voll, wird auf
  der nächsten weitergeschrieben. Dadurch sind weder Performancevorteile
  zu erwarten noch eine gesteigerte Sicherheit. Im Gegenteil. Ist eine
  Partition des Linear-Verbundes defekt, ist meist auch der gesamte
  Verbund hinüber.
	 

	 
  \par
  
  Die Parameter der /etc/raidtab für einen Linear-Verbund sehen so
  aus:
	 

	 
	   \begin{tt} \begin{scriptsize} root@linux \~{}/ \# 
       raiddev /dev/md0
	   \end{scriptsize} \end{tt} \linebreak 
	  \begin{tt} \begin{scriptsize} raid-level\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +linear\end{scriptsize} \end{tt} \linebreak
	   \linebreak\begin{tt} \begin{scriptsize} nr-raid-disks\verb+  +\verb+  +\verb+  +\verb+  +\verb+  + 2\end{scriptsize} \end{tt} \linebreak
	   \linebreak\begin{tt} \begin{scriptsize} persistent-superblock\verb+  + 1\end{scriptsize} \end{tt} \linebreak
	   \linebreak\begin{tt} \begin{scriptsize} chunk-size\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +4\end{scriptsize} \end{tt} \linebreak
	  \linebreak\begin{tt} \begin{scriptsize} device\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +/dev/sda6\end{scriptsize} \end{tt} \linebreak
	   \linebreak\begin{tt} \begin{scriptsize} raid-disk\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  + 0\end{scriptsize} \end{tt} \linebreak
	   \linebreak\begin{tt} \begin{scriptsize} device\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +/dev/sdb6\end{scriptsize} \end{tt} \linebreak
	   \linebreak\begin{tt} \begin{scriptsize} raid-disk\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  + 1\end{scriptsize} \end{tt} \linebreak
	  

	 
  \par
  
  Zu beachten ist hier, dass der Linear Modus keine Spare-Disks
  unterstützt. Was das ist und was man unter dem Persistent-Superblock
  versteht, finden Sie im Abschnitt Weitere Optionen der neuen RAID-Patches.
  Der Parameter {\bf Chunk-Size} wurde bereits in diesem
  Abschnitt weiter oben erläutert.
	 

	 
  \par
  
  Initialisiert wird Ihr neues Device mit folgendem Kommando:
	 

	 
	   \begin{tt} \begin{scriptsize} root@linux \~{}/ \# 
       mkraid -f /dev/md0
	   \end{scriptsize} \end{tt} \linebreak 
	 

	 
  \par
  
  Danach fehlt noch ein Dateisystem:
	 

	 
	   \begin{tt} \begin{scriptsize} root@linux \~{}/ \# 
       mke2fs /dev/md0
	   \end{scriptsize} \end{tt} \linebreak 
	 

	 
  \par
  
  Schon können Sie das Device überall hin mounten und in die /etc/fstab
  eintragen.
	 
	

	\subsubsection{RAID-0 (Striping)} \label{d35e3509}
        

	 

	 
  \par
  
  Sie haben sich entschlossen, mehrere Partitionen unterschiedlicher
  Festplatten zusammenzufassen, um eine Geschwindigkeitssteigerung zu
  erzielen. Auf die Sicherheit legen Sie dabei weniger Wert, jedoch sind
  Ihre Partitionen alle annähernd gleich groß.
	 
	 
	 
  \par
  
  Ihre /etc/raidtab sollte daher etwa so aussehen:
	 

	 
	   \begin{tt} \begin{scriptsize} root@linux \~{}/ \# 
       raiddev /dev/md0
	   \end{scriptsize} \end{tt} \linebreak 
	  \begin{tt} \begin{scriptsize} raid-level\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +0\end{scriptsize} \end{tt} \linebreak
	  \linebreak\begin{tt} \begin{scriptsize} nr-raid-disks\verb+  +\verb+  +\verb+  +\verb+  +\verb+  + 2\end{scriptsize} \end{tt} \linebreak
	  \linebreak\begin{tt} \begin{scriptsize} persistent-superblock\verb+  + 1\end{scriptsize} \end{tt} \linebreak
	  \linebreak\begin{tt} \begin{scriptsize} chunk-size\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +4\end{scriptsize} \end{tt} \linebreak
	  \linebreak\begin{tt} \begin{scriptsize} 	\end{scriptsize} \end{tt} \linebreak
	  \linebreak\begin{tt} \begin{scriptsize} device\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +/dev/sda6\end{scriptsize} \end{tt} \linebreak
	  \linebreak\begin{tt} \begin{scriptsize} raid-disk\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  + 0\end{scriptsize} \end{tt} \linebreak
	  \linebreak\begin{tt} \begin{scriptsize} device\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +/dev/sdb6\end{scriptsize} \end{tt} \linebreak
	  \linebreak\begin{tt} \begin{scriptsize} raid-disk\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  + 1\end{scriptsize} \end{tt} \linebreak
	 

	 
  \par
  
  Hier werde genauso wie beim Linear Modus keine Spare-Disks
  unterstützt. Was das ist und was man unter dem Persistent-Superblock
  versteht, wird im Abschnitt Weitere Optionen der neuen RAID-Patches
  erläutert.
	 
	 
	 
  \par
  
  Initialisiert wird Ihr neues Device mit folgendem Kommando:
	 

	 
	   \begin{tt} \begin{scriptsize} root@linux \~{}/ \# 
       mkraid -f /dev/md0
	   \end{scriptsize} \end{tt} \linebreak 
	 

	 
  \par
  
  Danach fehlt noch ein Dateisystem:
	 

	 
	   \begin{tt} \begin{scriptsize} root@linux \~{}/ \# 
       mke2fs /dev/md0
	   \end{scriptsize} \end{tt} \linebreak 
	 


	 
  \par
  
  Schon können Sie das Device überall hin mounten und in die {\bf /etc/fstab}
  eintragen.
	 
	

	\subsubsection{RAID-1 (Mirroring)} \label{d35e3586}
        

	 

	 
  \par
  
  Ein {\bf RAID-1} Verbund wird auch als {\bf Spiegelsystem} bezeichnet, da hier
  der gesamte Inhalt einer Partition auf eine oder mehrere andere
  gespiegelt und damit eins zu eins dupliziert wird. Wir haben hier also
  den ersten Fall von Redundanz. Des weiteren können hier, falls es
  erwünscht ist, zum ersten mal Spare-Disks zum Einsatz kommen. Diese
  liegen pauschal erst mal brach im System und werden erst um Ihre
  Mitarbeit bemüht, wenn eine Partition des {\bf RAID-1} Verbundes ausgefallen
  ist. Spare-Disks bieten also einen zusätzlichen Ausfallschutz, um nach
  einem Ausfall möglichst schnell wieder ein redundantes System zu
  bekommen.
	 
	 
	 
  \par
  
  Die /etc/raidtab sieht in solch einem Fall inkl. Spare-Disk so aus:
	 

	 
	   \begin{tt} \begin{scriptsize} root@linux \~{}/ \# 
       raiddev /dev/md0
	   \end{scriptsize} \end{tt} \linebreak 
	  \begin{tt} \begin{scriptsize} raid-level\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +1\end{scriptsize} \end{tt} \linebreak
	  \linebreak\begin{tt} \begin{scriptsize} nr-raid-disks\verb+  +\verb+  +\verb+  +\verb+  +\verb+  + 2\end{scriptsize} \end{tt} \linebreak
	  \linebreak\begin{tt} \begin{scriptsize} nr-spare-disks\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +1\end{scriptsize} \end{tt} \linebreak
	  \linebreak\begin{tt} \begin{scriptsize} chunk-size\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +4\end{scriptsize} \end{tt} \linebreak
	  \linebreak\begin{tt} \begin{scriptsize} persistent-superblock\verb+  + 1\end{scriptsize} \end{tt} \linebreak
	  \linebreak\begin{tt} \begin{scriptsize} 	\end{scriptsize} \end{tt} \linebreak
	  \linebreak\begin{tt} \begin{scriptsize} device\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +/dev/sda6\end{scriptsize} \end{tt} \linebreak
	  \linebreak\begin{tt} \begin{scriptsize} raid-disk\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  + 0\end{scriptsize} \end{tt} \linebreak
	  \linebreak\begin{tt} \begin{scriptsize} device\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +/dev/sdb6\end{scriptsize} \end{tt} \linebreak
	  \linebreak\begin{tt} \begin{scriptsize} raid-disk\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  + 1\end{scriptsize} \end{tt} \linebreak
	  \linebreak\begin{tt} \begin{scriptsize} device\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +/dev/sdc6\end{scriptsize} \end{tt} \linebreak
	  \linebreak\begin{tt} \begin{scriptsize} spare-disk\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +0\end{scriptsize} \end{tt} \linebreak
	 

	 
  \par
  
  Weitere Spare- oder RAID-Disks würden analog hinzugefügt werden.
  Führen Sie hier nun folgendes Kommando aus:
	 

	 
	   \begin{tt} \begin{scriptsize} root@linux \~{}/ \# 
       mkraid -f /dev/md0
	   \end{scriptsize} \end{tt} \linebreak 
	 

	 
  \par
  
  Mittels {\bf cat /proc/mdstat} können Sie wieder den Fortschritt und den
  Zustand Ihres RAID-Systems erkennen. Erstellen Sie das Dateisystem
  mittels
	 

	 
	   \begin{tt} \begin{scriptsize} root@linux \~{}/ \# 
       mke2fs /dev/md0
	   \end{scriptsize} \end{tt} \linebreak 
	 

	 
  \par
  
  sobald das RAID sich synchronisiert hat.
	 

	 
  \par
  
  Theoretisch funktioniert das Erstellen des Dateisystems bereits
  während sich das {\bf RAID-1} noch synchronisiert, jedoch ist es vorläufig
  sicherer, mit dem Formatieren und Mounten zu warten, bis das {\bf RAID-1}
  fertig ist.
	 
	

	\subsubsection{RAID-4 (Striping Dedicated Parity)} \label{d35e3684}
        

	 

	 
  \par
  
  Sie möchten mehrere, aber mindestens drei etwa gleich große
  Partitionen zusammenfassen, die sowohl einen Geschwindigkeitsvorteil
  als auch erhöhte Sicherheit bieten sollen. Das Verfahren der
  Datenverteilung beim Schreibzugriff ist hierbei genauso wie beim
  {\bf RAID-0} Verbund, allerdings kommt hier eine zusätzliche Partition mit
  Paritätsinformationen hinzu. Fällt eine Partition aus, so kann diese,
  falls eine Spare-Disk vorhanden ist, sofort wieder rekonstruiert
  werden; fallen zwei Partitionen aus, ist aber auch hier Schluss und die
  Daten sind verloren. Obwohl {\bf RAID-4} Verbunde eher selten eingesetzt
  werden, müsste Ihre {\bf /etc/raidtab} dann so
  aussehen:
	 

	 
	   \begin{tt} \begin{scriptsize} root@linux \~{}/ \# 
       raiddev /dev/md0
	   \end{scriptsize} \end{tt} \linebreak 
	  \begin{tt} \begin{scriptsize} raid-level\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +4\end{scriptsize} \end{tt} \linebreak
	  \linebreak\begin{tt} \begin{scriptsize} nr-raid-disks\verb+  +\verb+  +\verb+  +\verb+  +\verb+  + 3\end{scriptsize} \end{tt} \linebreak
	  \linebreak\begin{tt} \begin{scriptsize} nr-spare-disks\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +0\end{scriptsize} \end{tt} \linebreak
	  \linebreak\begin{tt} \begin{scriptsize} persistent-superblock\verb+  + 1\end{scriptsize} \end{tt} \linebreak
	  \linebreak\begin{tt} \begin{scriptsize} chunk-size\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +32\end{scriptsize} \end{tt} \linebreak
	  \linebreak\begin{tt} \begin{scriptsize} 	\end{scriptsize} \end{tt} \linebreak
	  \linebreak\begin{tt} \begin{scriptsize} device\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +/dev/sda6\end{scriptsize} \end{tt} \linebreak
	  \linebreak\begin{tt} \begin{scriptsize} raid-disk\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  + 0\end{scriptsize} \end{tt} \linebreak
	  \linebreak\begin{tt} \begin{scriptsize} device\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +/dev/sdb6\end{scriptsize} \end{tt} \linebreak
	  \linebreak\begin{tt} \begin{scriptsize} raid-disk\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  + 1\end{scriptsize} \end{tt} \linebreak
	  \linebreak\begin{tt} \begin{scriptsize} device\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +/dev/sdc6\end{scriptsize} \end{tt} \linebreak
	  \linebreak\begin{tt} \begin{scriptsize} raid-disk\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  + 2\end{scriptsize} \end{tt} \linebreak
	 

	 
  \par
  
  Möchten Sie Spare-Disks einsetzen, so werden sie analog der
  Konfiguration des {\bf RAID-1} Devices hinzugefügt, also:
	 

	 
	  \begin{tt} \begin{scriptsize} nr-spare-disks\verb+  +1\end{scriptsize} \end{tt} \linebreak
	  \linebreak\begin{tt} \begin{scriptsize} device\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +/dev/sdd6\end{scriptsize} \end{tt} \linebreak
	  \linebreak\begin{tt} \begin{scriptsize} spare-disk\verb+  +\verb+  +\verb+  +0\end{scriptsize} \end{tt} \linebreak
	 

	 
  \par
  
  Der Grund dafür, dass {\bf RAID-4} Verbunde nicht oft eingesetzt werden,
  liegt daran, dass die Paritäts-Partition immer die gesamten Daten des
  restlichen - als {\bf RAID-0} arbeitenden - Verbundes schreiben muss. Denkt
  man sich einen Extremfall, wo zehn Partitionen als {\bf RAID-0} arbeiten und
  eine Partition nun die gesamten Paritätsinformationen speichern soll,
  so wird unweigerlich deutlich, dass die Paritäts-Partition schnell
  überlastet ist.
	 

	 
  \par
  
  Initialisiert wird Ihr neues Device so:
	 

	 
	   \begin{tt} \begin{scriptsize} root@linux \~{}/ \# 
       mkraid -f /dev/md0
	   \end{scriptsize} \end{tt} \linebreak 
	 

	 
  \par
  
  Danach fehlt noch ein Dateisystem:
	 

	 
	   \begin{tt} \begin{scriptsize} root@linux \~{}/ \# 
       mke2fs /dev/md0
	   \end{scriptsize} \end{tt} \linebreak 
	 

	 
  \par
  
  Schon können Sie das Device überall hin mounten und in die /etc/fstab
  eintragen.
	 
	

	\subsubsection{RAID-5 (Striping \&amp; Distributed Parity)} \label{d35e3797}
        

	 

	 
  \par
  
  Ein {\bf RAID-5} Verbund löst nun das klassische {\bf RAID-4} Problem elegant,
  indem es die Paritätsinformationen gleichmäßig über alle im {\bf RAID-5}
  Verbund laufenden Partitionen verteilt. Hierdurch wird der
  Flaschenhals einer einzelnen Paritäts-Partition wirksam umgangen,
  weshalb sich {\bf RAID-5} als Sicherheit und Geschwindigkeit bietender
  RAID-Verbund großer Beliebtheit erfreut. Fällt eine Partition aus, beginnt
  das {\bf RAID-5}, falls Spare-Disks vorhanden sind, sofort mit der
  Rekonstruktion der Daten, allerdings kann {\bf RAID-5} auch nur den Verlust
  einer Partition verkraften. Genauso wie beim {\bf RAID-4} sind beim
  zeitgleichen Verlust zweier Partitionen alle Daten verloren. Eine
  {\bf /etc/raidtab} für ein {\bf RAID-5} Device sähe
  folgendermaßen aus:
	 

	 
	   \begin{tt} \begin{scriptsize} root@linux \~{}/ \# 
       raiddev /dev/md0
	   \end{scriptsize} \end{tt} \linebreak 
	  \begin{tt} \begin{scriptsize} raid-level\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +5\end{scriptsize} \end{tt} \linebreak
	   \linebreak\begin{tt} \begin{scriptsize} nr-raid-disks\verb+  +\verb+  +\verb+  +\verb+  +\verb+  + 3\end{scriptsize} \end{tt} \linebreak
	  \linebreak\begin{tt} \begin{scriptsize} nr-spare-disks\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +2\end{scriptsize} \end{tt} \linebreak
	  \linebreak\begin{tt} \begin{scriptsize} persistent-superblock\verb+  + 1\end{scriptsize} \end{tt} \linebreak
	  \linebreak\begin{tt} \begin{scriptsize} parity-algorithm\verb+  +\verb+  +\verb+  +\verb+  +left-symmetric\end{scriptsize} \end{tt} \linebreak
	  \linebreak\begin{tt} \begin{scriptsize} chunk-size\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +64\end{scriptsize} \end{tt} \linebreak
	  \linebreak\begin{tt} \begin{scriptsize} device\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +/dev/sda6\end{scriptsize} \end{tt} \linebreak
	  \linebreak\begin{tt} \begin{scriptsize} raid-disk\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  + 0\end{scriptsize} \end{tt} \linebreak
	  \linebreak\begin{tt} \begin{scriptsize} device\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +/dev/sdb6\end{scriptsize} \end{tt} \linebreak
	  \linebreak\begin{tt} \begin{scriptsize} raid-disk\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  + 1\end{scriptsize} \end{tt} \linebreak
	  \linebreak\begin{tt} \begin{scriptsize} device\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +/dev/sdc6\end{scriptsize} \end{tt} \linebreak
	  \linebreak\begin{tt} \begin{scriptsize} raid-disk\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  + 2\end{scriptsize} \end{tt} \linebreak
	  \linebreak\begin{tt} \begin{scriptsize} device\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +/dev/sdd6\end{scriptsize} \end{tt} \linebreak
	  \linebreak\begin{tt} \begin{scriptsize} spare-disk\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +0\end{scriptsize} \end{tt} \linebreak
	  \linebreak\begin{tt} \begin{scriptsize} device\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +/dev/sde6\end{scriptsize} \end{tt} \linebreak
	  \linebreak\begin{tt} \begin{scriptsize} spare-disk\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +1\end{scriptsize} \end{tt} \linebreak
	 

	 
  \par
  
  Bei diesem Beispiel sind gleich zwei Spare-Disks mit in die
  Konfiguration aufgenommen worden.
	 
	 
	 
  \par
  
  Der Parameter {\bf parity-algorithm} legt die Art der Ablage der
  Paritätsinformationen fest und kann nur auf {\bf RAID-5} Verbunde angewendet
  werden.  Die Auswahl {\bf left-symmetric} bietet die maximale Performance.
  Weitere Möglichkeiten sind {\bf left-asymmetric}, {\bf right-asymmetric} und
  {\bf right-symmetric}.
	 

	 
  \par
  
  Initialisiert wird Ihr neues Device so:
	 

	 
	   \begin{tt} \begin{scriptsize} root@linux \~{}/ \# 
  mkraid -f /dev/md0
	   \end{scriptsize} \end{tt} \linebreak 
	 

	 
  \par
  
  Danach fehlt noch ein Dateisystem:
	 

	 
	   \begin{tt} \begin{scriptsize} root@linux \~{}/ \# 
       mke2fs /dev/md0
	   \end{scriptsize} \end{tt} \linebreak 
	 

	 
  \par
  
  Schon können Sie das Device überall hin mounten und in die /etc/fstab
  eintragen.
	 
	

	\subsubsection{RAID-10 (Mirroring \&amp; Striping)} \label{d35e3934}
        

	 

	 
  \par
  
  Die Kombination aus {\bf RAID-1} und {\bf RAID-0} Verbunden kann sehr flexibel
  eingesetzt werden, ist aber mit Vorsicht zu genießen. Man muss hierbei
  genau darauf achten, welche RAID-Partitionen in welchen RAID-Verbund
  eingebaut werden sollen. Um allerdings die nötige Redundanz
  gewährleisten zu können, sind hierfür mindestens vier RAID-Partitionen
  auf unterschiedlichen Festplatten nötig. Als Beispiel erstellen wir
  zwei {\bf RAID-0} Verbunde über jeweils zwei verschiedene RAID-Partitionen,
  die anschließend per {\bf RAID-1} gespiegelt werden sollen. Eine passende
  {\bf /etc/raidtab} ohne Spare-Disks sähe dann so aus:
	 

	 
	   \begin{tt} \begin{scriptsize} root@linux \~{}/ \# 
  raiddev /dev/md0
	   \end{scriptsize} \end{tt} \linebreak 
	  \begin{tt} \begin{scriptsize} raid-level\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +0\end{scriptsize} \end{tt} \linebreak
	  \linebreak\begin{tt} \begin{scriptsize} nr-raid-disks\verb+  +\verb+  +\verb+  +\verb+  +\verb+  + 2\end{scriptsize} \end{tt} \linebreak
	  \linebreak\begin{tt} \begin{scriptsize} nr-spare-disks\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +0\end{scriptsize} \end{tt} \linebreak
	  \linebreak\begin{tt} \begin{scriptsize} persistent-superblock\verb+  + 1\end{scriptsize} \end{tt} \linebreak
	  \linebreak\begin{tt} \begin{scriptsize} chunk-size\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +4\end{scriptsize} \end{tt} \linebreak
	  \linebreak\begin{tt} \begin{scriptsize} 	\end{scriptsize} \end{tt} \linebreak
	  \linebreak\begin{tt} \begin{scriptsize} device\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +/dev/sda6\end{scriptsize} \end{tt} \linebreak
	  \linebreak\begin{tt} \begin{scriptsize} raid-disk\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  + 0\end{scriptsize} \end{tt} \linebreak
	  \linebreak\begin{tt} \begin{scriptsize} device\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +/dev/sdb6\end{scriptsize} \end{tt} \linebreak
	  \linebreak\begin{tt} \begin{scriptsize} raid-disk\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  + 1\end{scriptsize} \end{tt} \linebreak
	 

	 
	   \begin{tt} \begin{scriptsize} root@linux \~{}/ \# 
  raiddev /dev/md1
	   \end{scriptsize} \end{tt} \linebreak 
	  \begin{tt} \begin{scriptsize} raid-level\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +0\end{scriptsize} \end{tt} \linebreak
	  \linebreak\begin{tt} \begin{scriptsize} nr-raid-disks\verb+  +\verb+  +\verb+  +\verb+  +\verb+  + 2\end{scriptsize} \end{tt} \linebreak
	  \linebreak\begin{tt} \begin{scriptsize} nr-spare-disks\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +0\end{scriptsize} \end{tt} \linebreak
	  \linebreak\begin{tt} \begin{scriptsize} persistent-superblock\verb+  + 1\end{scriptsize} \end{tt} \linebreak
	  \linebreak\begin{tt} \begin{scriptsize} chunk-size\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +4\end{scriptsize} \end{tt} \linebreak
	  \linebreak\begin{tt} \begin{scriptsize} 	\end{scriptsize} \end{tt} \linebreak
	  \linebreak\begin{tt} \begin{scriptsize} device\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +/dev/sdc6\end{scriptsize} \end{tt} \linebreak
	  \linebreak\begin{tt} \begin{scriptsize} raid-disk\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  + 0\end{scriptsize} \end{tt} \linebreak
	  \linebreak\begin{tt} \begin{scriptsize} device\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +/dev/sdd6\end{scriptsize} \end{tt} \linebreak
	  \linebreak\begin{tt} \begin{scriptsize} raid-disk\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  + 1\end{scriptsize} \end{tt} \linebreak
	 
	 
	 
	   \begin{tt} \begin{scriptsize} root@linux \~{}/ \# 
  raiddev /dev/md2
	   \end{scriptsize} \end{tt} \linebreak 
	  \begin{tt} \begin{scriptsize} 	\verb+  +raid-level\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +1\end{scriptsize} \end{tt} \linebreak
	  \linebreak\begin{tt} \begin{scriptsize} nr-raid-disks\verb+  +\verb+  +\verb+  +\verb+  +\verb+  + 2\end{scriptsize} \end{tt} \linebreak
	  \linebreak\begin{tt} \begin{scriptsize} nr-spare-disks\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +0\end{scriptsize} \end{tt} \linebreak
	  \linebreak\begin{tt} \begin{scriptsize} persistent-superblock\verb+  + 1\end{scriptsize} \end{tt} \linebreak
	  \linebreak\begin{tt} \begin{scriptsize} chunk-size\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +4\end{scriptsize} \end{tt} \linebreak
	  \linebreak\begin{tt} \begin{scriptsize} 	\end{scriptsize} \end{tt} \linebreak
	  \linebreak\begin{tt} \begin{scriptsize} device\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +/dev/md0\end{scriptsize} \end{tt} \linebreak
	  \linebreak\begin{tt} \begin{scriptsize} raid-disk\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  + 0\end{scriptsize} \end{tt} \linebreak
	  \linebreak\begin{tt} \begin{scriptsize} device\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +/dev/md1\end{scriptsize} \end{tt} \linebreak
	  \linebreak\begin{tt} \begin{scriptsize} raid-disk\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  + 1\end{scriptsize} \end{tt} \linebreak
	 

	 
  \par
  
  Jetzt gilt es aber ein paar Kleinigkeiten zu beachten, denn anders als
  bei den anderen RAID-Verbunden haben wir hier gleich drei RAID-Arrays
  erstellt, wobei man sich überlegen muss, welches denn nun nachher
  überhaupt gemountet und mit Daten beschrieben werden soll. Die
  Reihenfolge ergibt sich aus der Datei {\bf /etc/raidtab}.{\bf  /dev/md0} wird
  nachher auf {\bf /dev/md1} gespiegelt.
	 

	 
  \par
  
  Jedes Devices muss für sich erstellt werden:
	 

	 
	   \begin{tt} \begin{scriptsize} root@linux \~{}/ \# 
       mkraid -f /dev/mdx
	   \end{scriptsize} \end{tt} \linebreak 
	 

	 
  \par
  
  Ein Dateisystem per{\bf  mke2fs} wird nur auf
  {\bf /dev/md0} und {\bf /dev/md1}
  erstellt.
	 

	 
  \par
  
  Die beste Reihenfolge ist, erst das Device {\bf /dev/md0} zu erstellen, zu
  formatieren und zu mounten. Dann wird {\bf /dev/md1} erstellt und
  formatiert. Dieses bitte nicht mounten, da ja hier keine Daten drauf
  geschrieben werden sollen. Zuletzt wird nun mittels
	 

	 
	   \begin{tt} \begin{scriptsize} root@linux \~{}/ \# 
       mkraid -f /dev/md2
	   \end{scriptsize} \end{tt} \linebreak 
	 

	 
  \par
  
  das {\bf RAID-1} Array erstellt, jedoch sollte man hier wirklich kein
  Dateisystem erstellen. Ab jetzt kann man mittels
	 

	 
	   \begin{tt} \begin{scriptsize} root@linux \~{}/ \# 
       cat /proc/mdstat
	   \end{scriptsize} \end{tt} \linebreak 
	 

	 
  \par
  
  die Synchronisation der beiden {\bf RAID-0} Verbunde
  {\bf /dev/md0} und {\bf /dev/md1}
  verfolgen. Ist die Synchronisation abgeschlossen, werden alle Daten,
  die auf {\bf /dev/md0} geschrieben werden, auf {\bf /dev/md1} gespiegelt.
  Aktiviert, gemountet und in die Datei {\bf /etc/fstab} eingetragen wird
  letzthin nur {\bf /dev/md0}. Natürlich könnte man auch {\bf /dev/md1} mounten,
  jedoch sollte man sich für ein Device entscheiden. Ausgeschlossen ist
  allerdings das Mounten von {\bf /dev/md2}.
	 
	
   
  \section{Weitere Optionen des neuen RAID-Patches} \label{d35e4163}
        

   

   \subsection{Autodetection} \label{d35e4170}
        

	

	
  \par
  
  Die Autodetection beschreibt einen Kernel-Parameter, der in allen
  beschriebenen Kernel-Vorbereitungen als zu aktivieren gekennzeichnet
  wurde. Er erlaubt das automatische Erkennen und Starten der diversen
  im System vorhandenen RAID-Verbunde schon während des Bootvorganges
  von Linux und somit auch die Nutzung eines RAID-Verbundes als
  Root-Partition.
	

	
  \par
  
  Näheres zur Nutzung eines RAID-Verbundes als Root-Partition finden Sie
	 im Abschnitt Root-Partition oder Swap-Partition als RAID.
	
   

   \subsection{Persistent-Superblock} \label{d35e4187}
        

	

	
  \par
  
 Diese überaus nützliche Option ist uns nun in jeder {\bf /etc/raidtab}
 Konfiguration über den Weg gelaufen und mit dem Wert {\bf 1} eingetragen
 gewesen, doch was bedeutet er?
	

	
  \par
  
  Erinnern Sie sich noch an die MD-Tools oder gar an die mdtab? Mit
  diesen älteren Tools wurde eine Datei {\bf /etc/mdtab} erstellt, die in
  älteren RAID-Unterstützungen die Konfiguration Ihres RAID-Verbundes
  inklusiv einer Prüfsumme enthielt.
	

	
  \par
  
  Sollte nun ein RAID-Verbund gestartet werden, so musste der Kernel
  erst mal diese Datei auslesen, um überhaupt zu erfahren, wo er welches
  RAID mit welchen Partitionen zu starten hatte. Haben Sie den Abschnitt
  über die Root-Partition als RAID gelesen, so ahnen Sie es schon: Um an
  diese Datei heranzukommen, muss aber erst mal das darrunterliegende
  Dateisystem laufen. Eine Zeit lang war es mit der neueren
  Konfigurationsdatei {\bf /etc/raidtab} genauso, aber hier nun tritt der
  Parameter {\bf persistent-superblock} in Aktion. Die möglichen Werte dafür
  sind {\bf 0} und {\bf 1}. Ist der Wert auf
  {\bf 0} gesetzt, so verhält sich das
  Starten der RAIDs gemäß dem oben beschriebenen Vorgang. Ist er
  allerdings auf {\bf 1} gesetzt, wird beim Erstellen jedes neuen
  RAID-Verbundes an das Ende jeder Partition ein spezieller Superblock
  geschrieben, der es dem Kernel erlaubt, die benötigten Informationen
  über das RAID direkt von den jeweiligen Partitionen zu lesen, ohne ein
  Dateisystem gemountet zu haben. Trotzdem sollten Sie immer eine
  {\bf /etc/raidtab} pflegen und beibehalten. Ist im Kernel die Autodetection
  aktiviert, so werden die RAID-Arrays mit aktiviertem
  Persistent-Superblock sogar direkt gestartet. Dies befähigt Sie, ganz simpel
  jedes RAID-Array als {\bf /dev/md0}, {\bf /dev/md1} usw. einfach und problemlos in
  die {\bf /etc/fstab} zu setzen. Der Kernel kümmert sich um das Aktivieren
  beim Startup, wodurch ein
	

	
	  \begin{tt} \begin{scriptsize} root@linux \~{}/ \# 
       raidstart /dev/md0
	  \end{scriptsize} \end{tt} \linebreak 
	

	
  \par
  
  ebenso wie ein
	

	
	  \begin{tt} \begin{scriptsize} root@linux \~{}/ \# 
	raidstop /dev/md0
	  \end{scriptsize} \end{tt} \linebreak 
	

	
  \par
  
  beim Systemhalt überflüssig ist.
	

	
  \par
  
  Abgesehen davon ermöglicht diese Option auch das Booten von einem
  {\bf RAID-4} oder {\bf RAID-5} Array als
  Root-Partition. Näheres zur Einrichtung
  eines RAID-Arrays als Root-Partition finden Sie im Abschnitt
  Root-Partition oder Swap-Partition als RAID.
	
   

   \subsection{Spare-Disks} \label{d35e4273}
        

	

	
  \par
  
  Spare-Disks bezeichnen Festplatten-Partitionen, die mit Hilfe der
  {\bf /etc/raidtab} zwar schon einem bestimmten RAID-Verbund zugewiesen
  wurden, jedoch solange nicht benutzt werden, bis irgendwann mal eine
  Partition ausfällt. Dann allerdings wird die defekte Partition sofort
  durch die Spare-Disk ersetzt und die Rekonstruktion der Daten aus den
  Paritätsinformationen wird gestartet. Den Fortschritt dieser
  Rekonstruktion können Sie - wie alles über RAID-Devices - mittels
	

	
	  \begin{tt} \begin{scriptsize} root@linux \~{}/ \# 
       cat /proc/mdstat
	  \end{scriptsize} \end{tt} \linebreak 
	

	
  \par
  
  nachvollziehen. Eine Spare-Disk sollte mindestens genauso groß oder
  größer sein als die anderen verwendeten RAID-Partitionen. Ist eine
  Spare-Disk kleiner als die verwendeten RAID-Partitionen und ist der
  RAID-Verbund fast voll mit Daten, so kann bei einem Ausfall einer
  RAID-Partition die Spare-Disk natürlich nicht alle Daten aufnehmen,
  was unweigerlich zu Problemen führt.
	
   

   \subsection{Spare-Disks und Hot Plugging} \label{d35e4296}
        

	

	
  \par
  
  Dank der neuen RAID-Tools ist es auch möglich, eine Spare-Disk
  nachträglich in einen bereits vorhandenen RAID-Verbund einzufügen.
  Sinnvoll ist dieser Vorgang natürlich nur bei RAID-Modi, welche auch
  mit Spare-Disks umgehen können.  Erweitern Sie dazu erst Ihre
  {\bf /etc/raidtab} um die neue Spare-Disk. Dies ist zwar für den
  eigentlichen Vorgang nicht zwingend notwendig, jedoch empfiehlt es
  sich immer, eine sorgfältig gepflegte RAID-Konfigurationsdatei zu
  besitzen.  Führen Sie dann zum Beispiel den Befehl
	

	
	  \begin{tt} \begin{scriptsize} root@linux \~{}/ \# 
       raidhotadd /dev/md2 /dev/sde4
	  \end{scriptsize} \end{tt} \linebreak 
	

	
  \par
  
  aus, um in Ihren dritten RAID-Verbund die vierte Partition Ihrer
  fünften SCSI-Festplatte einzufügen. Der Befehl {\bf raidhotadd} fügt die
  neue Partition automatisch als Spare-Disk ein und aktualisiert auch
  gleich die Superblöcke aller in diesem RAID-Verbund befindlichen
  Partitionen. Somit brauchen Sie keine weiteren Schritte zu unternehmen,
  um die neue Spare-Disk Ihren anderen RAID-Partitionen als nutzbar
  bekannt zu geben.
	

	
  \par
  
  Diesen Befehl kann man sich auch zu Nutze machen, einen intakten
  RAID-Verbund dazu zu bewegen, die Superblöcke neu zu schreiben oder sich zu
  synchronisieren.  Der analog zu verwendende Befehl raidhotremove
  entfernt eine so hinzugefügte Spare-Disk natürlich auch wieder aus dem
  RAID-Array.
	
   
  \section{Fehlerbehebung} \label{d35e4329}
        

	  

	
  \par
  
  An dieser Stelle wird auf das Verhalten der unterschiedlichen
  RAID-Verbunde im Fehlerfall eingegangen. Die Szenarien zum Restaurieren
  defekter RAID-Verbunde reichen von den verschiedenen RAID-Modi bis hin
  zu Hot Plugging und Spare-Disks.
	

	
  \par
  
  Die folgenden Beschreibungen stützen sich alle auf den Kernel 2.2.10
  mit den passenden RAID-Tools und Kernel-Patches, entsprechen also der
  Einrichtfunktionalität des Abschnittes über die neuen RAID-Tools
  Version 0.9x.  Die RAID-Verbunde, welche mit den MD-Tools unter der
  DLD 6.0 und DLD 6.01 eingerichtet und damit quasi auf die alte Art mit
  den RAID-Tools Version 0.4x erstellt wurden, werden mangels
  ausgiebiger Tests nicht berücksichtigt.
	

	
  \par
  
  Da sich viele Möglichkeiten der Synchronisation und der überwachung
  von RAID-Verbunden auf spezielle Funktionen und Optionen der neuen
  RAID-Tools beziehen, kann man die im folgenden geschilderten
  Prozeduren nicht mal näherungsweise auf RAID-Verbunde, die mit den
  alten RAID-Tools Version 0.4x eingerichtet wurden, beziehen. Solange
  das noch nicht getestet wurde, sind Sie hier auf sich gestellt.
	

	  \subsection{Linear (Append) Modus und RAID-0 (Stripping)} \label{d35e4345}
        

		

	 
  \par
  
  Hier ist die Möglichkeit der Rekonstruktion von Daten schnell erklärt.
  Da diese RAID-Modi keine Redundanz ermöglichen, sind beim Ausfall
  einer Festplatte alle Daten verloren. Definitiv gilt das für {\bf RAID-0};
  beim Linear Modus können Sie eventuell mit viel Glück noch einige
  Daten einer RAID-Partition sichern, so es denn die erste Partition ist
  und Sie irgendwie in der Lage sind, die Partition einzeln zu Mounten.
  Da {\bf RAID-0} die Daten parallel schreibt, erhalten Sie - auch wenn Sie
  eine Partition des {\bf RAID-0} Verbundes gemountet bekommen - niemals mehr
  als einen zusammenhängenden Block. Meiner Meinung nach ist an dieser
  Stelle eine Datenrettung von einem {\bf RAID-0} Verbund sehr sehr
  schwierig.
	 
	

	\subsection{RAID-1, RAID-4 und RAID-5 ohne Spare-Disk} \label{d35e4368}
        

	 

	 
  \par
  
  Alle drei RAID-Modi versprechen Redundanz. Doch was muss gezielt getan
  werden, wenn hier eine Festplatte oder eine RAID-Partition ausfällt?
  Generell bieten sich einem zwei Wege, um die defekte Festplatte durch
  eine neue zu ersetzen.  Bedenken Sie bei dieser Beschreibung, dass
  RAID-Partition und Festplatte synonym verwendet wird. Ich gehe von
  einer Partition je Festplatte aus. Die eine Methode beschreibt den
  {\bf heißen} Weg. Hierbei wird die Festplatte im laufenden Betrieb
  ausgetauscht. Die andere Methode beschreibt entsprechend den sicheren
  Weg. Beide Möglichkeiten haben für die RAID-Modi 1, 4 und 5
  funktioniert.  Seien Sie insbesondere mit dem {\bf heißen} Weg trotzdem
  sehr vorsichtig, da die Benutzung dieser Befehle nicht Hot Plugging
  fähige Hardware zerstören könnte.
	 
	

	\subsection{Der ''heiße'' Weg (Hot Plugging)} \label{d35e4385}
        

	 
		
	 
  \par
  
  Vorab muss gesagt werden, dass Hot Plugging unter Linux auch vom
  SCSI-Treiber unterstützt werden muss, versuchen Sie Hot Plugging aber
  niemals mit (E)IDE Laufwerken. Zwar sollen alle Linux SCSI-Treiber des
  hier verwendeten 2.2.10er Kernels Hot Plugging unterstützen, jedoch
  ist dies nur bei dem Adaptec und Symbios Treiber sicher der Fall. Auch
  sollte Ihre Hardware und damit Ihr SCSI Kontroller und Ihre
  SCSI-Festplatten Hot Plugging unterstützen. Wie man das herausbekommt,
  ist schwer zu sagen, allerdings hat es auch mit einem fünf Jahre alten
  Symbios Kontroller und mehreren IBM-DCAS-UW Festplatten funktioniert.
  Generell ist die meiste im Consumer Bereich verfügbare Hardware nicht
  Hot Plugging fähig. Die zu Testzwecken eingesetzten UW-Wechselrahmen
  kosten etwa 125,- EUR und haben alle Hot Plugging Tests klaglos
  verkraftet.
	 

	 
  \par
  
  Haben Sie irgendwelche Zweifel und sind nicht gezwungen, Hot Plugging
  zu nutzen, dann lesen Sie hier gar nicht erst weiter, sondern springen
  Sie sofort zu der {\bf sicheren} Beschreibung. Auch ergeben sich aus
  meinen erfolgreichen Tests keine Garantien für irgendeinen Erfolg. Mit
  allem Nachdruck muss daher an dieser Stelle auf die Möglichkeit der
  Zerstörung Ihrer Hardware durch die Benutzung von Hot Plugging mit
  ungeeigneter Hardware hingewiesen werden.
	 

	 
  \par
  
  Ihr {\bf RAID-1}, {\bf 4} oder {\bf 5} ist gemäß einer der vorherigen Anleitungen
  erstellt worden und betriebsbereit. Um den ganzen Ablauf zu
  vereinfachen, wird ab jetzt nur noch von einem {\bf RAID-5} ausgegangen und
  auch die Beispielauszüge mittels {\bf cat /proc/mdstat} beschreiben ein
  {\bf RAID-5}; {\bf RAID-1} und
  {\bf RAID-4} Benutzer können analog verfahren, richten
  aber bitte eine erhöhte Aufmerksamkeit auf die Unterscheidung und
  Abstraktion der Meldungsparameter.
	 

	 
  \par
  
  Das Beispiel-{\bf RAID-5} ist in der {\bf /etc/raidtab} so
  eingetragen:
	 


	 
	   \begin{tt} \begin{scriptsize} root@linux \~{}/ \# 
  raiddev /dev/md0
	   \end{scriptsize} \end{tt} \linebreak 
	  \begin{tt} \begin{scriptsize} raid-level\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +5 \linebreak 	\verb+  + 	\end{scriptsize} \end{tt} \linebreak
	  \linebreak\begin{tt} \begin{scriptsize} nr-raid-disks\verb+  +\verb+  +\verb+  +\verb+  +\verb+  + 4\end{scriptsize} \end{tt} \linebreak
	  \linebreak\begin{tt} \begin{scriptsize} nr-spare-disks\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +0\end{scriptsize} \end{tt} \linebreak
	  \linebreak\begin{tt} \begin{scriptsize} parity-algorithm\verb+  +\verb+  +\verb+  +\verb+  +left-symmetric\end{scriptsize} \end{tt} \linebreak
	  \linebreak\begin{tt} \begin{scriptsize} persistent-superblock\verb+  + 1\end{scriptsize} \end{tt} \linebreak
	  \linebreak\begin{tt} \begin{scriptsize} chunk-size\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +32\end{scriptsize} \end{tt} \linebreak
	  \linebreak\begin{tt} \begin{scriptsize} device\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +/dev/sda5 \linebreak 	\verb+  + 	\end{scriptsize} \end{tt} \linebreak
	  \linebreak\begin{tt} \begin{scriptsize} raid-disk\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  + 0\end{scriptsize} \end{tt} \linebreak
	  \linebreak\begin{tt} \begin{scriptsize} device\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +/dev/sdb6\end{scriptsize} \end{tt} \linebreak
	  \linebreak\begin{tt} \begin{scriptsize} raid-disk\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  + 1\end{scriptsize} \end{tt} \linebreak
	  \linebreak\begin{tt} \begin{scriptsize} device\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +/dev/sdc6\end{scriptsize} \end{tt} \linebreak
	  \linebreak\begin{tt} \begin{scriptsize} raid-disk\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  + 2\end{scriptsize} \end{tt} \linebreak
	  \linebreak\begin{tt} \begin{scriptsize} device\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +/dev/sdd1\end{scriptsize} \end{tt} \linebreak
	  \linebreak\begin{tt} \begin{scriptsize} raid-disk\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  + 3\end{scriptsize} \end{tt} \linebreak
	 

	 
  \par
  
	  {\bf cat /proc/mdstat} meldet einen ordentlich laufenden
  {\bf RAID-5}-Verbund:
	 


	 
	  \begin{tt} \begin{scriptsize} Personalities : [linear] [raid0] [raid1] [raid5] [hsm] read\_ahead 1024 sectors \linebreak \verb+  + 	\end{scriptsize} \end{tt} \linebreak
	  \linebreak\begin{tt} \begin{scriptsize} md0 : active raid5 sdd1[3] sdc6[2] sdb6[1] sda5[0] 633984 blocks level5, 32k chunk, algorithm 2 [4/4] [UUUU]\end{scriptsize} \end{tt} \linebreak
	  \linebreak\begin{tt} \begin{scriptsize} unused devices: \verb+<+none\verb+>+\end{scriptsize} \end{tt} \linebreak
	 

	 
  \par
  
  Jetzt fällt die Festplatte {\bf /dev/sdd} komplett aus. Beim nächsten
  Zugriff auf das {\bf RAID-5} wird der Mangel erkannt, der SCSI-Bus wird
  resetet und das {\bf RAID-5} läuft relativ unbeeindruckt weiter. Die defekte
  RAID-Partition wird lediglich mit {\bf (F)} gekennzeichnet und fehlt in
  den durch ein {\bf U} markierten gestarteten RAID-Partitionen:
	 


	 
	  \begin{tt} \begin{scriptsize} Personalities : [linear] [raid0] [raid1] [raid5] [hsm] read\_ahead 1024sectors\end{scriptsize} \end{tt} \linebreak
	  \linebreak\begin{tt} \begin{scriptsize} md0 : active raid5 sdd1[3](F) sdc6[2] sdb6[1] sda5[0] 633984 blocks level 5, 32k chunk, algorithm 2 [4/3] [UUU\_]\end{scriptsize} \end{tt} \linebreak
	  \linebreak\begin{tt} \begin{scriptsize} unused devices: \verb+<+none\verb+>+\end{scriptsize} \end{tt} \linebreak
	 

	 
  \par
  
  Jetzt möchten Sie wieder ein redundantes System bekommen, ohne den
  Rechner neu booten zu müssen und ohne Ihr gemountetes {\bf RAID-5} stoppen
  zu müssen. Entfernen Sie dafür die defekte RAID-Partition ({\bf /dev/sdd1})
  mittels des bei den RAID-Tools beiliegenden Hilfsprogramms
  {\bf raidhotremove} aus dem aktiven RAID-Verbund ({\bf /dev/md0}):
	 

	 
	   \begin{tt} \begin{scriptsize} root@linux \~{}/ \# 
       raidhotremove /dev/md0 /dev/sdd1
	   \end{scriptsize} \end{tt} \linebreak 
	 

	 
  \par
  
  Ein{\bf  cat /proc/mdstat} hat sich nun dahingehend verändert, dass die
  defekte Partition komplett rausgenommen wurde und Ihnen eine fehlende
  Partition, um Redundanz zu gewährleisten, mit {\bf [UUU\_]} angezeigt
  wird:
	 

	 
	  \begin{tt} \begin{scriptsize} Personalities : [linear] [raid0] [raid1] [raid5] [hsm] read\_ahead 1024sectors\end{scriptsize} \end{tt} \linebreak
	  \linebreak\begin{tt} \begin{scriptsize} md0 : active raid5 sdc6[2] sdb6[1] sda5[0] 633984 blocks level 5, 32k chunk, algorithm 2 [4/3] [UUU\_]\end{scriptsize} \end{tt} \linebreak
	  \linebreak\begin{tt} \begin{scriptsize} unused devices: \verb+<+none\verb+>+\end{scriptsize} \end{tt} \linebreak
	 

	 
  \par
  
  Tauschen Sie jetzt Ihre hoffentlich in einem guten Wechselrahmen
  befindliche defekte Festplatte gegen eine neue aus und erstellen Sie
  eine Partition darauf. Anschließend geben Sie den Befehl, diese neue
  RAID-Partition wieder in das laufende Array einzubinden:
	 

	 
	   \begin{tt} \begin{scriptsize} root@linux \~{}/ \# 
       raidhotadd /dev/md0 /dev/sdd1
	   \end{scriptsize} \end{tt} \linebreak 
	 

	 
  \par
  
  Der Daemon raid5d macht sich nun daran, die neue RAID-Partition mit
  den anderen zu synchronisieren:
	 

	 
	  \begin{tt} \begin{scriptsize} Personalities : [linear] [raid0] [raid1] [raid5] [hsm] read\_ahead 1024sectors\end{scriptsize} \end{tt} \linebreak
	  \linebreak\begin{tt} \begin{scriptsize} md0 : active raid5 sdd1[4] sdc6[2] sdb6[1] sda5[0] 633984 blockslevel5, 32k chunk, algorithm 2 [4/3] [UUU\_] recovery=7% finish=4.3min\end{scriptsize} \end{tt} \linebreak
	  \linebreak\begin{tt} \begin{scriptsize} unused devices: \verb+<+none\verb+>+\end{scriptsize} \end{tt} \linebreak
	 

	 
  \par
  
  Der Abschluss dieses Vorganges wird mit einem ebenso lapidaren wie
  beruhigendem {\bf resync finished} quittiert. Eine Kontrolle ergibt
  tatsächlich ein wieder vollständig redundantes und funktionstüchtiges
  {\bf RAID-5}:
	 

	 
	  \begin{tt} \begin{scriptsize} Personalities : [linear] [raid0] [raid1] [raid5] [hsm] read\_ahead 1024sectors\end{scriptsize} \end{tt} \linebreak
	  \linebreak\begin{tt} \begin{scriptsize} md0 : active raid5 sdd1[3] sdc6[2] sdb6[1] sda5[0] 633984 blocks level5, 32k chunk, algorithm 2 [4/4] [UUUU]\end{scriptsize} \end{tt} \linebreak
	  \linebreak\begin{tt} \begin{scriptsize} unused devices: \verb+<+none\verb+>+\end{scriptsize} \end{tt} \linebreak
	 

	 
  \par
  
  Als ob nicht gewesen wäre.
	 


		\subsubsection{Der sichere Weg} \label{d35e4626}
        

		  

	  
  \par
  
  Diese Methode sieht einen Wechsel einer defekten Festplatte in einem
  System vor, das ruhig für einige Zeit heruntergefahren werden kann.
	  
	  
	  
  \par
  
  Ihr {\bf RAID-1}, {\bf 4} oder {\bf 5} ist gemäß einer der vorherigen Anleitungen
  erstellt worden und betriebsbereit. Um den ganzen Ablauf zu
  vereinfachen, wird ab jetzt nur noch von einem {\bf RAID-5} ausgegangen und
  auch die Beispielauszüge mittels {\bf cat /proc/mdstat} beschreiben ein
  {\bf RAID-5}; {\bf RAID-1} und
  {\bf RAID-4} Benutzer können
   analog verfahren, richten aber bitte eine erhöhte Aufmerksamkeit auf die Unterscheidung und
  Abstraktion der Meldungsparameter.
	  

	  
  \par
  
   Das Beispiel {\bf RAID-5} ist in der {\bf /etc/raidtab} so
  eingetragen:
	  


	  
	    \begin{tt} \begin{scriptsize} root@linux \~{}/ \# 
       raiddev /dev/md0
	    \end{scriptsize} \end{tt} \linebreak 
	   \begin{tt} \begin{scriptsize} raid-level\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +5\end{scriptsize} \end{tt} \linebreak
	   \linebreak\begin{tt} \begin{scriptsize} nr-raid-disks\verb+  +\verb+  +\verb+  +\verb+  +\verb+  + 4\end{scriptsize} \end{tt} \linebreak
	   \linebreak\begin{tt} \begin{scriptsize} nr-spare-disks\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +0\end{scriptsize} \end{tt} \linebreak
	   \linebreak\begin{tt} \begin{scriptsize} parity-algorithm\verb+  +\verb+  +\verb+  +\verb+  +left-symmetric\end{scriptsize} \end{tt} \linebreak
	   \linebreak\begin{tt} \begin{scriptsize} persistent-superblock\verb+  + 1\end{scriptsize} \end{tt} \linebreak
	   \linebreak\begin{tt} \begin{scriptsize} chunk-size\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +32\end{scriptsize} \end{tt} \linebreak
	   \linebreak\begin{tt} \begin{scriptsize} device\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +/dev/sda5\end{scriptsize} \end{tt} \linebreak
	   \linebreak\begin{tt} \begin{scriptsize} raid-disk\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  + 0\end{scriptsize} \end{tt} \linebreak
	   \linebreak\begin{tt} \begin{scriptsize} device\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +/dev/sdb6\end{scriptsize} \end{tt} \linebreak
	   \linebreak\begin{tt} \begin{scriptsize} raid-disk\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  + 1\end{scriptsize} \end{tt} \linebreak
	   \linebreak\begin{tt} \begin{scriptsize} device\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +/dev/sdc6\end{scriptsize} \end{tt} \linebreak
	   \linebreak\begin{tt} \begin{scriptsize} raid-disk\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  + 2\end{scriptsize} \end{tt} \linebreak
	   \linebreak\begin{tt} \begin{scriptsize} device\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +/dev/sdd1\end{scriptsize} \end{tt} \linebreak
	   \linebreak\begin{tt} \begin{scriptsize} raid-disk\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  + 3\end{scriptsize} \end{tt} \linebreak
	  

	  
  \par
  
   {\bf cat /proc/mdstat} meldet einen ordentlich
   laufenden {\bf RAID-5}-Verbund:
	  

	  
	   \begin{tt} \begin{scriptsize} Personalities : [linear] [raid0] [raid1] [raid5] [hsm]\end{scriptsize} \end{tt} \linebreak
	   \linebreak\begin{tt} \begin{scriptsize} 		read\_ahead 1024 sectors\end{scriptsize} \end{tt} \linebreak
	   \linebreak\begin{tt} \begin{scriptsize} md0 : active raid5 sdd1[3] sdc6[2] sdb6[1] sda5[0] 633984 blocks level5, 32k chunk, algorithm 2 [4/4] [UUUU]\end{scriptsize} \end{tt} \linebreak
	   \linebreak\begin{tt} \begin{scriptsize} unused devices: \verb+<+none\verb+>+\end{scriptsize} \end{tt} \linebreak
	  

	  
  \par
  
  Jetzt fällt die Festplatte {\bf /dev/sdd} komplett aus. Beim nächsten
  Zugriff auf das {\bf RAID-5} wird der Mangel erkannt, der SCSI-Bus wird
  resetet und das {\bf RAID-5} läuft relativ unbeeindruckt weiter. Die defekte
  RAID-Partition wird lediglich mit {\bf (F)}
  gekennzeichnet:
	  

	  
	   \begin{tt} \begin{scriptsize} Personalities : [linear] [raid0] [raid1] [raid5] [hsm] read\_ahead 1024sectors\end{scriptsize} \end{tt} \linebreak
	   \linebreak\begin{tt} \begin{scriptsize} md0 : active raid5 sdd1[3](F) sdc6[2] sdb6[1] sda5[0] 633984 blocks level 5, 32k chunk, algorithm 2 [4/3] [UUU\_]\end{scriptsize} \end{tt} \linebreak
	   \linebreak\begin{tt} \begin{scriptsize} unused devices: \verb+<+none\verb+>+\end{scriptsize} \end{tt} \linebreak
	   

	  
  \par
  
  Jetzt möchten Sie wieder ein redundantes System bekommen. Fahren Sie
  dazu Ihren Rechner herunter und tauschen Sie die defekte Festplatte
  gegen eine neue aus. Nach dem Startup müssen Sie auf der neuen
  Festplatte eine entsprechende Partition möglichst auch mit der
  RAID-Autostart Option durch das {\bf fd} Flag einrichten. Ist die neue
  Partitionsangabe identisch mit der auf der defekten Festplatte,
  brauchen Sie nichts weiter zu machen, ansonsten müssen Sie noch Ihre
  {\bf /etc/raidtab} anpassen. Weiterhin ist es erforderlich, dass Ihr
  RAID-Verbund läuft. Ist das nicht bereits während des Bootvorganges
  erfolgt, müssen Sie selbiges jetzt nachholen:
	  

	  
	    \begin{tt} \begin{scriptsize} root@linux \~{}/ \# 
	  raidstart /dev/md0
	    \end{scriptsize} \end{tt} \linebreak 
	  

	  
  \par
  
  Jetzt fehlt noch der Befehl, um die neue RAID-Partition wieder in das
  {\bf RAID-5} einzuarbeiten und die {\bf persistent-superblocks} neu zu
  schreiben. Hierbei werden keine vorhandenen Daten auf dem bestehenden
  {\bf RAID-5} Verbund zerstört, es sei denn, Sie haben sich bei der eventuell
  nötigen Aktualisierung der {\bf /etc/raidtab} vertan. Prüfen Sie alles
  dringend noch mal. Ansonsten:
	  

	  
	    \begin{tt} \begin{scriptsize} root@linux \~{}/ \# 
       raidhotadd /dev/md0 /dev/sdd1
	    \end{scriptsize} \end{tt} \linebreak 
	  

	  
  \par
  
  Dieser Befehl suggeriert zwar, dass hier eine Art Hot Plugging
  stattfindet, heißt in diesem Zusammenhang aber nichts anderes, als dass
  eine RAID-Partition in ein vorhandenes RAID-Array eingearbeitet wird.
  Würden Sie stattdessen den Befehl mkraid mit seinen Parametern
  aufrufen, würde dies zwar auch zu dem Erfolg führen, ein neues
  RAID-Array zu erstellen, jedoch dummerweise ohne Daten und damit natürlich
  auch und vor allem ohne die bisher vorhandenen Daten.
	  

	  
  \par
  
	   Inspizieren Sie anschließend den Verlauf wieder mittels {\bf cat
  /proc/mdstat}:
	  

	  
	   \begin{tt} \begin{scriptsize} Personalities : [linear] [raid0] [raid1] [raid5] [hsm] read\_ahead 1024sectors\end{scriptsize} \end{tt} \linebreak
	   \linebreak\begin{tt} \begin{scriptsize} md0 : active raid5 sdd1[3] sdc6[2] sdb6[1] sda5[0] 633984 blocks level5, 32k chunk, algorithm 2 [4/4] [UUUU] resync=57% finish=1.7min\end{scriptsize} \end{tt} \linebreak
	   \linebreak\begin{tt} \begin{scriptsize} unused devices: \verb+<+none\verb+>+\end{scriptsize} \end{tt} \linebreak
	   

	  
  \par
  
  Der Abschluss dieses Vorganges wird mit einem ebenso lapidaren wie
  beruhigendem {\bf resync finished} quittiert. Eine Kontrolle ergibt
  tatsächlich ein wieder vollständig redundantes und funktionstüchtiges
  {\bf RAID-5}:
	  

	  
	   \begin{tt} \begin{scriptsize} Personalities : [linear] [raid0] [raid1] [raid5] [hsm] read\_ahead 1024sectors\end{scriptsize} \end{tt} \linebreak
	   \linebreak\begin{tt} \begin{scriptsize} md0 : active raid5 sdd1[3] sdc6[2] sdb6[1] sda5[0] 633984 blocks level5, 32k chunk, algorithm 2 [4/4] [UUUU]\end{scriptsize} \end{tt} \linebreak
	   \linebreak\begin{tt} \begin{scriptsize} unused devices: \verb+<+none\verb+>+\end{scriptsize} \end{tt} \linebreak
	   

	  
  \par
  
  Das {\bf RAID-5} Array muss nun lediglich wieder in den Verzeichnisbaum
  gemountet werden, falls Ihr RAID-Array nicht bereits innerhalb der
  {\bf /etc/fstab} während des Bootvorganges gemountet wurde:
	  

	  
	    \begin{tt} \begin{scriptsize} root@linux \~{}/ \# 
	  mount /dev/md0 /mount-point
	    \end{scriptsize} \end{tt} \linebreak 
	  

	  
  \par
  
  Hiermit haben Sie wieder ein vollständig redundantes und lauffähiges
  {\bf RAID-5} Array hergestellt.
	  
	 
	

	\subsection{RAID-1, RAID-4 und RAID-5 mit Spare-Disk} \label{d35e4872}
        

	 

	 \subsubsection{Der ''heiße'' Weg (Hot Plugging)} \label{d35e4879}
        

	  

	  
  \par
  
  Um bei einem {\bf RAID-1}, {\bf 4} oder
  {\bf 5} Verbund mit einer Spare-Disk per Hot
  Plugging, also ohne den RAID-Verbund auch nur herunterzufahren, eine
  RAID-Partition per {\bf raidhotremove} aus dem laufenden Verbund zu
  entfernen und durch eine neue RAID-Partition zu ersetzen, sind die
  aktuellsten RAID-Tools erforderlich.  Erst diese haben durch das neue
  Programm {\bf raidsetfaulty} die Möglichkeit, die ausgefallene
  RAID-Partition als defekt zu markieren und so den Befehl {\bf raidhotremove} zu
  ermöglichen. Zu beachten ist hier, dass bei einem Festplattenausfall
  die Spare-Disk sofort eingearbeitet und das System anschließend auch
  wieder Redundant ist und somit natürlich nicht die Spare-Disk, sondern
  die ausgefallene RAID-Partition als defekt markiert, ausgetauscht und
  als neue Spare-Disk wieder eingesetzt werden muss.
	  

	  
  \par
  
  Auch an dieser Stelle muss auf die Gefahr der teilweisen oder
  vollständigen Zerstörung Ihrer Hardware hingewiesen werden, sollte
  diese nicht Hot Plugging fähig sein. Haben Sie die Möglichkeit zu
  wählen, benutzen Sie immer die sichere Methode.
	  
	 

	 \subsubsection{Der sichere Weg} \label{d35e4911}
        

	  
		  
	  
  \par
  
Ein normal laufender {\bf RAID-5} Verbund mit Spare-Disk sollte bei einem
RAID-Verbund {\bf /dev/md0} mit den RAID-Partitionen
{\bf /dev/sdb1}, {\bf /dev/sdc1}
und {\bf /dev/sdd1} plus der Spare-Disk
{\bf /dev/sde1} unter {\bf /proc/mdstat}
folgendes zeigen:
	  

	  
	   \begin{tt} \begin{scriptsize} Personalities : [raid5]read\_ahead 1024 sectors\end{scriptsize} \end{tt} \linebreak
	   \linebreak\begin{tt} \begin{scriptsize} md0 : active raid5 sde1[3] sdd1[2] sdc1[1] sdb1[0] 782080 blocks level5, 32k chunk, algorithm 2 [3/3] [UUU]\end{scriptsize} \end{tt} \linebreak
	   \linebreak\begin{tt} \begin{scriptsize} unused devices: \verb+<+none\verb+>+\end{scriptsize} \end{tt} \linebreak
	   

	  
  \par
  
  Durch das Entriegeln des Wechselrahmens wird ein Defekt der Partition
  {\bf /dev/sdc1} simuliert. Sobald wieder auf den {\bf RAID-5} Verbund zugegriffen
  wird, wird der Defekt bemerkt, der SCSI-Bus resetet und der
  Recovery-Prozess über den raid5d Daemon beginnt. Ein {\bf cat /proc/mdstat} zeigt
  jetzt folgendes:
	  

	  
	   \begin{tt} \begin{scriptsize} Personalities : [raid5] read\_ahead 1024 sectors\end{scriptsize} \end{tt} \linebreak
	   \linebreak\begin{tt} \begin{scriptsize} 		md0 : active raid5 sde1[3] sdd1[2] sdc1[1](F) sdb1[0] 782080 blocks level 5, 32k chunk, algorithm 2 [3/2] [U\_U] recovery=4% finish=15.4min\end{scriptsize} \end{tt} \linebreak
	   \linebreak\begin{tt} \begin{scriptsize} unused devices: \verb+<+none\verb+>+\end{scriptsize} \end{tt} \linebreak
	   

	  
  \par
  
  Nach dem erfolgreichen Ende des Recovery-Prozesses liefert {\bf cat
  /proc/mdstat} folgendes:
	  

	  
	   \begin{tt} \begin{scriptsize} Personalities : [raid5] read\_ahead 1024 sectors\end{scriptsize} \end{tt} \linebreak
	   \linebreak\begin{tt} \begin{scriptsize} md0 : active raid5 sde1[3] sdd1[2] sdc1[1](F) sdb1[0] 782080 blocks level 5, 32k chunk, algorithm 2 [3/2] [U\_U]\end{scriptsize} \end{tt} \linebreak
	   \linebreak\begin{tt} \begin{scriptsize} unused devices: \verb+<+none\verb+>+\end{scriptsize} \end{tt} \linebreak
	  

	  
  \par
  
  Den neuen Zustand sollten Sie nun sichern, indem Sie
	  

	  
	    \begin{tt} \begin{scriptsize} root@linux \~{}/ \# 
       umount /dev/md0
	    \end{scriptsize} \end{tt} \linebreak 
	  

	  
  \par
  
  ausführen. Mit
	  

	  
	    \begin{tt} \begin{scriptsize} root@linux \~{}/ \# 
       raidstop /dev/md0
	    \end{scriptsize} \end{tt} \linebreak 
	  

	  
  \par
  
  wird der aktuelle Zustand auf die RAID-Partitionen geschrieben. Ein
	  

	  
	    \begin{tt} \begin{scriptsize} root@linux \~{}/ \# 
	   raidstart -a
	    \end{scriptsize} \end{tt} \linebreak 
	    \begin{tt} \begin{scriptsize} root@linux \~{}/ \# 
       cat /proc/mdstat
	    \end{scriptsize} \end{tt} \linebreak 
	  

	  
  \par
  
  zeigt dann:
	  

	  
	   \begin{tt} \begin{scriptsize} Personalities : [raid5] read\_ahead 1024 sectors\end{scriptsize} \end{tt} \linebreak
	   \linebreak\begin{tt} \begin{scriptsize} 		md0 : active raid5 sdd1[2] sde1[1] sdb1[0] 782080 blocks level 5, 32k chunk, algorithm 2 [3/3] [UUU]\end{scriptsize} \end{tt} \linebreak
	   \linebreak\begin{tt} \begin{scriptsize} unused devices: \verb+<+none\verb+>+\end{scriptsize} \end{tt} \linebreak
	   

	  
  \par
  
  Wie Sie erkennen können, fehlt die defekte Partition {\bf /dev/sdc1[1](F)},
  dafür hat die Spare-Disk {\bf /dev/sde1[1]} deren Funktion übernommen.  Das
  ist jetzt der aktuelle Zustand des {\bf RAID-5}. Nun wird die defekte
  Festplatte ersetzt, indem Sie den Rechner herunterfahren und den
  Festplattenaustausch durchführt. Wenn Sie neu booten, geht zunächst
  nichts mehr. Nun bloß keine Panik kriegen, sondern erst mal der
  {\bf /etc/raidtab} Datei den neuen Zustand beibringen:
	  


	  
	    \begin{tt} \begin{scriptsize} root@linux / \# 
       raiddev /dev/md0
	    \end{scriptsize} \end{tt} \linebreak 
	   \begin{tt} \begin{scriptsize} raid-level\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +5\end{scriptsize} \end{tt} \linebreak
	   \linebreak\begin{tt} \begin{scriptsize} 		nr-raid-disks\verb+  +\verb+  +\verb+  +\verb+  +\verb+  + 3\end{scriptsize} \end{tt} \linebreak
	   \linebreak\begin{tt} \begin{scriptsize} nr-spare-disks\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +1\end{scriptsize} \end{tt} \linebreak
	   \linebreak\begin{tt} \begin{scriptsize} persistent-superblock\verb+  + 1\end{scriptsize} \end{tt} \linebreak
	   \linebreak\begin{tt} \begin{scriptsize} parity-algorithm\verb+  +\verb+  +\verb+  +\verb+  +left-symmetric\end{scriptsize} \end{tt} \linebreak
	   \linebreak\begin{tt} \begin{scriptsize} chunk-size\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +32\end{scriptsize} \end{tt} \linebreak
	   \linebreak\begin{tt} \begin{scriptsize} device\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +/dev/sdb1\end{scriptsize} \end{tt} \linebreak
	   \linebreak\begin{tt} \begin{scriptsize} raid-disk\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  + 0\end{scriptsize} \end{tt} \linebreak
	   \linebreak\begin{tt} \begin{scriptsize} device\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +/dev/sde1\end{scriptsize} \end{tt} \linebreak
	   \linebreak\begin{tt} \begin{scriptsize} raid-disk\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  + 1\end{scriptsize} \end{tt} \linebreak
	   \linebreak\begin{tt} \begin{scriptsize} device\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +/dev/sdd1\end{scriptsize} \end{tt} \linebreak
	   \linebreak\begin{tt} \begin{scriptsize} raid-disk\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  + 2\end{scriptsize} \end{tt} \linebreak
	   \linebreak\begin{tt} \begin{scriptsize} device\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +/dev/sdc1\end{scriptsize} \end{tt} \linebreak
	   \linebreak\begin{tt} \begin{scriptsize} spare-disk\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +0\end{scriptsize} \end{tt} \linebreak
	  

	  
  \par
  
  Anschließend bringt ein
	  

	  
	    \begin{tt} \begin{scriptsize} root@linux \~{}/ \# 
       raidhotadd /dev/md0 /dev/sdc1
	    \end{scriptsize} \end{tt} \linebreak 
	  

	  
  \par
  
  dem RAID-Verbund die neue Konstellation bei, ohne dabei die Daten auf
  dem {\bf RAID-5} Verbund zu beschädigen, solange Sie sich in der Datei
  {\bf /etc/raidtab} nicht vertan haben. Schauen Sie sich die Einträge in
  Ihrem eigenen Interesse bitte noch mal genau an. Ein cat {\bf /proc/mdstat}
  zeigt jetzt die Resynchronisation. Man sieht jetzt die neue Zuordnung
  der RAID-Partitionen im RAID-Verbund, die exakt den neuen Stand der
  Zuordnung darstellen sollte.
	  

	  
	   \begin{tt} \begin{scriptsize} Personalities : [raid5] read\_ahead 1024 sectors\end{scriptsize} \end{tt} \linebreak
	   \linebreak\begin{tt} \begin{scriptsize} md0 : active raid5 sdc1[3] sdd1[2] sde1[19] sdb1[0] 782080 blocks level 5, 32k chunk, algorithm 2 [3/3] [UUU] resync=36% finish=6.7min\end{scriptsize} \end{tt} \linebreak
	   \linebreak\begin{tt} \begin{scriptsize} unused devices: \verb+<+none\verb+>+\end{scriptsize} \end{tt} \linebreak
	   

	  
  \par
  
  Am Ende erscheint:
	  

	  
	   \begin{tt} \begin{scriptsize} raid5: resync finished\end{scriptsize} \end{tt} \linebreak
	  

	  
  \par
  
  Ein {\bf cat /proc/mdstat} sieht nun so aus:
	  

	  
	   \begin{tt} \begin{scriptsize} Personalities : [raid5] read\_ahead 1024 sectors\end{scriptsize} \end{tt} \linebreak
	   \linebreak\begin{tt} \begin{scriptsize} 		md0 : active raid5 sdc1[3] sdd1[2] sde1[1] sdb1[0] 782080 blocks level5, 32k chunk, algorithm 2 [3/3] [UUU]\end{scriptsize} \end{tt} \linebreak
	   \linebreak\begin{tt} \begin{scriptsize} unused devices: \verb+<+none\verb+>+\end{scriptsize} \end{tt} \linebreak
	   

	  
  \par
  
  Nun ruft man
	  

	  
	    \begin{tt} \begin{scriptsize} root@linux \~{}/ \# 
	  raidstop /dev/md0
	    \end{scriptsize} \end{tt} \linebreak 
	  

	  
  \par
  
  auf, um alles auf die Platten zu schreiben. Hat der Kernel das
  RAID-Array bereits gestartet (persistent-superblock 1), kann man mit
  einem
	  

	  
	    \begin{tt} \begin{scriptsize} root@linux \~{}/ \# 
       mount /dev/md0 /mount-point
	    \end{scriptsize} \end{tt} \linebreak 
	  

	  
  \par
  
  den RAID-Verbund wieder in das Dateisystem einhängen. Ansonsten ist
  vorher noch folgender Befehl notwendig:
	  

	  
	    \begin{tt} \begin{scriptsize} root@linux \~{}/ \# 
       raidstart /dev/md0
	    \end{scriptsize} \end{tt} \linebreak 
	  

	  
  \par
  
  Hiermit haben Sie wieder ein vollständiges laufendes {\bf RAID-5} Array
  hergestellt.
	  
	 
	
   \section{Nutzung \& Benchmarks} \label{d35e5203}
        

	

	\subsection{Wofür lohnt das Ganze denn nun?} \label{d35e5210}
        

	 

	 \subsubsection{Performance} \label{d35e5217}
        

	  

	  
  \par
  
  Ein RAID-Device lohnt sich überall dort, wo viel auf die Festplatten
  zugegriffen wird. So kann zum Beispiel ein {\bf RAID-0} oder {\bf RAID-5} als
  {\bf /home} Verzeichnis gemountet werden und das
  Nächste als {\bf /var} oder {\bf /usr}.
  Die Geschwindigkeitsvorteile sind gerade bei SCSI Hardware und
  {\bf festplattenintensiven} Softwarepaketen wie KDE, StarOffice oder
  Netscape deutlich spürbar. Das ganze System {\bf fühlt} sich erheblich
  performanter an.
	  
	 
	 
	 \subsubsection{Sicherheit} \label{d35e5249}
        

	  

	  
  \par
  
  Mit einem {\bf RAID-1} System kann man z.B. die Sicherheit seiner Daten
  erhöhen.  Fällt eine Platte aus, befinden sich die Daten immer noch
  auf der gespiegelten Partition. ähnliches gilt z.B. für ein {\bf RAID-5}
  System, welches zusätzlich zur erhöhten Sicherheit noch eine bessere
  Performance bietet.
	  
	 

	 \subsubsection{Warum nicht?} \label{d35e5266}
        

	  

	  
  \par
  
  Hat man schon mehrere Festplatten in seinem System, stellt sich einem
  doch die Frage, warum man eigentlich solch ein kostenloses Feature wie
  Software-RAID nicht nutzen sollte. Man denke nur mal an die Preise für
  gute Hardware-RAID Kontroller plus Speicher. Gerade der neue
  Kernel-Patch erleichtert einem vieles, was bisher nur auf Umwegen möglich
  war.
	  

	  
  \par
  
  Schreitet die Entwicklung der Software-RAID Unterstützung unter Linux
  weiterhin so gut fort und bedenkt man die stetig steigende Leistung
  und die fallenden Preise von CPUs, so kann man sich denken, dass in
  naher Zukunft die CPU-Leistung, die eine Software-RAID Lösung
  benötigt, auch bei Standard-CPUs nicht mehr ins Gewicht fällt. Selbst
  heute reichen für ein Software-RAID auf SCSI-Basis CPUs mit 200-300
  MHz völlig aus. Ein {\bf RAID-0} mit SCSI-Festplatten soll sogar auf einem
  486DX-2/66 halbwegs akzeptabel laufen.
	  
	 
	

	\subsection{Vorschläge und überlegungen zur RAID-Nutzung} \label{d35e5284}
        

	 

	 \subsubsection{Apache (Webserver allgemein)} \label{d35e5291}
        

	  

	  
  \par
  
  Aufgrund des hauptsächlichen Lesevorgangs kann hier ein {\bf RAID-0} oder
  {\bf RAID-5} Verbund empfohlen werden. Die Log-Dateien sollten allerdings
  nicht auf einem {\bf RAID-5} Verbund liegen. Werden durch dynamische Seiten
  Daten mit einer Datenbank ausgetauscht, gelten dieselben überlegungen
  wie bei dem Datenbankabschnitt.
	  
	 

	 \subsubsection{Log-Dateien} \label{d35e5311}
        

	  

	  
  \par
  
  Die typischen Sytem-Log-Dateien erbringen im allgemeinen keine hohe
  Dauerschreiblast. Hierbei ist es also egal, auf was für einem
  RAID-Verbund sie liegen. Anders sieht es bei Log-Dateien aus, welche viele
  Accounting-Informationen enthalten. Diese sollte man aufgrund der
  allgemeinen Schreibschwäche eines {\bf RAID-5} Verbundes eher auf schnellere
  RAID-Verbunde auslagern.
	  
	 

	 \subsubsection{Oracle (Datenbank)} \label{d35e5325}
        

	  

	  
  \par
  
  Oracle kann mit Tablespaces, die aus mehreren Datenfiles auf
  unterschiedlichen Platten bestehen, umgehen. Um hier zu einer
  vernünftigen Lastverteilung ohne RAID zu kommen, ist allerdings
  einiges an Planung vorauszusetzen. Für die Datenfiles und Controlfiles
  können {\bf RAID-0}, {\bf RAID-1},
  {\bf RAID-10} oder auch {\bf RAID-5} Verbunde empfohlen
  werden; aus Sicherheitsgründen ist allerdings von {\bf RAID-0} Verbunden
  abzuraten. Für die Online-Redo-Log-Dateien empfiehlt sich aufgrund der
  Schreibschwächen kein {\bf RAID-5} System. Dafür könnten folgende Varianten
  konfiguriert werden:
	  

	  \begin{list}{*}{}
	   
	\item 
einfache Redo-Log-Dateien auf einem {\bf RAID-1} oder
{\bf RAID-10} Verbund
	   
	   
	\item 
gespiegelte Redo-Log-Dateien jeweils auf einem {\bf RAID-0} Verbund;
Oracle kann so konfiguriert werden, dass mehrere parallele Kopien
der Redo-Log-Dateien geschrieben werden.
	   
	  \end{list}
	 

	 \subsubsection{Squid (WWW-Proxy und Cache)} \label{d35e5372}
        

	  

	  
  \par
  
  Für Squid im speziellen gilt, dass er von Haus aus mit mehreren
  Cache-Partitionen umgehen kann. Daher bringt ein darunterliegendes
  RAID-Array nicht mehr viel. Die Log-Dateien wiederum ergeben auf einem
  {\bf RAID-0} Verbund durchaus Sinn. Für andere WWW-Proxys wäre hier ein
  {\bf RAID-0} Verbund angebracht.
	  
	 

	 \subsubsection{Systemverzeichnisse} \label{d35e5389}
        

	  

	  
  \par
  
  Da hier verhältnismäßig wenig Schreibvorgänge stattfinden, jedoch auf
  jeden Fall die Redundanz gewährleistet sein sollte, empfiehlt sich für
  die Root-Partition ein {\bf RAID-1} Verbund und für die /home, /usr, /var
  Verzeichnisse einer der redundanten RAID-Modi ({\bf RAID-1}, {\bf RAID-5},
  {\bf RAID-10}).
	  
	 
	

	\subsection{Benchmarks} \label{d35e5413}
        

	 
	 
	 
  \par
  	 
  Um einen Vergleich zwischen den RAID-Verbunden mit ihren
  unterschiedlichen Chunk-Size Parametern ziehen zu können, findet das
  Programm Bonnie Anwendung, welches im Internet unter
		

		
		  http://www.textuality.com/bonnie/
		

		
  \par
  
  residiert. Bonnie erstellt eine beliebig große Datei auf dem
  RAID-Verbund und testet neben den unterschiedlichen Schreib- und
  Lesestrategien auch die anfallende CPU-Last. Allerdings sollte man
  die Testdatei mindestens doppelt so groß wie den real im Rechner
  vorhandenen RAM-Speicher wählen, da Bonnie sonst nicht die Geschwindigkeit
  des RAIDs, sondern das Cacheverhalten von Linux misst - und das ist gar
  nicht mal so schlecht.
		

		
  \par
  
  Um die bei dem nicht sequentiellen Lesen von einem {\bf RAID-1} Verbund
  höhere Geschwindigkeit zu testen, eignet sich Bonnie aufgrund seiner
  einzelnen Testdatei allerdings nicht. Bonnie führt bei seinem Test
  also einen sequentiellen Schreib-/Lesevorgang durch, welcher nur von
  einer {\bf RAID-1} Festplatte beantwortet wird. Möchte man trotzdem einen
  {\bf RAID-1} Verbund geeignet testen, empfiehlt sich hierfür das Programm
  tiotest welches unter
		

		
		  http://www.iki.fi/miku/
		
		
		
  \par
  
  zu finden ist.
		

		
  \par
  
  Da die Hardware wohl in jedem Rechner unterschiedlich ist, wurde
  darauf verzichtet, in der Ergebnistabelle absolute Werte einzutragen.
  Ein besserer Vergleich ergibt sich, wenn man die Geschwindigkeit einer
  Festplatte alleine als den Faktor eins zugrundelegt und bei Verwendung
  derselben Festplatten die RAID-Performance als Vielfaches dieses
  Wertes angibt. Da diese Konfiguration drei identische SCSI-Festplatten
  vorsieht, wäre also maximal eine 3x1fache Geschwindigkeit zu
  erwarten. Bedenken sollte man beim {\bf RAID-5} Testlauf auch, dass hier nur
  2/3 der Kapazität direkt von Bonnie beschrieben werden. Andererseits
  soll dieser Test ja zeigen, wie viel Geschwindigkeitseinbußen oder
  -gewinn bei einer Datei derselben Größe zu erwarten sind.
	

	
	 \begin{tt} \begin{scriptsize} 	\verb+  +|\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +|\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +|\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  + |\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +|\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +|\end{scriptsize} \end{tt} \linebreak
	 \linebreak\begin{tt} \begin{scriptsize} \verb+  +|RAID-Modus\verb+  +|\verb+  +Chunk-Size\verb+  +|\verb+  +Blockgröße ext2\verb+  +|\verb+  +Seq. Input\verb+  +\verb+  +\verb+  +|\verb+  +Seq. Output\verb+  +\verb+  + |\end{scriptsize} \end{tt} \linebreak
	 \linebreak\begin{tt} \begin{scriptsize} |\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +|\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +|\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  + |\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +|\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +|\end{scriptsize} \end{tt} \linebreak
	 \linebreak\begin{tt} \begin{scriptsize} |Normal\verb+  +\verb+  +\verb+  +|\verb+  +%\verb+  +\verb+  +\verb+  +\verb+  +\verb+  + |\verb+  +4 KB\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  + |\verb+  +1 = Referenz\verb+  +\verb+  +|\verb+  +1 = Referenz\verb+  +\verb+  +|\end{scriptsize} \end{tt} \linebreak
	 \linebreak\begin{tt} \begin{scriptsize} |RAID-0\verb+  +\verb+  +\verb+  +|\verb+  +4 KB\verb+  +\verb+  +\verb+  +\verb+  +|\verb+  +4 KB\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  + |\verb+  +2,6 x Referenz\verb+  +|\verb+  +2,8 x Referenz\verb+  +|\end{scriptsize} \end{tt} \linebreak
	 \linebreak\begin{tt} \begin{scriptsize} |RAID-5\verb+  +\verb+  +\verb+  +|\verb+  +32 KB\verb+  +\verb+  +\verb+  + |\verb+  +4 KB\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  + |\verb+  +1,7 x Referenz\verb+  +|\verb+  +1,9 x Referenz\verb+  +|\end{scriptsize} \end{tt} \linebreak
	 \linebreak\begin{tt} \begin{scriptsize} |RAID 10\verb+  +\verb+  + |\verb+  +4 KB\verb+  +\verb+  +\verb+  +\verb+  +|\verb+  +4 KB\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  + |\verb+  +1,7 x Referenz\verb+  +|\verb+  +2,5 x Referenz\verb+  +|\end{scriptsize} \end{tt} \linebreak
	

	
  \par
  
  Wie zu erwarten erreicht ein {\bf RAID-0} Verbund aus drei identischen
  Festplatten annähernd die dreifache Leistung. Auch die {\bf RAID-5}
  Ergebnisse zeigen die bei drei Festplatten erwartete doppelte
  Leistung. Die Geschwindigkeit der dritten Festplatte kann ja aufgrund
  der Paritätsinformation nicht gemessen werden. Die Leistung eines
  {\bf RAID-5} sollte also allgemein der aller verwendeten Platten minus eins
  für die Paritätsinformationsplatte sein. Allerdings leidet {\bf RAID-5} an
  einer Art chronischer Schreibschwäche, welche durch das Berechnen und
  Ablegen der Paritätsinformationen zu erklären ist.
	

	
  \par
  
  Um sich die Belastung des Prozessors und die benötigte Zeit zum
  Schreiben einer Testdatei anzusehen, kann man sich auch wieder des
  Programms {\bf dd} befleißigen. Der folgende Aufruf von {\bf dd} würde eine
  100 MB große Datei in das aktuelle Verzeichnis schreiben und die
  Ergebnisse anzeigen:
	

	
	  \begin{tt} \begin{scriptsize} root@linux \~{}/ \# 
		time dd if=/dev/zero of=./Testdatei bs=1024 count=102400
	  \end{scriptsize} \end{tt} \linebreak 
	

   
  \section{Tipps und Tricks} \label{d35e5521}
        

   

   
  \par
  
  Hier finden sowohl Tipps und Tricks Erwähnung, die teilweise selbst
 getestet wurden, als auch Besonderheiten, die nicht direkt durch die
  RAID-Kernelerweiterungen ermöglicht werden, sondern allgemeiner Natur
  sind oder zusätzlich integriert werden müssen. Einige der hier
  aufgelisteten Vorgänge sind mit allerhöchster Vorsicht zu genießen und
  mehr oder minder ausdrücklich nicht für eine Produktionsumgebung
  geeignet.
   

   \subsection{DRBD} \label{d35e5531}
        

	

	
  \par
  
  Drbd versteht sich als ein Block Device, um eine
  Hochverfügbarkeitslösung unter Linux zu bieten. Im Prinzip ist es eine
  Art {\bf RAID-1} Verbund, der über ein Netzwerk läuft. Nähere Informationen
  hierzu gibt es unter:
	

	
	  http://www.complang.tuwien.ac.at/reisner/drbd/
	
   

   \subsection{Kernel 2.2.11 bis 2.2.13 und der RAID-Patch} \label{d35e5551}
        

	

	
  \par
  
  Um Linux Software-RAID auch mit dem aktuelleren Kerneln zu verwenden,
  kann man einfach den RAID-Patch für den 2.2.10er Kernel auf den
  Sourcetree der 2.2.11er bis 2.2.13er Kernel anwenden. Zweimal kommt
  vom patch die Frage, ob eine bereits gepatchte Datei noch mal gepatcht
  werden soll. Diese Fragen sollten alle mit ''no'' beantwortet werden.
  Der Erfolg ist, dass der so gepatchte Kernel nach dem Kompilierlauf
  hervorragend mit allen RAID-Modi funktioniert. Wer sich den 2.2.10er
  RAID-Patch ersparen möchte, kann sich einen Kernel-Patch von Alan Cox
  für den 2.2.11er bis 2.2.13er Kernel aus dem Internet besorgen:
	

	
	  ftp://ftp.kernel.org:/pub/linux/kernel/people/alan/
	

	
  \par
  
  Diese enthalten auch die jeweils aktuellen RAID-Treiber.
	
   

   \subsection{Kernel 2.2.14 bis 2.2.16 und der RAID-Patch} \label{d35e5571}
        

	

	
  \par
  	  
  Auch in den aktuellsten 2.2.xer Linux Kerneln ist der aktuelle
  RAID-Patch noch nicht enthalten. Passende Patches hierfür findet man im
  Internet bei Ingo Molnar:
	
	
	
	  http://people.redhat.com/mingo/raid-patches/
	
   

   \subsection{Kernel der 2.4.xer Reihe und der RAID-Patch} \label{d35e5588}
        

	

	
  \par
  
  Alle aktuellen Kernel der 2.4.xer Reihe beinhalten bereits die neue
  RAID-Unterstützung. Diese Kernel müssen nicht mehr gepatcht werden,
  lassen sich mit den aktivierten RAID-Optionen einwandfrei kompilieren
  und funktionieren problemlos.
	
   

   \subsection{SCSI-Festplatte zum Ausfallen bewegen} \label{d35e5599}
        

	

	
  \par
  
  Für SCSI Devices aller Art - also nicht nur Festplatten - gibt es
  unter Linux die Möglichkeit, sie während des laufenden Betriebes quasi
  vom SCSI Bus abzuklemmen; dies allerdings ohne Hand an den
  Stromstecker oder Wechselrahmenschlüssel legen zu müssen. Möglich ist
  dies durch den Befehl:
	

	
	  \begin{tt} \begin{scriptsize} root@linux / \# 
	   echo ''scsi remove-single-device c b t l'' \verb+>+ /proc/scsi/scsi
	  \end{scriptsize} \end{tt} \linebreak 
	

	
  \par
  
	 Die Optionen stehen für:
	

	
	  {\bf c} = die Nummer des SCSI-Controllers \linebreak 
	  {\bf b} = die Nummer des Busses oder Kanals \linebreak 
	  {\bf t} = die SCSI ID \linebreak 
	  {\bf l} = die SCSI LUN
	

	
  \par
  
  Möchte man das 5. Device des 1. SCSI-Controllers rausschmeißen, müsste
  der Befehl so aussehen:
	

	
	  \begin{tt} \begin{scriptsize} root@linux / \# 
       echo ''scsi remove-single-device 0 0 5 0'' \verb+>+ /proc/scsi/scsi
	  \end{scriptsize} \end{tt} \linebreak 
	

	
  \par
  
  Umgekehrt funktioniert das Hinzufügen einer so verbannten Festplatte
  natürlich auch:
	

	
	  \begin{tt} \begin{scriptsize} root@linux / \# 
       echo ''scsi add-single-device c b t l'' \verb+>+ /proc/scsi/scsi
	  \end{scriptsize} \end{tt} \linebreak 
	
   

   \subsection{überwachen der RAID-Aktivitäten} \label{d35e5658}
        

	

	
  \par
  
  Um einen überblick über den Zustand des RAID-Systems zu bekommen, gibt
  es mehrere Möglichkeiten:
	

	
  \par
  
	 {\bf  mdstat}
	

	
Mit einem
	

	
	  \begin{tt} \begin{scriptsize} root@linux \~{}/ \# 
          cat /proc/mdstat
	  \end{scriptsize} \end{tt} \linebreak 
	

	
     haben wir uns auch bisher immer einen überblick über den aktuellen
     Zustand des RAID-Systems verschafft.
	

	
  \par
  
	  {\bf vmstat}
	

		
        Ist man an der fortlaufenden CPU und Speicher-Belastung sowie an
        der Festplatten I/O-Belastung interessiert, sollte man auf der
        Konsole einfach ein
	

	
	  \begin{tt} \begin{scriptsize} root@linux \~{}/ \# 
          vmstat 1
	  \end{scriptsize} \end{tt} \linebreak 
	

	
		     ausprobieren.
	

	
  \par
  
		  {\bf Mit grep oder perl mdstat abfragen}
	

	
        Wie üblich lässt sich unter Linux auch eine Abfrage von
		{\bf /proc/mdstat} mit einem Skript realisieren. Hier könnte man z.B.
		die Folge ''[UUUU]'' nach einem Unterstrich regelmäßig per {\bf cron}
        abfragen - der Unterstrich signalisiert ja eine defekte
        RAID-Partition - und lässt sich diese Information dann als E-Mail
        schicken. Lässt man sich allerdings schon eine E-Mail schicken,
        kann man sich ebenso gut auch eine SMS an sein Handy schicken
        lassen. Dieser Weg ist dann auch nicht mehr weit. Ein passendes
		{\bf grep}-Kommando zum Abfragen von {\bf /proc/mdstat} könnte dieses
        Aussehen haben:
	

	
	  \begin{tt} \begin{scriptsize} root@linux \~{}/ \# 
     grep '[$\backslash$[U]\_' /proc/mdstat
	  \end{scriptsize} \end{tt} \linebreak 
	

	
  \par
  
		  {\bf xosview}
	

	
        Die aktuelle Entwicklerversion dieses bekannten
        überwachungsprogramms enthält bereits eine Statusabfrage für
        {\bf RAID-1} und {\bf RAID-5} Verbunde. Für den ordnungsgemäßen Betrieb ist
        ein weiterer Kernel-Patch notwendig, der jedoch im tar-Archiv
        enthalten ist.
	
   

   \subsection{Verändern des read-ahead-Puffers} \label{d35e5747}
        

	

	
  \par
  
  Um den read-ahead-Puffer jeglicher Major-Devices unter Linux einfach
  ändern zu können, gibt es ein nettes kleines Programm:
	
	
	\begin{tabular}{|l|}
                  \hline
                  \begin{tt} 
        
			read-ahead-Puffer
	 \end{tt} \\ 
                  \hline
                  \begin{minipage}{130mm} 
                  \begin{scriptsize} 
                  \begin{verbatim} 
        
	  
  /* readahead -- set & get the read_ahead value for the specified device
  */

  #include "stdio.h"
  #include "stdlib.h"
  #include "linux/fs.h"
  #include "asm/fcntl.h"

  void usage()
  {
    printf( "usage:  readahead <device> [newvalue]\n" );

  }/* usage() */


  int main( int args, char **argv )
  {
    int fd;
    int oldvalue;
    int newvalue;

    if ( args <= 1 ) {
      usage();
      return(1);
    }

    if ( args >= 3 && !isdigit(argv[2][0]) ) {
      printf( "readahead: invalid number.\n" );
      return(1);
    }

    fd = open( argv[1], O_RDONLY );
    if ( fd == -1 ) {
      printf( "readahead: unable to open device %s\n", argv[1] );
      return(1);
    }

    if ( ioctl(fd, BLKRAGET, &oldvalue) ) {
      printf( "readahead: unable to get read_ahead value from "
              "device %s\n", argv[1] );
      close (fd);
      return(1);
    }

    if ( args >= 3 ) {
      newvalue = atoi( argv[2] );
      if ( ioctl(fd, BLKRASET, newvalue) ) {
        printf( "readahead: unable to set %s's read_ahead to %d\n",
                argv[1], newvalue );
        close (fd);
        return(1);
      }
    }
    else {
      printf( "%d\n", oldvalue );
    }

    close (fd);
    return(0);

  }/* main */
	  
	 \end{verbatim} 
                  \end{scriptsize} 
                  \end{minipage} \\
                  \hline
                  \end{tabular}

	
  \par
  
  Damit kann man natürlich auch RAID-Devices tunen.
	
   

   \subsection{Bestehenden RAID-0 Verbund erweitern} \label{d35e5770}
        

	

	
  \par
  
  Um einen {\bf RAID-0} Verbund zu vergrößern, zu verkleinern oder aus einer
  einzelnen Festplatte ein {\bf RAID-0} zu erstellen, gibt es von Jakob
  Oestergaard einen Patch für die RAID-Tools:
	

	
		  
			http://ostenfeld.dk/\~{}jakob/raidreconf/raidreconf-0.0.2.patch.gz
	

	
  \par
  
  Dieser Patch muss in den Source der RAID-Tools eingearbeitet werden und
  die RAID-Tools anschließend neu kompiliert und installiert werden. Das
  Erweitern eines {\bf RAID-0} Verbundes funktioniert dann durch zwei
  unterschiedliche /etc/raidtab Dateien, die miteinander verglichen
  werden und eine zusätzliche Partition innerhalb desselben Verbundes
  eingearbeitet wird. Nach dem stoppen des zu verändernden
  RAID-Verbundes, erfolgt der Aufruf durch:
	

	
	  \begin{tt} \begin{scriptsize} root@linux \~{}/ \# 
       raidreconf /etc/raidtab /etc/raidtab.neu /dev/md0
	  \end{scriptsize} \end{tt} \linebreak 
	

	
  \par
  
 Hierbei muss in der {\bf /etc/raidtab.neu} für den Verbund {\bf /dev/md0} eine
 weitere Partition im Gegensatz zu {\bf /etc/raidtab}
 eingetragen sein.
	
   

   \subsection{Bestehenden RAID-5 Verbund erweitern} \label{d35e5817}
        

	
	
	
  \par
  
  Einen bereits initialisierten und laufenden {\bf RAID-5} Verbund kann man
  derzeit leider nicht mit weiteren Festplatten vergrößern. Die einzige
  Möglichkeit besteht darin, die Daten zu sichern, den {\bf RAID-5} Verbund
  neu aufzusetzen und die Daten anschließend zurück zu schreiben.
	
   
  
	\ref{inhalt.tex}


	\end{document}
	
