[OpenBSD]

[FAQ-Index] [Zum Kapitel 13 - Multimedia] [Zum Kapitel 15 - Pakete und Portierungen]

14 - Festplattenkonfiguration


Inhaltsverzeichnis


14.1 - Festplatten und Partitionen

Die Details der Einrichtung von Festplatten unter OpenBSD variieren zwischen den Plattformen, sodass die spezifischen Installationsanweisungen der Datei INSTALL.<arch> für die Plattform gelesen werden sollten, um die Besonderheiten des Systems festzustellen.

Identifikation der Festplatte

OpenBSD handhabt Massenspeicher auf den meisten Plattformen mit zwei Treibern, und zwar in Abhängigkeit des von dem Gerät unterstützten normalen Befehlssatzes: Die erste von OpenBSD identifizierte Platte eines bestimmten Types wird Platte »0«, die zweite wird »1« etc. Also wird die erste IDE-ähnliche Festplatte zu wd0, und die dritte SCSI-ähnliche Festplatte zu sd2. Wenn auf einem System zwei SCSI-ähnliche Platten und drei IDE-ähnliche Platten vorhanden wären, so gäbe es auf dieser Maschine sd0, sd1, wd0, wd1 und wd2. Die Anordnung hängt von der Reihenfolge ab, in der sie die Hardwareerfassung während des Systemstarts gefunden hat. Es gibt ein paar wichtige Punkte zu beachten:

Partitionierung

Aus historischen Gründen wird der Begriff »Partition« in OpenBSD für zwei verschiedene Dinge benutzt, und dies führt zu einiger Verwirrung.

Die zwei als »Partition« bezeichneten Typen sind:

Alle von OpenBSD unterstützten Plattformen benutzen disklabel(8) als Königsweg, um OpenBSD-Dateisystem-Partitionen zu verwalten, aber einige Plattformen benötigen zusätzlich fdisk(8), um Partitionstabellen-Partitionen zu verwalten. Auf den fdisk-Partitionen nutzenden Plattformen nimmt eine fdisk-Partition alle OpenBSD-Dateisysteme auf, da diese eine Partition in disklabel-Partitionen aufgeteilt wird. Die disklabel-Partitionen sind mit den Buchstaben »a« bis »p« etikettiert. Einige von ihnen sind speziell:

Partitionsidentifizierung

Ein OpenBSD-Dateisystem wird durch die Festplatte identifiziert, auf der es sich befindet, und zusätzlich durch die Dateisystem-Partition auf dieser Festplatte. Also können Dateisysteme durch Bezeichner wie »sd0a« (die Partition »a« des ersten »sd«-Geräts), »wd2h« (Partition »h« des dritten »wd«-Geräts) oder »sd1c« (das gesamte zweite »sd«-Gerät) gekennzeichnet sein. Die Gerätedateien wären /dev/sd0a für das »block«-Gerät, und /dev/rsd0a wäre die Gerätedatei für das »unverarbeitete« Gerät (»Character-Device«).

Einige Dienstprogramme erlauben die Benutzung der verkürzten Namensform einer Partition (d. h. »sd0d«) oder eines Geräts (d. . »wd1«), anstatt des tatsächlichen, ausgeschriebenen Gerätenamens (»/dev/sd0d« oder »/dev/wd1c«, respektive).

Erneut: es ist zu beachten, dass, wenn du Daten auf wd2d platzierst, und dann später wd1 aus dem System entfernst und neu startest, sich deine Daten nun auf wd1d befinden, da dein vorheriges wd2 nun wd1 ist. Dagegen ändern sich die Kennungen eines Geräts nach dem Systemstart nicht mehr, sodass für den Fall, dass ein USB-Gerät entfernt wird oder ausfällt, sich die Kennungen für die anderen Geräte bis zum Neustart des Systems nicht ändern.

Eindeutige Disklabel-Kennungen

Laufwerke können ebenso durch eindeutige Disklabel-Kennungen (»Disklabel Unique Identifiers«, DUIDs) identifiziert werden; dies sind 16-stellige hexadezimale Zahlen, die von dem diskmap(4)-Gerät verwaltet werden. Diese Zahl wird automatisch als Zufallszahl erzeugt, wenn ein Disklabel zum ersten Mal geschrieben wird, der Standardwert auf existierenden (vor-OpenBSD 4.8) Labels ist jedoch (eine Reihe von 16) Null(en). disklabel(8) kann benutzt werden, um die UID zu ändern, wenn gewünscht. Diese UIDs sind »persistent« - identifizierst du deine Laufwerke auf diese Weise, wird Laufwerk »f18e359c8fa2522b« immer Laufwerk f18e359c8fa2522b bleiben, egal in welcher Reihenfolge oder auf welche Weise es angeschlossen wird. Du kannst auf dem Laufwerk Partitionen durch das Anhängen eines Punkts und dem Partitions-Buchstaben spezifizieren; so bezeichnet zum Beispiel f18e359c8fa2522b.d die Partition »d« des Laufwerks f18e359c8fa2522b und wird IMMER auf denselben Speicherplatz verweisen, ganz egal in welcher Reihenfolge das Gerät an das System angeschlossen wird, oder an welche Schnittstellenart es angeschlossen wird.

Diese UIDs können fast überall dort zur Identifikation benutzt werden, wo eine Partition oder ein Gerät spezifiziert werden muss, zum Beispiel in /etc/fstab oder auf den Kommandozeilen. Natürlich können Festplatten und Partitionen auch auf traditionelle Weise identifiziert werden, also nach Gerät, Nummer der Einheit und Partition (z. B. /dev/sd1f), und dies kann völlig transparent, also austauschbar geschehen.

Es ist anzumerken, dass die DUID eine Eigenschaft des Disklabel ist, obwohl, da OpenBSD nur ein Disklabel pro Laufwerk unterstützt, dies eher eine akademische Feststellung ist.

14.2 - Benutzung von OpenBSDs fdisk(8)

Lies zuerst die fdisk(8)-Handbuchseite.

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.2 - Benutzung von OpenBSDs disklabel(8)

Was ist disklabel(8)?

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

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)-Handbuchseite 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 <-- Or whatever disk device you'd like to view
type: ESDI
disk: ESDI/IDE disk
label: SAMSUNG HD154UI 
duid: d920a43a5a56ad5f
flags:
bytes/sector: 512
sectors/track: 63
tracks/cylinder: 16
sectors/cylinder: 1008
cylinders: 2907021
total sectors: 2930277168
boundstart: 64
boundend: 2930272065
drivedata: 0 

