= Installation eines
Linux-Systems mit ReiserFS =

== Was ist ReiserFS ==

ReiserFS ist ein Dateisystem, das von Hans Reiser geschrieben
wurde. Genaue Informationen gibt es unter [http://www.namesys.com].
ReiserFS soll im Vergleich zum bei Linux üblichen ext2 (Extended
Filesystem 2) etwas schneller sein und viel besser mit kleinen
Dateien umgehen können.

Das alleine wäre für mich aber noch kein Grund, Experimente damit
zu machen. Das wichtigste ist: ReiserFS ist ein '''Journaling
Filesystem'''. Das bedeutet, daß Reiser bei Änderungen auf der
Platte ein sog. Jornal mitführt. Wenn der Rechner nun aus
irgendeinem Grund abstürzt oder ausgeschaltet wird, kann beim
nächsten mounten anhand des Journals ganz schnell herausgefunden
werden, ob und wo gerade auf die Platte geschrieben wurde. Beim
ext2-Filesystem muß hingegen die ganze Platte durchgecheckt werden
und auf Inkonsistenzen überprüft werden. Diese Überprüfung dauert
bei mir z.B. auf einer 5GB-Platte und einem 450MHz-Rechner ca. 20
Minuten. Das ist für einen Rechner, der produktiv benötigt wird,
entschieden zu lang! Von größeren Platten wollen wir dabei gar
nicht mal reden.

== Woher bekommt man's? ==

ReiserFS ist seit dem Kernel 2.4.1 im Kernel enthalten. Man braucht
dazu noch einige Tools, die von obiger Webseite oder unter Debian
aus dem Paket ''reiserfsprogs'' kommen. Für frühere Kernelversionen
gibt es Patches, aber ein Update auf den neuen Kernel bei dieser
Gelegenheit kann eigentlich nicht schaden.

== das Boot-Problem ==

Die im Prinzip "perfekte" Lösung wäre ein Linux-System, das direkt
auf einer Reiser-Partition untergebracht ist und davon bootet. Im
Prinzip geht das auch, macht aber (noch) eine Menge Arbeit. Das
Problem ist, daß z.B. die Debian-Installations-CD automatisch
ext2-Partitionen formatiert. Nun könnte man eine Reiser-Partition
von dort aus erzeugen, das System umkopieren und dann LILO auf die
Reiser-Partition umstellen. Im Prinzip geht das, aber ich bin der
Einfachheit halber einen anderen Weg gegangen.

Wer das so probiert, sollte darauf achten, daß das Kernel-Image,
das Lilo beim booten lädt, unfragmentiert auf der Platte sein muss.
Daszu kann man ReiserFS entweder beim Erzeugen der Partition eine
Option auf den Weg geben oder am besten nimmt man eine getrennte
''/boot''-Partition. Das bietet sich wegen Lilo's
1024-Zylinder-Grenze ja eh an. Diese Partition kann dann mit ext2
erzeugt werden. Ausserdem ist noch eine Kernel-Aufrufoption nötig,
damit der Kernel das root-Dateisystem als Reiser mountet.

== Die Alternative ==

Ich selber habe einen anderen Weg beschritten, um dem Henne und
Ei-Problem beim booten aus dem Weg zu gehen. Ich habe eine
Mini-ext2-Partition erzeugt. Diese bootet ganz normal und mountet
dann eine grosse Reiser-Partition.

=== Wie gross muss die root-Partition sein? ===

Tja - bei der Groesse der Mini-Partition gibt es einiges zu
bedenken. Zum einen soll sie so klein wie möglich sein, weil sie ja
z.B. auch im Falle eines Absturzes gecheckt werden muss. Außerdem
soll sie nachher ja auch nur die nötigsten Dinge enthalten.
Andererseits muss sie groß genug sein, um ein System aufzunehmen,
mit dem man arbeiten kann, um den Reiser-Kernel zu installieren.
Nun mal einige ungefähre Zahlen:

* nackte Debian-Grundinstallation: 75MB
* Debian ohne "/usr": 50MB
* "/usr" inklusive Paket "task-c-dev": 100MB
* Kernel-Sourcen nach Compilerlauf: 150MB

Wer also einen fertigen Reiser-Kernel der Debian-Distribution
installiert, kann mit 100MB auskommen. Wer seinen Kernel selber
compilieren will (wie ich) braucht etwas über 300MB. Es gibt auch
noch eine dritte Möglichkeit: Ich habe eine Partition von 100MB und
habe "/usr" per NFS auf einem anderen Rechner temporär ausgelagert.
Dies geht z.B. mit 

  mv /usr /mnt/fileserver/mein_usr
  ln /mnt/fileserver/mein_usr /usr -s

Nachdem der Reiser-Kernel dann lief, habe ich das Verzeichnis dann
auf die Reiser-Partition kopiert und den Link geändert.

== Anlegen der Partition ==

Das geht nach Installation des Debian-Paketes '''reiserfsprogs'''
ganz einfach mit

  mkreiserfs /dev/hda2

Dann muss ein Eintrag in '''/etc/fstab''':

  /dev/hda2     /mnt/reiser     default         0       0

Dann wird die Partition eingebunden mit:

  mkdir /mnt/reiser
  mount /mnt/reiser

== Verzeichnisstruktur ==

Alle Verzeichnisse, die für ein minimales Hochfahren und Debugging
nicht nötig sind, sollten auf die Reiser-Partition ausgelagert
werden. Zum Glück ist der Filesystem-Standard, der die Verteilung
der Dateien auf die Verzeichnisse innerhalb des Linux-Systems
regelt, genau auf solche Dinge abgestimmt. Es gibt z.B. das
Verzeichnis /sbin für tödlich wichtige Programme und /usr/sbin für
nicht ganz so wichtige. Ich habe mich also dafür entschieden, drei
Verzeichnisse umzulegen:

* /home
Hier sind alle Benutzerdateien, die unberechenbar gross werden
können und daher auf die grosse Partition müssen. Falls bei einem
Fehler die Reiser-Partition mal nicht mehr booten kann, ist das
sowieso ein Problem für root, also brauchen wir dann auch die
User-Verzeichnisse nicht.
* /var
Dieses Verzeichnis enthält einige Dinge, die unkontrolliert
anwachsen können, z.B. Logfiles, Spool-Verzeichnisse etc.
* /usr
Dieses Verzeichnis enthält per Definition alle Teile des
Linux-Systems, die nicht im Fehlerfalle überlebensnotwendig sind
und damit den Großteil des Linux-Systems.

Umlegen kann ich die Verzeichnisse nun mit:

  mkdir /mnt/reiser/system
  mv /home /mnt/reiser/system/home 
  ln /mnt/reiser/system/home /home -s
  mv /var /mnt/reiser/system/var
  ln /mnt/reiser/system/var /var -s
  mv /usr /mnt/reiser/system/usr
  ln /mnt/reiser/system/usr /usr -s

Jetzt sollte man sicherheitshalber den Rechner neu starten, da
wahrscheinlich die Log-Daemonen Ihre Logdateien nicht mehr finden.
(Für die, die jetzt sagen: Linux muss im Gegensatz zu Windows nie
neu gestartet werden: Das müsste auch durch neustart der Daemonen
mit Hilfe des entsprechenden /etc/init.d-Skripts gehen.)

Die root-Partition enthält jetzt nur noch 24MB, der Rest ist auf
der Hauptpartition.

== Abschluß ==

So - jetzt läuft das Ganze. Ds System fährt auch nach Problemen
ruck-zuck hoch. Theoretisch sollte es jetzt möglich sein, den
Rechner einfach auszuschalten statt ihn herunterzufahren. Praktisch
würde ich das aber nicht empfehlen. Irgendwann gehts dann doch mal
schief. Man könnte übrigens noch überlegen, die ext2-Partition
read-only zu mounten, dann muss diese auch nicht mehr gecheckt
werden.

Übrigens sagt, man, daß es im Moment (Kernel 2.4.7) noch Probleme
geben soll, wenn man Reiser-Partitionen per NFS exportiert oder
Quotas darauf anwenden will. Wer sowas vorhat, sollte also evtl.
noch etwas warten, bis alle Bugs behoben sind.

Viel Spass beim nachmachen!

-- ThomasBayen