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
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