\section{Plattenpartitionierung und Zusammenfassung}

Gelegentlich steht man vor dem Problem, dass man auf einer Festplatte
mehrere Äste des Dateisystems, sowie einen Platz zum Swappen
unterbringen muß. Oder man möchte verschiedene Betriebssysteme, deren
Dateisysteme inkompatibel sind, auf einer Festplatte unterbringen. Hier
muß eine Festplatte dann in mehrere logische Festplatten unterteilt
werden.

Auf der anderen Seite kann es vorkommen, dass der
Platz einer Festplatte für ein Verzeichnis oder sogar für eine Datei
nicht ausreicht. Hier müssen mehrere Festplatten dann zu einer
logischen Einheit zusammengefasst werden.
\\\\
Das Aufteilen von Platten in logische Einheiten nennt man
Partitionieren, das Zusammenfassen wird -- je nach Verfahren -- als Raid,
Vinum oder Striping bezeichnet.

\subsection{Partitionierung}

Beim Aufteilen von Festplatten werden der Anfangs- und der Endblock,
sowie der Typ einer Partition in eine sogenannte Partitionstabelle
geschrieben. Beim Zugriff auf eine logische Festplatte wird auf die
Nummer des Blockes, auf den zugegriffen werden soll, die Gesamtzahl der
Blöcke der vorangegangenen Partitionen addiert.

\subsubsection{PCs (Microsoft)}

Microsoft teilt Festplatten in max. vier Partitionen auf, von
denen drei erweiterte Partitionen sein können, die weitere logische
Partitionen enthalten.

Bei diesem Typ Partitionierung wird unmittelbar hinter dem
Masterbootsektor eine Partitionstabelle geschrieben, die die Größe,
den Typ und die Lage einer Partition enthält.

\subsubsection{Unix (4.4BSD, SunOS, SCO)}

Unix benutzt i.d.R. sogenannte Slices, die den Partitionen bei MS
entsprechen. Allerdings können in den Slices im Gegensatz zu
den erweiterten Partitionen bei MS beliebig viele Partitionen
untergebracht werden. 

Eine Slice kann entweder in einer MS-Partition untergebracht werden
oder eine gesamte Festplatte für sich beanspruchen (Dangerously
Dedicated). In diesem Fall existiert keine Partitionstabelle mehr am
Anfang der Platte, stattdessen wird in den ersten Blöcken der Slice
eine eigene Partitionstabelle angelegt.

\subsection{Plattenzusammenfassung}

Prinzipiell kann die Zusammenfassung von Platten analog zur
Partitionierung erfolgen: mehrere Platten werden zu einer logischen
Einheit zusammengefasst. Diese erscheint nach außen hin wie eine große
Festplatte.

RAID kann auf zwei Arten implementiert sein: Als Software- oder
Hardware-RAID. Eine Softwarelösung bedeutet einen Treiber, der auf dem
Treiber für IDE- oder SCSI-Festplatten aufsetzt, sich um Prüfsummen
und Verteilung kümmert und nach oben hin dem Dateisystem ein
blockorientiertes Gerät zur Verfügung stellt.

Hardware-RAID erfordert spezielle (IDE- oder SCSI-) Controller, die
dann über einen geeigneten Hardwaretreiber angesprochen werden
können. In diesem Fall bekommt kein Teil des Kernels mit, dass es sich
um mehrere physikalische Festplatten handelt.

Hardware-RAID ist -- besonders bei großen RAID-5- und RAID-6-Volumes --
wesentlich performanter als Software-RAID, da die Prüfsummenberechnung
nicht vom Prozessor des Systems, sondern vom Prozessor des
RAID-Controllers vorgenommen wird.

\subsubsection{Vinum, LVM}

Die einfachste Methode der Zusammenfassung liefert Vinum. Bei Vinum
werden die Blöcke einfach über die Platten hinaus durchnummeriert:
\\

                                % Grafik - Zusammenfassung von 
                                % Festplatten - Vinum

