Linux: Festplatte, Partition und Dateisystem
Willemers Informatik-Ecke

Gerätedateien

Der Zugriff auf Hardware erfolgt über Gerätedateien, die sich im Verzeichnis /dev befinden. Diese sehr speziellen Dateien werden noch einmal nach Block- und Zeichengeräten unterschieden, erkennbar an dem ersten Zeichen der Zeile, wenn die Datei mit dem Befehl ls -l angezeigt wird. Ein b steht für ein Blockgerät, ein c für ein Zeichengerät.

Ein Blockgerät verfügt über einen Puffer und lädt mit einem Schlag einen großen Speicherblock. Festplatten sind typische Blockgeräte. Zeichengeräte liefern die Daten nur einzeln, wie beispielsweise eine Tastatur oder Maus. Das Warten auf einen Block würde die Reaktion verzögern.

Die Gerätedateien stellen nicht nur den Zugriff auf die Geräte dar, sonfern enthalten auch den Zugriff auf den Treiber.

Die Nomenklatur für Festplatten oder ähnliche Geräte wie USB-Sticks:

Partitionen

Eine Festplatte kann in Partitionen aufgeteilt werden. Mindestens eine muss es geben. Bei mehreren Partitionen können beispielsweise mehrere Betriebssysteme parallel installiert werden oder auch Datenbereiche von den Betriebssystembereichen getrennt werden.

Für die aktuellen Betriebssysteme sind zwei Arten von Partitionstabellen relevant: MBR und GPT.

GPT hat MBR weitgehend abgelöst. Das Bearbeitungstool der Wahl ist gparted.

Dateisysteme

Eine Partition enthält keine Struktur, um Dateien oder Verzeichnisse anlegen, bearbeiten oder lesen zu können. Dazu bedarf es eines Dateisystems. Ein Dateisystem ist betriebssystemabhängig. Beispiele:

Erstellen

Jedes Betriebssystem erstellt normalerweise sein eigenes Dateisystems. Bei Linux erledigt dies der Befehl mkfs mit der Partition als Parameter.
# mkfs /dev/sdc1
Mithilfe von Optionen kann Linux auch andere Dateisysteme anlegen. Mehr Informationen liefert der Befehl man mkfs.

Prüfen und Reparieren

Beim Booten prüft Linux, ob die Dateisysteme in Ordnung sind. Das kann auch von Hand mit dem Befehl fsck ausgeführt werden. Das Programm kann Dateisysteme auch reparieren. Dazu muss man ggf. weitere Optionen verwenden, die man mit man fsck erfährt. Wenn eine Reparatur notwendig ist, sollte man vor deren Start gefährdete Dateien in Sicherheit bringen.

Sollte fsck bei einem Reparaturversuch vereinsamte Datenblöcke aufspüren, die es keinen Dateien zuordnen kann, legt es diese in einem Verzeichnis lost+found ab.

fsck kann nur auf Dateisysteme angewendet werden, die nicht in den Verzeichnisbaum eingehängt sind.

POSIX-Verzeichnisbaum

Im Gegensatz zu Windows oder MacOS sehen Anwendungsprogramme weder Laufwerke noch Dateisysteme. Es gibt nur einen Verzeichnisbaum, in dem die Dateisysteme bestimmten Verzeichnissen und deren Unterverzeichnissen vom Administrator zugewiesen werden. Damit ist es möglich, nachträglich Festplattenplatz hinzuzufügen, ohne dass das Benutzer oder Anwendungsprogramme merken.

Die Verzeichnisse sind nach dem in POSIX festgelegten Filesystem Hierarchy Standard (FHS) strukturiert. Sie finden Sie auf jedem UNIX- oder Linux-System in dieser Form wieder.

Einhängen von Dateisystemen

Die Dateisysteme werden in den Standardverzeichnisbaum eingehängt. Die Abbildung zeigt das Einhängen mehrerer Dateisysteme in einen Verzeichnisbaum.

Einhängen mit mount

Mit dem Befehl mount wird ein Dateisystem in den Verzeichnisbaum eingebunden. Der folgende Befehl hängt das Dateisystem /dev/sda5 unter dem Verzeichnis /mnt ein:

# mount /dev/sda5 /mnt

