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