\begin{picture}(150,100) 
  \put(0,80){\makebox(30,20){Disk 1}}
  \thicklines
  \put(0,0){\framebox(30,80){}}
  \thinlines
  \put(0,60){\framebox(15,20){0}}
  \put(0,40){\framebox(15,20){2}}
  \put(0,20){\framebox(15,20){4}}
  \put(0,0){\framebox(15,20){6}}

  \put(15,60){\framebox(15,20){1}}
  \put(15,40){\framebox(15,20){3}}
  \put(15,20){\framebox(15,20){5}}
  \put(15,0){\framebox(15,20){7}}

  \put(40,80){\makebox(30,20){Disk 2}}
  \thicklines
  \put(40,20){\framebox(30,60){}}
  \thinlines
  \put(40,60){\framebox(15,20){8}}
  \put(40,40){\framebox(15,20){10}}
  \put(40,20){\framebox(15,20){12}}

  \put(55,60){\framebox(15,20){9}}
  \put(55,40){\framebox(15,20){11}}
  \put(55,20){\framebox(15,20){13}}
  
  \put(80,80){\makebox(30,20){Disk 3}}
  \thicklines
  \put(80,40){\framebox(30,40){}}
  \thinlines
  \put(80,60){\framebox(15,20){14}}
  \put(80,40){\framebox(15,20){16}}

  \put(95,60){\framebox(15,20){15}}
  \put(95,40){\framebox(15,20){17}}

  \put(120,80){\makebox(30,20){Disk 4}}
  \thicklines
  \put(120,0){\framebox(30,80){}}
  \thinlines
  \put(120,60){\framebox(15,20){18}}
  \put(120,40){\framebox(15,20){20}}
  \put(120,20){\framebox(15,20){22}}
  \put(120,0){\framebox(15,20){24}}

  \put(135,60){\framebox(15,20){19}}
  \put(135,40){\framebox(15,20){21}}
  \put(135,20){\framebox(15,20){23}}
  \put(135,0){\framebox(15,20){25}}

\end{picture}

\subsubsection{RAID-0}

RAID-0 ist eigentlich eine irreführende Bezeichnung, da keine
redundanten Platten vorhanden sind. Striping ist die bessere Bezeichnung.

Beim Striping werden die Blöcke in mehreren Zyklen linear
über die Platten durchnummeriert:
\\
                                % Grafik - Zusammenfassung von
                                % Festplatten - RAID-0 = Striping

\begin{picture}(150,100) 
  \put(0,80){\makebox(30,20){Disk 1}}
  \thicklines
  \put(0,0){\framebox(30,80){}}
  \thinlines
  \put(0,60){\framebox(15,20){0}}
  \put(0,40){\framebox(15,20){1}}
  \put(0,20){\framebox(15,20){2}}
  \put(0,0){\framebox(15,20){3}}

  \put(15,60){\framebox(15,20){13}}
  \put(15,40){\framebox(15,20){14}}
  \put(15,20){\framebox(15,20){15}}
  \put(15,0){\framebox(15,20){16}}

  \put(40,80){\makebox(30,20){Disk 2}}
  \thicklines
  \put(40,20){\framebox(30,60){}}
  \thinlines
  \put(40,60){\framebox(15,20){4}}
  \put(40,40){\framebox(15,20){5}}
  \put(40,20){\framebox(15,20){6}}

  \put(55,60){\framebox(15,20){17}}
  \put(55,40){\framebox(15,20){18}}
  \put(55,20){\framebox(15,20){19}}
  
  \put(80,80){\makebox(30,20){Disk 3}}
  \thicklines
  \put(80,40){\framebox(30,40){}}
  \thinlines
  \put(80,60){\framebox(15,20){7}}
  \put(80,40){\framebox(15,20){8}}

  \put(95,60){\framebox(15,20){20}}
  \put(95,40){\framebox(15,20){21}}

  \put(120,80){\makebox(30,20){Disk 4}}
  \thicklines
  \put(120,0){\framebox(30,80){}}
  \thinlines
  \put(120,60){\framebox(15,20){9}}
  \put(120,40){\framebox(15,20){10}}
  \put(120,20){\framebox(15,20){11}}
  \put(120,0){\framebox(15,20){12}}

  \put(135,60){\framebox(15,20){22}}
  \put(135,40){\framebox(15,20){23}}
  \put(135,20){\framebox(15,20){24}}
  \put(135,0){\framebox(15,20){25}}

