[OpenBSD]

[FAQ-Index] [Zum Kapitel 13 - Multimedia] [Zum Kapitel 15 - Packages und Ports]

14 - Platteneinrichtung


Inhaltsverzeichnis


14.1 - Benutzung von OpenBSDs disklabel(8)

Was ist disklabel(8)?

Lies zunächst die disklabel(8)-Manualseite.

Die Details wie Platten unter OpenBSD eingerichtet werden unterscheiden sich auf den einzelnen Plattformen. Auf den Plattformen i386, amd64, macppc, zaurus und armish findet die Platteneinrichtung in zwei Phasen statt. Zuerst wird das OpenBSD-Slice unter Verwendung von fdisk(8) auf der Festplatte definiert und dann mit disklabel(8) in OpenBSD-Partitionen unterteilt.

Alle OpenBSD-Plattformen verwenden jedoch primär disklabel(8) für die Verwaltung von OpenBSD-Partitionen. Plattformen, die ebenfalls fdisk(8) einsetzen, legen alle disklabel(8)-Partitionen in einer einzelnen fdisk-Partition an.

Labels beinhalten bestimmte Informationen über deine Festplatte; unter anderem deine Plattengeometrie und Informationen über die Dateisysteme auf deiner Platte. Sie beinhalten auch Informationen über deine Platte selbst wie zum Beispiel Umdrehungsgeschwindigkeit, Interleave etc. Diese Einträge existieren auf Grund früherer Notwendigkeiten und sind meist nicht einmal korrekt: Mach dir also keine Gedanken darüber. Das Disklabel wird dann vom Bootstrapprogramm genutzt, um das Laufwerk anzusprechen und zu wissen, welche Dateisysteme sich auf dem Laufwerk befinden. Weitere Informationen über Disklabel kannst du in der disklabel(5)-Manualseite nachlesen.

Auf einigen Plattformen hilft disklabel, Architekturbegrenzungen bei der Plattenpartitionierung zu überwinden. Zum Beispiel kann man auf i386 nur vier primäre Partitionen anlegen; disklabel(8) benutzt eine dieser primären Partitionen, die dann *alle* deine OpenBSD-Partitionen enthält (z. B. »swap«, »/«, »/usr«, »/var« etc.) - und du hast noch drei weitere für andere Betriebssysteme übrig.

disklabel(8) während der OpenBSD-Installation

Einer der Hauptteile der OpenBSD-Installation ist das erstmalige Erzeugen der Labels. Während der Installation kannst du disklabel(8) verwenden, um separate Partitionen zu erstellen. Als Teil des Installationsprozesses kannst du deine Mountpunkte in disklabel(8) definieren - im weiteren Verlauf oder auch nach der Installation kannst du sie aber weiterhin ändern.

Obwohl es keinen »richtigen« Weg gibt, wie man ein Disklabel anlegt, gibt es viele falsche. Bevor du versuchst, ein Label für deine Platte anzulegen, wirf einen Blick auf diese Diskussion über das Partitionieren und Partitionsgrößen.

Um ein Beispiel für die Verwendung von disklabel(8) während der Installation zu sehen, wirf einen Blick auf das Kapitel Festplatte(n) einrichten, das Teil der Installationsanleitung ist.

disklabel(8) nach der Installation verwenden

Wenn dein System erst einmal installiert ist, solltest du disklabel nicht mehr allzu oft benutzen müssen. Aber du kannst es gebrauchen, wenn du z. B. Festplatten hinzufügen, welche entfernen oder auch einfach umstrukturieren möchtest. Eines der ersten Dinge, die du dann machst, ist dir den momentanen gültigen Disklabel anzusehen. Und das geht so:

# disklabel wd0 <-- Oder ein anderes Device, das du dir anzeigen lassen möchtest # Inside MBR partition 3: type A6 start 63 size 29880837 # /dev/rwd0c: type: ESDI disk: ESDI/IDE disk label: Maxtor 51536H2 flags: bytes/sector: 512 sectors/track: 63 tracks/cylinder: 16 sectors/cylinder: 1008 cylinders: 16383 total sectors: 29888820 rpm: 3600 interleave: 1 trackskew: 0 cylinderskew: 0 headswitch: 0 # microseconds track-to-track seek: 0 # microseconds drivedata: 0 16 partitions: # size offset fstype [fsize bsize cpg] a: 614817 63 4.2BSD 2048 16384 328 # Cyl 0*- 609 b: 409248 614880 swap # Cyl 610 - 1015 c: 29888820 0 unused 0 0 # Cyl 0 - 29651* d: 6291936 1024128 4.2BSD 2048 16384 328 # Cyl 1016 - 7257 e: 409248 7316064 4.2BSD 2048 16384 328 # Cyl 7258 - 7663 f: 1024128 9822960 4.2BSD 2048 16384 328 # Cyl 9745 - 10760 h: 2097648 7725312 4.2BSD 2048 16384 328 # Cyl 7664 - 9744

Beachte, dass bisher nur ein Teil des zur Verfügung stehenden Plattenspeichers zugewiesen wurde. Mit disklabel gibt es zwei verschiedene Modi für die Editierung des Disklabels: ein eingebauter kommandozeilenbasierter Editor (mit diesem hast du OpenBSD ursprünglich installiert) und ein vollständiger Editor wie beispielsweise vi(1). Den eingebauten kommandozeilenbasierten Editor wirst du vermutlich als einfacher zu bedienen empfinden, da er dich durch alle Schritte führt und nach Bedarf weitere Hilfe ausgibt - der Vollbildeditor hat selbstverständlich auch seine Daseinsberechtigung.

Lass uns eine Partition zum gerade gezeigten System hinzufügen.

Warnung: Jedes Mal wenn du dein Disklabel editierst setzt du die gesamten Daten auf deiner Platte einer großen Gefahr aus. Stell sicher, dass du deine Daten gesichert hast, bevor du ein bestehendes Disklabel modifizierst!

Wir werden hierfür den eingebauten kommandozeilenbasierten Editor verwenden, der mit der Option -E von disklabel(8) aufgerufen wird.

# disklabel -E wd0 ... > a k offset: [10847088] size: [19033812] 2g Rounding to nearest cylinder: 4194288 FS type: [4.2BSD] > p m device: /dev/rwd0c type: ESDI disk: ESDI/IDE disk label: Maxtor 51536H2 bytes/sector: 512 sectors/track: 63 tracks/cylinder: 16 sectors/cylinder: 1008 cylinders: 16383 total bytes: 14594.2M free bytes: 7245.9M rpm: 3600 16 partitions: # size offset fstype [fsize bsize cpg] a: 300.2M 0.0M 4.2BSD 2048 16384 328 # Cyl 0*- 609 b: 199.8M 300.2M swap # Cyl 610 - 1015 c: 14594.2M 0.0M unused 0 0 # Cyl 0 - 29651* d: 3072.2M 500.1M 4.2BSD 2048 16384 328 # Cyl 1016 - 7257 e: 199.8M 3572.3M 4.2BSD 2048 16384 328 # Cyl 7258 - 7663 f: 500.1M 4796.4M 4.2BSD 2048 16384 328 # Cyl 9745 - 10760 h: 1024.2M 3772.1M 4.2BSD 2048 16384 328 # Cyl 7664 - 9744 k: 2048.0M 5296.4M 4.2BSD 2048 16384 16 # Cyl 10761 - 14921 > q Write new label?: [y]
In diesem Fall war disklabel(8) nett und hat einen guten Startoffset für die Partition berechnet. In den meisten Fällen wird das auch funktionieren - falls du aber »Löcher« im Disklabel hast (d. h. falls du eine Partition gelöscht hast oder dir das Leben unnötig schwer machen willst) musst du eventuell zu Papier und Bleistift greifen und den passenden Offset selbst ausrechnen. Beachte, dass es gut möglich ist, dass Dinge hier fehlschlagen, obwohl disklabel(8) einige Gültigkeitsüberprüfungen durchführt. Sei sicher, dass du genau weißt, was die Bedeutung dieser Zahlen ist, die du gerade eingibst.

Auf den meisten OpenBSD-Plattformen stehen sechzehn Disklabelpartitionen zur Verfügung: von a bis p (einige »besondere« Systeme haben nur acht). Jedes Disklabel sollte eine Partition namens c mit dem Dateisystemtyp (fstype) »unused« aufweisen. Versuche niemals, ein Dateisystem auf c zu erstellen. Auf dem Bootdevice ist a für die Rootpartition reserviert und b für die Swappartition. Diese Einschränkung gilt nur für das Bootdevice. Andere Devices können alle fünfzehn Partitionen außer c für Dateisysteme nutzen.

Tipps und Tricks für disklabel

14.2 - Benutzung von OpenBSDs fdisk(8)

Lies zuerst die fdisk(8)-Manualseite.

Auf einigen Plattformen (i386, amd64, macppc, zaurus und armish) wird fdisk(8) verwendet, um eine Partition zu erstellen, die vom Boot-ROM des Systems erkannt werden kann und die Disklabelpartitionen von OpenBSD aufnehmen wird. Andere Plattformen benötigen oder verwenden fdisk(8) nicht. Mit fdisk(8) kann auch der Masterbootrecord (MBR) editiert werden, wodurch alle Betriebssysteme auf einem Computer betroffen sind. Im Gegensatz zu anderen fdisk-ähnlichen Programmen einiger anderen Betriebssysteme nimmt OpenBSDs fdisk an, dass du weißt was du tust, und wird dich die meiste Zeit machen lassen was du willst - somit steht dir ein sehr mächtiges Werkzeug zur Verfügung. Andererseits lässt es dich eben auch Dinge machen, die du entweder nicht machen solltest oder die du auch nicht gar nicht vorhattest. Bei der Verwendung ist also Vorsicht geboten.

Normalerweise wird nur eine fdisk-Partition für OpenBSD auf einer Platte angelegt. Diese Partition wird dann mit disklabel in weitere OpenBSD-Dateisystempartitionen aufgeteilt.

