# 1.104.1

# Erzeugen von Partitionen und Dateisystemen

Beschreibung: Prüfungskandidaten sollten in der Lage sein, Plattenpartitionen zu konfigurieren und Dateisysteme auf Medien wie Festplatten zu erzeugen. Dieses Lernziel beinhaltet verschiedene mkfs Kommandos zur Erzeugung von verschiedenen Dateisystemen auf Partitionen, einschließlich ext2, ext3, reiserfs, vfat und xfs.

Die wichtigsten Dateien, Bezeichnungen und Anwendungen:

- fdisk
- mkfs

Wie in jedem Betriebssystem, so müssen Festplatten auch unter Linux vorbereitet werden, um vom System benutzt werden zu können. Die beiden Schritte, die nötig sind, sind

- Partitionieren einer Festplatte
- Dateisystem auf den Partitionen erstellen (unter DOS wird das "formatieren" genannt)

Für jede dieser beiden Aufgaben gibt es ein (bzw. mehrere) Programm(e) um sie zu bewältigen.

### Partitionieren einer Festplatte mit fdisk

Eine neue Festplatte ist komplett leer. Damit ein beliebiges Betriebssystem auf die Platte zugreifen kann, müssen zunächst einmal bestimmte Bereiche auf der Platte angelegt werden, die das System nutzen kann - die sogenannten Partitionen. Selbst wenn eine Platte nicht unterteilt werden soll, also als ein Bereich genutzt werden soll, muß eine Partition erstellt werden.

Festplatten bestehen aus einer bis mehreren runden übereinanderliegenden Magnetscheiben, die in konzentrische Kreise (Spuren) eingeteilt werden. Alle übereinanderliegenden Spuren werden Zylinder genannt und gemeinsam angesprochen. Das liegt an der Tatsache, daß für jede Scheibenoberfläche ein Schreib/Lesekopf existiert. Alle diese Schreib/Leseköpfe sind starr miteinander verbunden. Wenn einer davon auf der Spur 5 seiner Plattenoberfläche ist, so sind alle anderen auch auf der Spur 5 jeweils ihrer Oberfläche. Daher werden Schreib- und Lesevorgänge immer auf allen untereinanderliegenden Spuren gleichzeitig durchgeführt. So entsteht der Begriff Zylinder, eben alle übereinanderliegenden Spuren.

Partitionen sind jetzt ringförmige Bereiche auf einer Platte. Eine Partition wird durch einen Start- und einen Endzylinder begrenzt. Der erste Zylinder (Zylinder 0) ist nie Teil einer Partition, sondern enthält Verwaltungsinformationen, wie den Master-Boot-Sektor und die Tabelle mit den Partitionsinformationen.

Wenn eine Platte z.B. 1024 Zylinder besitzt und in zwei Partitionen aufgeteilt werden soll, so entstünde etwa eine Aufteilung wie die folgende:

Partition | Startzylinder | Endzylinder
--- | --- | ---
1 | 1 | 512
2 | 513 | 1023

Jede physikalische Festplatte kann bis zu vier sogenannte primäre Partitionen (primary partitions) aufnehmen. Das liegt daran, daß auf dem Zylinder 0 nur Platz gelassen wurde für vier Einträge in der Partitionstabelle (partition-table).

Eine dieser vier primären Partitionen darf eine sogenannte erweiterte Partition (extended partition) sein, die ihrerseits wieder behandelt wird, wie eine physikalische Festplatte und selbst wieder Unterpartitionen (logical partitions) aufnehmen kann. Linux kann bis zu 11 solcher logischer Partitionen pro erweiterter Partition verwalten.

Linux hat eine eindeutige Namenskonvention für Festplatten und Partitionen. Dabei wird unterschieden zwischen IDE- und SCSI-Festplatten. Die Namen für die IDE-Festplatten sind:

`/dev/hda`
  Der Master des ersten IDE-Kanals
`/dev/hdb`
  Der Slave des ersten IDE-Kanals