16 partitions:
#                size           offset  fstype [fsize bsize  cpg]
  a:          1024064               64  4.2BSD   2048 16384    1 # /
  b:          4195296          1024128    swap                   
  c:       2930277168                0  unused                   
  d:          4195296          5219424  4.2BSD   2048 16384    1 # /usr
  e:          4195296          9414720  4.2BSD   2048 16384    1 # /tmp
  f:         20972448         13610016  4.2BSD   2048 16384    1 # /var
  h:          2097632         34582464  4.2BSD   2048 16384    1 # /home

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: [36680096] 
size: [2893591969] 1T
Rounding to cylinder: 2147483536
FS type: [4.2BSD] 
> p m
OpenBSD area: 64-2930272065; size: 1430796.9M; free: 364310.8M
#                size           offset  fstype [fsize bsize  cpg]
  a:           500.0M               64  4.2BSD   2048 16384    1 # /
  b:          2048.5M          1024128    swap                   
  c:       1430799.4M                0  unused                   
  d:          2048.5M          5219424  4.2BSD   2048 16384    1 # /usr
  e:          2048.5M          9414720  4.2BSD   2048 16384    1 # /tmp
  f:         10240.5M         13610016  4.2BSD   2048 16384    1 # /var
  h:          1024.2M         34582464  4.2BSD   2048 16384    1 # /home
  k:       1048575.9M         36680192  4.2BSD   8192 65536    1 
> 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.4 - Hinzufügen weiterer 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-ähnliches 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 Partitionierungsmodus zu erhalten, den du auf deiner Installationsdisk hattest! Dort kannst du 96M benutzen, um 96 Megabytes anzugeben (oder 96G für 96 Gigabytes).

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

# newfs sd2d 

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/sd2d /u

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

/dev/sd2d /u ffs rw 1 1

Was aber, wenn du ein existierendes Verzeichnis wie zum Beispiel /usr/local auslagern willst? In diesem Falle solltest du die neue Platte als /mnt einhängen und /usr/local nach /mnt kopieren. Beispiel:

# cd /usr/local && pax -rw -p e . /mnt
Editiere /etc/fstab(5) dergestalt, dass die Partition /usr/local nun auf /dev/sd2d (deine frisch formatierte Partition) zeigt. Beispiel:
/dev/sd2d /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.5 - Wie wird Auslagerung gehandhabt?

14.5.1 - Über Auslagerung

Historisch betrachtet wurden alle Arten von Regeln aufgestellt, um Administratoren eine Richtschnur darüber zur Hand zu geben, wieviel Auslagerungsspeicher sie auf ihren Maschinen zu konfigurieren hätten. Das Problem dabei ist, natürlich, dass es wenige »normale« Anwendungen gibt.

Eine nicht-offensichtliche Nutzung von Auslagerung ist, dass es ein Platz ist, an den der Kernel eine Kopie darüber, was sich im Moment einer Systempanik im Speicher befindet, für die spätere Analyse abladen kann. Damit dies funktionieren kann, muss eine Auslagerungs-Partition (keine Auslagerungs-Datei) vorhanden sein, die mindestens so groß ist wie der Hauptspeicher. Im Normalfall wird das System eine Kopie dieses Dumps während des Systemneustarts nach /var/crash kopieren, sodass, wenn du möchtest, dass all dies automatisch geschieht, du ausreichenden freien Speicherplatz auf /var benötigst. Allerdings kannst du das System auch in den Ein-Benutzer-Modus booten und savecore(8) benutzen, um den Dump an eine andere Stelle zu verfrachten.

Viele Arten von Systemen können auch ohne Auslagerung passend konfiguriert sein. So sollten zum Beispiel Firewalls im normalen Betrieb nicht auslagern. Basiert deine Firewall auf Flash-Speicher, so magst du einen (kleinen) Nutzen davon haben, keine Auslagerungs-Partition zu allozieren, obwohl, in den meisten Fällen, eine Auslagerungs-Partition auch nicht wirklich schmerzt; die meisten Laufwerke haben mehr als genug Platz, um ein kleines bisschen davon für Auslagerung zu allozieren.

Es gibt alle Arten von Tipps für die Optimierung von Auslagerung (wo auf der Platte, separate Platte, etc.), aber wenn du dich in einer Situation befindest, in der die Optimierung von Auslagerung ein Thema ist, so benötigst du vielleicht mehr Hauptspeicher. Generell gesagt ist die beste Optimierung von Auslagerung, keine solche zu benötigen.

Unter OpenBSD wird Auslagerung von dem Programm swapctl(8) verwaltet, das Auslagerungs-Geräte und -Dateien hinzufügt, entfernt, auflistet und priorisiert.

14.5.2 - Auf eine Partition auslagern

Unter OpenBSD wird die Partition »b« des Bootlaufwerks standardmäßig und automatisch für Auslagerung genutzt. Hierfür wird keinerlei Konfiguration benötigt. Wünschst du keine Auslagerung auf dem Boolaufwerk zu nutzen, definiere keine Partition »b«. Wünschst du die Nutzung von Auslagerung auf einer anderen Partition oder auf anderen Laufwerken, so musst du diese Partitionen in /etc/fstab mit Zeilen wie den Folgenden definieren:

/dev/sd3b none swap sw 0 0
/dev/sd3d none swap sw 0 0

14.5.3 - In eine Datei auslagern

(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 csh(1)'s unlimit, oderr sh(1)'s ulimit zu erhöhen.)

Manchmal erweist sich deine erste Vermutung darüber, wieviel Auslagerung du brauchst, als falsch, und du musst zusätzlichen Auslagerungs-Speicherplatz hinzufügen, zuweilen in Eile (wie in »Jungs, wenn es in dieser Geschwindigkeit Auslagerung verbrennt, sind wir in fünf Minuten eingekeilt«). Findest du dich in dieser Situation, mag das Hinzufügen von zusätzlichem Auslagerungs-Speicherplatz in Form einer Datei auf einem existierenden Dateisystem eine schnelle Hilfe sein.

Die Datei darf 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

