Partitionierung und Dateisystem

Der Verzeichnisbaum

Linux hat ein durchdacht aufgebautes Dateisystem. Der Verzeichnisbaum beginnt an der "Wurzel" names Root, welche einfach durch ein "/" dargestellt wird. Die wichtigsten Verzeichnisse mit Ihrer Bedeutung im Folgenden:

/boot
Verzeichnis welches den Linuxkernel enthält, welcher beim booten gestartet wird.
/bin
enthält Programme welche beim booten benötigt werden.
/sbin
enthält Programme welche beim booten benötigt werden, aber nur solche, welche nur von root benutzt werden können.
/lib
enthält Systembibliotheken welche von Programmen in /bin oder /sbin benötigt werden. Außerdem auch Kernelmodule.
/root
Ist das Heimatverzeichnis des Benutzers root.
/etc
Enthält Konfigurationsdateien. Diese Konfigurationsdateien gelten Systemweit. Benutzerspezifische Konfigurationsdateien befinden sich im Heimatverzeichnis des jeweiligen Benutzers.
/dev
Enthält Gerätedateien.
/proc
Die darin enthaltenen Dateien existieren nicht wirklich auf der Festplatte. Dieses Verzeichnis enthält Statusinformationen zum momentanen Systemzustand, insbesondere zu momentan arbeitenden Prozessen.
/sys
Ebenfalls wie /proc ein virtuelles Verzeichnis, mit Statusinformationen, z. B. zu ACPI oder angeschlossenen Geräten.
/opt
In diesem Verzeichnis ist optionale Anwendungssoftware enthalten. Meist handelt es sich um größere Programmpakete, wie z. B. OpenOffice.org oder KDE. Nicht alle Distributionen verwenden dieses Verzeichnis.
/usr
Enthält die Mehrzahl der Anwendungsprogramme, inklusive ihrer Manpages und Dokumentation. Dieses Unterverzeichnis besitzt selber Unterverzeichnisse wie /usr/bin, /usr/sbin, /usr/lib, welche den obigen /bin, /sbin und /lib-Verzeichnissen entsprechen. Zusätzlich auch noch /usr/share, welches zusätzliche Dateien zu Programmen enthält (beispielsweise Übersetzungsdateien oder grafische Icons), sowie /usr/local, in welchen standardmäßig selbstkompilierte Programme landen.
/var
Variable Daten, wie z. B. Mailspool oder Druckerspooldateien oder die Logdateien. Logdateien liegen in /var/log. Auch manche Serverdienste legen ihre Datendateien hier ab (z. B. Datenbankdateien oder Emails eines Mailservers).
/srv
Ist für Datendateien von Serverdiensten gedacht, wie etwa HTML-Seiten eines Webservers.
/tmp
Enthält temporäre Dateien und ist für alle Benutzer des Systems schreibbar.
/home
Enthält die Heimatverzeichnisse der Benutzer.
/mnt und /media
Diese beiden Verzeichnisse enthalten Mountpoints für zusätzliche Datenträger, wie etwa CD-Rom oder USB-Sticks. Das ältere Verzeichnis /mnt wird dabei auf den meisten Distributionen durch die Alternative /media verdrängt.

Die Verzeichnisse /etc, /bin, /sbin, /lib, /root und /dev müssen in der Root-Partition ("/") enthalten sein, da sie während des bootens benötigt werden. Alle anderen Verzeichnisse können (müssen aber nicht) auch auf anderen Partitionen liegen.

Partitionieren und Formatieren

Wenn man einen neuen Datenträger zu seinem System hinzufügen möchte (z. B. eine zweite Festplatte oder eine externe USB-Festplatte) muß dieser Datenträger zuerst partitioniert und formatiert werden. Zum partitionieren gibt es unter Linux mehrere Programme, die 2 bekanntesten und verbreitesten sind fdisk und cfdisk. Da cfdisk leichter zu bedienen ist, erkläre ich hier die Handhabung von cfdisk.

Gerätenamen