Um dir nur deine Partitionstabelle mit fdisk anzugucken, verwende:

# fdisk sd0

Was dann eine ähnliche Ausgabe wie diese hier erzeugt:

Disk: sd0 geometry: 553/255/63 [8883945 Sectors] Offset: 0 Signature: 0xAA55 Starting Ending LBA Info: #: id C H S - C H S [ start: size ] ------------------------------------------------------------------------ *0: A6 3 0 1 - 552 254 63 [ 48195: 8835750 ] OpenBSD 1: 12 0 1 1 - 2 254 63 [ 63: 48132 ] Compaq Diag. 2: 00 0 0 0 - 0 0 0 [ 0: 0 ] unused 3: 00 0 0 0 - 0 0 0 [ 0: 0 ] unused

In diesem Beispiel betrachten wir die Ausgabe des ersten SCSI-Laufwerks. Wir können die OpenBSD-Partition (A6) und ihre Größe sehen. Der * sagt uns, dass die OpenBSD-Partition eine bootbare Partition ist.

Im vorherigen Beispiel haben wir uns die Informationen nur angesehen. Was aber, wenn wir unsere Partitionstabelle verändern wollen? Nun, dazu müssen wir zunächst die Option -e benutzen. Diese bringt uns dann zu einer Kommandozeile, die uns mit fdisk interagieren lässt.

# fdisk -e wd0 Enter 'help' for information fdisk: 1> help help Command help list manual Show entire OpenBSD man page for fdisk reinit Re-initialize loaded MBR (to defaults) setpid Set the identifier of a given table entry disk Edit current drive stats edit Edit given table entry flag Flag given table entry as bootable update Update machine code in loaded MBR select Select extended partition table entry MBR swap Swap two partition entries print Print loaded MBR partition table write Write loaded MBR to disk exit Exit edit of current MBR, without saving changes quit Quit edit of current MBR, saving current changes abort Abort program without saving current changes fdisk: 1>

Hier ist eine Übersicht über die Kommandos, die man nach der Eingabe der Option -e benutzen kann.

Tipps und Tricks für fdisk

14.3 - Hinzufügen von weiteren Festplatten unter OpenBSD

Nun, nachdem du deine Festplatte ORDNUNGSGEMÄSS eingebaut hast, musst du fdisk(8) (nur i386 ) und auch disklabel(8) verwenden, um deine Festplatte unter OpenBSD benutzen zu können.

Besitzer eines i386-Systems starten mit fdisk. Besitzer anderer Architekturen können diesen Schritt einfach ignorieren. In dem Beispiel weiter unten werden wir dem System ein drittes SCSI-Laufwerk hinzufügen.

# fdisk -i sd2
Das wird die »echte« Partitionstabelle der Festplatte für eine ausschließliche Benutzung von OpenBSD initialisieren. Als nächstes musst du ein Disklabel dafür erzeugen. Das wird wohl etwas verwirrend wirken.
# disklabel -e sd2 (der Bildschirm wird leer, dein $EDITOR erscheint) type: SCSI ... Bla ... sectors/track: 63 total sectors: 6185088 ... Bla ... 16 partitions: # size offset fstype [fsize bsize cpg] c: 6185088 0 unused 0 0 # (Cyl. 0 - 6135) d: 1405080 63 4.2BSD 1024 8192 16 # (Cyl. 0*- 1393*) e: 4779945 1405143 4.2BSD 1024 8192 16 # (Cyl. 1393*- 6135)
Zunächst einmal ignoriere die Partition c - sie ist immer da und Programme wie disklabel benötigen sie, um zu funktionieren! Für OpenBSD ist fstype 4.2BSD. Die gesamte Größe der Festplatte ist wird unter total sectors angegeben. Nehmen wir an, es handelt sich um eine 3 Gigabyte große Festplatte. Drei Gigabytes in der Sprache der Festplattenhersteller sind 3000 Megabytes. Dividiere also 6185088 mit 3000 (benutze bc(1)). Du erhältst 2061. Um jetzt Partitionsgrößen für a, d, e, f, g, ... zu erstellen, rechne einfach X * 2061, um X Megabyte Platz auf dieser Partition zu erhalten. Der Offset für deine erste Partition sollte derselbe sein, wie unter sectors/track vorher in disklabels Ausgabe angegeben. Bei uns ist es 63. Der Offset für jede Partition ist hinterher eine Kombination aus der Größe und dem Offset jeder anderen Partition (mit Ausnahme der Partition c, da sie keine Rolle in dieser Gleichung spielt).

Wenn du aber nur eine Partition auf deiner Festplatte brauchst, zum Beispiel, wenn du das ganze Ding nur zum Ablegen von Webseiten oder einem Heimatverzeichnis oder etwas anderem nutzen willst, nimm einfach die gesamte Größe der Platte und ziehe die Sektoren pro Spur davon ab: 6185088 - 63 = 6185025. Deine Partition ist:

d: 6185025 63 4.2BSD 1024 8192 16
Wenn dir das alles unnötig komplex erscheint, kannst du disklabel -E benutzten, um den selben Patitionierungsmodus zu erhalten, den du auf deiner Installationsdisk hattest! Dort kannst du 96M benutzen, um 96 Megabytes anzugeben (oder, wenn deine Festplatte groß genug ist, 96G für 96 Gigabytes!). Unglücklicherweise benutzt der Modus -E die BIOS-Plattengeometrie und nicht die reale - oft sind die beiden nicht deckungsgleich. Um dieses Problem zu umgehen, tippe »g d« für »geometry disk«. (Andere Möglichkeiten sind »g b« für »Geometry BIOS« und »g u« für »geometry user« oder einfach das, was das Label gesagt hat, bevor disklabel irgendwelche Änderungen gemacht hat.)

Das war eine Menge. Aber du bist noch nicht fertig. Zuletzt musst du noch das Dateisystem auf der Festplatte mittels newfs(8) anlegen.

# newfs sd2a

Oder wie auch immer deine Festplatte nach dem OpenBSD-Plattennummerierungsschema heißen mag. (Siehe einfach in der Ausgabe von dmesg(8) nach, um zu sehen, wie die Platte von OpenBSD benannt wurde.)

Nun überleg dir, wohin du deine gerade neu geschaffene Partition mounten willst. Sagen wir einfach mal /u. Erzeuge zunächst erstmal /u. Dann mounte sie.

# mount /dev/sd2a /u

Zuletzt musst du sie noch zur /etc/fstab(5) hinzufügen.

/dev/sd2a /u ffs rw 1 1

Was aber, wenn du ein existierendes Verzeichnis wie zum Beispiel /usr/local auslagern willst? Mounte die neue Platte unter /mnt und benutze cpio -pdum, um /usr/local in das Verzeichnis /mnt zu kopieren. Passe die Datei /etc/fstab(5) so an, dass die /usr/local-Partition nun /dev/wd1a ist (deine frisch formatierte Partition). Beispiel:

/dev/sd2a /usr/local ffs rw 1 1

Starte in den Singleuser-Modus mit boot -s neu, verschiebe das existierende /usr/local nach /usr/local-backup (oder lösche es gleich, wenn du mutig bist) und lege ein leeres Verzeichnis namens /usr/local an. Starte dann das System neu und voila: Die Dateien sind da!

14.4 - Wie man in eine Datei swappt

(Hinweis: Wenn du in eine Datei swappen willst, weil du immer »virtual memory exhausted«-Fehler bekommst, solltest du lieber versuchen, deine Begrenzungen auf Prozessebene mittels cshs unlimit(1) oder ulimit(1) zu erhöhen.)

In eine Datei zu swappen benötigt keinen angepassten Kernel, obwohl das weiterhin gemacht werden könnte, zeigt dir diese FAQ, wie man den Swapbereich auf beide Arten hinzufügen kann.

In eine Datei swappen.

In eine Datei zu swappen ist der einfachste und schnellste Weg, um zusätzlichen Swap zu bekommen. Die Datei darf aber nicht auf einem Dateisystem mit Softupdates liegen (was ja standardmäßig deaktiviert ist). Finde zunächst einmal heraus, wie viel Swap du momentan hast und wie viel du davon benutzt. Das geht mit dem Werkzeug swapctl(8) recht einfach. Zum Beispiel mit diesem Aufruf:

$ swapctl -l Device 512-blocks Used Avail Capacity Priority swap_device 65520 8 65512 0% 0

Das zeigt sowohl alle Geräte, die momentan für das Swappen benutzt werden, als auch ihre momentane Statistik an. Im obigen Beispiel gibt es nur ein Gerät namens swap_device. Das ist der vordefinierte Bereich auf der Platte, der für das Swappen benutzt wird (wird im Übrigen als Partition b bei Disklabels angezeigt). Wie du auch sehen kannst, wird das Gerät zurzeit nicht sonderlich belastet oder vielmehr benutzt. Aber für den Zweck dieses Dokumentes tun wir einfach so, als wenn noch weitere 32 MB benötigt werden würden.

Der erste Schritt, um eine Datei als Swapbereich zu nutzen, ist die Datei zu erzeugen. Am besten macht man das mit Hilfe von dd(1). Hier ist ein Beispiel, das die 32 M große Datei /var/swap erzeugt.

$ sudo dd if=/dev/zero of=/var/swap bs=1k count=32768 32768+0 records in 32768+0 records out 33554432 bytes transferred in 20 secs (1677721 bytes/sec)

Nachdem das erledigt ist, können wir jetzt das Swappen auf dieses Device richten. Benutze einfach das folgende Kommando, um das Swappen auf dieses Device zu lenken:

$ sudo chmod 600 /var/swap $ sudo swapctl -a /var/swap

Jetzt müssen wir noch prüfen, ob sie auch korrekt zu unserer Liste der Swapdevices hinzugefügt wurde.

$ swapctl -l Device 512-blocks Used Avail Capacity Priority swap_device 65520 8 65512 0% 0 /var/swap 65536 0 65536 0% 0 Total 131056 8 131048 0%