14.6 - 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.7 - Wie booten OpenBSD/i386 und OpenBSD/amd64?

Der Bootprozess für OpenBSD/i386 und OpenBSD/amd64 ist nicht einfach und verstehen, wie es funktioniert, kann nützlich sein, um ein Problem zu lösen, wenn Dinge nicht laufen. Während des Bootprozesses gibt es vier Schlüsselereignisse:
  1. Master Boot Record (MBR): Der »Master Boot Record« ist, was sich in den ersten 512 Bytes des Laufwerks findet. 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 bedeutet es, den kompletten MBR neu zu schreiben und die existierende Partitionstabelle zu löschen, und nicht nur den Code, wie es eventuell einige andere Systeme machen. Oft wirst du dies nicht tun wollen. Darum benutze stattdessen fdisk(8)s Kommandozeilenoption »-u« (»fdisk -u wd0«), um den MBR-Boot-Code (erneut) zu installieren.

    Obwohl OpenBSD seinen eigenen MBR-Code besitzt, 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 (nach dem Namen der Datei, der den Code beinhaltet), ist, was sich in den ersten 512 Byte einer OpenBSD-Partition findet. Der PBR ist der »First-Stage Boot-Lader« 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(8) 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;...
    

  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 3.21
    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 3.21
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-2013 OpenBSD.  All rights reserved.  http://www.OpenBSD.org

OpenBSD 5.4 (GENERIC) #37: Tue Jul 30 12:05:01 MDT 2013
    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)-Handbuchseite ausführlich besprochen.

Für weitere Informationen über den i386-Bootprozess, siehe:

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

OpenBSD unterstützt sowohl FFS- als auch FFS2- (ebenfalls bekannt als UFS und UFS2) Dateisysteme. FFS ist das historische OpenBSD-Dateisystem, FFS2 seit Version 4.3 verfügbar. Bevor die speziellen Grenzen der jeweiligen Systeme betrachtet werden, müssen wir zuerst auf ein paar generelle Systemeinschränkungen eingehen.

Selbstverständlich sind die Fähigkeit eines Dateisystems und die Fähigkeit einer bestimmten Hardware zwei unterschiedliche Dinge. Eine neuere 250 G große IDE-Festplatte kann unter Umständen nicht mit älteren (vor >137G-Standard) Interfaces funktionieren (obwohl sie meistens einwandfrei arbeiten) 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 natürlich die Fähigkeiten deiner Hardware und deines Starter-Codes 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 in dem Bereich liegen, der vom Boot-ROM unterstützt wird.

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/amd64) 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 vom Computer-BIOS (oder Boot-ROM) adressierbaren Speichers 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. Dies ist ein weiterer Grund, NICHT sofort deinen gesamten Plattenbereich zu allokieren, nur weil er vorhanden ist. Dateisysteme nur lesend oder gar nicht gemountet zu haben hilft dabei, sie beim nächsten Stolpern über das Stromkabel keinem erneuten fsck(8) zu unterziehen. Die Anzahl an »inodes« (durch Nutzung der newfs-Option -i) zu reduzieren kann ebenfalls den Zeitbedarf von fsck verbessern -- vorausgesetzt, dass du sie wirklich nicht benötigst.

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.

FFS gegen FFS2

Mit FFS unterstützt OpenBSD ein individuelles Dateisysteme von bis zu 231-1 oder 2.147.483.647 Blocks, und da jeder Block 512 Byte groß ist, ist dies ein bisschen weniger als 1 TB. FFS2 ist in der Lage, deutlich größere Dateisysteme zu unterstützen, obwohl andere Grenzen längst erreicht sind, bevor das Dateisystem voll ausgereizt ist.

Der Boot-/Installationskernel unterstützt nur FFS (kein FFS2), sodass wichtige Systempartitionen (/, /usr, /var, /tmp) nicht mit FFS2 formatiert werden sollten, da ansonsten Wartungsprobleme auftreten könnten (es sollte ohnehin keinen Grund geben, warum diese Partitionen so riesig sein sollten). Deshalb sollten sehr große Partitionen nur für Partitionen wie /home, /var/www, /bigarray etc. genutzt werden, die nicht entscheidend für das System sind.

Beachte, dass nicht alle Controller und Laufwerke große Platten unterstützten. ami(4) zum Beispiel unterstützt maximal 2 TB pro logischem Volumen. Sei dir immer bewußt, was verfügbar war, wenn ein Kontroller oder eine Schnittstelle produziert wurde, und verlasse dich nicht auf »die Stecker passen«.

Laufwerke größer als 2 TB

Das MBR-System, das auf PCs genutzt wird, versteht sich nur im Umgang mit Laufwerken von bis zu 2 TB Größe. fdisk(8) zeigt die Größe von Laufwerken größer 2 TB als 2 TB an. Dies behindert in keinster Weise OpenBSD's Fähigkeit, größere Laufwerke nutzen zu können, da der MBR nur benutzt wird, um das Betriebssystem urzuladen; ist jedoch das Betriebssystem einmal in Betrieb, so werden die Dateisysteme durch das »disklabel« definiert, welches kein 2 TB Limit besitzt.

Um ein Laufwerk zu nutzen, das größer als 2 TB ist, erzeuge auf dem Laufwerk eine OpenBSD-Partition mit Hilfe von fdisk, und zwar in der Größe, die dir fdisk ermöglicht. Kennzeichnest du dann das Laufwerk mittels disklabel(8), so nutze die Option "b", um die OpenBSD-Grenzen (die standardmäßig auf die Größe der OpenBSD-fdisk-Partition eingestellt sind) so zu definieren, dass sie das gesamte Laufwerk einschließen. Nun kannst du deine Partitionen genauso erzeugen, wie du es wünschst. Allerdings musst du natürlich die Möglichkeiten deines BIOS respektieren, dass die Einschränkung haben wird, einzig die fdisk-Partitionen zu verstehen, sodass deine Partition "a" komplett innerhalb der von fdisk verwalteten Bereiche des Laufwerks liegen sollte, zusätzlich zu anderen Einschränkungen des BIOS.

14.9 - Installieren von Bootblocks - i386/amd64-spezifisch

