Partitionierung und Dateisystem

Der Verzeichnisbaum

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

/
Direkt im Root-Verzeichnis liegt der OpenBSD-Kernel unter dem Dateinamen bsd. Außerdem das Bootloaderprogramm boot.
/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. Alle Programme in /bin und /sbin sind statisch kompiliert und benötigen keine weiteren Bibliotheken zum laufen.
/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.
/tmp
Enthält temporäre Dateien und ist für alle Benutzer des Systems schreibbar.
/home
Enthält die Heimatverzeichnisse der Benutzer.
/stand
Programme für eine Stand alone Arbeitsumgebung. Normalerweise leer.
/altroot
Ein Verzeichnis für Backups des Root-Dateisystems.
/emul
Basisverzeichnis welches im Binäremulationsmodus als erstes nach Programmen durchsucht wird. Im Normalfall enthält dieses Verzeichnis selber nur symbolische Links auf den eigentlichen Installationsort der Fremdbinarys. OpenBSD ist in der Lage Programme z. B. für Linux und FreeBSD in einer Binäremulation auszuführen.
/mnt
Verzeichnis in das externe Datenträger gemountet werden können.
/var
Variable Daten, wie z. B. Mailspool oder Druckerspooldateien oder die Logdateien.
/var/log
Logdateien
/var/mail
Mailspool
/var/www
Verzeichnis in das der in OpenBSD integrierte Apache Webserver beim starten per chroot wechselt. Alle Dateien für den Apache liegen daher unterhalb von /var/www, wie etwa Konfigurationsdateien unter /var/www/conf.
/var/named
Verzeichnis in das der in OpenBSD integrierte Named DNS-Server per chroot wechselt. Die Konfigurationsdatei für Named, wie auch die Zonendateien müssen daher unterhalb dieses Verzeichnisses liegen.
/usr
Enthält die Mehrzahl der Anwendungsprogramme, inklusive ihrer Manpages und Dokumentation. Dieses Unterverzeichnis besitzt selber Unterverzeichnisse wie /usr/bin und /usr/sbin, welche den obigen /bin und /sbin Verzeichnissen entprechen.
/usr/lib
Verzeichnis für Programmbibliotheken, welche von den Programmen in /usr/bin und /usr/sbin benötigt werden.
/usr/share
Datendateien die zu Programmen gehören
/usr/X11R6
Verzeichnis für alle zum X-Windows System gehörenden Dateien.
/usr/mdec
Programme und Dateien zur Installation des Bootloaders.
/usr/src
Der Quellcode von OpenBSD.
/usr/ports
Ports-Kollektion von OpenBSD, zur Installation weiterer Software.

Die Verzeichnisse /usr, /var, /home und /tmp (oder Teilbäume davon) können (müssen aber nicht) auf eigene Partitionen ausgelagert werden.

Die Manpage hier (man hier) bietet einen genaueren Überblick über die Funktion aller Verzeichnisse.

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. Unter BSD-Systemen besteht die Partitionierung aus 2 Schritten. BSD-Systeme verwenden die sogenannten DOS-Partitionen nicht direkt, sondern erstellen unter diesen Partitionen Unterpartitionen (manchmal auch Slice genannt). Die DOS-Partitonierung übernimmt bei OpenBSD das Tool fdisk. Das Unterteilen in OpenBSD Partitionen geschieht mit disklabel.

Gerätenamen

Bevor ich jedoch zur eigentlichen Partitionierung komme, möchte ich noch die Gerätenamen von Speichergeräten unter OpenBSD vorstellen. Unter Unix ist alles eine Datei, auch Festplatten und andere Speichergeräte wie CDs und USB-Sticks sind Dateien. Alle Gerätedateien liegen unter /dev. Die Gerätebezeichnungen von Festplatten unterscheiden sich je nachdem ob es sich um IDE oder SCSI-Festplatten handelt. SCSI-Platten werden als sd bezeichnet, während IDE-Platten als wd bezeichnet werden. SATA-Platten können je nach Treiber unterschiedlich bezeichnet werden, die meisten SATA-Platten werden jedoch über wd angesprochen. Achtung: Das ist anders als bei Linux, welches SATA-Platten stets genauso wie SCSI-Platten bezeichnet. USB-Datenträger (nicht nur Festplatten, sondern auch Sticks) werden als sd bezeichnet.

CD- und DVD-Laufwerke werden unter OpenBSD als cd bezeichnet, besitzen also eigene Namen und nicht wie bei Linux die gleichen Namen wie Festplatten. Dabei wird auch nicht zwischen IDE und SCSI unterschieden.