Bevor ich jedoch auf cfdisk eingehe, möchte ich zuerst noch die Gerätenamen von Festplatten auf Linuxsystemen vorstellen. Unter Linux wird jedes Gerät durch eine Datei symbolisiert. Dies sollte nicht mit dem Treiber verwechselt werden. IDE-Geräte, wie Festplatten und CD-Rom Laufwerke fangen stets mit den Buchstaben hd als Gerätebezeichnung an. Danach folgt ein weiterer Buchstabe, der angibt das wievielte Gerät im System gemeint ist. Bei Ide-Geräten, bei denen wie vielleicht bekannt ist, jeweils 2 Geräte (Master und Slave) an einen IDE-Controller angeschlossen werden können, gilt: hda ist der Master am ersten IDE-Controller und hdb ist der Slave am ersten IDE-Controller. Dementsprechend ist hdc der Master am zweiten IDE-Controller und hdd der Slave am zweiten IDE-Controller. SCSI-Festplatten beginnen mit sd. Dementsprechend ist sda die erste SCSI-Festplatte im System und sdb die zweite SCSI-Festplatte im System. SATA und USB-Laufwerke werden ebenfalls als SCSI-Laufwerke vom System behandelt. Für Partitionen auf diesen Datenträgern wird eine Zahl an das Gerät angehängt. hda1 ist also die erste Partition auf dem Master des ersten IDE-Controllers. Dos-artige Partitionierungsschemas können bis zu 4 primäre Partitionen enthalten, von denen eine eine erweiterte Partition sein kann, welche nochmals logische Partitionen enthalten kann. Da dies eigentlich keine Grenze von Dos/Windows ist, sondern von der x86 Hardware allgemein, gilt dies auch für Linux. Logische Partitionen, die in einer erweiterten Partition liegen fangen ihre Partitionsnummer daher immer mit 5 an zu zählen, selbst wenn es weniger als 4 primäre Partitionen im System geben sollte. /dev/hda6 steht also für die 2. logische Partition in einer erweiterten Partition des Laufwerks hda.

cfdisk

cfdisk wird mit dem Gerätenamen der entsprechenden Festplatte, die partitioniert werden soll, als Argument aufgerufen. Wird kein Gerätename angegeben wird /dev/hda angenommen.

Hat man cfdisk aufgerufen, wird das momentane Partitionierungsschema angezeigt. Im unteren Bereich habe ich eine Auswahl an möglichen Befehlen. Besteht noch unpartitionierter Platz, kann ich darin durch auswählen des unpartitionierten Platzes per Pfeil-auf/Pfeil-ab-Taste den unpartitionierten Bereich erst auswählen und dann über die Pfeil-links/Pfeil-rechts-Tasten auf "new" gehen um eine neue Partition zu erstellen. Sofern noch nicht alle primären Partitionen vergeben sind, werde ich dann gefragt, ob ich eine primäre oder eine logische Partition anlegen möchte (auswahl mit Pfeiltasten) und werde dann nach der Größe der Partition gefragt. Steht das hinterlegte Feld oben auf einer bereits angelegten Partition, verändern sich unten die möglichen Kommandos. Hier kann ich eine Partition löschen, ein Boot-Flag setzen oder den Typ der Partition verändern. Den Typ muß ich beispielsweise dann verändern, wenn ich statt einer normalen Linuxpartition eine Swap-Partition oder eine Partition mit einem Fat-Dateisystem erstellen möchte. Wenn ich "Type" auswähle, bekomme ich eine Liste mit zahlreichen Dateisystemtypen. Die 82 steht dabei beispielsweise für ein Swap-Dateisystem. Nachdem ich den Typ durch die angegebene Zahl ausgewählt habe, gelange ich wieder in meine Partitionsübersicht zurück. Die Änderungen werden übrigens nicht sofort auf die Festplatte geschrieben. Dies erledigt erst der Befehl "Write" der ebenfalls per Pfeiltaste erreichbar ist. Mit "Quit" wird cfdisk wieder verlassen.

Formatieren

Bevor ich nun jedoch den Datenträger verwenden kann, muß auf den Partitionen auch noch ein Dateisystem angelegt werden, oder wie man (eigentlich nicht ganz korrekt) sagt, formatiert werden. Linux kennt nicht nur ein Dateisystem, sondern gleich mehrere, mit unterschiedlichen Vor- und Nachteilen. Die häufigsten unter Linux verwendeten Dateisysteme sind ext2, ext3, ext4, ReiserFS und XFS.