\end{picture} 
\\\\
Im Gegensatz zu Vinum ist der
Rechenaufwand beim Schreiben auf die Platten größer und damit mehr
Rechenleistung notwendig. Andererseits ist die Wahr\-scheinlich\-keit,
dass bei einer Suchanfrage eine Datei auf zwei oder mehr Platten
verteilt ist, sehr hoch. Eine Datei, die z.B. die Blöcke 19-22 belegt,
kann bei RAID-0 von drei Platten gleichzeitig gelesen werden, während
bei Vinum nur auf eine Platte zugegriffen wird. 

\subsubsection{RAID-1}

Bei RAID-1 werden die Platten lediglich gespiegelt. Man benötigt also
genau doppelt soviele identische Platten, wie man Plattenplatz
benötigt. RAID-1 bietet gegenüber einzelnen Platten kaum
Geschwindigkeitsgewinn, jedoch ein Höchst\-maß an Sicherheit.

\subsubsection{RAID-2, RAID-3 und RAID-4}

Bei diesen Verfahren wird eine zusätzliche Festplatte zur Speicherung
der Check\-summen benötigt. Diese Checksumme wird bei RAID-2 und -3
immer auf den entsprechenden Streifen der letzten Platte
geschrieben. Dadurch erhält man zwar schnellere Lesezugriffe, aber
langsamere Schreibzugriffe, da zunächst die Checksummen berechnet
werden müssen.

Als Verfahren zur Prüfsummenberechnung kommt bei RAID-2 ein
sog. Hamming-Algorithmus zum Einsatz, bei den anderen Verfahren ein
simples XOR.
\\\\
Beispiel RAID-3:
\\
\begin{picture}(300,100) 
  \put(0,80){\makebox(60,20){Disk 1}}
  \thicklines
  \put(0,0){\framebox(60,80){}}
  \thinlines
  \put(0,60){\framebox(60,20){0}}
  \put(0,40){\framebox(60,20){3}}
  \put(0,20){\framebox(60,20){6}}
  \put(0,0){\framebox(60,20){9}}

  \put(80,80){\makebox(60,20){Disk 2}}
  \thicklines
  \put(80,0){\framebox(60,80){}}
  \thinlines
  \put(80,60){\framebox(60,20){1}}
  \put(80,40){\framebox(60,20){4}}
  \put(80,20){\framebox(60,20){7}}
  \put(80,0){\framebox(60,20){10}}

  \put(160,80){\makebox(60,20){Disk 3}}
  \thicklines
  \put(160,0){\framebox(60,80){}}
  \thinlines
  \put(160,60){\framebox(60,20){2}}
  \put(160,40){\framebox(60,20){5}}
  \put(160,20){\framebox(60,20){8}}
  \put(160,0){\framebox(60,20){11}}

  \put(240,80){\makebox(60,20){Disk 4}}
  \thicklines
  \put(240,0){\framebox(60,80){}}
  \thinlines
  \put(240,60){\framebox(60,20){XOR(0,1,2)}}
  \put(240,40){\framebox(60,20){XOR(3,4,5)}}
  \put(240,20){\framebox(60,20){XOR(6,7,8)}}
  \put(240,0){\framebox(60,20){XOR(9,10,11)}}

\end{picture}

\subsubsection{RAID-5 und RAID-6}