Geräte werden mit einer Zahl durchgezählt, wobei bei 0 angefangen wird. Die erste IDE- oder SATA-Platte im System heißt also wd0. Partitionen werden dabei mit einem Buchstaben bezeichnet, wobei OpenBSD pro Platte bis zu 16 Partitionen adressieren kann. Das ganze Gerät ohne Partitionen wird dabei mit dem Buchstaben c bezeichnet, also z. B. wd0c. Die a-Partition ist stets für die /-Partition des OpenBSD Systems vorgesehen und die b-Partition für Swap. Alle weiteren Partitionen können beliebig vergeben werden.

Bei einer Fremdpartition, wie etwa ein DOS-FAT-Dateisystem wird erst bei i als Partitionsbuchstabe begonnen zu zählen. Also beispielsweise ein USB-Stick mit einem FAT-Dateisystem, welches als erstes sd Gerät im System erkannt wird, wird mit sd0i adressiert. Sollte die i-Partition allerdings bereits durch eine eigene Systempartition belegt sein, wird ein noch höherer Buchstabe der frei ist, für eine Fremdpartition vergeben. Da maximal 16 Partitionen möglich sind, ist der höchste Buchstabe der möglich ist p.

CDs die keine Partitionen besitzen, können sowohl als cd0a, als auch als cd0c angesprochen werden.

OpenBSD unterscheidet außerdem zwischen Raw-Devices und den eigentlichen Block-Geräten. Für beides gibt es eigene Gerätedateien. Die Raw-Devices sind zeichenorientierte Geräte und keine Blockorientierten Geräte und fangen immer mit einem r an, wie beispielsweise rsd0i oder rwd0a. Während zum mounten die normalen Blockgeräte verwendet werden, wird zum erstellen eines neuen Dateisystems auf einer Partition das zeichenorientierte Gerät angesprochen.

fdisk

Dos-basierende Partitionen werden unter OpenBSD, wie auch unter anderen Betriebssystemen mit dem Tool fdisk erstellt. Da die eigentlichen OpenBSD-Partitionen erst unterhalb einer DOS-Partition erstellt werden, kann man es sich einfach machen, wenn man die ganze Festplatte nur für OpenBSD verwenden möchte:

fdisk -i wd0

Mit diesem Kommando wird die ganze Festplatte zu einer großen für OpenBSD verwendbaren Partition. Möchte man mehrere Betriebssysteme auf der gleichen Festplatte betreiben, benötigt man nicht nur einen zusätzlichen Bootloader, sondern muß auch mindestens eine weitere Partition für das zusätzliche Betriebssystem reservieren. fdisk besitzt dafür auch einen interaktiven Modus, in den man mit fdisk -e wd0 kommt. In diesen interaktiven Modus müssen jedoch Partitionsgrenzen in Zylinder/Kopf/Sektor Schreibweise eingegeben werden, was einen Taschenrechner zum umrechnen erfordert und sehr fehleranfällig ist. Ich persönlich empfehle daher im allgemeinen für Dualboot-Setups eher auf ein anderes externes Partitionierungsprogramm zuzugreifen um die anfängliche Aufteilung zwischen OpenBSD-Partition und Fremdpartition vorzunehmen (z. B. das Partitionierungsprogramm des anderen Betriebssystems oder eine Linux-Live-CD).

Möchte man sich nur die momentane Partitionierung anzeigen lassen, läßt man alle Parameter für fdisk weg:

fdisk wd0

disklabel

Die eigentliche OpenBSD-Partitionierung wird nicht mit fdisk sondern mit disklabel vorgenommen:

disklabel -E wd0

Mit diesem Kommando gelangt man in einen interaktiven Partitionseditor, in dem man Partitionen anlegen und löschen kann. Dieser Partitionseditor entspricht dem bei der Installation von OpenBSD benutzten.

Befindet man sich in diesen Partitionierungseditor gibt es folgende Kommandos:

Zum anzeigen der momentanen Partitionstabelle läßt man alle Parameter weg:

disklabel wd0

Formatieren

Hat man seine OpenBSD-Partitionen fertig partitioniert, muß ein Dateisystem darauf erstellt werden. OpenBSD benutzt das traditionelle alte FFS-Dateisystem (auch NetBSD benutzt das gleiche Dateisystem, FreeBSD nennt es UFS). FFS-Dateisysteme können maximal 1 TB groß sein. Seit kurzem gibt es in OpenBSD auch eine Weiterentwicklung des FFS-Dateisystems namens FFS2. FFS2 Dateisysteme können die maximale Größe einer OpenBSD-Partition einnehmen, was derzeit 2 TB sind.

Zum anlegen von Dateisystemen gibt es das Kommando newfs:

newfs /dev/rwd0a

Zum anlegen eines Dateisystems wird newfs immer der volle Pfad des zeichenorientierten Gerätes (also mit vorangestellten r) übergeben. Im Standardfall wird ein FFS Dateisystem angelegt. Zum anlegen eines FFS2 Dateisystems verwendet man den Parameter -O:

newfs -O 2 /dev/rwd0h

An Fremddateisystemen kann OpenBSD auch FAT-Dateisysteme erzeugen. Hierfür gibt es das Kommando newfs_msdos:

newfs_msdos /dev/rsd0i

Mit dem Parameter -F kann man dabei festlegen, ob es sich um ein FAT 12, FAT 16 oder FAT 32 Dateisystem handeln soll:

newfs_msdos -F 32 /dev/rsd0i

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 /mnt/usbplatte zur Verfügung stellen will, dann mounte ich das Gerät in den Mountpoint /mnt/usbplatte. Das sieht dann so aus:

mount /dev/sd0a /mnt/usbplatte

Dieser Befehl setzt vorraus das die USB-Festplatte als sd0 erkannt wurde und eine FFS-Partition unter a hat.

Sollte es sich nicht um eine FFS-Partition handeln, sondern z. B. um eine FAT-Partition, dann gibt es noch den Parameter -t um den Typ des Dateisystems anzugeben:

mount -t msdos /dev/sd0i /mnt/usbplatte

Die beiden Argumente für mount sind immer erst der Gerätename (als Blockgerät, nicht als Zeichengerät, also ohne r) und danach der Mountpoint unter dem der Inhalt sichtbar werden soll. Der Befehl läßt sich nur mit root Rechten ausführen.

Zum bequemeren mounten kann ich den Datenträger auch in die Datei /etc/fstab aufnehmen, wodurch ich nur noch ein Argument (Gerät oder Mountpoint) angeben muß. Auch weitere Optionen lassen sich in die /etc/fstab eintragen.

In der /etc/fstab steht jede Zeile für ein Gerät. Die Zeilen haben folgenden Aufbau:

Gerät Mountpoint Dateisystemtyp Optionen dump fsck

Gerät ist natürlich das Blockgerät das gemountet werden soll. Mountpoint ist das Verzeichnis in das hinein gemountet werden soll. Dateisystemtyp ist das Dateisystem das auf dem Datenträger verwendet wird, also bei normalen OpenBSD-Partitionen ffs, bei FAT-Dateisystemen msdos und bei CDs cd9660. Optionen können z. B. ro für read only oder nodev für Gerätedateien auf dieser Partition ignorieren oder noauto für nicht beim booten automatisch mounten sein. Das Feld dump gibt an ob dieses Dateisystem mit dump gesichert werden muß. Für Wechseldatenträger sollte man hier immer 0 angeben, bei Systempartitionen die eventuell mit dump gesichert werden sollte man hier 1 angeben. Der letzte Wert steht für die Dateisystemprüfung beim booten. Soll dieser Datenträger grundsätzlich nicht beim booten geprüft werden (was man bei allen Wechseldatenträgern machen sollte) steht hier eine 0. Eine 1 bedeutet, das der Datenträger als erstes beim booten geprüft wird. Das Root-Dateisystem sollte hier immer eine 1 haben. Eine 2 bedeutet, das dieses Dateisystem ebenfalls beim booten geprüft wird, aber nach dem Dateisystem das hier eine 1 hat. Die 2 sollte daher für alle weiteren Systempartitionen mit Ausnahme des Root-Dateisystems verwendet werden.

3 Beispiele:

/dev/wd0d /tmp ffs rw,nodev,nosuid 1 2
/dev/cd0a /mnt/cdrom cd9660 ro,noauto,noexec,nodev 0 0
/dev/sd0i /mnt/usb0 msdos rw,noauto,nodev,nosuid 0 0

In der ersten Zeile dient die Partition /dev/wd0d als /tmp-Verzeichnis. Die Partition ist (wie alle Systempartitionen) mit ffs formatiert. Die Optionen bedeuten das die Partition les- und schreibbar gemountet wird, außerdem werden Gerätedateien ignoriert und bei Dateien mit gesetzten SUID-Bit wird das SUID-Bit ignoriert (was beides eine Sicherheitsmaßnahme darstellt).

In der zweiten Zeile wird das Gerät /dev/cd0a nach /mnt/cdrom gemountet. Der Dateisystemtyp ist cd9660, was für das bei CDs übliche ISO9660 Dateisystem steht. Die Optionen besagen, das diese Partition nur read only gemountet wird (was bei CDs sinnvoll ist) und nicht automatisch beim booten gemountet wird. Außerdem werden Gerätedateien auf den CDs ignoriert und generell können auch keine Dateien auf CDs ausgeführt werden (noexec). Die Option noexec ist bei Wechseldatenträgern ein zusätzlicher Schutz, durch den verhindert wird, das potientiell gefährliche Dateien einfach ausgeführt werden. Dump und Dateisystemcheck sind wie für alle Wechseldatenträger üblich beide auf 0 gesetzt.