ext2 ist das älteste dieser Systeme und gilt daher als am stabilsten und ausgereiftesten. Es hat jedoch den entscheidenden Nachteil das es kein sogenanntes Journal führt. Bei einem journalisierenden Dateisystem muß nach einem Absturz kein zeitaufwendiger Dateisystemcheck beim nächsten Booten durchgeführt werden. Aus diesem Grund ist der Nachfolger ext3 entstanden, welcher nichts weiter als ein ext2-System mit Journal ist.

ext4 ist ein noch sehr neues Dateisystem. Wie der Name sagt ist es der Nachfolger von ext3 und soll sich auf größeren Datenträgern schneller anlegen und überprüfen lassen. Außerdem wurden die maximalen Größen für ein Dateisystem mit ext4 gegenüber ext3 deutlich vergrößert. ext4 Dateisysteme können bis zu 1 Exabyte groß sein (ext3: 32 Terabyte).

ReiserFS ist ein von Grund auf neu entwickeltes Dateisystem, das neben einem Journal auch eine gute Performance bieten soll. Es sticht bei Festplattenbenchmarks vor allem hervor wenn es um das schreiben sehr vieler kleiner Dateien, bzw. um sehr viele Dateien pro Verzeichnis geht. Anfangs hatte es sich den Ruf erworben etwas instabil zu sein, was jedoch längst Vergangenheit sein sollte. Da der Hauptentwickler des Dateisystems derzeit eine lebenslängliche Gefängnisstrafe verbüßt und seine Firma inzwischen in Konkurs gegangen ist, ist jedoch die weitere Pflege des Dateisystems unklar. Es existiert noch ein Nachfolger namens reiser4, der jedoch bislang nicht in den offiziellen Kernel aufgenommen wurde.

XFS ist ein Dateisystem das ursprünglich von SGI für deren kommerzielles Unix Irix entwickelt wurde und von SGI auf Linux portiert wurde. Es hat Journaling und arbeitet insbesondere bei sehr großen Dateien schnell.

Ich persönlich habe vor allem gute Erfahrungen mit ext3 und XFS gemacht.

Ein Dateisystem wird mit dem Befehl mkfs angelegt. mkfs ist dabei eigentlich nur eine Art Verteiler, welcher dann das eigentliche Pogramm aufruft, da jedes Dateisystem seinen eigenen Befehl zum erzeugen hat. Der Parameter -t sagt mkfs welches Dateisystem wir anlegen wollen. Dann muß mkfs natürlich auch noch wissen, welche Partition wir formatieren wollen, daher muß auch noch der Gerätename mit Partitionsnummer angegeben werden:

mkfs -t reiserfs /dev/hda1

legt z. B. eine ReiserFS-Partition auf hda1 an. mkfs ruft dabei in Wirklichkeit mkreiserfs auf welches das ReiserFS anlegt. Der direkte Befehl um ext2/ext3 Partitionen anzulegen, lautet mke2fs, wobei der Parameter -j zusätzlich ein Journal anlegt (also aus dem ext2 ein ext3 Dateisystem macht). Der Befehl für ein XFS Dateisystem lautet mkfs.xfs gefolgt von der Gerätedatei.

Handelt es sich jedoch um eine Swap-Partition, wird diese mit mkswap gefolgt vom Gerätenamen mit Partitionsnummer formatiert. Wer eine Fat-Partition möchte, kann diese mit mkdosfs gefolgt von der Gerätebezeichnung anlegen.

Mounten

Nun habe ich eine Partition mit einem Dateisystem, aber wie kann ich darauf zugreifen? Das zur Verfügung stellen eines Datenträgers unterhalb des Verzeichnisbaumes mit der Wurzel "/" nennt man mounten. Das Verzeichnis in welches ich innerhalb meines Dateisystems die neue Partition mounte, ist der Mountpoint.

Wenn ich zum Beispiel den Inhalt einer USB-Festplatte im Verzeichnis /media/usbplatte zur Verfügung stellen will, dann mounte ich das Gerät in den Mountpoint /media/usbplatte. Das sieht dann so aus:

mount -t ext3 /dev/sda1 /media/usbplatte

Der Befehl mount verlangt 2 Argumente, sowie als Parameter den Dateisystemtyp, den ich mit -t angebe. In manchen Fällen kann der Dateisystemtyp auch automatisch ermittelt werden. Als die beiden Argumente von mount gebe ich zuerst den Gerätenamen an und dann den Mountpoint.