Bei RAID-5 werden die Checksummen nicht ausschließlich auf der letzten
Festplatte gespeichert:
\\\\
\begin{picture}(300,100) 
  \put(0,80){\makebox(60,20){Disk 1}}
  \thicklines
  \put(0,0){\framebox(60,80){}}
  \thinlines
  \put(0,60){\framebox(60,20){0}}
  \put(0,40){\framebox(60,20){XOR(3,4,5)}}
  \put(0,20){\framebox(60,20){6}}
  \put(0,0){\framebox(60,20){9}}

  \put(80,80){\makebox(60,20){Disk 2}}
  \thicklines
  \put(80,0){\framebox(60,80){}}
  \thinlines
  \put(80,60){\framebox(60,20){1}}
  \put(80,40){\framebox(60,20){3}}
  \put(80,20){\framebox(60,20){XOR(6,7,8)}}
  \put(80,0){\framebox(60,20){10}}

  \put(160,80){\makebox(60,20){Disk 3}}
  \thicklines
  \put(160,0){\framebox(60,80){}}
  \thinlines
  \put(160,60){\framebox(60,20){2}}
  \put(160,40){\framebox(60,20){4}}
  \put(160,20){\framebox(60,20){7}}
  \put(160,0){\framebox(60,20){XOR(9,10,11)}}

  \put(240,80){\makebox(60,20){Disk 4}}
  \thicklines
  \put(240,0){\framebox(60,80){}}
  \thinlines
  \put(240,60){\framebox(60,20){XOR(0,1,2)}}
  \put(240,40){\framebox(60,20){5}}
  \put(240,20){\framebox(60,20){8}}
  \put(240,0){\framebox(60,20){11}}

\end{picture}
\\\\
Das hat gegenüber RAID-3 wiederum den Vorteil schnellerer
Schreibzugriffe. Werden z.B. die beiden Blöcke 1 und 4 neu
geschrieben, würden bei RAID-3 zwei Schreibzugriffe auf Platte 4
fällig werden, da die Checksummen ja ausschließlich hier vorhanden
sind. Verteilt man hingegen die Checksummen auf mehrere Platten, so
führt dies auch zu einer gleichmäßigeren Verteilung der
Schreibzugriffe.

RAID-6 verwendet zur Speicherung der Checksummen zwei zusätzliche
Platten. Hier wird die Sicherheit von RAID-5 noch etwas gesteigert. Da
die Blöcke mit den Prüfsummen wie bei RAID-5 gleichmäßig über alle
Platten verteilt werden, erhält man eine sehr gute I/O-Performance.

\subsubsection{Vergleich zwischen Software- und Hardware-RAID}

Prinzipiell lassen sich Disk-Arrays auf zwei Arten realisieren. 

Beim
Software-RAID setzt ein Kernelmodul oder Treiber auf dem
Blockdevice-Treiber auf, übernimmt die Verteilung der Blöcke und die
Prüfsummenberechnung und stellt dem Dateisystem die normale
Schnittstelle einer Blockdevice zur Verfügung. Ein Software-RAID kann
meistens mit recht geringem finanziellen Aufwand realisiert werden. Es
besteht freie Wahl, ob IDE- oder SCSI-Festplatten verwendet werden,
auch eine Kombination beider ist denkbar.

Die Zweite Möglichkeit
ist das sogenannte Hardware-RAID. Hier steht ein Controller, meist
eine Steckkarte ähnlich einem SCSI-Controller zur Verfügung, der
einen (recht leistungsstarken) Prozessor, sowie Microcode und Speicher
enthält. Beim Hardware-RAID ist lediglich ein Treiber für den
RAID-Controller erforderlich. Im Gegensatz zu Software-RAID erfährt
der Kernel zu keiner Zeit von dem Vorhandensein einzelner
Festplatten. Die Prüfsummenberechnung und die Verteilung der Blöcke
wird hier komplett vom Controller übernommen.
Da zusätzliche Hardware benötigt wird, ist Hardware-RAID oft mit einem
enormen Kostenaufwand verbunden. Allerdings steht dem die höhere
Leistung von Hardware-RAID, sowie die Möglichkeit defekte Festplatten
im Betrieb auszutauschen, entgegen. 