Die dritte Zeile mountet das Gerät /dev/sd0i nach /mnt/usb0. Die Partition ist eine FAT-Partition (msdos) und wird schreibbar (rw) gemountet. Die Partition wird nicht automatisch beim booten gemountet, sondern nur auf Benutzeranforderung (noauto). Gerätedateien und SUID-Bits werden ignoriert (nodev,nosuid).

Möchte ich nun z. B. das Gerät aus der dritten Zeile mounten, kann ich entweder nur den Mountpoint benutzen:

mount /mnt/usb0

oder nur das Gerät:

mount /dev/sd0i

und OpenBSD weiß aufgrund des fstab-Eintrages alle anderen Parameter mit denen gemountet werden soll.

Möchte ich eine Option ändern oder z. B. einen bislang nur read only gemounteten Datenträger schreibbar mounten, kann ich mit mount auch den Status eines bereits gemounteten Datenträgers verändern. Hierfür existiert die Option -u für mount:

mount -u -w /mnt/usb0

Sollte in diesem Fall vorher der nach /mnt/usb0 gemountete Datenträger nur read only gemountet gewesen sein, wird mit diesem Befehl der Datenträger schreibbar gemountet. Der Parameter -w steht für schreibbar (-r wäre nur lesbar). Ebenso lassen sich auch andere Optionen verändern, z. B.:

mount -u -o dev /home

In diesem Beispiel werden Gerätedateien auf der Partition die nach /home gemountet ist erlaubt, falls diese vorher nicht erlaubt waren. Mit dem Parameter -o können beliebige Optionen verändert werden, wie etwa exec/noexec oder dev/nodev.

Seit OpenBSD 4.9 unterstützt OpenBSD auch das mounten anhand von disklabel UIDs (DUIDs) statt nach Gerätenamen. Insbesondere für USB-Laufwerke ist dies eine interessante Alternative, wenn man denselben USB-Datenträger immer auf den selben Mountpoint mounten möchte, egal welche weiteren USB-Laufwerke angeschlossen sind. Damit dies funktioniert, muß vorher mit disklabel eine DUID für das Laufwerk erzeugt worden sein. DUIDs lassen sich im interaktiven disklabel-Editor (disklabel -E) mit dem Kommando i anlegen. Da eine DUID für das gesamte Laufwerk gilt, muß der Partitionsbuchstabe getrennt durch einen Punkt von der DUID mit angegeben werden. Ein Eintrag für die /etc/fstab welcher eine DUID statt eines Gerätenamens nutzt kann zum Beispiel so aussehen:

631cd6deedc842d8.a /mnt/usbstick ffs rw,noauto,nodev,nosuid 0 0

Ein mount /mnt/usbstick wird nun die a-Partition eines Datenträger mit der DUID 631cd6deedc842d8 nach /mnt/usbstick mounten.

OpenBSD unterstützt neben FAT, als weiteres Fremddateisystem auch noch ext2-Partitionen. Der Dateisystemtyp lautet dann für OpenBSD ext2fs:

mount -t ext2fs /dev/wd0i /mnt/linux

Ext2-Partitionen können von OpenBSD sowohl gelesen wie auch geschrieben werden, wodurch sich solche Partitionen zum Dateiaustausch mit Linux anbieten.

NTFS-Partitionen können von OpenBSD bislang nur gelesen werden und auch dies nur wenn im Kernel die entsprechende Option dafür einkompiliert wurde, was im Standardkernel erst seit OpenBSD 4.9 der Fall ist.

Dateisystemcheck

Sollte OpenBSD nicht richtig herunter gefahren worden sein, wird beim nächsten booten, ein Dateisystemcheck aller mit einer 1 oder 2 beim letzten Feld in der /etc/fstab versehenen Dateisysteme durchgeführt. Solch ein Dateisystemcheck läßt sich mit dem Befehl fsck auch manuell durchführen:

fsck /dev/wd0f

Dies überprüft das Dateisystem /dev/wd0f und meldet eventuelle Inkonsistenzen. Sollen kleinere Reperaturen am Dateisystem gleich automatisch durchgeführt werden, verwendet man den Parameter -p:

fsck -p /dev/wd0f

Der Parameter -p wird beim automatischen Dateisystemcheck beim booten ebenfalls gesetzt.

Ein fsck sollte nur auf einen ungemounteten Datenträger durchgeführt werden.

Speicherplatz

Möchte man wissen wieviel Speicherplatz auf den gemounteten Partitionen benutzt wird, gibt es den Befehl df:

df -h

Dieser Befehl zeigt die Speicherbelegung aller gemounteten Datenträger als Liste an. Der Parameter -h dient dabei der Ausgabe in möglichst einfach lesbaren Größeneinheiten (h für human readable).

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