OpenBSD besitzt ein sehr robustes Systemladeprogramm (»Bootloader«), das recht gleichgültig gegenüber verschiedenen Laufwerksgeometrien ist, allerdings ist es hochsensibel 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, sodass du einen normalen Systemstart durchführen kannst, lege einfach eine startbare CD-ROM in dein Laufwerk (oder nutze eine startbare Diskette), und gib am Bootprompt »boot hd0a:/bsd« ein, um den Systemstart von der ersten Festplatte (nicht der CD-ROM oder der Diskette) zu erzwingen. Deine Maschine sollte normal starten. 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
Beachte, da dass Dateisystem im Moment eingehängt ist, dass »/boot« die physische Position der Datei »boot« ist, die du benutzen möchtest, wenn das System normal startet. Wäre deine Situation ein wenig anders, und hättest du von CD-ROM gestartet und deine Partition »a« unter /mnt eingehängt, so würde dies stattdessen wahrscheinlich »/mnt/boot« sein. installboot(8) macht hier zwei Dinge - es installiert die Datei »biosboot« dahin, wo es im »Partition Boot Record« stehen muss, und modifiziert es für die tatsächlichen physischen Position der Datei «/boot«.

14.10 - Vorbereitung auf Katastrophen - Erzeugen von Backups und Wiederherstellung vom 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 ausfällt, oder die Daten aus einem anderen Grund verloren sind.

Diese Information wird dir helfen, die Standardwerkzeuge dump(8)/restore(8) zu benutzen, die als Teil von OpenBSD ausgeliefert werden. Fortgeschrittenere Backup-Dienstprogramme, wie »Amanda« und »Bacula« sind als Pakete verfügbar, um mehrere Sever auf Festplatte und Bandlaufwerk zu sichern.

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, was ein SCSI-ähnliches, wahrscheinlich fest installiertes Laufwerk 0, Partition a indiziert. Das Dateisystem /usr befindet sich auf sd0h, was ein SCSI-ähnliches, wahrscheinlich fest installiertes Laufwerk 0, Partition h indiziert.

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)-Handbuchseite 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-Handbuchseite 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 herauszufinden. 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 Handbuchseite 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-Handbuchseite 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.11 - Laufwerksabbilder in OpenBSD einhängen

Um ein Laufwerks-Abbild (ISO-Abbild, Abbilder, die mit dd erstellt wurden etc.) unter OpenBSD einzuhängen (zu »mounten«), musst du ein vnd(4)-Gerät konfigurieren. Zum Beispiel, wenn du ein ISO-Abbild unter /tmp/ISO.image hast, würdest du die folgenden Schritte gehen, um es einzuhängen:

# vnconfig vnd0 /tmp/ISO.image
# mount -t cd9660 /dev/vnd0c /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 Abbild wieder auszuhängen, benutze die folgenden Kommandos.

# umount /mnt
# vnconfig -u vnd0

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

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

DMA-IDE-Übertragungen, die durch pciide(4) unterstützt werden, sind in vielen Konfigurationen alter Hardware unzuverlässig.

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 ebenfalls 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.14 - Warum sagt mir df(1), dass ich mehr als 100 % von meinem Laufwerk 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). Einige von ihnen haben eingeschränkte - zum Beispiel nur schreibgeschützte - Unterstützung.

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 Handbuchseite zu mount(8) und die Handbuchseite 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       
duid: d920a43a5a56ad5f
flags:
bytes/sector: 512
sectors/track: 63
tracks/cylinder: 16
sectors/cylinder: 1008
cylinders: 16383
total sectors: 78165360
boundstart: 20338290
boundend: 49656915
drivedata: 0 

16 partitions:
#             size        offset  fstype [fsize bsize  cpg]
  a:        408366      20338290  4.2BSD   2048 16384   16 # /
  b:       1638000      20746656    swap
  c:      78165360             0  unused
  d:       4194288      22384656  4.2BSD   2048 16384   16 # /usr
  e:        409248      26578944  4.2BSD   2048 16384   16 # /tmp
  f:      10486224      26988192  4.2BSD   2048 16384   16 # /var
  g:      12182499      37474416  4.2BSD   2048 16384   16 # /home
  i:         64197            63 unknown
  j:      20274030         64260 unknown
  k:       1975932      49656978   MSDOS
  l:       3919797      51632973 unknown
  m:       2939832      55552833  ext2fs
  n:       5879727      58492728  ext2fs
  o:      13783707      64372518  ext2fs 

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. 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 verzeichnet! 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 Dateisystempartionen enthielte. Wenn du diese verwenden möchtest, dann musst du diese Partitionen 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 genaueste 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 Flash-Speicher-Gerät mit OpenBSD benutzen?

14.17.1 - Flash-Speicher als portables Speichergerät

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, 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 Handbuchseite 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.17.2 - Flash-Speicher als startbarer Speicherplatz

Man kann ebenfalls Flash-Speicher in vielfacher Form als startbares Laufwerk mit OpenBSD benutzen. Dies kann sowohl mit USB-Geräten (vorausgesetzt dein Computer kann von einem USB-Flash-Speicher-Gerät starten, was nicht für alle gilt), als auch mit nicht-USB-Geräten (z. B. »CompactFlash«) mit einem IDE- oder SATA-Adapter geschehen. (Nicht-USB-Geräte, die an einen USB-Adapter angeschlossen sind, werden als USB-Geräte behandelt.) In einigen Fällen kann man das Gerät auf beide Arten nutzen (laden des Mediums mit einem USB-Adapter, laufenlassen mit einem IDE-Adapter).

Ein Flash-Gerät, das an einen USB-Anschluss angeschlossen wird, taucht als sd(4) SCSI-ähnliches Gerät auf. Wird es an einen IDE-Adapter angeschlossen, so tauch es als wd(4)-Gerät auf.

In dem Fall, dass das Flash-Medium über einen IDE-Adapter angeschlossen wird, kann man von ihm jedes System starten, dass von einer IDE-Festplatte über denselben Adapter starten könnte. Das System betrachtet dieses Flash-Medium in jeder Hinsicht als IDE-Laufwerk. Konfiguriere einfach deine Hardware entsprechend, und OpenBSD wird sich ganz normal auf das Flash-Laufwerk installieren.

