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