`/dev/hdc`
  Der Master des zweiten IDE-Kanals
`/dev/hdd`
  Der Slave des zweiten IDE-Kanals
`/dev/hde`
  Der Master des dritten IDE-Kanals
`/dev/hdf`
  Der Slave des dritten IDE-Kanals
...

SCSI-Festplatten werden der Reihe nach mit Buchstaben von a bis z durchnummeriert, zuerst alle Platten des ersten SCSI-Hostadapters, dann die des zweiten usw. Für jeden Hostadapter gilt, daß die Platten der Reihe nach durchnummeriert werden, die Platte mit der niedrigsten SCSI-ID zuerst, bis zur Platte mit der höchsten SCSI-ID. Der Name der SCSI-Platten beginnt immer mit `/dev/sd`. Also wäre die erste SCSI-Platte `/dev/sda`, die nächsten `/dev/sdb`, `/dev/sdc` usw.

Die Partitionen jeder Platte sind jetzt einfach als Nummern an diese Namen angehängt. Die primären Partitionen tragen die Nummern 1 bis 4, wobei eine dieser primären Partitionen - unabhängig von ihrer Nummer - eine erweiterte Partition sein kann. Die logischen Partitionen (Unterpartitionen) innerhalb der erweiterten Partition tragen die Nummern 5 bis 15. Daraus lassen sich also aus den Namen der Partitionen eindeutige Informationen gewinnen. Ein paar Beispiele:

`/dev/hda1`
  Die erste primäre Partition des Masters des ersten IDE-Kanals
`/dev/hdb5`
  Die erste logische Partition des Slaves des ersten IDE-Kanals

Wenn eine solche Bezeichnung also eine Nummer hat, so ist die jeweilige Partition angesprochen, wenn sie keine Nummer hat, so ist die ganze physikalische Platte gemeint.

Um jetzt eine bestimmte Platte zu partitionieren, müssen wir also zunächst einmal wissen, wie diese Platte heißt. Das Programm zum Partitionieren von Festplatten heißt fdisk und wird zusammen mit dem Namen der zu partitionierenden Platte aufgerufen. Wollen wir also auf der ersten SCSI-Festplatte im System (`/dev/sda`) Partitionen einrichten, so schreiben wir:

      fdisk /dev/sda

Es erscheint zunächst mal die wenig aussagekräftige Zeile

    Command (m for help):

Also drücken wir doch mal das m:

    Command action
       a   toggle a bootable flag
       b   edit bsd disklabel
       c   toggle the dos compatibility flag
       d   delete a partition
       l   list known partition types
       m   print this menu
       n   add a new partition
       o   create a new empty DOS partition table
       p   print the partition table
       q   quit without saving changes
       s   create a new empty Sun disklabel
       t   change a partition's system id
       u   change display/entry units
       v   verify the partition table
       w   write table to disk and exit
       x   extra functionality (experts only)

    Command (m for help):

Für uns sind nur ein paar wenige dieser Befehle notwendig, insbesondere die folgenden:

`a`
  Bootflag ein- und ausschalten. Manche Systeme, wie etwa DOS/Windows können nur von Partitionen booten, die den sogenannten Bootflag gesetzt haben oder - im DOS-Jargon - aktiviert sind. Linux benötigt diesen Flag überhaupt nicht.
`d`
  Delete - Löschen einer Partition. Hier muß die jeweilige Partitionsnummer angegeben werden. Mit dem `p`-Befehl kann die Partitionstabelle angezeigt werden, die uns die gewünschte Nummer zeigt. Erweiterte Partitionen, die noch logische Partitionen enthalten können nicht gelöscht werden.
`l`
  Liste aller Partitionstypen. Jede Partition hat eine hexadezimale Kenn-Nummer, die vom jeweiligen System gesetzt wird und dieser Partition einen bestimmten Typ zuweist. Linux benutzt dabei drei Kenn-Nummern, 82 für eine Swap-Partition (eine Erweiterung des Arbeitsspeichers), 83 für eine normale Linux-Plattenpartition und 8e für eine Partition des Logical Volume Managers.