In dem Fall des Startens von einem USB-Gerät muss das System in der Lage sein, von einem USB-Gerät starten zu können, ohne von anderen Geräten des Systems abgelenkt zu werden. Beachte das, sollte deine Intention sein, eine portable Systemstart-Umgebung auf einem USB-Gerät zu kreieren, du wirklich DUIDs anstatt der traditionellen »/dev/sd0X«-Notation benutzen solltest. Das USB-Gerät wird als SCSI-Laufwerk auftauchen, manchmal sd0. Ohne DUIDs wird es, wenn du es an ein Gerät anschließt, das bereits einige SCSI-ähnliche Laufwerke (d. h. Geräte, die an eine ahci(4)-Schnittstelle angeschlossen sind) aufweist, wahrscheinlich mit einer anderen Kennzeichnung registriert werden, was das Übertragen des Flash-Geräts von System zu System verkompliziert, da /etc/fstab entsprechend angepaßt werden muss. Die Benutzung von DUIDs beseitigt diesen Problembereich.

Einige Anmerkungen:

14.17.3 - Wie kann ich ein startbares »Live«-USB-Gerät erzeugen?

Es ist sehr einfach ein startbares USB-Flash-Laufwerk (oder ein anderes!) zu erzeugen, das als sogenanntes »Live«-OpenBSD-System benutzt werden kann, ohne das OpenBSD auf der lokalen Festplatte der Maschine installiert werden muss. Augenscheinlich muss die Zielmaschine von einem USB-Gerät startbar sein, aber die Vorarbeit kann auf jeder Maschine mit einer USB-Schnittstelle geleistet werden.

Einige Gründe, warum du dies machen können wolltest:

Das Erzeugen eines solchen »Live-OpenBSD-Laufwerks« ist einfach. Das ist alles!

Es gibt einige Dinge, die du eventuell nach der Installation machen möchtest, um deine Ergebnisse zu verbessern:

14.18 - Optimierung der Laufwerksleistung

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 - Softupdates

Ein wichtiges 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 komplett, wenn auch nicht immer auf dem aktuellen Stand sind. Du kannst mehr über Softupdates in dem Softupdates-FAQ-Eintrag finden.

14.18. - Größe des namei()-Caches