Jetzt, da die Datei erzeugt wurde und in sie hinein geswappt wird, musst du noch eine Zeile in deine /etc/fstab hineinschreiben, so dass die Datei beim nächsten Booten auch benutzt wird. Wenn diese Zeile nicht hinzugefügt wird, wird dieses Swapdevice nicht konfiguriert.

$ cat /etc/fstab /dev/wd0a / ffs rw 1 1 /var/swap /var/swap swap sw 0 0

Swappen über ein vnode-device

Dies ist eine dauerhaftere Lösung, um mehr Swapbereich zu erhalten. Um in eine Datei zu swappen, erzeuge zunächst einen Kernel mit vnd0c als Swap. Wenn du wd0a als root-Dateisystem hast und wd0b als bisherigen Swap, benutze diese Zeile in deiner Kernelkonfigurationsdatei (wenn du dir nicht sicher bist, siehe dir das Kapitel »Einen neuen Kernel kompilieren« in dieser FAQ an):

config bsd root on wd0a swap on wd0b and vnd0c dumps on wd0b

Nachdem das erledigt ist, muss die Datei erzeugt werden, in die geswappt werden soll. Du solltest dies mit dem selben Kommando wie in den vorherigen Beispielen machen.

$ sudo dd if=/dev/zero of=/var/swap bs=1k count=32768 32768+0 records in 32768+0 records out 33554432 bytes transferred in 20 secs (1677721 bytes/sec)

Da deine Datei jetzt an ihrem Platz ist, musst du die Datei in deine /etc/fstab eintragen. Hier ist eine Beispielzeile, mit der man dieses Device beim Booten als Swap benutzt.

$ cat /etc/fstab /dev/wd0a / ffs rw 1 1 /dev/vnd0c none swap sw 0 0

An diesem Punkt angekommen musst du deinen Computer neustarten, sodass die Änderungen am Kernel Effekt haben. Nachdem das passiert ist, ist es an der Zeit, das Device als Swap zu konfigurieren. Dazu wirst du vnconfig(8) benutzen.

$ sudo vnconfig -c -v vnd0 /var/swap vnd0: 33554432 bytes on /var/swap

Als letzten Schritt musst du den Swap auf diesem Gerät noch einschalten. Wir machen das genau wie in dem Beispiel oben mit swapctl(8). Und zuletzt prüfen wir wieder, ob es auch korrekt in unsere Liste der Swapdevices eingetragen wurde.

$ sudo swapctl -a /dev/vnd0c $ swapctl -l Device 512-blocks Used Avail Capacity Priority swap_device 65520 8 65512 0% 0 /dev/vnd0c 65536 0 65536 0% 0 Total 131056 8 131048 0%

14.5 - Softupdates

Softupdates basieren auf einer Idee, die von Greg Ganger und Yale Patt vorgeschlagen wurde, und wurden für FreeBSD von Kirk McKusick entwickelt. Softupdates erzwingen eine gewisse Reihenfolge der Buffercacheoperationen, was die Anforderungen für das Entfernen des FFS-Codes ermöglicht, der für das synchrone Schreiben von Verzeichniseinträgen zuständig ist. Daher konnte ein großer Geschwindigkeitsanwachs in der Leistung der Schreibzugriffe auf Platten festgestellt werden.

Die Aktivierung von Softupdates muss mit einer Option während dem Mounten ausgeführt werden. Wenn eine Partition mit mount(8) gemountet wird, kannst du angeben, dass du Softupdates auf dieser Partition aktivieren möchtest. Dies ist ein Beispieleintrag für /etc/fstab(5), der eine Partition sd0a auflistet, die wir mit Softupdates gemountet haben möchten.

/dev/sd0a / ffs rw,softdep 1 1

Hinweis für Sparc-Anwender: Aktiviere Softupdates nicht auf sun4- oder sun4c-Maschinen. Diese Architekturen unterstützen nur eine sehr begrenzte Menge Kernelspeicher und können diese Funktion nicht verwenden. Trotzdem sind sun4m-Maschinen in Ordnung.

14.6 - Wie bootet OpenBSD/i386?

Der Bootprozess für OpenBSD/i386 ist nicht einfach und verstehen, wie es funktioniert, kann nützlich sein, um ein Problem zu lösen, wenn Dinge nicht laufen. Während dem Bootprozess gibt es vier Schlüsselereignisse:
  1. Master Boot Record (MBR): Der Master Boot Record ist der erste physikalische Sektor (512 Byte) auf der Platte. Er beinhaltet die primäre Partitionstabelle und ein kleines Programm, um den Partition Boot Record (PBR) zu laden. Bedenke, dass in einigen Umgebungen der Begriff MBR verwendet wird, um nur auf den Codeteil dieses ersten Blocks auf der Platte zu verweisen, statt auf den gesamten ersten Block (einschließlich der Partitionstabelle). Es ist äußerst wichtig, die Bedeutung von »initialize the MBR« zu verstehen - in der Terminologie von OpenBSD würde es den gesamten MBR-Sektor neu schreiben, nicht nur den Code, so wie es auf anderen Systemen der Fall sein könnte. Du wirst das nur selten machen wollen. Verwende stattdessen fdisk(8)s Kommandozeilenoption -u (»fdisk -u wd0«).

    Obwohl OpenBSD einen MBR beinhaltet, wirst du nicht gezwungen, ihn zu verwenden, da so gut wie jeder MBR OpenBSD booten kann. Der MBR wird von dem Programm fdisk(8) verändert, welches verwendet wird, um die Partitionstabelle zu editieren und um ebenfalls den MBR-Code auf die Platte zu schreiben.

    OpenBSDs MBR kündigt sich selbst mit der Meldung an:

    Using drive 0, partition 3.
    die die Platte und Partition anzeigt, von der er den PBR laden wird. Zusätzlich zu dem Offensichtlichen, zeigt er ebenfalls einen angehängten Punkt ("."), welcher darauf deutet, dass diese Maschine in der Lage ist, LBA-Übersetzung zum Booten zu verwenden. Wenn die Maschine nicht in der Lage ist, LBA-Übersetzung zu verwenden, wäre der obige Punkt mit einem Semikolon (»;«) ausgewechselt worden, das auf CHS-Übersetzung deutet:
    Using Drive 0, Partition 3;
    Bedenke, dass der angehängte Punkt oder das angehängte Semikolon als ein Indikator für den neuen OpenBSD-MBR angesehen werden kann, der mit OpenBSD 3.5 eingeführt wurde.
  2. Partition Boot Record (PBR): Der Partition Boot Record, auch der PBR oder biosboot(8) genannt wird (benannt nach dem Namen der Datei, der den Code beinhaltet), ist der erste physikalische Sektor der OpenBSD-Partition auf der Platte. Der PBR ist der Firststage-Bootloader für OpenBSD. Er wird vom MBR-Code geladen und hat die Aufgabe, OpenBSDs Secondstage-Bootloader boot(8) zu laden. Wie der MBR ist auch der PBR eine sehr kleine Sektion von Code und Daten - insgesamt nur 512 Byte. Das ist nicht genug, um eine vollständig dateisystembewusste Applikation zu laden, sodass, statt den PBR /boot auf der Platte ausfindig machen zu lassen, die BIOS-verfügbare Stelle von /boot physikalisch in den PBR während der Installation eingetragen wird.

    Der PBR wird von installboot installiert, das später in diesem Dokument genauer beschrieben wird. Der PBR kündigt sich selbst mit der Meldung an:

    Loading...
    die einen Punkt für jeden Dateisystemblock anzeigt, den er versucht auszulesen. Ebenfalls zeigt der PBR an, ob er LBA oder CHS zum Laden verwendet - wenn er CHS-Übersetzung verwendet, zeigt er eine Nachricht mit einem Semikolon an:
    Loading;...
    Das ältere (vor v3.5) biosboot(8) zeigte die Nachricht »reading boot...« an.
  3. Secondstage-Bootloader, /boot: /boot wird vom PBR geladen und hat die Aufgabe, auf das OpenBSD-Dateisystem durch das BIOS der Maschine zuzugreifen und den aktuellen Kernel ausfindig zu machen und zu laden. boot(8) übergibt ebenfalls verschiedene Optionen und Informationen an den Kernel.

    boot(8) ist ein interaktives Programm. Nachdem es geladen ist versucht es, /etc/boot.conf ausfindig zu machen und zu laden, wenn sie existiert (was auf einer standardmäßigen Installation nicht der Fall sein muss) und verarbeitet sämtliche Kommandos in ihr. Wenn es durch /etc/boot.conf nicht anders angeordnet wurde, gibt es dem Benutzer einen Prompt aus:

    probing: pc0 com0 com1 apm mem[636k 190M a20=on] disk: fd0 hd0+ >> OpenBSD/i386 BOOT 2.10 boot>
    Es gibt dem Benutzer (standardmäßig) fünf Sekunden lang die Möglichkeit, andere Aufgaben auszuführen, aber wenn keine vor dem Ablauf der Zeit eingegeben wurde, startet es sein normales Verhalten: Den Kernel bsd von der root-Partition der ersten Festplatte laden. Der Secondstage-Bootloader untersucht deine Systemhardware durch das BIOS (da der OpenBSD-Kernel noch nicht geladen ist). Oben kannst du ein paar Dinge sehen, die er gesucht und gefunden hat: Das »+«-Zeichen nach hd0 zeigt an, dass das BIOS /boot mitgeteilt hat, dass diese Festplatte über LBA angesprochen werden kann. Wenn eine erstmalige Installation ausgeführt wird, siehst du ab und zu einen * nach einer Festplatte - dies deutet auf eine Platte hin, die so scheint, als wenn sie kein OpenBSD-Disklabel beinhaltet.
  4. Kernel: /bsd: Dies ist das Ziel des Bootprozesses: Den OpenBSD Kernel in den RAM laden und sauber auszuführen. Wenn der Kernel einmal geladen wurde, kann OpenBSD direkt auf die Hardware zugreifen, nicht mehr durch das BIOS.