Mounten funktioniert auf diese Art nur für den Benutzer root. Um bei Wechseldatenträgern auch normalen Benutzern das mounten zu erlauben, bzw. um auch bequemer mounten zu können, kann ich den Datenträger in die Datei /etc/fstab aufnehmen. Bei Datenträgern die während des bootens automatisch gemountet werden sollen ist dies sogar notwendig. Die Datei /etc/fstab enthält pro Zeile die Definition für einen Mountpoint. Die Zeilen haben folgenden Aufbau:

Gerät Mountpoint Dateisystemtyp Optionen dump fsck

Zwei Beispiele:

/dev/hda1 /boot ext3 defaults 1 2
/dev/hdc /media/cdrom iso9660 ro,noauto,user 0 0

In der ersten Zeile existiert eine eigene Partition für /boot welche sich auf /dev/hda1 befindet und mit ext3 formatiert ist. "defaults" bedeutet, das es keine speziellen Mountoptionen gibt. In so einem Fall wird angenommen, das der Datenträger automatisch beim booten und beschreibbar gemountet werden soll. Die 1 ist ein Parameter für dump, der momentan nicht benutzt wird. Es ist üblich hier 1 für Systempartitionen anzugeben und 0 für alle anderen Partitionen. Die 2 steht für die Reihenfolge, in der das Dateisystem der Partition gecheckt werden soll. An dieser Stelle vergibt man eine 1 für die Root-Partition, eine 2 für alle weiteren Partitionen die gecheckt werden sollen und eine 0 für alle Partitionen die nicht gecheckt werden sollen oder können (z. B. CD-Rom oder andere Wechseldatenträger).

In der zweiten Zeile wird das Gerät /dev/hdc nach /media/cdrom gemountet. Das Dateisystem ist iso9660, welches das Standarddateisystem für CD-Roms ist. Es werden die Mountoptionen ro für read only, noauto für nicht beim booten mounten und user für darf durch normale User gemountet werden, angegeben. Die Mountopion user ist also dafür zuständig normalen Usern Mountrechte zu geben. dump und ein möglicher Filesystemcheck werden hier nicht berücksichtigt, was bei CD-Roms auch gar nicht möglich wäre.

Wenn ich nun eine ext3 formatierte USB-Festplatte habe, welche vom System als sda1 erkannt wird, könnte ich meine fstab folgendermassen ergänzen:

/dev/sda1 /media/usbplatte ext3 rw,user,noauto 0 0

In diesem Fall kann ich als normaler Benutzer die USB-Festplatte einfach mit dem Kommando: mount /media/usbplatte mounten. Die weiteren Angaben, werden aus der /etc/fstab entnommen.

Dateisystemcheck

Dateisysteme mit Journaling benötigen nicht nach jedem Absturz des Systems einen Dateisystemcheck. Dennoch sollte auch auf solchen Datenträgern von Zeit zu Zeit ein Dateisystemcheck durchgeführt werden. Dazu gibt es das Kommando fsck. Bei automatisch beim booten gemounteten Datenträgern wird ein eventueller Dateisystemcheck vorgenommen, wenn der letzte Parameter der /etc/fstab eine 1 oder 2 ist, wobei Partitionen mit einer 1 zuerst gecheckt werden, dann die mit einer 2. Dieser Check wird von Zeit zu Zeit ausgeführt, was man dann an einer längeren Bootzeit bemerkt. Mit fsck -t Dateisystemtyp Gerätename kann dieser Check auch manuell vorgenommen werden. Dabei darf der Datenträger nicht gemountet oder allenfalls nur read only gemountet sein.

Speicherplatz

Mit dem Kommando df kann ich feststellen wieviel Speicherplatz auf meinen Partitionen belegt ist. Wenn ich die Ausgabe in Megabyte haben möchte, kann ich einfach df -m verwenden. Möchte ich die Ausgabe einfach in der jeweils am lesbarsten Größenangabe kann ich df -h verwenden.

Wenn ich wissen will wer meine Platzverschwender sind kann ich du verwenden. du steht für "Disk Usage" und gibt mir die Größe von Verzeichnissen an. Um die Größe eines einzelnen Verzeichnisses mitsamt seinen Unterverzeichnissen anzuzeigen kann ich z. B. folgenden Befehl verwenden:

du -sh verzeichnis

Weitere Optionen von du verrät dessen Manpage.


René Maroufi, dozent (at) maruweb.de
Creative Commons By ND