`n`
  Neue Partition anlegen. Wenn die Platte bisher keine erweiterte Partition besitzt, dann wird zunächst gefragt, ob eine primäre oder eine erweiterte Partition erstellt werden soll. Gibt es schon eine erweiterte Partition, so wird statt dessen nach primärer und logischer Partition gefragt. Existieren schon vier primäre Partitionen und eine davon ist eine erweiterte, dann fällt diese Frage weg, denn es können dann ja nur logische Partitionen angelegt werden.

  Die nächste Frage ist die nach der Nummer der anzulegenden Partition und dann müssen Start- und Endzylinder angegeben werden. Statt einem End-Zylinder kann auch eine Größenangabe gemacht werden, die mit einem Pluszeichen (+) eingeleitet werden muß und einen Größenpostfix M oder K für Mega- oder Kilobyte besitzen darf. So bedeutet `+256M` eben eine Partitionsgröße von 256 Megabyte.

`p`
  Print Partition-Table - Gibt die Partitionstabelle der Platte aus.
`t`
  Wechselt den Typ der Partition. Hier kann dann einer der Typen angegeben werden, die mit dem l-Befehl angezeigt wurden.
`q`
  Quit - Beendet das Programm ohne die vorgenommenen Änderungen tatsächlich vorzunehmen. Es bleibt also alles beim Alten.
`w`
  Write Partition-Table - Schreibt die vorgenommenen Änderungen in die Partitionstabelle und beendet das Programm.

Mit diesen Befehlen sind alle denkbaren Aktionen durchzuführen, die wir für den Umgang mit Linux normalerweise brauchen. Wenn Sie allerdings nur die Partitionstabelle einer physikalischen Festplatte anzeigen wollen, so können Sie fdisk auch einfach mit dem Parameter `-l` aufrufen, dann zeigt es nur die Partitionstabelle des anfgegebenen Laufwerks (oder aller Laufwerke, wenn keines angegeben wurde) und beendet sich dann sofort wieder.

### Erstellen eines Dateisystems mit mkfs und seinen Verwandten

Bevor eine Partition (oder eine Diskette) von Linux benutzt werden kann, muß zunächst ein Dateisystem erstellt werden. Das ist die gleiche Prozedur, die unter DOS/Windows "Formatieren" genannt wird. Das Prinzip eines Unix/Linux Dateisystems unterscheidet sich aber grundlegend von dem des DOS/Windows Dateisystems. So finden Sie hier zunächst einmal ein kurzen Überblick über den Aufbau von Unix-Inode-Systemen, dessen Verständnis im Folgenden vorausgesetzt wird, wenn wir im Einzelnen das Erstellen des Dateisystems besprechen. Dieses Verständnis wird insbesondere auch im nächsten Kapitel wichtig sein.

Der häufigste Dateisystemtyp unter Linux ist das Second Extended Filesystem oder kurz EXT2. Es unterscheidet sich in einzelnen Details vom Standard-Unix-Dateisystem, benutzt aber die selben Techniken, was I-Nodes angeht. Für das Verständnis der LPIC-Level1 Prüfung reicht das Wissen um diesen Standard. Für die speziell Interessierten findet sich hier noch Informationen über das EXT2 Filesystem.

Das Programm, mit dem wir Dateisysteme erstellen heißt `mkfs` (Make FileSystem) und ist eigentlich nur ein Frontend für weitere Programme, die dann für jedes Linux-Dateisystem extra zur Verfügung stehen, wie etwa `mkfs.ext2, mkfs.minix, mkfs.msdos` oder `mkfs.xiafs`.

Der grundsätzliche Aufruf von mkfs ist

      mkfs  [ -t Dateisystemtyp ] [ Optionen ] Gerätedatei [ Blocks ]