So, der Anfang vom Start des Bootprozesses könnte wie folgt aussehen:
Using drive 0, partition 3. <- MBR Loading.... <- PBR probing: pc0 com0 com1 apm mem[636k 190M a20=on] <- /boot disk: fd0 hd0+ >> OpenBSD/i386 BOOT 2.10 boot> booting hd0a:/bsd 4464500+838332 [58+204240+181750]=0x56cfd0 entry point at 0x100120 [ using 386464 bytes of bsd ELF symbol table ] Copyright (c) 1982, 1986, 1989, 1991, 1993 <- Kernel The Regents of the University of California. All rights reserved. Copyright (c) 1995-2007 OpenBSD. All rights reserved. http://www.OpenBSD.org OpenBSD 4.2 (GENERIC) #375: Tue Aug 28 10:38:44 MDT 2007 deraadt@i386.openbsd.org:/usr/src/sys/arch/i386/compile/GENERIC ...

Was fehlschlagen kann

Da der PBR sehr klein ist, ist die Anzahl der Fehlermeldungen sehr begrenzt und recht kryptisch. Typische Nachrichten sind: Andere Fehlermeldungen werden in der biosboot(8)-Manualseite ausführlich besprochen. Für weitere Informationen über den i386-Bootprozess, siehe

14.7 - Welche Probleme treten bei großen Festplatten mit OpenBSD auf?

OpenBSD unterstützt ein individuelles Dateisystem von bis zu 231-1, oder 2,147,483,647 Sektoren und da jeder Sektor 512 Byte groß ist, ist das etwas unterhalb von 1 T.

Es gibt auch eine 1-T-Begrenzung für die physikalische Größe der Platte obwohl es unter *einigen* Umständen möglich ist, dass es selbst bis zu 2 T keine Probleme gibt, wobei das nicht garantiert wird.

Selbstverständlich sind die Fähigkeit eines Dateisystems und die Fähigkeit einer bestimmten Hardware zwei unterschiedliche Dinge. Eine neue 250 G große IDE-Festplatte kann unter Umständen nicht mit älteren (vor >137G-Standard) Interfaces funktionieren und einige sehr alte SCSI-Adapter sind bekannt dafür, dass sie Probleme mit moderneren Laufwerken haben und einige alte BIOSe werden hängen, wenn sie einer modern bestückten Festplatte begegnen. Du musst die Fähigkeiten deiner Hardware respektieren.

Partitionsgröße und Lokalitätsbegrenzungen

Leider ist die volle Funktionalität des OS nicht verfügbar, bis NACHDEM das OS in den Speicher geladen wurde. Der Bootprozess verwendet (und ist daher auch darauf beschränkt) die Boot-ROM des Systems.

Aus diesem Grund muss die /bsd-Datei (der Kernel) innerhalb des vom Boot-ROM adressierbarem Bereich liegen. Das bedeutet für einige ältere i386-Systeme, dass die root-Partition vollständig innerhalb der ersten 504 M liegen muss, aber neuere Computer können diese Grenze bei 2 G, 8 G, 32 G, 128 G oder mehr haben. Es ist ebenfalls sinnvoll zu erwähnen, dass viele relativ neue Computer, die Laufwerke mit mehr als 128 G Speicher unterstützen tatsächlich eine BIOS-Begrenzung für die ersten 128 G für das Booten haben. Du kannst diese Systeme mit großen Laufwerken betreiben, aber deine root-Partition muss innerhalb der ersten 128 G liegen.

Bedenke, dass es möglich ist, ein 40 G großes Laufwerk in einen alten 486er einzubauen und auf diesem OpenBSD mit einer großen Partition zu installieren und zu denken, dass du erfolgreich die vorherige Regel gebrochen hast. Trotzdem kann es dich auf einem höchst unangenehmen Weg verfolgen:

Warum? Weil, wenn du eine neue /bsd-Datei »über« die alte kopierst, überschreibt sie nicht die alte - ihr wird einem neuen Ort auf der Platte zugewiesen, möglicherweise außerhalb der 504-M-Grenze, die das BIOS hat. Der Bootloader wird nun nicht mehr in der Lage sein, die /bsd-Datei zu erhalten und das System hängt.

Um OpenBSD zum Booten zu bringen, müssen die Bootloader (biosboot(8) und /boot im Falle von i386) und der Kernel (/bsd) innerhalb des Bereiches sein, den die Boot-ROM unterstützt und innerhalb ihrer eigenen Fähigkeiten. Um sicher zu gehen, ist die Regel einfach:

Die gesamte root-Partition muss innerhalb des BIOS (oder Boot-ROM) vom Computer adressierbaren Speicher liegen.

Einige Nicht-i386-Anwender denken, dass sie dies nicht betrifft, jedoch haben die meisten Plattformen eine Art Begrenzung des ROMs bezüglich der Plattengröße. Herauszufinden, wie groß diese Begrenzung denn nun tatsächlich ist, kann schwer sein.

Dies ist ein weiterer guter Grund deine Festplatte zu partitionieren, statt nur eine große Partition zu verwenden.

Zeit- und Speicheranforderungen von fsck(8)

Eine weitere Überlegung mit großen Dateisystemen ist die Zeit und der Speicher, die benötigt werden, um as Dateisystem nach einem Crash oder einer Stromunterbrechung einem fsck(8) zu unterziehen. Man sollte nicht ein 120 G großes Dateisystem auf ein System mit 32 M RAM setzen und erwarten, dass es fsck(1) erfolgreich nach einem Crash ausführt. Eine grobe Richtlinie ist, dass das System zumindest 1 M Arbeitsspeicher für jedes 1 G des Plattenspeichers haben sollte, um erfolgreich fsck gegen die Platte auszuführen. Zu diesem Zeitpunkt kann zwar geswappt werden, doch wird dies mit einem großen Geschwindigkeitseinbruch geschehen. In den meisten Fällen ist daher davon abzuraten - es sei denn es gibt spezielle Gründe dafür. Die benötigte Zeit, um fsck gegen ein Laufwerk auszuführen kann ein Problem werden, sobald das Dateisystem an Größe gewinnt. Du musst fsck aber nur auf den Plattenspeicher anwenden, der tatsächlich zu gemounteten Dateisystemen gehört. Falls du mehrere Platten in deinem System hast denke bitte daran, dass nach einem Absturz alle Platten gleichzeitig mit fsck(8) überprüft werden, sodass deutlich mehr RAM pro Platte benötigt wird.

14.8 - Installieren von Bootblocks - i386/amd64-spezifisch

Aktuelle Versionen von OpenBSD (3.5 und später) verfügen über einen sehr robusten Bootloader, der mit den unterschiedlichen Plattengeometrien besser umgehen kann als der frühere Bootloader. Allerdings sind beide empfindlich gegenüber der Position von /boot auf der Festplatte. Falls du Änderungen durchführst, die boot(8) auf der Platte verschieben (tatsächlich oder nur eine neue I-Node), so wirst du dein System »beschädigen« - es wird nicht mehr hochfahren. Um den Bootblock zu reparieren, damit du wieder normal booten kannst, lege einfach eine Bootdiskette in dein Diskettenlaufwerk ein und gib am Bootprompt »b hd0a:/bsd« ein, um ihn zu zwingen, von der ersten Festplatte zu booten (und nicht von der Diskette). Deine Maschine sollte normal booten. Nun musst du den Firststage-Bootloader (biosboot(8)) basierend auf der neuen Position von /boot erneut installieren, indem du das Programm installboot(8) aufrufst.

In unserem Beispiel gehen wird davon aus, dass du von sd0 bootest (für IDE wäre es wd0 etc.).

# cd /usr/mdec; ./installboot /boot biosboot sd0

Wenn eine neuere Version des Bootblocks benötigt wird, wirst du diese selber kompilieren müssen. Und das geht so:

# cd /sys/arch/i386/stand/ # make && make install # cd /usr/mdec; cp ./boot /boot # ./installboot /boot biosboot sd0 (oder wie deine Festplatte auch immer heißen mag)

14.9 - Sich auf das Schlimmste vorbereiten: Backups und Wiederherstellen von Band.

Einführung:

Wenn du so etwas wie einen Produktionsserver laufen lassen willst, ist es ratsam, irgendeine Form des Backups für den Fall zu haben, dass eine deiner Festplatten versagt oder einen Crash hat.

Diese Information wird dir helfen, die Standardwerkzeuge dump(8)/restore(8) zu benutzen, die als Teil von OpenBSD ausgeliefert werden. Ein fortgeschritteneres Werkzeug ist Amanda, das über Packages verfügbar ist und auch mehrere Server auf ein Bandlaufwerk sichern kann. In den meisten Umgebungen sind dump(8)/restore(8) aber ausreichend. Wenn du aber mehrere Maschinen sichern willst, ist Amanda auf jeden Fall einen Blick wert.

Die Beispiele in diesem Dokument benutzen sowohl SCSI-Festplatten als auch Bänder. In einer Produktionsumgebung empfehlen wir SCSI und kein IDE wegen der Art und Weise, wie IDE mit Badblocks umgeht. Das heißt aber nicht, dass diese Informationen nutzlos sind, wenn du IDE benutzt, sondern einzig deine Gerätenamen werden sich leicht unterscheiden. Zum Beispiel wäre sd0a in einem IDE-basierten System wd0a.

Backup aufs Band bringen:

Um sein Backup auf ein Band zu bringen, muss man wissen, wo die Dateisysteme gemountet sind. Das findet man mit dem mount(8)"-Kommando am Shellprompt heraus. Dabei sollte eine Ausgabe wie diese herauskommen:

# mount /dev/sd0a on / type ffs (local) /dev/sd0h on /usr type ffs (local)

In diesem Beispiel ist das root-Dateisystem (/) physikalisch auf sd0a - also auf der SCSI-Festplatte 0, Partition a. Das /usr-Dateisystem befindet sich auf sd0h - also SCSI-Festplatte 0, Partition h.

Ein weiteres Beispiel einer etwas größeren Mounttabelle könnte so aussehen:

# mount /dev/sd0a on / type ffs (local) /dev/sd0d on /var type ffs (local) /dev/sd0e on /home type ffs (local) /dev/sd0h on /usr type ffs (local)

In diesem fortgeschritteneren Beispiel befindet sich das root- (/) Dateisystem auf sd0a. Das /var-Dateisystem befindet sich auf sd0d, das /home-Dateisystem auf sd0e und schlussendlich /usr auf sd0h.

Um ein Backup deiner Maschine zu machen, musst du dump mit jeder festgelegten Partition füttern. Hier ist ein Beispiel der Kommandos, um die einfachere Mounttabelle weiter oben zu sichern:

# /sbin/dump -0au -f /dev/nrst0 /dev/rsd0a # /sbin/dump -0au -f /dev/nrst0 /dev/rsd0h # mt -f /dev/rst0 rewind

Für die etwas fortgeschrittenere Mounttabelle würde man etwas wie das hier benutzen:

# /sbin/dump -0au -f /dev/nrst0 /dev/rsd0a # /sbin/dump -0au -f /dev/nrst0 /dev/rsd0d # /sbin/dump -0au -f /dev/nrst0 /dev/rsd0e # /sbin/dump -0au -f /dev/nrst0 /dev/rsd0h # mt -f /dev/rst0 rewind

Du kannst die dump(8)-Manualseite ansehen, um genau zu erfahren, was jede Kommandozeilenoption macht. Hier ist eine kurze Übersicht der Parameter, die oben verwendet wurden:

Zuletzt welche Partition gesichert werden soll (/dev/rsd0a usw.)

Das Kommando mt(1) wird am Ende benutzt, um das Band zurückzuspulen. Sieh dir die mt-Manualseite an, wenn du mehr Informationen haben willst (wie etwa eject).

Wenn du dir nicht sicher bist, wie dein Bandlaufwerk heißt, benutze einfach dmesg, um das herauzufinden. Ein Beispieleintrag von dmesg für ein Bandlaufwerk könnte so aussehen:

st0 at scsibus0 targ 5 lun 0: <ARCHIVE, Python 28388-XXX, 5.28>

Du hast vielleicht bemerkt, dass bei der Sicherung das Bandlaufwerk als nrst0 anstatt von st0 bezeichnet wird, wie man es in dmesg sieht. Wenn du auf st0 statt nrst0 zugreifst, benutzt du das selbe physikalische Gerät, sagst ihm aber, dass es nicht zurückspulen soll, nachdem der Job im raw-Modus beendet wurde. Um mehrere Dateien auf ein einziges Band zu sichern, stelle sicher, dass du nicht zurückspulst - sprich das richtige Gerät (rst0) benutzt - ansonsten wirst du mit der zweiten Sicherung die erste überschreiben usw. Du findest in der Manualseite zu dump eine ausführlichere Beschreibung.

Wenn du ein kleines Skript namens backup schreiben würdest, könnte es z. B. so aussehen:

echo " Starting Full Backup..." /sbin/dump -0au -f /dev/nrst0 /dev/rsd0a /sbin/dump -0au -f /dev/nrst0 /dev/rsd0d /sbin/dump -0au -f /dev/nrst0 /dev/rsd0e /sbin/dump -0au -f /dev/nrst0 /dev/rsd0h echo echo -n " Rewinding Drive, Please wait..." mt -f /dev/rst0 rewind echo "Done." echo

Wenn regelmäßige nächtliche Backups gefordert sind, könnte man cron(8) benutzen, um das Backup jede Nacht automatisch zu starten.

Es ist außerdem hilfreich, auf einem Blatt Papier aufzuschreiben, wie groß jedes Dateisystem sein muss. Du kannst »df -h« benutzen, um herauszufinden, wie viel Platz jede Partition momentan verbraucht. Das ist dann nützlich, wenn eine Platte versagt und du die Partitionstabelle auf der neuen Platte wieder erstellen musst.

Deine Daten wiederherzustellen hilft außerdem noch gegen Fragmentierung. Der beste Weg, um sicherzustellen, dass du alle Dateien erwischst, ist es, im Singleuser-Modus zu booten. Dateisysteme müssen nicht gemountet werden, um gesichert zu werden. Vergiss aber nicht, root (/) zu mounten, denn sonst wird dein dump versagen, wenn er versucht, Dumpdaten zu schreiben. Gib einfach »bsd -s« am boot>-Prompt ein, um in den Singleuser-Modus zu gelangen.

Den Inhalt eines dump-Bandes ansehen:

Nachdem du deine Dateisysteme zum ersten Mal gesichert hast, ist es sicher eine gute Idee, dein Band zu testen und sicherzustellen, dass es auch die Daten enthält, die darauf sein sollen.

Du kannst den folgenden Befehl benutzen, um eine Auflistung der Dateien auf einem dump-Band zu erhalten:

# /sbin/restore -tvs 1 -f /dev/rst0

Das listet die Dateien auf der 1. Partition des dump-Bandes (des Sicherungsbands) auf. Wie in den Beispielen weiter oben ist 1 dein root- (/) Dateisystem.

Um den Inhalt der 2. Partition zu sehen und die Ausgabe in eine Datei umzulenken, würde man z. B. solch ein Kommando benutzen:

# /sbin/restore -tvs 2 -f /dev/rst0 > /home/me/list.txt

Wenn du eine Mounttabelle wie die oben aufgeführte hättest, wäre 2 /usr - wenn deine aber etwas größer wäre, könnte 2 auch /var sein oder irgendwas anderes. Die Sequenznummer unterliegt auf jeden Fall der gleichen Reihenfolge, mit der das Dateisystem auf das Band gesichert wurde.

Wiederherstellen vom Band:

Das Beispielszenario wäre sinnvoll, wenn deine eigentliche Festplatte komplett ausgefallen wäre. Falls du aber nur eine einzige Datei wiederherstellen willst, sieh dir die restore-Manualseite genau an und achte besonders auf die Anweisungen für den interaktiven Modus.

Wenn du gut vorbereitet bist, kann der Prozess des Ersetzens einer Festplatte sehr schnell von statten gehen. Die normale OpenBSD-Installations/Bootdiskette enthält bereits das benötigte restore-Werkzeug genauso wie die ausführbaren Dateien, um neue Partitionen zu erstellen und deine Festplatte bootbar zu machen. In den meisten Fällen sind diese Disketten und dein Sicherungsband alles, was du brauchst, um wieder alles betriebsbereit zu bekommen.

Nachdem du das kaputte Laufwerk physikalisch ersetzt hast, sind die grundlegenden Schritte zur Wiederherstellung folgende:

14.10 - Diskimages unter OpenBSD mounten

Um ein Diskimage (ISO-Images, Diskimages, die mit dd erstellt wurden etc.) unter OpenBSD zu mounten, musst du ein vnd(4)-Device konfigurieren. Zum Beispiel, wenn du ein ISO-Image unter /tmp/ISO.image hast, würdest du die folgenden Schritte machen, um es zu mounten:

# vnconfig svnd0 /tmp/ISO.image # mount -t cd9660 /dev/svnd0c /mnt

Bedenke bitte, dass du den Typ cd9660 angeben musst, wenn es eine CD ist. Das gilt aber auch für die anderen Typen. Du musst also z. B. ext2fs beim Mounten eines Linux-Diskimages angeben.

Um das Image wieder zu unmounten, benutze die folgenden Kommandos.

# umount /mnt # vnconfig -u svnd0

Mehr Informationen gibt es in der vnconfig(8)-Manualseite.

14.11 - Hilfe! Ich erhalte Fehler mit IDE-DMA!

DMA-IDE-Übertragungen, die durch pciide(4) unterstützt werden, sind unzuverlässig. Bis vor kurzem wurden die meisten Mainstreambetriebssysteme, die behaupteten, dass sie DMA-Übertragungen mit IDE-Laufwerken unterstützen, nicht mit standardmäßig aktivierter Unterstützung wegen unzuverlässiger Hardware ausgeliefert. Nun werden viele dieser gleichen Maschinen mit OpenBSD verwendet.

OpenBSD ist aggressiv und versucht, den höchsten DMA-Modus zu benutzen, den es konfigurieren kann. Dies führt in einigen Konfigurationen zu Datenkorruptionen aufgrund von defekten Motherboardchipsets, fehlerhaften Treibern, die Probleme verursachen und/oder Lärm auf den Kabeln. Glücklicherweise schützt Ultra-DMA die Datenübertragungen mit einem CRC, um Korruptionen zu entdecken. Falls ein Fehler bei einem solchen Ultra-DMA CRC geschieht, wird OpenBSD eine Fehlermeldung ausgeben und erneut versuchen, die Daten zu übertragen.

wd2a: aborted command, interface CRC error reading fsbn 64 of 64-79 (wd2 bn 127; cn 0 tn 2 sn 1), retrying

Nach ein paar Fehlversuchen wird OpenBSD zu einem langsameren (und damit hoffentlich zuverlässigeren) DMA-Modus herunterschalten. Nach den Ultra-DMA-Modi wird dann zu einem PIO-Modus heruntergeschaltet.

UDMA-Fehler werden meistens durch minderwertige oder beschädigte Kabel verursacht. Kabelprobleme sollten normalerweise zuerst in Betracht gezogen werden, wenn du viele DMA-Fehler oder unerwartet niedrige DMA-Leistung erhältst. Es ist ebenfals eine schlechte Idee, das CD-ROM an den gleichen Kanal wie die Festplatte zu stecken.

Wenn das Ersetzen der Kabel nicht zur Lösung des Problems führt und OpenBSD nicht erfolgreich herunterschaltet oder der Prozess zu einem Einfrieren deiner Maschine führt, möchtest du vielleicht dein System auf einen niedrigeren DMA- oder UDMA-Level standardmäßig begrenzen. Dies kann unter Verwendung von UKC oder config(8) realisiert werden, indem man die Optionen des wd(4)-Devices ändert.

14.13 - RAID-Optionen unter OpenBSD

