[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 cats 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 allzuoft 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 zu 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 cats) 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 fd0

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 bootfähige 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 Megabytes 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, wieviel Swap du momentan hast und wieviel 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, so dass 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 an 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 Bytes) 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 Bytes. Das ist nicht genug, um eine vollständig dateisystembewusste Applikation zu laden, so dass, 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-2005 OpenBSD.  All rights reserved.  http://www.OpenBSD.org

OpenBSD 3.8 (GENERIC) #138: Sat Sep 10 15:41:37 MDT 2005
   ...

Was fehlschlagen kann

Da der PBR sehr klein ist, ist die Anzahl von 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 Bytes 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 wird 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. Die benötigte Zeit, um fsck gegen ein Laufwerk auszuführen kann ein Problem werden, sobald das Dateisystem an Größe gewinnt.

14.8 - Installieren von Bootblocks - i386-spezifisch

Ältere Versionen von MS-DOS können nur mit Festplattengeometrien von 1024 Zylindern oder weniger umgehen. Da nahezu alle modernen Betriebssysteme mehr als 1024 Zylinder haben, haben die meisten SCSI-BIOS-Chips (die auf den SCSI-Controllerkarten) und IDE-BIOSe (was Teil des restlichen PC-BIOS ist) eine Option (manchmal auch als Grundeinstellung), die wirkliche Geometrie in etwas zu übersetzen, mit dem MS-DOS umgehen kann. Wie dem auch sei, nicht alle BIOS-Chips übersetzen die Geometrie in der selben Weise. Wenn du dein BIOS wechselst (entweder mit einem neuen Motherboard oder einem neuen SCSI-Controller) und das neue benutzt eine andere übersetzte Geometrie, wirst du nicht in der Lage sein, den Secondstage-Bootloader zu laden - und kannst daher den Kernel auch nicht laden (das liegt daran, dass der Firststage-Bootloader eine Liste der Blöcke enthält, die /boot in der übersetzten Geometrie enthalten). Falls du IDE-Platten benutzt und du Änderungen an deinen BIOS-Einstellungen machst, kannst du seine Übersetzung ebenfalls (ungewollt) ändern (die meisten IDE-BIOSe bieten 3 verschiedene Übersetzungen). Um deinen Bootblock zu reparieren, damit du 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. Jetzt musst du die erste Stufe des Bootloaders auf den neuen Stand bringen. (Und dazu passend den Bootblock schreiben.)
Unser Beispiel geht davon aus, dass deine Bootdisk sd0 ist (bei 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, wieviel 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 bootfähig 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älst. 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 niedrigereren 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 Kernel bsd.rd, 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 softwarebasierendem 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 % einer Partition in Verwendung ist, wie es von df(1) angezeigt wird.

Wenn eine Partition 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, so dass, 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 ist eine Anzahl von 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, so dass 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 Megabytes 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, so dass 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

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


[back] www@openbsd.org
$OpenBSD: faq14.html,v 1.47 2006/01/06 12:42:40 jufi Exp $