Das Verzeichnis /mnt existiert immer und sollte für kurzfristiges Einhängen für Wartungsarbeiten immer frei bleiben.

Externe Medien wie USB-Sticks oder externe Festplatten werden unter /media/username/medianame automatisch eingehängt, wenn ein Benutzer angemeldet ist.

Das Verzeichnis, in das ein Dateisystem eingehängt wird, muss bereits existieren, bevor es eingehängt wird. Alle Dateien, die in diesem Verzeichnis liegen, werden durch das Einhängen ausgeblendet. An dieser Stelle erscheinen die Dateien und Verzeichnisse des eingehängten Dateisystems. Nach dem Aushängen erscheinen die ausgeblendeten Dateien und Verzeichnisse wieder. Sinnvollerweise legt man also keine Dateien oder Verzeichnisse in Verzeichnissen an, die später als Einhängepunkt dienen sollen.

Mit dem Befehl umount (nicht unmount!) wird ein Dateisystem wieder ausgehängt. Als Parameter kann sowohl das Dateisystem oder der Pfad sein.

mount wirkt nur bis zum nächsten Reboot.

Kontrolle der eingehängten Dateisysteme

Mit dem Befehl df, der eigentlich die Auslastung der Dateisysteme anzeigt, kann man auch sehen, welche Dateisysteme unter welchen Verzeichnissen eingehängt sind.

Dauerhaft einhängen: /etc/fstab

Um die Dateisysteme nicht nach jedem Reboot neu einhängen zu müssen, wird in der Datei /etc/fstab festgelegt, welches Dateisystem in welchem Verzeichnis beim Booten eingehängt wird. Das heißt, dass sie eine Folge von mount-Befehlen beschreibt, die beim Booten durchgeführt werden.

Vorsicht: Werden in der Datei /etc/fstab falsche Einträge gemacht, wird der Bootvorgang gestoppt, sobald ein Dateisystem oder ein Verzeichnis nicht verfügbar sind oder eine Option unerfüllbar ist. Das System landet im Single-User-Modus. Es gibt nur einen Prompt, den der Administrator root nutzen kann, um beispielsweise mit dem Kommando nano /etc/fstab die Datei noch einmal zu korrigieren.

Die Datei /etc/fstab wird durch mehrere Spalten gekennzeichnet.

Nähere Informationen erhält man mit dem Befehl man fstab.

Die folgende /etc/fstab würde eine Zuordnung der Dateisysteme zu Verzeichnissen bewirken, wie sie in der obigen Abbildung zu sehen ist.

# /etc/fstab
/dev/sda1       /              ext4  defaults 1 1
/dev/sda5       /home          ext4  defaults 1 2
/dev/sdb1       /home/johannes ext4  defaults 1 3
/dev/sdb2       /var           ext4  defaults 1 4

UUID statt Gerätedateien

Bei heutigen Installationen von Linux findet man in der Datei /etc/fstab häufig nicht mehr die Gerätedateien der Dateisysteme, sondern stattdessen deren UUIDs vor.
# /dev/sdb1                                 /home  ext4 ...
UUID=472bd8b8-5110-448b-b434-edf2b84db5e0   /home  ext4 ...
Der Hintergrund ist, dass die Reihenfolge der Festplatten leicht geändert werden kann, wenn man versehentlich die SATA-Kabel vertauscht. Dann ist die Festplatte /dev/sda plötzlich die Festplatte /dev/sdb und umgekehrt. Danach wäre ein Booten unmöglich.

Anstatt sich darauf zu verlassen, dass Festplatten immer in der gleichen Reihenfolge eingebaut sind, verwendet man einen eindeutigen Identifier für jedes Dateisystem - eine UUID (Universally Unique Identifier). Auf diese Weise greift das System beim Booten nicht blindlings auf die Festplattenpartition, sondern sucht, auf welcher Partition sich ein Dateisystem mit der genannten UUID befindet.

Um herauszufinden, welches Dateisystem welche UUID hat, kann man den Befehl blkid verwenden:

# blkid
/dev/sda6: UUID="20f6df1c-5702-4c9f-a76d-b4ed380fd5b7" ...
/dev/sda8: UUID="156e616f-3094-41e4-b72a-7245848e8224" ...
/dev/sda9: UUID="cc99dc54-f907-4317-be6e-93a36e4ffc5b" ...
/dev/sda5: UUID="c34e5165-59c9-4bff-97b7-b70e3789ca45" ...
/dev/sda7: UUID="a693e514-d040-4715-ab3a-861d9fbb1989" ...
/dev/sdb1: UUID="8087a09f-97f2-4fa9-8f0b-abddbc453c3c" ...
/dev/sdc1: LABEL="TrekStor" UUID="5E76-D471" TYPE="vfat"

Speicherplatzverbrauch auf den Dateisystemen

Dateisysteme enthalten natürlich Daten in Dateien und Verzeichnissen. Und es ist die Natur der EDV, dass diese immer wachsen. Als Administrator will man wissen, wann ein Dateisystem überläuft und das natürlich am besten, bevor es passiert.

Freier Platz: df

Mit dem Befehl df kann man ermitteln, welche Dateisysteme wie weit gefüllt sind. Die Option -h, die hier verwendet wird, gibt die Werte in möglichst großen Einheiten an, also beispielsweise M für Megabyte oder G für Gigabyte an. Ohne diese Option zeigt die df die Größe in KByte an, was zu eifrigem Ziffernzählen führt.

$ df -h
Dateisystem Größe Benutzt Verf. Verw% Eingehängt auf
udev         3,8G       0  3,8G    0% /dev
tmpfs        781M    1,9M  779M    1% /run
/dev/sda4     64G     22G   39G   36% /
tmpfs        3,9G    172K  3,9G    1% /dev/shm
tmpfs        5,0M    4,0K  5,0M    1% /run/lock
tmpfs        3,9G       0  3,9G    0% /sys/fs/cgroup
/dev/sda1     96M     29M   68M   31% /boot/efi
/dev/sda6    538G    404G  107G   80% /home
tmpfs        781M     44K  781M    1% /run/user/1000
Sie sehen hier, dass das Dateisystem, auf dem sich das Wurzelverzeichnis befindet, nur zu 36 Prozent ausgelastet ist. Das ist in diesem Fall das Betriebssystem und alle anderen Verzeichnisse, bis auf das Verzeichnis /home, das auf dem Dateisystem /dev/sda6 liegt. Dieses ist bereits zu 80 Prozent gefüllt. Hier wird sich also über kurz oder lang die Frage stellen, ob man das Dateisystem aufräumt oder eine größere Festplatte spendiert.

Festplatten sollten nämlich möglichst nicht mehr als zu 90 Prozent belegt sein. Das kann leicht zur Fragmentierung führen. Größere Dateien können dann nicht mehr am Stück geschrieben werden, wenn ein so größer Block nicht mehr vorliegt. Sie werden dann auf die Löcher verteilt, die vorherige Löschungen hinterlassen haben.

Der Schrecken der Fragmentierung, der unter Windows-Benutzer gern geteilt wurde, ist allerdings nicht gar so schrecklich. Wird wieder Platz in größeren Mengen frei, reguliert es sich üblicherweise mit der Zeit von selbst. Bei SSD-Laufwerken ist die Fragmentierung sogar unerheblich, weil die Einbußen vor allem durch die mechanischen Spurwechsel der magnetischen Festplatten verursacht wurden.

Suche nach großen Dateien

Auch wenn Festplatten immer billiger werden, ist es durchaus sinnvoll, mal zu prüfen, wo die fetten Dateein liegen, die das Dateisystem füllen.

Der Befehl du (disk usage) ermittelt die Belegung von Dateien. Sinnvollerweise wird er mit der Option -s verwendet. Dadurch wird ein untersuchtes Verzeichnis rekursiv durchlaufen und deren Unterstrukturen zu einer Gesamtdatenmenge aufsummiert.

$ du -s *
83820    beruf
276      Familie
193336   hs
36       Korrespondenz
4668     musik
4        signatur.txt
51620    Songs
1043028  tex
Dieser Befehl bearbeitet durch den Stern alle Dateien und Verzeichnisse des aktuellen Verzeichnisses. Wenn Sie nach großen Dateien suchen, würde das Verzeichnis tex der heißeste Kandidat sein. Interessant dürften dann noch hs und beruf sein. Dagegen dürfte das Duchsuchen von Korrespondenz und Familie Zeitverschwendung sein.