RAID (Redundant Array of Inexpensive Disks) gibt die Möglichkeit, mehrere Laufwerke zu verwenden, um bessere Leistung, Kapazität und/oder Redundanz zu erhalten, als man aus einem einzelnen Laufwerk herausholen kann. Während eine vollständige Diskussion über die Vorteile und Risiken von RAID außerhalb des Rahmens dieses Artikels liegt, existieren einige Punkte, die so wichtig sind, dass sie nun besprochen werden sollten: Wenn diese Information neu für dich ist, ist das kein guter Ausgangspunkt, um RAID zu erforschen.

Software Möglichkeiten

OpenBSD beinhaltet RAIDframe - eine software-basierte RAID-Lösung. Dokumentation hierfür kann an folgenden Stellen gefunden werden:

Die root-Partition kann direkt von OpenBSD unter Verwendung der Option Autoconfiguration von RAIDframe gespiegelt werden.

OpenBSD 3.7-stable und neuer beinhaltet ebenfalls Mirroring als Funktionalität des ccd(4)-Treibers. Dieses System wurde in den GENERIC-Kernel integriert und befindet sich im bsd.rd-Kernel einiger Plattformen (amd64, hppa, hppa64, i386), so dass es viel einfacher genutzt werden kann, obwohl es einige Begrenzungen im Bezug auf das Neuerzeugen des Arrays hat. Siehe:

Hardwaremöglichkeiten

Viele OpenBSD-Plattformen beinhalten Unterstützung für etliche Hardware-RAID-Produkte. Die Möglichkeiten variieren von Plattform zu Plattform: Siehe die passende Hardwareunterstützungsseite (hier aufgelistet).

Eine andere Möglichkeit, die für viele Plattformen bereit steht, ist eine der vielen Produkte, die mehrere Laufwerke dazu bringt, wie ein großes IDE- oder SCSI-Laufwerk zu agieren und die dann in einen standardmäßigen IDE- oder SCSI-Adapter gesteckt werden. Diese Geräte können nahezu auf jeder Hardwareplattform funktionieren, die entweder SCSI oder IDE verwenden.

Einige Hersteller dieser Produkte:

(Hinweis: Dies sind nur Produkte, die von OpenBSD-Anwendern verwendet und gemeldet wurden - dies ist weder eine Art Werbung noch ist es eine ausführliche Liste.)

Keine Möglichkeit

Eine häufig gestellte Frage in den Mailinglisten ist »Werden die kostengünstigen IDE- oder SATA-RAID-Controller (wie zum Beispiel jene, die die Highpoint-, Promise- oder Adaptec-HostRAID-Chips benutzen) unterstützt?« Die Antwort ist »Nein«. Diese Karten und Chips sind nicht echte Hardware-RAID-Controller sondern eher BIOS-assistierte Bots für ein Software-RAID. Da OpenBSD bereits Software-RAID auf eine hardwareunabhängige Art und Weise unterstützt, besteht kein großes Verlangen bei den OpenBSD-Entwicklern, diese spezielle Unterstützung für diese Karten zu implementieren.

Fast alle Onboard-SATA- oder -IDE-»RAID«-Controller sind von diesem softwarebasierten Stil und funktionieren normalerweise einwandfrei als SATA- oder IDE-Controller unter Verwendung des standardmäßigen IDE-Treibers (pciide(4)). Sie werden aber nicht als Hardware-RAID-System unter OpenBSD funktionieren.

14.14 - Warum sagt mir df(1), dass ich mehr als 100 % von meiner Platte belegt habe?

Leute sind manchmal erstaunt darüber, herausfinden zu müssen, dass sie negativen verfügbaren Plattenspeicher haben oder mehr als 100 % eines Dateisystems in Verwendung ist, wie es von df(1) angezeigt wird.

Wenn ein Dateisystem mit newfs(8) erstellt wird, wird ein Teil des verfügbaren Speichers vor den normalen Benutzern in Reserve gehalten. Dies stellt einen Spielraum für Fehler bereit, wenn du versehentlich die Platte füllst und hilft, die Plattenfragmentierung auf einem Minimum zu halten. Standardwert hierfür ist 5 % der Plattenkapazität, sodass, falls der Systemadministrator sorglos die Platte auffüllt, du bis zu 105 % Speicher sehen kannst, der verwendet wird.

Wenn der 5-%-Wert für dich nicht angemessen erscheint, kannst du ihn mit dem Kommando tunefs(8) ändern.

14.15 - Partitionen wiederherstellen, nachdem das Disklabel gelöscht wurde

Wenn du eine Partitionstabelle beschädigt hast, gibt es einige Dinge, die du versuchen kannst, um sie wiederherzustellen.

Zu aller erst Panik. Das würde sowieso passieren - aber dann hast du es jedenfalls hinter dir. Mach einfach nichts Unvernünftiges. Halte deine Panik von der Maschine fern. Dann entspanne dich und guck, ob dir die unten stehenden Schritte vielleicht weiterhelfen.

Eine Kopie des Disklabels wird für jede Platte als Teil der täglichen Systemverwaltung unter /var/backups gespeichert. Angenommen, dass du die var-Partition weiterhin hast, kannst du einfach die Ausgabe lesen und sie zurück in das Disklabel schreiben.

Falls du die Partition nicht mehr sehen kannst, gibt es zwei Möglichkeiten. Behebe genug Fehler der Platte, bis du sie sehen kannst oder behebe genug Fehler der Platte, um deine Daten von ihr zu bekommen. Abhängig davon, was passiert ist, könnte der eine oder ein anderer Weg bevorzugt sein (mit sterbenden Platten, von denen du zuerst die Daten haben willst, könntest du mit schlampigen Fingern nur das Label bekommen).

Das erste Werkzeug, das du brauchst, ist scan_ffs(8) (achte auf den Unterstrich, es wird nicht »scanffs« genannt). Das Werkzeug scan_ffs(8) durchsucht die Platte und versucht, Partitionen zu finden, und teilt dir die Informationen mit, die es über sie herausgefunden hat. Du kannst diese Informationen nutzen, um das Disklabel neu zu erstellen. Wenn du einfach nur /var zurückhaben willst, kannst du die Partition für /var wieder erstellen und dann das gesicherte Label nutzen, um den Rest von diesem aus zu erstellen.

disklabel(8) wird sowohl die Erkenntnis des Kernels über das Disklabel erneuern als auch versuchen, das Label auf die Platte zu schreiben. Selbst wenn der Bereich der Platte, in dem das Disklabel liegt, nicht lesbar ist, wirst du trotzdem in der Lage sein, bis zum nächsten Neustart mount(8) aufzurufen.

14.16 - Kann ich auf Daten zugreifen, die auf anderen Dateisystemen als FFS liegen?

Ja. Andere unterstützte Dateisysteme sind unter anderem: ext2 (Linux), ISO9660 und UDF (CD-ROM-, DVD-Medien), FAT (MS-DOS und Windows), NFS, NTFS (Windows) und AmigaDOS. Einige von ihnen haben eingeschränkte - zum Beispiel nur schreibgeschützte - Unterstützung. Beachte, dass FreeBSDs UFS2-Dateisystem nicht unterstützt wird.

Wir werden hier einen allgemeinen Überblick darüber geben, wie man eines dieser Dateisysteme unter OpenBSD verwendet. Um in der Lage zu sein, ein Dateisystem zu benutzen, muss es gemountet sein. Für Details und Optionen für mount, konsultiere bitte die Manualseite zu mount(8) und die Manualseite zum mount-Kommando für das Dateisystem, das du mounten möchtest, z. B. mount_msdos, mount_ext2fs, ...

Zu aller erst musst du wissen, auf welchem Device sich dein Dateisystem befindet. Vielleicht einfach deine erste Festplatte (wd0 oder sd0), es könnte aber auch weniger offensichtlich sein. Alle erkannten und konfigurierten Devices deines Systems werden in der Ausgabe vom Kommando dmesg(1) aufgeführt: ein Devicename, gefolgt von einer einzeiligen Beschreibung des Devices. Mein erstes CD-ROM-Laufwerk wird beispielsweise wie folgt erkannt:

cd0 at scsibus0 targ 0 lun 0: <COMPAQ, DVD-ROM LTD163, GQH3> SCSI0 5/cdrom removable

Du kannst sysctl(8) verwenden, um eine viel kürzere Liste der verfügbaren Platten zu erhalten. Das Kommando

# sysctl hw.disknames
wird alle Platten anzeigen, die deinem System momentan bekannt sind, z. B.:
hw.disknames=cd0,cd1,wd0,fd0,cd2

An diesem Punkt angekommen ist es Zeit dafür, herauszufinden, welche Partitionen sich auf dem Device befinden, und auf welcher Partition das gewünschte Dateisystem liegt. Daher untersuchen wir das Device mit disklabel(8). Das Disklabel beinhaltet eine Liste, die aus maximal 16 Partitionen besteht. Partition c steht immer für das gesamte Device. Partitionen a - b und d - p werden von OpenBSD genutzt. Partitionen i - p können automatisch für Dateisysteme anderer Betriebssysteme allokiert werden. In diesem Fall werde ich mir das Disklabel meiner Festplatte betrachten, welches eine Anzahl verschiedener Dateisysteme beinhaltet.

HINWEIS: OpenBSD wurde nach allen anderen Betriebssystemen installiert und während der Installation wurde ein Disklabel erstellt, das alle Partitionen der nativen als auch der anderen Dateisysteme enthält, die sich auf der Platte befanden. Wenn du jedoch andere Dateisysteme installiert nachdem das OpenBSD-Disklabel bereits auf der Platte installiert wurde, musst du sie nachträglich manuell hinzufügen oder ändern. Dies wird in diesem Unterkapitel behandelt.