Dabei sind die Optionen abhängig vom verwendeten Dateisystemtyp. Wird der Dateisystemtyp weggelassen wird heutzutage EXT2 angenommen, aber darauf gibt es keine Garantie. Werden die Blocks weggelassen, so werden alle zur Verfügung stehenden Blocks verwendet.

Das Programm zur Erstellung von EXT2-Dateisystemen kennt die folgenden wichtigen Parameter:

-b Blockgröße
  Spezifiziert die Größe der Blocks in Byte. Gültige Größen sind 1024, 2048 und 4096.
-c
  Checkt das Gerät nach schlechten Blocks ab, bevor das Dateisystem erstellt wird.
-i Bytes-Per_Inode
  Stellt das Verhältnis von Plattenplatz zur Menge der Inodes ein. Je größer der angegebene Wert ist, um so weniger Inodes werden erstellt. Dieser Wert sollte grundsätzlich kleiner als die Blockgröße des Dateisystems sein.
-N Anzahl der Inodes
  Gibt die absolute Anzahl der zu erstellenden Inodes an. Wird anstatt des -i Parameters verwendet bzw. überschreibt dessen Einstellungen.

In der Regel ist es ausreichend, ein Dateisystem mit den Standard-Parametern anzulegen, also einfach gar keine Parameter anzugeben. ein einfaches

      mkfs /dev/hdb5

legt ein solches Dateisystem auf der Partition 5 der zweiten IDE-Platte an. In Ausnahmefällen ist es aber notwendig, bestimmte Parameter zu verändern. So werden beispielsweise beim Anlegen eines EXT2-Dateisystems auf einer Diskette nur 184 Inodes angelegt. Normalerweise würde das sicher auch reichen, um die 1,44 MByte Diskettenplatz aufzuteilen. Wenn wir aber etwa eine Bootdiskette erstellen wollen, die schon alleine hunderte von Gerätedateien im `/dev`-Verzeichnis braucht, ist diese Einstellung definitiv nicht brauchbar. Hier müssten wir also mit dem -N Parameter manuell die Anzahl der zu erstellenden Inodes hochsetzen.

### Explizites Anlegen eines EXT2- oder EXT3-Dateisystems

Um sicherzugehen, daß tatsächlich ein Dateisystem des Typs EXT2 (second extended) oder seine Erweiterung zum Journaling Dateisystem (ext3) erzeugt wird, muß entweder der Dateisystemtyp mit der Option `-t ext2` angegeben werden, oder es wird gleich das entsprechende Programm mke2fs aufgerufen.

Mit diesem Programm können beide Dateisystemtypen erzeugt werden. Um ein Journaling-Dateisystem vom Typ ext3 zu erzeugen muß der Parameter `-j` (journaling) mit angegeben werden.

Anstatt mke2fs kann auch mkfs.ext2 oder mkfs.ext3 angegeben werden.

### Explizites Anlegen eines Reiser-Dateisystems

Wenn ein Dateisystem des Typs REISERFS angelegt werden soll, so muß dem mkfs-Programm der Parameter `-t reiserfs` angegeben werden, oder es wird das Programm mkreiserfs direkt aufgerufen.

Anstatt mkreiserfs kann auch mkfs.reiserfs angegeben werden.

Eine explizite Angabe der anzulegenden Inodes entfällt bei dieser Dateisystemart, weil das Reiserfs die Inodes dynamisch anlegt, je nach Bedarf.

### Explizites Anlegen eines XFS-Dateisystems

Wenn ein Dateisystem des Typs XFS angelegt werden soll, so muß dem mkfs-Programm der Parameter `-t xfs` angegeben werden, oder es wird das Programm mkfs.xfs direkt aufgerufen.

### Explizites Anlegen eines VFAT-Dateisystems

Wenn ein Dateisystem des Typs VFAT (Windows Dateisystem) angelegt werden soll, so muß dem mkfs-Programm der Parameter `-t vfat` angegeben werden, oder es wird das Programm mkdosfs direkt aufgerufen.

Anstatt mkdosfs kann auch mkfs.vfat angegeben werden.