Die name-to-inode-Übersetzung (a. 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 - Warum verwenden wir keine »async«hronen Einhängemodi?

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

14.20 - Duplikation deiner Wurzelpartition: »altroot«

OpenBSD bietet die Möglichkeit einer alternativen Wurzelpartition, "altroot" genannt; dies ist Teil der »daily« Skripte. Wenn die Umgebungsvariable ROOTBACKUP=1 gesetzt ist, und zwar entweder in /etc/daily.local oder aber in root's crontab(5), und in /etc/fstab eine Partition angegeben ist, die mit den Optionen »xx« als /altroot eingehängt wird, so wird jede Nacht der gesamte Inhalt der Wurzelpartition auf die Partition /altroot gespiegelt. Angenommen, wir wollen unsere Wurzelpartition nach wd1a sichern, so fügen wir Folgendes zu /etc/fstab hinzu
/dev/wd1a /altroot ffs xx 0 0
und setzen die dazugehörigen Umgebungsvariablen in /etc/daily.local:
# echo ROOTBACKUP=1 >>/etc/daily.local
Da der »altroot«-Prozess auch dein /etc Verzeichnis erfasst, wird dies sicherstellen, dass jedwede Konfigurationsänderung täglich aktualisiert und gesichert wird.

»altroot« ist eine »Mediumsabbildskopie« die mit Hilfe von dd(8) vorgenommen wird, keine Kopie »Datei-für-Datei«, sodass deine als /altroot eingehängte Partition entweder exakt dieselbe Größe wie deine Wurzelpartition aufweisen, oder aber größer als diese sein sollte. Ebenfalls sollten übertrieben große Wurzelpartition vermieden werden, um die Zeitdauer des Prozesses zu reduzieren.

Für vollständige Redundanz sollten die übrigen Partitionen ebenfalls dupliziert werden, was mit Hilfe von »softraid«-Medien, dump(8)/restore(8), rsync etc. bewerkstelligt werden kann. Dies ist sowohl manuell möglich, als auch als Teil eines regelmäßigen Zeitplans, wie z. B. mit Hilfe der weekly.local, daily.local oder monthly.local Skripte.

Generell gesagt ist es in deinem Interesse, die Partition »altroot« auf einem separaten Laufwerk zu haben, dass voll startfähig konfiguriert ist, sodass es dein primäres Laufwerk vollständig ersetzen kann. Es ist zwar möglich, ein »altroot« auf demselben Laufwerk wie deine Startpartition zu platzieren, jedoch ist der Nutzen einer solchen Konfiguration gering.

Beachte, dass wir das Laufwerk für die Partition »altroot« nicht via DUID angesteuert haben, sondern über den Gerätenamen. Wir möchten oder müssen vielleicht das Startlaufwerk und das zweite Laufwerk tauschen. Aus diesem Grund möchtest du eventuell sowohl die Wurzelpartition als auch jene von »altroot« in /etc/fstab über den Laufwerksnames anstatt einer DUID ansprechen.

14.21 - Wie nutze ich softraid(4)?

Softraid(4) emuliert einen scsibus(4) mit angeschlossenen sd(4)-Geräten, die mit Hilfe einer Anzahl von OpenBSD disklabel(8)-Partitionen (»chunks«) zu einem virtuellen Datenträger (»volume«) kombiniert wurden, und zwar mit Hilfe der gewünschten RAID Strategie (»discipline«), wie, z. B., RAID0, RAID1, RAID4, RAID5 oder Crypto. (Anmerkung: nur RAID0, RAID1 und Crypto werden im Moment voll unterstützt.)

Dieser virtuelle Datenträger wird wie jedes andere Laufwerk behandelt -- zuerst wird es mittels fdisk(8) (auf fdisk-Plattformen) und dann disklabel(8) partitioniert, Partitionen werden in Dateisysteme aufgebrochen, eingehängt, dann genutzt.

Einige generelle Worte zu RAID:

14.21.1 - Installation

Laufwerksspeicherplatz für »softraid« kann durch Nutzung von freien (oder hinzugefügten!) Batzen Laufwerksspeicherplatz nach der Installation erzeugt werden, jedoch ist auch dies nur ein spezieller (und einfacher) Aspekt des Hinzufügens von »softraid« während der Installation.

Die Werkzeuge, die benötigt werden, um dein »softraid«-System zusammenzustellen, finden sich sämtlich in einer OpenBSD-Basisinstallation (zum Hinzufügen von »softraid«-Geräten nach der Installation), sind jedoch ebenfalls Teil der CD-ROM- und bsd.rd-Installationskernel. Aus Platzgründen finden sie sich nicht auf den Disketten; ein einfacher Weg, diese Restriktion zu umschiffen, ist die Installation eines minimalen OpenBSD von Diskette, gefolgt vom Start des bsd.rd des installierten Systems, gefolgt von einer Neuübersetzung mit allen gewünschten Eigenschaften.

Der Installationsprozess wird ein wenig anders sein als eine standardmäßige OpenBSD-Installation, da du währenddessen zum Kommandozeileninterpreter wechseln und deine softraid(4)-Geräte erzeugen musst, und zwar bevor die eigentliche Installation startet. Sind die softraid(4)-Laufwerke erst einmal erzeugt, so kannst du die Installation relativ normal durchführen, und die von dir gewünschten Partitionen als RAID auf den neu konfigurierten Laufwerken platzieren.

Du kannst die RAID-Partitionen vorerzeugen, sie zu einem softraid(4)-Datenträger zusammenstellen und dem Installationsprogramm den Rest überlassen, jedoch ist es vielleicht einfacher, sowohl dein Wurzelverzeichnis, als auch die Auslagerungs-Partitionen ebenfalls manuell zu erzeugen, bevor du das Installationsprogramm startest.

Dies bedeutet, dass du das Laufwerk vorsichtig vorbereiten musst, bevor du den Installationsprozess startest, und sicherstellst, dass du einige wenige Schritte manuell unternimmst, die dir normalerweise vom Installationsprogramm abgenommen werden.

Der Installationskernel besitzt in /dev zur Systemstartzeit nur Einträge für ein wd(4)- und ein sd(4)-Gerät, sodass du mehr Laufwerksgerätedateien erzeugen musst, um dein »softraid«-Gerät einrichten zu können. Dieser Prozess wird zwar normalerweise vom Installationsprogramm automatisch vollzogen, jedoch ist dieses noch gar nicht gelaufen, und außerdem wirst du ein Laufwerk erzeugen, dass zur Systemstartzeit noch gar nicht existierte. Zum Beispiel, wenn wir ein zweites und gar drittes wd(4)-Gerät, und ein zweites sd(4)-Gerät benötigen würden (erinnere den Umstand, dass »softraid«-Geräte als sd(4)-Geräte geführt werden), so könnten wir Folgendes am Kommandozeileninterpreter-Prompt eingeben:

# cd /dev
# sh MAKEDEV wd1 wd2 sd1
Danach besteht vollständige Unterstützung für sd0, sd1, wd0, wd1 und wd2.

Sodann ist es notwendig die physischen Laufwerke korrekt zu »fdisk(1)en« (wenn dies für deine Plattform approbat ist -- stelle sicher, das zweite Laufwerk so einzurichten, dass von ihm gestartet werden kann!), um dann mit Hilfe von disklabel die Partitionen einzurichten.

Die unten gezeigten fdisk(8) Schritte platzieren einen MBR und eine OpenBSD-Partition auf dem Laufwerk. WENN du die Gesamtheit des Laufwerks für OpenBSD nutzen willst (d. h., du möchtest NICHTS anderes dortselbst sehen), so ist exakt dies mit einem einfachen Einzeiler für jedes Laufwerk möglich:

# fdisk -iy wd0
# fdisk -iy wd1
(Sei dir bewußt und verstehe, was diese Zeilen mit allen vorher auf dem Laufwerk vorhandenen Daten anstellen, bevor du sie blind benutzt!) Anderenfalls musst du OpenBSD-Partitionen innerhalb der neuen Laufwerke erzeugen.

Erzeuge die Partitionen für »softraid«

Wenn du die softraid(4)-Partition erzeugst, gib ihr den Typ »RAID« anstatt der normalen »4.2BSD« oder »swap«. In diesem Fall werden wir unsere Wunschpartitionen auf wd0 erzeugen:
# disklabel -E wd0
Label editor (enter '?' for help at any prompt)
> a a
offset: [64] ENTER 
size: [30282461] 500m
Rounding to cylinder (16065 sectors): 1028096
FS type: [4.2BSD] ENTER 
> a b
offset: [1028160]  ENTER 
size: [29254365] 500m
Rounding to cylinder (16065 sectors): 1028160
FS type: [swap] ENTER 
> a m
offset: [3148740]  ENTER
size: [28226205] 10g
Rounding to cylinder (16065 sectors): 20980890
FS type: [4.2BSD] RAID
> q
Write new label?: [y] ENTER

Nun müssen wir das zweite Laufwerk so aufbereiten, dass es an den Schlüsselstellen dem Layout des ersten Laufwerks entspricht. Da wir das /altroot-System nutzen, möchten wir eine Partition »a« auf dem zweiten Laufwerk, die dieselbe Größe hat wie die Partition »a« des ersten Laufwerks. Wir möchten, dass das System von dem zweiten Laufwerk exakt so läuft, wie es das von dem ersten macht, weshalb wir gleichsam eine ähnlich dimensionierte Auslagerungspartition benötigen (ein wenig größer oder kleiner spielt in diesem Fall eine untergeordnete Rolle). Wir möchten ebenso, dass die RAID-Partition dieselbe Größe aufweist wie die der Primären. Besitzen die RAID-Partitionen nicht dieselbe Größe, so wird die kleinere der Beiden am Ende die Größe des RAID Datenträgers bestimmen.

Zusammengefasst ... wiederhole einfach den kompletten, oben beschriebenen Aufteilungsprozess für das zweite Laufwerk, wd1.

Zusammenstellung des RAID Datenträgers

Wir nehmen im Folgenden an, dass sich deine zwei RAID-Partitionen auf wd0m und wd1m befinden. Beachte, dass der RAID-Partitionsbuchstabe beliebig ist, es muss auf dem zweiten Laufwerk nicht derselbe Buchstabe sein, aber natürlich machst du dir die Dinge deutlich übersichtlicher, wenn es doch so ist.

Beachte außerdem das softraid(4) sich ein wenig nach Hinweisen auf Bereiche umschaut, die es zusammenzustellen hat, sodass du es, für den Fall, dass dein Laufwerk bereits für softraid(4) genutzt wurde, hilfreich finden könntest, das erste Megabyte jeder Partition mit Hilfe von dd(1) zu löschen:

# dd if=/dev/zero of=/dev/rwd0m bs=1m count=1
   ...
# dd if=/dev/zero of=/dev/rwd1m bs=1m count=1
   ...

Wir erzeugen nun unser neues softraid(1)-Laufwerk mit Hilfe von bioctl(8):

# bioctl -c 1 -l /dev/wd0m,/dev/wd1m softraid0
Dies erzeugt einen RAID1 Datenträger (»-c 1«) unter Einbeziehung der aufgeführten Partitionen (»-l /dev/wd0m,/dev/wd1m«) und Nutzung des softraid0-Treibers. Befinden sich keine weiteren sd(4)-Geräte auf diesem System, so wird es als sd0 ansprechbar sein. Für den Fall, dass du mehrere RAID Geräte auf einem Laufwerk oder auf mehreren Geräten erzeugen möchtest, ist anzumerken, dass du stets den virtuellen softraid0 Laufwerksschnittstellen-Treiber zu nutzen hast, nicht jedoch »softraid1« oder andere. Merke dir, dass »softraid0« ein virtueller RAID-Steuerbaustein ist, an den du viele virtuelle Laufwerke anhängen kannst.

Dies wird ein neues Laufwerk erzeugen, »sd0« (immer noch in der Annahme, dass sich keine weiteren sd(4)-Geräte auf diesem System befinden). Dieses Gerät wird nun auf der Systemkonsole und in der »dmesg« als neu installiertes Gerät auftauchen:

scsibus1 at softraid0: 1 targets
sd0 at scsibus2 targ 0 lun 0: <OPENBSD, SR RAID 1, 005> SCSI2 0/direct
 fixed
sd0: 10244MB, 512 bytes/sec, 20980362 sec total
Dies zeigt, dass wir nun sowohl einen neuen SCSI-Datenbus als auch ein neues Laufwerk haben. Dieser Datenträger wird von nun an automatisch erkannt und zusammengestellt, wenn das System startet.

Solltest du die Komponentenabschnitte nicht gelöscht haben, so wie weiter oben gezeigt, ist es sehr empfehlenswert, nun den ersten Abschnitt des neuen Laufwerks zu löschen, da das neue Gerät möglicherweise dort eine Menge Müll enthält, wo eigentlich ein MBR und ein disklabel erwartet werden:

# dd if=/dev/zero of=/dev/rsd0c bs=1m count=1
An diesem Punkt bist du bereit dazu, OpenBSD auf deinem System zu installieren. Führe die Installation wie üblich durch die Ausführung von »install« am Kommandozeileninterpreter-Prompt des Startmediums durch. Sei vorsichtig und wähle den »custom« Belegungsplan für disklabel, wenn du danach gefragt wirst, sonst wird deine RAID-Partition überschrieben! Nutze die Option »n« innerhalb von disklabel, um den Einhängepunkt für deine Wurzelpartition zu definieren, und erzeuge alle gewünschten Partitionen auf deinem neuen softraid-Laufwerk (sd0 in unserem Beispiel hier), anstatt dies auf deinen nicht-RAID Laufwerken zu tun.

Nun kannst du dein System neu starten, und wenn du alles ordentlich gemacht hast, so wird es deinen RAID Datenträger automatisch zusammenstellen, und die dazugehörigen Partitionen in das System einhängen.

14.21.3 - Bemerkungen zu »softraid«

Komplikationen, wenn andere sd(4)-Laufwerke existieren

»Softraid«-Laufwerke werden zusammengestellt, nachdem alle anderen IDE, SATA, SAS und SCSI Laufwerke zugewiesen wurden. Als Resultat davon ändert sich die Identifikation des »softraid«-Laufwerks, wenn sich die Nummer des sd(4)-Geräts ändert (entweder weil Geräte hinzugefügt oder entfernt wurden -- oder weil ein Gerät ausfällt). Aus diesem Grunde ist es sehr wichtig, DUIDs (»Disklabel Unique Identifiers«, eindeutige »disklabel« Kennungen) in deiner fstab(5)-Datei zu nutzen.

Du möchtest vielleicht nicht das Wurzelverzeichnis per DUID ansprechen.

Ein Drei-Laufwerke RAID1?

»softraid« unterstützt RAID1 mit mehr als zwei »Stücken«, und die Beispiele der Handbuchseite zeigen auch eine RAID1 Konfiguration mit drei Laufwerken. RAID1 dupliziert einfach die Daten über alle angeschlossenen Speicherstücke, sodass deren zwei volle Redundanz und deren drei zusätzliche Fehlertoleranz ergeben. Der Vorteil von RAID mit drei (oder mehr!) Laufwerken oder Speicherstücken ist, dass im Falle des Ausfalls eines Laufwerks IMMER NOCH komplette Redundanz gegeben ist. Betrachte es als Ersatzlaufwerk das keinerlei Zeit zum Neuaufbau benötigt! Theoretisch ist ein Drei-Laufwerks RAID1 beim Schreiben langsamer als ein Verbund aus zwei Laufwerken, jedoch sollte es beim Schreiben viel schneller sein, als der Neuaufbau eines Zwei-Laufwerks RAID1.

14.21.4 - Notfallwiederherstellung

Dies ist die Rubrik, die du überspringen möchtest, jedoch -- tue es nicht. Es ist dies der Existenzgrund für RAID -- wenn Laufwerke niemals ausfallen würden, so würdest du deinem System nicht die Verkomplizierung durch RAID zukommen lassen! Da es sehr schwierig ist, Ausfälle umfassend aufzuführen, besteht leider die große Wahrscheinlichkeit, dass das Ereignis, dass du erlebst, hier nicht exakt beschrieben wird, aber wenn du dir die Zeit nimmst, die hier aufgeführten Strategien zu verstehen, und das WARUM, so kannst du sie hoffentlich nutzen, um aus jedweder Situation einen rettenden Weg zu finden.

Behalte im Hinterkopf, dass Ausfälle oft nicht einfach sind. Der Autor dieses Artikels hatte einen Kurzschluss an der Stromzuführung eines in eine Hardware-RAID-Lösung eingebundenen Laufwerks, was, zusätzlich zu dem Laufwerk selbst, den Ersatz des Netzteils, des RAID-Gehäuses und des Netzteils eines zweiten Computers, den er nutzte, um zu verifizieren, dass das Laufwerk tatsächlich verendet war, als auch, da er das Ersatzgehäuse nicht ordentlich konfigurierte, die Wiederherstellung der Daten aus der Datensicherung erforderte.

Die Schritte, die zur Wiederherstellung des Systems erforderlich sind, können sowohl im Einbenutzermodus als auch ausgehend von einem Installationskernel (bsd.rd) vorgenommen werden.

Solltest du vorhaben, die Wiederherstellung von »softraid« zu trainieren (und dies wird von uns HÖCHSTENS empfohlen!), so magst du es hilfreich finden, ein Laufwerk, dass du aus dem Verbund nimmst, komplett zu löschen, bevor du versuchst, es wieder dem Verbund hinzuzufügen. Nicht nur, dass dies den Grad der Simulation des Ersetzens eines Laufwerks mit einem neuen erhöht, es vermeidet ebenso die Konfusion, die daraus resultieren kann, dass das System Überreste eines »softraid«-Verbundes vorfindet.

Die Wiederherstellung nach einem Ausfall wird oftmals ein zweistufiger Vorgang sein -- die erste Stufe ist es, das System in einen lauffähigen Zustand zurückzubringen, die Zweite ist der Neuaufbau des ausgefallenen Verbundes. Diese zwei Stufen können eine gewisse zeitliche Distanz aufweisen, wenn du kein Ersatzlaufwerk zu Hand hast.

Wiederherstellung nach einem Laufwerksfehler: Sekundär

Dies ist relativ einfach. Es kann sein, dass du das ausgefallene Laufwerk entfernen musst, um das System wieder anfahren zu können.

Wenn du dazu bereit bist, das System zu reparieren, so wirst du das ausgefallene Laufwerk ersetzen, die RAID- und andere disklabel-Partitionen erzeugen, und dann den Spiegelverbund neu aufbauen. Angenommen dein RAID-Datenträger ist sd0, und du ersetzt das ausgefallene Laufwerk mit wd1m, so sollte das folgende Verfahren funktionieren:

Wiederherstellung nach einem Laufwerksfehler: Primär

Viele PC-ähnliche Computer können nicht von einem sekundären Laufwerk starten, wenn das Primäre ausgefallen-, aber immer noch angeschlossen ist, es sei denn es ist so mausetot, dass es gar nicht erkannt wird. Viele können von keinem Laufwerk starten, das nicht als »primär« markiert wurde, selbst wenn kein anderes Laufwerk vorhanden ist.

Generell gesagt, wenn dein primäres Laufwerk ausfällt, so wirst du es entfernen, und in vielen Fällen dein sekundäres Laufwerk zu einem primären Solchen »befördern« müssen, damit dein System starten kann. Dies mag auch das Umstecken von Steckbrücken (»Jumper«) des Laufwerks, das Anschließen des Laufwerks an einen anderen Anschluß oder einige andere Variationen beinhalten. Es ist selbstverständlich, dass das, was sich auf dem sekundären Laufwerk befindet, nicht nur deine RAID-Partition beinhalten, sondern auch funktional startfähig sein muss.

Läuft dein System erst einmal wieder auf dem sekundären Laufwerk, und ist ein neues Laufwerk an Ort und Stelle, verfahre wie oben beschrieben.

Wiederherstellung nach dem »Mischen« deiner Laufwerke

Wenn du vier Laufwerke in deinem System besitzt, sagen wir mal, sd0, sd1, sd2 und sd3, und du endest, aus Gründen des Ersetzens von Hardware oder einer Aufrüstung, mit ausgebauten Laufwerken, und hast vergessen, welches jetzt welches war?

Glücklicherweise kann »softraid« mit dieser Situation sehr gut umgehen, da es die Laufwerke als »frei schwebend« betrachtet, und wird daher deine Verbünde erfolgreich wiederherstellen. Das Startlaufwerk deiner Maschine jedoch muss startfähig sein, und wenn du gerade erst Änderungen an deiner Wurzelpartition vorgenommen hast, bevor du in diese Situation geraten bist, so möchtest du sicherlich nicht aus einem Irrtum heraus von deiner »altroot«-Partition starten.

14.21.5 - »softraid crypto«

Das Einrichten von kryptographischen softraid(4) Datenträgern ist ziemlich einfach: Nachdem dies eingerichtet ist, kannst du den »crypto«-Datenträger, wenn gewünscht, freischalten, und zwar mit:
# bioctl -c C -l /dev/sd1m softraid0
Passphrase: My Crypto Pass Phrase
softraid0: CRYPTO volume attached as sd1
Danach kannst du die Partitionen des verschlüsselten Datenträgers wie üblich in das System einhängen.

Um den verschlüsselten Datenträger auszuhängen (und ihn damit wieder unbenutzbar zu machen), hänge alle eingehängten Dateisysteme aus und mache Folgendes (angenommen, der verschlüsselte Datenträger wäre sd1):

# bioctl -d sd1
Die entsprechende Handbuchseite sieht ein wenig beängstigend aus, da beschrieben wird, dass das Kommando -d den Datenträger »löscht«, aber im Falle von »crypto« wird einzig und alleine der verschlüsselte Datenträger deaktiviert, sodass solange nicht wieder auf ihn zugegriffen werden kann, bis er mit der Passphrase erneut aktiviert wird.

Es sind viele andere Optionen für »softraid« verfügbar, neue Eigenschaften werden hinzugefügt und Verbesserungen gemacht, sodass eine Konsultation der Handbuchseiten von bioctl(8) und softraid(4) auf deinem System empfohlen wird.

Ich habe meine Passphrase vergessen!

Bedaure. Dies ist echte Verschlüsselung, es gibt keinerlei Hintertür oder ein magisches Entriegelungswerkzeug. Solltest du deine Passphrase vergessen, so sind deine auf dem »softraid-crypto«-Datenträger gespeicherten Daten unbenutzbar geworden.

[FAQ-Index] [Zum Kapitel 13 - Multimedia] [Zum Kapitel 15 - Pakete und Portierungen]


[back] www@openbsd.org
$OpenBSD: faq14.html,v 1.101 2013/11/01 18:04:04 ajacoutot Exp $