# disklabel wd0 # using MBR partition 2: type A6 off 20338290 (0x1365672) size 29318625 (0x1bf5de1) # /dev/rwd0c: type: ESDI disk: ESDI/IDE disk label: ST340016A flags: bytes/sector: 512 sectors/track: 63 tracks/cylinder: 16 sectors/cylinder: 1008 cylinders: 16383 total sectors: 78165360 rpm: 3600 interleave: 1 trackskew: 0 cylinderskew: 0 headswitch: 0 # microseconds track-to-track seek: 0 # microseconds drivedata: 0 16 partitions: # size offset fstype [fsize bsize cpg] a: 408366 20338290 4.2BSD 2048 16384 16 # Cyl 20176*- 20581 b: 1638000 20746656 swap # Cyl 20582 - 22206 c: 78165360 0 unused 0 0 # Cyl 0 - 77544 d: 4194288 22384656 4.2BSD 2048 16384 16 # Cyl 22207 - 26367 e: 409248 26578944 4.2BSD 2048 16384 16 # Cyl 26368 - 26773 f: 10486224 26988192 4.2BSD 2048 16384 16 # Cyl 26774 - 37176 g: 12182499 37474416 4.2BSD 2048 16384 16 # Cyl 37177 - 49262* i: 64197 63 unknown # Cyl 0*- 63* j: 20274030 64260 unknown # Cyl 63*- 20176* k: 1975932 49656978 MSDOS # Cyl 49262*- 51223* l: 3919797 51632973 unknown # Cyl 51223*- 55111* m: 2939832 55552833 ext2fs # Cyl 55111*- 58028* n: 5879727 58492728 ext2fs # Cyl 58028*- 63861* o: 13783707 64372518 ext2fs # Cyl 63861*- 77535*

Wie du in dieser Ausgabe erkennen kannst, werden die OpenBSD-Partitionen zuerst aufgelistet. Nach diesen werden einige ext2-Partitionen und eine MSDOS-Partition aufgelistet, sowie ein paar unbekannte (unknown) Partitionen. Auf i386- und amd64-Systemen kannst du mehr über diese unter Verwendung des Werkzeugs fdisk(8) in Erfahrung bringen. Für den neugierigen Leser: Partition i ist eine Wartungspartition, die vom Hersteller erzeugt wurde, Partition j ist eine NTFS-Partition und Partition l ist eine Swappartition für Linux.

Sobald du herausgefunden hast, welche dieser Partitionen die ist, die du benutzen möchtest, kannst du den letzten Schritt durchführen: das Dateisystem, das sich auf dieser befindet, mounten. Die meisten Dateisysteme werden vom GENERIC-Kernel unterstützt: Wirf einfach einen Blick in die Kernelkonfigurationsdatei, die sich im Verzeichnis /usr/src/sys/arch/<arch>/conf befindet. Einige werden jedoch nicht unterstützt, z. B. ist die NTFS-Unterstützung experimentell und daher nicht im GENERIC. Wenn du eines der Dateisysteme nutzen möchtest, die nicht in GENERIC unterstützt werden, musst du einen angepassten Kernel erzeugen.

Wenn du die Informationen auf zuvor beschriebene Weise gesammelt hast, ist es nun an der Zeit, das Dateisystem zu mounten. Lass uns annehmen, dass ein Verzeichnis namens /mnt/otherfs existiert, welches wir als Mountpunkt nutzen werden, unter dem wir das gewünschte Dateisystem mounten werden. In diesem Beispiel werden wir das ext2-Dateisystem von Partition m mounten:

# mount -t ext2fs /dev/wd0m /mnt/otherfs

Wenn du vorhast, dieses Dateisystem regulär zu nutzen, kannst du etwas Zeit sparen, indem du eine Zeile in /etc/fstab schreibst; zum Beispiel etwas wie:

/dev/wd0m /mnt/otherfs ext2fs rw,noauto,nodev,nosuid 0 0
Beachte den Wert 0 im fünften und sechsten Feld. Diese bedeuten, dass wir nicht möchten, dass die Dateisysteme mit dump gesichert oder unter Verwendung von fsck überprüft werden. Generell gilt, dass du solche Aufgaben eher mit dem dazugehörigem Betriebssystem machen möchtest.

14.16.1 - Die Partitionen sind nicht in meinem Disklabel! Was kann ich tun?

Wenn du andere Dateisysteme auf deinem System angelegt hast (resultiert meist aus der Installation eines anderen Betriebssystems) nachdem du OpenBSD bereits installiert hast, wird ein Disklabel bereits vorliegen und nicht automatisch aktualisiert, sodass es die neuen fremden Dateissystempartionen enthielte. Wenn du diese verwenden möchtest, dann musst du diese Partionen manuell unter Verwendung von disklabel(8) hinzufügen oder editieren.

Beispielsweise habe ich eine meiner bestehenden ext2fs-Partitionen geändert: Unter Verwendung von Linux' fdisk-Programm habe ich die Größe der o-Partition (siehe die Disklabelausgabe weiter oben) auf 1 G reduziert. Wir können dies leicht sehen, indem wir einen Blick auf die Startposition (Offset: 64372518) und die Größe (13783707) werfen. Beachte, dass diese Werte Sektornummern und dass die Verwendung von Sektornummern (nicht Megabyte oder ein anderes Maß) die exakteste Angabe ist und der sicherste Weg, um diese Informationen zu lesen.

Vor dem Ändern sah die Partition wie diese aus (Ausgabe von OpenBSDs fdisk(8)-Werkzeug [nur die wichtigen Informationen werden hier angegeben]):

# fdisk wd0 . . . Offset: 64372455 Signature: 0xAA55 Starting Ending LBA Info: #: id C H S - C H S [ start: size ] ------------------------------------------------------------------------ 0: 83 4007 1 1 - 4864 254 63 [ 64372518: 13783707 ] Linux files* . . .
Wie du sehen kannst sind die Startposition und die Größe genau so, wie sie zuvor von disklabel(8) angegeben wurden. (Sei jetzt nicht wegen dem Wert verwirrt, der als Offset angegeben wird: der Wert bezieht sich auf die Startposition der erweiterten Partition, in der sich die ext2-Partition befindet.)

Nachdem die Partitionsgröße unter Linux geändert wurde, sieht sie wie folgt aus:

# fdisk wd0 . . . Offset: 64372455 Signature: 0xAA55 Starting Ending LBA Info: #: id C H S - C H S [ start: size ] ------------------------------------------------------------------------ 0: 83 4007 1 1 - 4137 254 63 [ 64372518: 2104452 ] Linux files* . . .
Dies muss nun unter Verwendung von disklabel(8) geändert werden. Zum Beispiel kannst du disklabel -e wd0 aufrufen, womit du einen Editor startest, der mit der Umgebungsvariable EDITOR (Standard ist vi) angegeben wird. Ändere mit diesem Editor die Zeile des Disklabels, um diese auf die neue Größe anzupassen:
o: 2104452 64372518 ext2fs
Schreibe das Disklabel auf die Platte, wenn du fertig bist. Nun, da das Disklabel wieder aktuell ist, solltest du in der Lage sein, die Partitionen wie oben beschrieben wieder mounten zu können.

Du kannst einen sehr ähnlichen Prozess ausführen, um neue Partitionen hinzuzufügen.

14.17 - Kann ich ein Gerät mit Flashspeicher unter OpenBSD benutzen?

Normalerweise sollte ein Speichergerät erkannt werden, wenn es an eine Schnittstelle deiner Maschine angeschlossen wird. Kurz nach dem Anschließen werden einige Nachrichten auf der Konsole des Kernels angezeigt. Wenn ich zum Beispiel meinen USB-Flashspeicher anschließe, sehe ich Folgendes auf meiner Konsole:
umass0 at uhub1 port 1 configuration 1 interface 0 umass0: LEXR PLUG DRIVE LEXR PLUG DRIVE, rev 1.10/0.01, addr 2 umass0: using SCSI over Bulk-Only scsibus2 at umass0: 2 targets sd0 at scsibus2 targ 1 lun 0: <LEXAR, DIGITAL FILM, /W1.> SCSI2 0/direct removable sd0: 123MB, 123 cyl, 64 head, 32 sec, 512 bytes/sec, 251904 sec total
Diese Zeilen deuten darauf, dass der umass(4)- (USB-Massenspeicher-) Treiber an das Speichergerät angehängt wurde und dass es das SCSI-System nutzt. Die beiden letzten Zeilen sind die wichtigsten: Sie sagen, an welche Gerätedatei das Speichergerät angehängt wurde, und wie groß der gesamte Speicherplatz ist. Wenn du diese Zeilen - warum auch immer - verpasst haben solltest, kannst du sie nachträglich mit dem Kommando dmesg(1) betrachten. Die angegebene CHS-Geometrie ist eine fiktive, da der Flashspeicher wie eine normale SCSI-Platte verarbeitet wird.

Wir werden nun zwei Szenarien besprechen.

Das Gerät ist neu/leer und du möchtest es nur mit OpenBSD nutzen

Du musst ein Disklabel und mindestens eine Partition auf diesem Gerät erstellen. Bitte lies OpenBSDs disklabel verwenden und die Manualseite zu disklabel(8) für Details hierüber.

In diesem Beispiel habe ich nur die Partition a erstellt, auf der ich ein FFS-Dateisystem erstellen werde:

# newfs sd0a Warning: inode blocks/cyl group (125) >= data blocks (62) in last cylinder group. This implies 1984 sector(s) cannot be allocated. /dev/rsd0a: 249856 sectors in 122 cylinders of 64 tracks, 32 sectors 122.0MB in 1 cyl groups (122 c/g, 122.00MB/g, 15488 i/g) super-block backups (for fsck -b #) at: 32,
Lass uns das Dateisystem, das wir auf der Partition a erstellt haben, unter /mnt/flashmem mounten. Erstelle zuerst einen Mountpunkt, wenn er noch nicht existiert.
# mkdir /mnt/flashmem # mount /dev/sd0a /mnt/flashmem

Du hast das Speichergerät von jemandem erhalten, mit dem du Daten austauschen möchtest

Möglicherweise wird diese andere Person nicht OpenBSD nutzen, sodass sich ein fremdes Dateisystem auf diesem Speichergerät befinden kann. Daher müssen wir zuerst alle Partitionen auf diesem Gerät finden, so wie es in FAQ 14 - Fremde Dateisysteme beschrieben steht.

# disklabel sd0 # /dev/rsd0c: type: SCSI disk: SCSI disk label: DIGITAL FILM flags: bytes/sector: 512 sectors/track: 32 tracks/cylinder: 64 sectors/cylinder: 2048 cylinders: 123 total sectors: 251904 rpm: 3600 interleave: 1 trackskew: 0 cylinderskew: 0 headswitch: 0 # microseconds track-to-track seek: 0 # microseconds drivedata: 0 16 partitions: # size offset fstype [fsize bsize cpg] c: 251904 0 unused 0 0 # Cyl 0 - 122 i: 250592 32 MSDOS # Cyl 0*- 122*
Wie man in der Ausgabe von disklabel sehen kann, gibt es nur eine Partition names i, das ein FAT-Dateisystem beinhaltet, das von einer Windows-Maschine erstellt wurde. Wie gewöhnlich stellt die Partition c das gesamte Gerät dar.

Lass uns nun das Dateisystem auf der Partition i unter /mnt/flashmem mounten.

# mount -t msdos /dev/sd0i /mnt/flashmem
Nun können wir damit beginnen, es wie jede andere Platte anzusprechen.

WARNUNG: Du solltest das Dateisystem vor dem Herausziehen des Geräts immer erst unmounten. Wenn du das nichts tust, könnte das Dateisystem in einem nicht konsistenten Zustand zurückgelassen werden, was im schlimmsten Fall Datenverlust bedeutet.

Nach dem Entfernen des Speichergeräts von deiner Maschine wirst du wieder sehen, dass der Kernel Meldungen hierüber auf der Konsole ausgibt:

umass0: at uhub1 port 1 (addr 2) disconnected sd0 detached scsibus2 detached umass0 detached

14.18 - Die Festplattenleistung optimieren

Die Festplattenleistung ist ein wichtiger Faktor in der Gesamtgeschwindigkeit deines Computers. Sie wird umso wichtiger, wenn dein Computer eine Multiuserumgebung beheimatet (Benutzer aller Arten - von solchen, die sich einloggen, bis zu denen, die Serverdienste nutzen). Datenspeicher brauchen ständige Aufmerksamkeit; insbesondere, wenn deine Partition überläuft oder deine Platten versagen. OpenBSD kennt verschiedene Optionen, um die Geschwindigkeit deiner Festplattenoperationen zu erhöhen und Fehlertoleranz zu bieten.

14.18.1 - CCD

Die erste Option ist die Benutzung des ccd(4) - des Concatenated Disk Driver. Dieser erlaubt dir, mehrere Partitionen in eine virtuelle Platte zu verwandeln (und damit kannst dafür sorgen, dass mehrere Festplatten wie eine einzige aussehen). Dieses Konzept ist ähnlich wie das von LVM (logical volume management), das in mehreren kommerziellen Unix-Arten zu finden ist.

Wenn du GENERIC benutzt, ist ccd bereits eingeschaltet (in /usr/src/sys/conf/GENERIC). Wenn du einen veränderten Kernel benutzt, musst du ihn vielleicht wieder in deine Kernelkonfiguration einfügen. Wie auch immer, auf jeden Fall muss sich eine Zeile wie die folgende in deiner Konfigurationsdatei befinden:

pseudo-device ccd 4 # concatenated disk devices

Das obige Beispiel gibt dir bis zu 4 ccd-Devices (virtuelle Platten). Jetzt musst du festlegen, welche Partitionen auf deinen realen Festplatten du in den ccd einbinden willst. Benutze disklabel, um diese Partitionen als ccd-Typ zu markieren. Auf einigen Architekturen erlaubt dir disklabel das vielleicht nicht. In diesem Fall markiere sie einfach als FFS.

Wenn du ccd dazu benutzt, um mittels striping Leistung zu gewinnen, solltest du wissen, dass du keine optimale Leistung bekommst, bis du das gleiche Festplattenmodell mit den gleichen Disklabeleinstellungen benutzt.

Editiere /etc/ccd.conf, bis sie etwa so aussieht: (Mehr Informationen über das Konfigurieren von ccd findest du unter ccdconfig(8))

# Configuration file for concatenated disk devices # # ccd ileave flags component devices ccd0 16 none /dev/sd2e /dev/sd3e

Um die Änderungen wirksam zu machen, führe das hier aus:

# ccdconfig -C

Solange /etc/ccd.conf existiert, wird sich ccd automatisch beim Booten konfigurieren. Jetzt hast du eine neue Festplatte (ccd0): eine Kombination von /dev/sd2e und /dev/sd3e. Benutze disklabel einfach wie gewöhnlich, um die Partition oder Partitionen zu erzeugen, die du benutzen willst. Nutze erneut die Partition c nicht, um darauf irgendetwas zu speichern. Stelle sicher, dass deine benutzten Partitionen mindestens einen Zylinder vom Anfang der Disk weg ist.

14.18.2 - RAID

Eine weitere Lösung ist raid(4), wofür du raidctl(8) nutzen musst, um deine RAID-Geräte zu kontrollieren. OpenBSDs RAID basiert auf Greg Osters NetBSD-Port der CMU-RAIDframe-Software. OpenBSD hat Unterstützung für die RAID-Level 0, 1, 4 und 5.

Für raid muss - wie auch bei ccd - Unterstützung im KERNEL sein. Diese Treiberunterstützung für RAID ist im Gegensatz zu ccd allerdings nicht im GENERIC-Kernel enthalten; sie muss also extra in deinen Kernel einkompiliert werden (RAID-Unterstützung vergrößert deinen i386-Kernel um gute 500k).

pseudo-device raid 4 # RAIDframe disk device

Lies die raid(4)- und raidctl(8)-Manualseiten für die kompletten Details. Es gibt dafür viele Optionen und mögliche Konfigurationen, und ein detaillierter Überblick sprengt den Rahmen dieses Dokumentes.

14.18.3 - Softupdates

Ein weiteres Werkzeug zum Erhöhen der Systemgeschwindigkeit sind Softupdates. Eine der langsamsten Operationen im traditionellen BSD-Dateisystem ist das Aktualisieren der Metainfos (was unter anderem immer dann geschieht, wenn du Dateien oder Verzeichnisse erzeugst oder löschst). Softupdates versucht die Metainfo im RAM zu aktualisieren, statt jedes einzelne Metainfoupdate auf die Platte zu schreiben. Ein weiterer Nebeneffekt ist, dass die Metainfos auf der Festplatte immer auf dem aktuellen Stand sind. Das heißt, ein Systemabsturz sollte kein fsck(8) beim folgende Booten benötigen, sondern eine einfache Hintergrundversion von fsck, die Änderungen an den Metainfos im RAM macht (a la Softupdates). Das heißt, dass Reboots viel schneller sind, da nicht mehr auf fsck gewartet werden muss! (OpenBSD hat diese Funktionalität leider noch nicht.) Mehr über Softupdates findest du im Softupdates-FAQ-Eintrag.

11.1.4 - Größe des namei()-Caches

Die name-to-inode-Übersetzung (a.&nbps;k. a. namei()-Cache) kontrolliert die Geschwindigkeit der pathname-to-inode(5)-Übersetzung. Ein sinnvoller Weg zum Herausfinden der passenden Größe des Caches wäre eine große Anzahl namei()-Cachemisses, die man mit einem Werkzeug wie systat(1) messen könnte (was eine Untersuchung des momentanen berechneten Wertes mittels sysctl(8) voraussetzt, das diesen Parameter kern.maxvnodes nennt) und diesen Wert zu vergrößern, bis sich entweder die Hitrate des namei()-Caches verbessert oder es bewiesen ist, dass das System nicht wesentlich von einer Erhöhung der Größe des namei()-Caches profitiert. Nachdem der Wert festgestellt wurde, kannst du ihn für die nächsten Systemstarts mit sysctl.conf(5) setzen.

14.19 - Wieso benutzen wir keine »async mounts«?

Frage: »Ich gebe einfach ein ,mount -u -o async /' ein, was ein Paket, welches ich brauche, benutzbar macht (das darauf besteht alle paar Momente ein paar hundert Dateien zu ändern). Wieso wird asynchrones Mounting abgelehnt und ist nicht standardmäßig aktiviert (wie in manchen anderen Unixen)? Wäre das nicht ein einfacherer und daher auch ein sichererer Weg, die Leistung mancher Applikation zu erhöhen?«

Antwort: »Asynchrone Mounts sind tatsächlich schneller als synchrone Mounts - aber auch unsicherer. Was passiert im Falle eines Stromausfalls - oder bei einem Hardwareproblem? Die Suche nach Geschwindigkeit darf nicht auf Kosten der Stabilität und Zuverlässigkeit des Systems gehen. Siehe auch die Manualseite von mount(8) async All I/O to the file system should be done asynchronously. This is a dangerous flag to set since it does not guaran- tee to keep a consistent file system structure on the disk. You should not use this flag unless you are pre- pared to recreate the file system should your system crash. The most common use of this flag is to speed up restore(8) where it can give a factor of two speed in- crease.

Auf der anderen Seite kannst du mehr Geschwindigkeit erhalten, wenn du sowieso nur mit temporären Daten umgehst, die du nach einem Crash wieder rekonstruieren kannst, indem du eine separate Partition nur für diese Daten benutzt, die asynchron gemountet ist. Tue das aber nur, wenn dir der Verlust aller Daten in der Partition nach irgendeinem Problem nichts ausmacht. Daher sind mfs(8)-Partitionen asynchron gemountet, weil sie ja nach jedem Neustart sowieso gelöscht und neu erzeugt werden.

[FAQ-Index] [Zum Kapitel 13 - Multimedia] [Zum Kapitel 15 - Packages und Ports]


[back] www@openbsd.org
$OpenBSD: faq14.html,v 1.66 2007/11/12 20:29:58 saad Exp $