[FAQ-Index] [Zum Kapitel 13 - Multimedia] [Zum Kapitel 15 - Packages und Ports]
Lies zunächst die disklabel(8)-Manualseite.
Die Details wie Platten unter OpenBSD eingerichtet werden unterscheiden sich auf den einzelnen Plattformen. Auf den Plattformen i386, amd64, macppc, zaurus und armish findet die Platteneinrichtung in zwei Phasen statt. Zuerst wird das OpenBSD-Slice unter Verwendung von fdisk(8) auf der Festplatte definiert und dann mit disklabel(8) in OpenBSD-Partitionen unterteilt.
Alle OpenBSD-Plattformen verwenden jedoch primär disklabel(8) für die Verwaltung von OpenBSD-Partitionen. Plattformen, die ebenfalls fdisk(8) einsetzen, legen alle disklabel(8)-Partitionen in einer einzelnen fdisk-Partition an.
Labels beinhalten bestimmte Informationen über deine Festplatte; unter anderem deine Plattengeometrie und Informationen über die Dateisysteme auf deiner Platte. Sie beinhalten auch Informationen über deine Platte selbst wie zum Beispiel Umdrehungsgeschwindigkeit, Interleave etc. Diese Einträge existieren auf Grund früherer Notwendigkeiten und sind meist nicht einmal korrekt: Mach dir also keine Gedanken darüber. Das Disklabel wird dann vom Bootstrapprogramm genutzt, um das Laufwerk anzusprechen und zu wissen, welche Dateisysteme sich auf dem Laufwerk befinden. Weitere Informationen über Disklabel kannst du in der disklabel(5)-Manualseite nachlesen.
Auf einigen Plattformen hilft disklabel, Architekturbegrenzungen bei der Plattenpartitionierung zu überwinden. Zum Beispiel kann man auf i386 nur vier primäre Partitionen anlegen; disklabel(8) benutzt eine dieser primären Partitionen, die dann *alle* deine OpenBSD-Partitionen enthält (z. B. »swap«, »/«, »/usr«, »/var« etc.) - und du hast noch drei weitere für andere Betriebssysteme übrig.
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.
Wenn dein System erst einmal installiert ist, solltest du disklabel nicht mehr allzu oft benutzen müssen. Aber du kannst es gebrauchen, wenn du z. B. Festplatten hinzufügen, welche entfernen oder auch einfach umstrukturieren möchtest. Eines der ersten Dinge, die du dann machst, ist dir den momentanen gültigen Disklabel anzusehen. Und das geht so:
# disklabel wd0 <-- Oder ein anderes Device, das du dir anzeigen lassen möchtest
# Inside MBR partition 3: type A6 start 63 size 29880837
# /dev/rwd0c:
type: ESDI
disk: ESDI/IDE disk
label: Maxtor 51536H2
flags:
bytes/sector: 512
sectors/track: 63
tracks/cylinder: 16
sectors/cylinder: 1008
cylinders: 16383
total sectors: 29888820
rpm: 3600
interleave: 1
trackskew: 0
cylinderskew: 0
headswitch: 0 # microseconds
track-to-track seek: 0 # microseconds
drivedata: 0
16 partitions:
# size offset fstype [fsize bsize cpg]
a: 614817 63 4.2BSD 2048 16384 328 # Cyl 0*- 609
b: 409248 614880 swap # Cyl 610 - 1015
c: 29888820 0 unused 0 0 # Cyl 0 - 29651*
d: 6291936 1024128 4.2BSD 2048 16384 328 # Cyl 1016 - 7257
e: 409248 7316064 4.2BSD 2048 16384 328 # Cyl 7258 - 7663
f: 1024128 9822960 4.2BSD 2048 16384 328 # Cyl 9745 - 10760
h: 2097648 7725312 4.2BSD 2048 16384 328 # Cyl 7664 - 9744
Beachte, dass bisher nur ein Teil des zur Verfügung stehenden Plattenspeichers zugewiesen wurde. Mit disklabel gibt es zwei verschiedene Modi für die Editierung des Disklabels: ein eingebauter kommandozeilenbasierter Editor (mit diesem hast du OpenBSD ursprünglich installiert) und ein vollständiger Editor wie beispielsweise vi(1). Den eingebauten kommandozeilenbasierten Editor wirst du vermutlich als einfacher zu bedienen empfinden, da er dich durch alle Schritte führt und nach Bedarf weitere Hilfe ausgibt - der Vollbildeditor hat selbstverständlich auch seine Daseinsberechtigung.
Lass uns eine Partition zum gerade gezeigten System hinzufügen.
Warnung: Jedes Mal wenn du dein Disklabel editierst setzt du die gesamten Daten auf deiner Platte einer großen Gefahr aus. Stell sicher, dass du deine Daten gesichert hast, bevor du ein bestehendes Disklabel modifizierst!
Wir werden hierfür den eingebauten kommandozeilenbasierten Editor verwenden, der mit der Option -E von disklabel(8) aufgerufen wird.
# disklabel -E wd0
...
> a k
offset: [10847088]
size: [19033812] 2g
Rounding to nearest cylinder: 4194288
FS type: [4.2BSD]
> p m
device: /dev/rwd0c
type: ESDI
disk: ESDI/IDE disk
label: Maxtor 51536H2
bytes/sector: 512
sectors/track: 63
tracks/cylinder: 16
sectors/cylinder: 1008
cylinders: 16383
total bytes: 14594.2M
free bytes: 7245.9M
rpm: 3600
16 partitions:
# size offset fstype [fsize bsize cpg]
a: 300.2M 0.0M 4.2BSD 2048 16384 328 # Cyl 0*- 609
b: 199.8M 300.2M swap # Cyl 610 - 1015
c: 14594.2M 0.0M unused 0 0 # Cyl 0 - 29651*
d: 3072.2M 500.1M 4.2BSD 2048 16384 328 # Cyl 1016 - 7257
e: 199.8M 3572.3M 4.2BSD 2048 16384 328 # Cyl 7258 - 7663
f: 500.1M 4796.4M 4.2BSD 2048 16384 328 # Cyl 9745 - 10760
h: 1024.2M 3772.1M 4.2BSD 2048 16384 328 # Cyl 7664 - 9744
k: 2048.0M 5296.4M 4.2BSD 2048 16384 16 # Cyl 10761 - 14921
> q
Write new label?: [y]
In diesem Fall war disklabel(8) nett und hat einen guten Startoffset
für die Partition berechnet. In den meisten Fällen wird das auch
funktionieren - falls du aber »Löcher« im Disklabel hast (d. h.
falls du eine Partition gelöscht hast oder dir das Leben unnötig schwer
machen willst) musst du eventuell zu Papier und Bleistift greifen und
den passenden Offset selbst ausrechnen.
Beachte, dass es gut möglich ist, dass Dinge hier fehlschlagen, obwohl
disklabel(8) einige Gültigkeitsüberprüfungen durchführt. Sei sicher,
dass du genau weißt, was die Bedeutung dieser Zahlen ist, die du gerade
eingibst.
Auf den meisten OpenBSD-Plattformen stehen sechzehn Disklabelpartitionen zur Verfügung: von a bis p (einige »besondere« Systeme haben nur acht). Jedes Disklabel sollte eine Partition namens c mit dem Dateisystemtyp (fstype) »unused« aufweisen. Versuche niemals, ein Dateisystem auf c zu erstellen. Auf dem Bootdevice ist a für die Rootpartition reserviert und b für die Swappartition. Diese Einschränkung gilt nur für das Bootdevice. Andere Devices können alle fünfzehn Partitionen außer c für Dateisysteme nutzen.
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.
Nun, nachdem du deine Festplatte ORDNUNGSGEMÄSS eingebaut hast, musst du fdisk(8) (nur i386 ) und auch disklabel(8) verwenden, um deine Festplatte unter OpenBSD benutzen zu können.
Besitzer eines i386-Systems starten mit fdisk. Besitzer anderer Architekturen können diesen Schritt einfach ignorieren. In dem Beispiel weiter unten werden wir dem System ein drittes SCSI-Laufwerk hinzufügen.
# fdisk -i sd2
Das wird die »echte« Partitionstabelle der Festplatte für eine
ausschließliche Benutzung von OpenBSD initialisieren. Als nächstes musst
du ein Disklabel dafür erzeugen. Das wird wohl etwas verwirrend wirken.
# disklabel -e sd2
(der Bildschirm wird leer, dein $EDITOR erscheint)
type: SCSI
... Bla ...
sectors/track: 63
total sectors: 6185088
... Bla ...
16 partitions:
# size offset fstype [fsize bsize cpg]
c: 6185088 0 unused 0 0 # (Cyl. 0 - 6135)
d: 1405080 63 4.2BSD 1024 8192 16 # (Cyl. 0*- 1393*)
e: 4779945 1405143 4.2BSD 1024 8192 16 # (Cyl. 1393*- 6135)
Zunächst einmal ignoriere die Partition c - sie ist immer da und
Programme wie disklabel benötigen sie, um zu funktionieren!
Für OpenBSD ist fstype 4.2BSD. Die gesamte Größe der Festplatte ist
wird unter total sectors angegeben. Nehmen wir an, es handelt sich um
eine 3 Gigabyte große Festplatte. Drei Gigabytes in der Sprache der
Festplattenhersteller sind 3000 Megabytes. Dividiere also
6185088 mit 3000 (benutze
bc(1)).
Du erhältst 2061. Um jetzt Partitionsgrößen für a, d, e, f, g, ... zu
erstellen, rechne einfach X * 2061, um X Megabyte Platz auf dieser
Partition zu erhalten. Der Offset für deine erste Partition sollte
derselbe sein, wie unter sectors/track vorher in disklabels Ausgabe
angegeben. Bei uns ist es 63. Der Offset für jede Partition ist
hinterher eine Kombination aus der Größe und dem Offset jeder anderen
Partition (mit Ausnahme der Partition c, da sie keine Rolle in dieser
Gleichung spielt).
Wenn du aber nur eine Partition auf deiner Festplatte brauchst, zum Beispiel, wenn du das ganze Ding nur zum Ablegen von Webseiten oder einem Heimatverzeichnis oder etwas anderem nutzen willst, nimm einfach die gesamte Größe der Platte und ziehe die Sektoren pro Spur davon ab: 6185088 - 63 = 6185025. Deine Partition ist:
d: 6185025 63 4.2BSD 1024 8192 16
Wenn dir das alles unnötig komplex erscheint, kannst du disklabel -E
benutzten, um den selben Patitionierungsmodus zu erhalten, den du auf
deiner Installationsdisk hattest!
Dort kannst du 96M benutzen, um 96 Megabytes anzugeben (oder, wenn
deine Festplatte groß genug ist, 96G für 96 Gigabytes!).
Unglücklicherweise benutzt der Modus -E die BIOS-Plattengeometrie und
nicht die reale - oft sind die beiden nicht deckungsgleich. Um dieses
Problem zu umgehen, tippe »g d« für »geometry disk«. (Andere
Möglichkeiten sind »g b« für »Geometry BIOS« und »g u« für »geometry
user« oder einfach das, was das Label gesagt hat, bevor disklabel
irgendwelche Änderungen gemacht hat.)
Das war eine Menge. Aber du bist noch nicht fertig. Zuletzt musst du noch das Dateisystem auf der Festplatte mittels newfs(8) anlegen.
# newfs sd2a
Oder wie auch immer deine Festplatte nach dem OpenBSD-Plattennummerierungsschema heißen mag. (Siehe einfach in der Ausgabe von dmesg(8) nach, um zu sehen, wie die Platte von OpenBSD benannt wurde.)
Nun überleg dir, wohin du deine gerade neu geschaffene Partition mounten willst. Sagen wir einfach mal /u. Erzeuge zunächst erstmal /u. Dann mounte sie.
# mount /dev/sd2a /u
Zuletzt musst du sie noch zur /etc/fstab(5) hinzufügen.
/dev/sd2a /u ffs rw 1 1
Was aber, wenn du ein existierendes Verzeichnis wie zum Beispiel /usr/local auslagern willst? Mounte die neue Platte unter /mnt und benutze cpio -pdum, um /usr/local in das Verzeichnis /mnt zu kopieren. Passe die Datei /etc/fstab(5) so an, dass die /usr/local-Partition nun /dev/wd1a ist (deine frisch formatierte Partition). Beispiel:
/dev/sd2a /usr/local ffs rw 1 1
Starte in den Singleuser-Modus mit boot -s neu, verschiebe das existierende /usr/local nach /usr/local-backup (oder lösche es gleich, wenn du mutig bist) und lege ein leeres Verzeichnis namens /usr/local an. Starte dann das System neu und voila: Die Dateien sind da!
(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 zu swappen ist der einfachste und schnellste Weg, um zusätzlichen Swap zu bekommen. Die Datei darf aber nicht auf einem Dateisystem mit Softupdates liegen (was ja standardmäßig deaktiviert ist). Finde zunächst einmal heraus, wie viel Swap du momentan hast und wie viel du davon benutzt. Das geht mit dem Werkzeug swapctl(8) recht einfach. Zum Beispiel mit diesem Aufruf:
$ swapctl -l
Device 512-blocks Used Avail Capacity Priority
swap_device 65520 8 65512 0% 0
Das zeigt sowohl alle Geräte, die momentan für das Swappen benutzt werden, als auch ihre momentane Statistik an. Im obigen Beispiel gibt es nur ein Gerät namens swap_device. Das ist der vordefinierte Bereich auf der Platte, der für das Swappen benutzt wird (wird im Übrigen als Partition b bei Disklabels angezeigt). Wie du auch sehen kannst, wird das Gerät zurzeit nicht sonderlich belastet oder vielmehr benutzt. Aber für den Zweck dieses Dokumentes tun wir einfach so, als wenn noch weitere 32 MB benötigt werden würden.
Der erste Schritt, um eine Datei als Swapbereich zu nutzen, ist die Datei zu erzeugen. Am besten macht man das mit Hilfe von dd(1). Hier ist ein Beispiel, das die 32 M große Datei /var/swap erzeugt.
$ sudo dd if=/dev/zero of=/var/swap bs=1k count=32768
32768+0 records in
32768+0 records out
33554432 bytes transferred in 20 secs (1677721 bytes/sec)
Nachdem das erledigt ist, können wir jetzt das Swappen auf dieses Device richten. Benutze einfach das folgende Kommando, um das Swappen auf dieses Device zu lenken:
$ sudo chmod 600 /var/swap
$ sudo swapctl -a /var/swap
Jetzt müssen wir noch prüfen, ob sie auch korrekt zu unserer Liste der Swapdevices hinzugefügt wurde.
$ swapctl -l
Device 512-blocks Used Avail Capacity Priority
swap_device 65520 8 65512 0% 0
/var/swap 65536 0 65536 0% 0
Total 131056 8 131048 0%
Jetzt, da die Datei erzeugt wurde und in sie hinein geswappt wird, musst du noch eine Zeile in deine /etc/fstab hineinschreiben, so dass die Datei beim nächsten Booten auch benutzt wird. Wenn diese Zeile nicht hinzugefügt wird, wird dieses Swapdevice nicht konfiguriert.
$ cat /etc/fstab
/dev/wd0a / ffs rw 1 1
/var/swap /var/swap swap sw 0 0
Dies ist eine dauerhaftere Lösung, um mehr Swapbereich zu erhalten. Um in eine Datei zu swappen, erzeuge zunächst einen Kernel mit vnd0c als Swap. Wenn du wd0a als root-Dateisystem hast und wd0b als bisherigen Swap, benutze diese Zeile in deiner Kernelkonfigurationsdatei (wenn du dir nicht sicher bist, siehe dir das Kapitel »Einen neuen Kernel kompilieren« in dieser FAQ an):
config bsd root on wd0a swap on wd0b and vnd0c dumps on wd0b
Nachdem das erledigt ist, muss die Datei erzeugt werden, in die geswappt werden soll. Du solltest dies mit dem selben Kommando wie in den vorherigen Beispielen machen.
$ sudo dd if=/dev/zero of=/var/swap bs=1k count=32768
32768+0 records in
32768+0 records out
33554432 bytes transferred in 20 secs (1677721 bytes/sec)
Da deine Datei jetzt an ihrem Platz ist, musst du die Datei in deine /etc/fstab eintragen. Hier ist eine Beispielzeile, mit der man dieses Device beim Booten als Swap benutzt.
$ cat /etc/fstab
/dev/wd0a / ffs rw 1 1
/dev/vnd0c none swap sw 0 0
An diesem Punkt angekommen musst du deinen Computer neustarten, sodass die Änderungen am Kernel Effekt haben. Nachdem das passiert ist, ist es an der Zeit, das Device als Swap zu konfigurieren. Dazu wirst du vnconfig(8) benutzen.
$ sudo vnconfig -c -v vnd0 /var/swap
vnd0: 33554432 bytes on /var/swap
Als letzten Schritt musst du den Swap auf diesem Gerät noch einschalten. Wir machen das genau wie in dem Beispiel oben mit swapctl(8). Und zuletzt prüfen wir wieder, ob es auch korrekt in unsere Liste der Swapdevices eingetragen wurde.
$ sudo swapctl -a /dev/vnd0c
$ swapctl -l
Device 512-blocks Used Avail Capacity Priority
swap_device 65520 8 65512 0% 0
/dev/vnd0c 65536 0 65536 0% 0
Total 131056 8 131048 0%
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.
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.
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.
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:
Using drive 0, partition 3. <- MBR
Loading.... <- PBR
probing: pc0 com0 com1 apm mem[636k 190M a20=on] <- /boot
disk: fd0 hd0+
>> OpenBSD/i386 BOOT 2.10
boot>
booting hd0a:/bsd 4464500+838332 [58+204240+181750]=0x56cfd0
entry point at 0x100120
[ using 386464 bytes of bsd ELF symbol table ]
Copyright (c) 1982, 1986, 1989, 1991, 1993 <- Kernel
The Regents of the University of California. All rights reserved.
Copyright (c) 1995-2007 OpenBSD. All rights reserved. http://www.OpenBSD.org
OpenBSD 4.2 (GENERIC) #375: Tue Aug 28 10:38:44 MDT 2007
deraadt@i386.openbsd.org:/usr/src/sys/arch/i386/compile/GENERIC
...
Du kannst den OpenBSD-MBR auf deine Festplatte unter Verwendung vom Programm fdisk installieren. Boote dein Installationsmedium und wähle Shell aus, um auf den Kommandoprompt zu gelangen:
# fdisk -u wd0
Du kannst auch einen bestimmten MBR auf deine Platte mit fdisk
schreiben:
# fdisk -u -f /usr/mdec/mbr wd0
Hiermit wird die Datei /usr/mdec/mbr als dein System-MBR
installiert. Diese bestimmte Datei einer standardmäßigen
OpenBSD-Installation ist ebenfalls der standardmäßige MBR, der in
fdisk integriert wurde. Es könnte aber jeder andere MBR hier angegeben
werden.
OpenBSD unterstützt ein individuelles Dateisystem von bis zu 231-1, oder 2,147,483,647 Sektoren und da jeder Sektor 512 Byte groß ist, ist das etwas unterhalb von 1 T.
Es gibt auch eine 1-T-Begrenzung für die physikalische Größe der Platte obwohl es unter *einigen* Umständen möglich ist, dass es selbst bis zu 2 T keine Probleme gibt, wobei das nicht garantiert wird.
Selbstverständlich sind die Fähigkeit eines Dateisystems und die Fähigkeit einer bestimmten Hardware zwei unterschiedliche Dinge. Eine neue 250 G große IDE-Festplatte kann unter Umständen nicht mit älteren (vor >137G-Standard) Interfaces funktionieren und einige sehr alte SCSI-Adapter sind bekannt dafür, dass sie Probleme mit moderneren Laufwerken haben und einige alte BIOSe werden hängen, wenn sie einer modern bestückten Festplatte begegnen. Du musst die Fähigkeiten deiner Hardware respektieren.
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.
Aktuelle Versionen von OpenBSD (3.5 und später) verfügen über einen sehr robusten Bootloader, der mit den unterschiedlichen Plattengeometrien besser umgehen kann als der frühere Bootloader. Allerdings sind beide empfindlich gegenüber der Position von /boot auf der Festplatte. Falls du Änderungen durchführst, die boot(8) auf der Platte verschieben (tatsächlich oder nur eine neue I-Node), so wirst du dein System »beschädigen« - es wird nicht mehr hochfahren. Um den Bootblock zu reparieren, damit du wieder normal booten kannst, lege einfach eine Bootdiskette in dein Diskettenlaufwerk ein und gib am Bootprompt »b hd0a:/bsd« ein, um ihn zu zwingen, von der ersten Festplatte zu booten (und nicht von der Diskette). Deine Maschine sollte normal booten. Nun musst du den Firststage-Bootloader (biosboot(8)) basierend auf der neuen Position von /boot erneut installieren, indem du das Programm installboot(8) aufrufst.
In unserem Beispiel gehen wird davon aus, dass du von sd0 bootest (für IDE wäre es wd0 etc.).
# cd /usr/mdec; ./installboot /boot biosboot sd0
Wenn eine neuere Version des Bootblocks benötigt wird, wirst du diese selber kompilieren müssen. Und das geht so:
# cd /sys/arch/i386/stand/
# make && make install
# cd /usr/mdec; cp ./boot /boot
# ./installboot /boot biosboot sd0 (oder wie deine Festplatte auch immer heißen mag)
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.
Um sein Backup auf ein Band zu bringen, muss man wissen, wo die Dateisysteme gemountet sind. Das findet man mit dem mount(8)"-Kommando am Shellprompt heraus. Dabei sollte eine Ausgabe wie diese herauskommen:
# mount
/dev/sd0a on / type ffs (local)
/dev/sd0h on /usr type ffs (local)
In diesem Beispiel ist das root-Dateisystem (/) physikalisch auf sd0a - also auf der SCSI-Festplatte 0, Partition a. Das /usr-Dateisystem befindet sich auf sd0h - also SCSI-Festplatte 0, Partition h.
Ein weiteres Beispiel einer etwas größeren Mounttabelle könnte so aussehen:
# mount
/dev/sd0a on / type ffs (local)
/dev/sd0d on /var type ffs (local)
/dev/sd0e on /home type ffs (local)
/dev/sd0h on /usr type ffs (local)
In diesem fortgeschritteneren Beispiel befindet sich das root- (/) Dateisystem auf sd0a. Das /var-Dateisystem befindet sich auf sd0d, das /home-Dateisystem auf sd0e und schlussendlich /usr auf sd0h.
Um ein Backup deiner Maschine zu machen, musst du dump mit jeder festgelegten Partition füttern. Hier ist ein Beispiel der Kommandos, um die einfachere Mounttabelle weiter oben zu sichern:
# /sbin/dump -0au -f /dev/nrst0 /dev/rsd0a
# /sbin/dump -0au -f /dev/nrst0 /dev/rsd0h
# mt -f /dev/rst0 rewind
Für die etwas fortgeschrittenere Mounttabelle würde man etwas wie das hier benutzen:
# /sbin/dump -0au -f /dev/nrst0 /dev/rsd0a
# /sbin/dump -0au -f /dev/nrst0 /dev/rsd0d
# /sbin/dump -0au -f /dev/nrst0 /dev/rsd0e
# /sbin/dump -0au -f /dev/nrst0 /dev/rsd0h
# mt -f /dev/rst0 rewind
Du kannst die dump(8)-Manualseite ansehen, um genau zu erfahren, was jede Kommandozeilenoption macht. Hier ist eine kurze Übersicht der Parameter, die oben verwendet wurden:
Zuletzt welche Partition gesichert werden soll (/dev/rsd0a usw.)
Das Kommando mt(1) wird am Ende benutzt, um das Band zurückzuspulen. Sieh dir die mt-Manualseite an, wenn du mehr Informationen haben willst (wie etwa eject).
Wenn du dir nicht sicher bist, wie dein Bandlaufwerk heißt, benutze einfach dmesg, um das herauzufinden. Ein Beispieleintrag von dmesg für ein Bandlaufwerk könnte so aussehen:
st0 at scsibus0 targ 5 lun 0: <ARCHIVE, Python 28388-XXX, 5.28>
Du hast vielleicht bemerkt, dass bei der Sicherung das Bandlaufwerk als nrst0 anstatt von st0 bezeichnet wird, wie man es in dmesg sieht. Wenn du auf st0 statt nrst0 zugreifst, benutzt du das selbe physikalische Gerät, sagst ihm aber, dass es nicht zurückspulen soll, nachdem der Job im raw-Modus beendet wurde. Um mehrere Dateien auf ein einziges Band zu sichern, stelle sicher, dass du nicht zurückspulst - sprich das richtige Gerät (rst0) benutzt - ansonsten wirst du mit der zweiten Sicherung die erste überschreiben usw. Du findest in der Manualseite zu dump eine ausführlichere Beschreibung.
Wenn du ein kleines Skript namens backup schreiben würdest, könnte es z. B. so aussehen:
echo " Starting Full Backup..."
/sbin/dump -0au -f /dev/nrst0 /dev/rsd0a
/sbin/dump -0au -f /dev/nrst0 /dev/rsd0d
/sbin/dump -0au -f /dev/nrst0 /dev/rsd0e
/sbin/dump -0au -f /dev/nrst0 /dev/rsd0h
echo
echo -n " Rewinding Drive, Please wait..."
mt -f /dev/rst0 rewind
echo "Done."
echo
Wenn regelmäßige nächtliche Backups gefordert sind, könnte man cron(8) benutzen, um das Backup jede Nacht automatisch zu starten.
Es ist außerdem hilfreich, auf einem Blatt Papier aufzuschreiben, wie groß jedes Dateisystem sein muss. Du kannst »df -h« benutzen, um herauszufinden, wie viel Platz jede Partition momentan verbraucht. Das ist dann nützlich, wenn eine Platte versagt und du die Partitionstabelle auf der neuen Platte wieder erstellen musst.
Deine Daten wiederherzustellen hilft außerdem noch gegen Fragmentierung. Der beste Weg, um sicherzustellen, dass du alle Dateien erwischst, ist es, im Singleuser-Modus zu booten. Dateisysteme müssen nicht gemountet werden, um gesichert zu werden. Vergiss aber nicht, root (/) zu mounten, denn sonst wird dein dump versagen, wenn er versucht, Dumpdaten zu schreiben. Gib einfach »bsd -s« am boot>-Prompt ein, um in den Singleuser-Modus zu gelangen.
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.
Das Beispielszenario wäre sinnvoll, wenn deine eigentliche Festplatte komplett ausgefallen wäre. Falls du aber nur eine einzige Datei wiederherstellen willst, sieh dir die restore-Manualseite genau an und achte besonders auf die Anweisungen für den interaktiven Modus.
Wenn du gut vorbereitet bist, kann der Prozess des Ersetzens einer Festplatte sehr schnell von statten gehen. Die normale OpenBSD-Installations/Bootdiskette enthält bereits das benötigte restore-Werkzeug genauso wie die ausführbaren Dateien, um neue Partitionen zu erstellen und deine Festplatte bootbar zu machen. In den meisten Fällen sind diese Disketten und dein Sicherungsband alles, was du brauchst, um wieder alles betriebsbereit zu bekommen.
Nachdem du das kaputte Laufwerk physikalisch ersetzt hast, sind die grundlegenden Schritte zur Wiederherstellung folgende:
Boote von der OpenBSD-Installations/Bootdiskette. Wähle Shell aus dem
Menü aus. Nimm dein neuestes und schreibgeschütztes Band und lege es in
dein Laufwerk ein.
Benutze das fdisk(8)-Kommando, um eine primäre OpenBSD-Partition auf dieser neu installierten Festplatte zu erzeugen. Beispiel:
# fdisk -e sd0
Sieh einfach in die fdisk-FAQ, um genaueres zu erfahren.
Mit dem disklabel-Kommando stellst du dann deine OpenBSD-Partitionstabelle in der primären OpenBSD-Partition wieder her, die du gerade mit fdisk erzeugt hast. Beispiel:
# disklabel -E sd0
(Vergiss den Swap nicht; siehe dazu die disklabel-FAQ für weitere Informationen)
Benutze das newfs-Kommando, um ein neues sauberes Dateisystem auf jeder Partition zu erstellen, die du mit den oben aufgeführten Schritten erstellt hast. Beispiel:
# newfs /dev/rsd0a
# newfs /dev/rsd0h
Mounte dein neu vorbereitetes root- (/) Dateisystem auf /mnt. Beispiel:
# mount /dev/sd0a /mnt
Wechsel in das gemountete root-Dateisystem und beginne mit dem Wiederherstellungsprozess. Beispiel:
# cd /mnt
# restore -rs 1 -f /dev/rst0
Wenn die Platte bootbar sein soll, schreibe mit dem folgenden Befehl einen neuen MBR auf deine Festplatte. Beispiel:
# fdisk -i sd0
Zusätzlich zum Schreiben eines neuen MBR musst du Bootblöcke installieren, um von ihr booten zu können. Das Folgende ist ein kurzes Beispiel:
# cp /usr/mdec/boot /mnt/boot
# /usr/mdec/installboot -v /mnt/boot /usr/mdec/biosboot sd0
Dein neues root-Dateisystem auf der eingebauten Festplatte sollte jetzt fertig sein, sodass du davon booten und damit beginnen kannst, den Rest der Dateien wiederherzustellen. Da dein Betriebssystem noch nicht komplett ist, solltest du alles im Singleuser-Modus wiederherstellen. Benutze die folgenden Kommandos am Shellprompt, um deine Festplatten zu unmounten und das System anzuhalten:
# umount /mnt
# halt
Entferne die Installations/Bootdiskette aus dem Laufwerk und starte dein System neu. Benutze das folgende Kommando am OpenBSD-boot>-Prompt:
boot> bsd -s
Das bsd -s führt dazu, dass der Kernel im Singleuser-Modus gestartet wird, der nur ein root- (/) Dateisystem braucht.
Unter der Annahme, dass du die obigen Schritte richtig ausgeführt hast und nichts schief gegangen ist, solltest du von einem Prompt begrüßt werden, der dich nach einem Pfad zu einer Shell fragt, oder du Return drücken sollst. Drücke Return, um die sh zu benutzen. Als nächstes willst du sicherlich root im Lese/Schreibmodus (rw) remounten und nicht mehr im schreibgeschützten Modus benutzen (ro). Dazu benutze Folgendes:
# mount -u -w /
Sobald du im Lese/Schreibmodus remountet hast kannst du fortfahren, deine restlichen Dateisysteme wiederherzustellen. Beispiel:
(einfache Mounttabelle)
# mount /dev/sd0h /usr; cd /usr; restore -rs 2 -f /dev/rst0
(umfassendere Mounttabelle)
# mount /dev/sd0d /var; cd /var; restore -rs 2 -f /dev/rst0
# mount /dev/sd0e /home; cd /home; restore -rs 3 -f /dev/rst0
# mount /dev/sd0h /usr; cd /usr; restore -rs 4 -f /dev/rst0
Benutze »restore rvsf« statt eines einfachen rsf, um die Namen von Objekten zu sehen, während sie vom dump-Set ausgepackt werden.
Nachdem du jetzt auch alle Dateien der anderen Dateisysteme wiederhergestellt hast, führe einen Neustart in den Multiuser-Modus durch. Wenn alles geklappt hat, sollte dein System wieder genau so sein, wie zum Zeitpunkt deiner letzten Sicherung, und bereit, wieder eingesetzt zu werden.
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.
DMA-IDE-Übertragungen, die durch pciide(4) unterstützt werden, sind unzuverlässig. Bis vor kurzem wurden die meisten Mainstreambetriebssysteme, die behaupteten, dass sie DMA-Übertragungen mit IDE-Laufwerken unterstützen, nicht mit standardmäßig aktivierter Unterstützung wegen unzuverlässiger Hardware ausgeliefert. Nun werden viele dieser gleichen Maschinen mit OpenBSD verwendet.
OpenBSD ist aggressiv und versucht, den höchsten DMA-Modus zu benutzen, den es konfigurieren kann. Dies führt in einigen Konfigurationen zu Datenkorruptionen aufgrund von defekten Motherboardchipsets, fehlerhaften Treibern, die Probleme verursachen und/oder Lärm auf den Kabeln. Glücklicherweise schützt Ultra-DMA die Datenübertragungen mit einem CRC, um Korruptionen zu entdecken. Falls ein Fehler bei einem solchen Ultra-DMA CRC geschieht, wird OpenBSD eine Fehlermeldung ausgeben und erneut versuchen, die Daten zu übertragen.
wd2a: aborted command, interface CRC error reading fsbn 64 of 64-79
(wd2 bn 127; cn 0 tn 2 sn 1), retrying
Nach ein paar Fehlversuchen wird OpenBSD zu einem langsameren (und damit hoffentlich zuverlässigeren) DMA-Modus herunterschalten. Nach den Ultra-DMA-Modi wird dann zu einem PIO-Modus heruntergeschaltet.
UDMA-Fehler werden meistens durch minderwertige oder beschädigte Kabel verursacht. Kabelprobleme sollten normalerweise zuerst in Betracht gezogen werden, wenn du viele DMA-Fehler oder unerwartet niedrige DMA-Leistung erhältst. Es ist ebenfals eine schlechte Idee, das CD-ROM an den gleichen Kanal wie die Festplatte zu stecken.
Wenn das Ersetzen der Kabel nicht zur Lösung des Problems führt und OpenBSD nicht erfolgreich herunterschaltet oder der Prozess zu einem Einfrieren deiner Maschine führt, möchtest du vielleicht dein System auf einen niedrigeren DMA- oder UDMA-Level standardmäßig begrenzen. Dies kann unter Verwendung von UKC oder config(8) realisiert werden, indem man die Optionen des wd(4)-Devices ändert.
Die root-Partition kann direkt von OpenBSD unter Verwendung der Option Autoconfiguration von RAIDframe gespiegelt werden.
OpenBSD 3.7-stable und neuer beinhaltet ebenfalls Mirroring als Funktionalität des ccd(4)-Treibers. Dieses System wurde in den GENERIC-Kernel integriert und befindet sich im bsd.rd-Kernel einiger Plattformen (amd64, hppa, hppa64, i386), so dass es viel einfacher genutzt werden kann, obwohl es einige Begrenzungen im Bezug auf das Neuerzeugen des Arrays hat. Siehe:
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.)Eine häufig gestellte Frage in den Mailinglisten ist »Werden die kostengünstigen IDE- oder SATA-RAID-Controller (wie zum Beispiel jene, die die Highpoint-, Promise- oder Adaptec-HostRAID-Chips benutzen) unterstützt?« Die Antwort ist »Nein«. Diese Karten und Chips sind nicht echte Hardware-RAID-Controller sondern eher BIOS-assistierte Bots für ein Software-RAID. Da OpenBSD bereits Software-RAID auf eine hardwareunabhängige Art und Weise unterstützt, besteht kein großes Verlangen bei den OpenBSD-Entwicklern, diese spezielle Unterstützung für diese Karten zu implementieren.
Fast alle Onboard-SATA- oder -IDE-»RAID«-Controller sind von diesem softwarebasierten Stil und funktionieren normalerweise einwandfrei als SATA- oder IDE-Controller unter Verwendung des standardmäßigen IDE-Treibers (pciide(4)). Sie werden aber nicht als Hardware-RAID-System unter OpenBSD funktionieren.
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.
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.
Wir werden hier einen allgemeinen Überblick darüber geben, wie man eines dieser Dateisysteme unter OpenBSD verwendet. Um in der Lage zu sein, ein Dateisystem zu benutzen, muss es gemountet sein. Für Details und Optionen für mount, konsultiere bitte die Manualseite zu mount(8) und die Manualseite zum mount-Kommando für das Dateisystem, das du mounten möchtest, z. B. mount_msdos, mount_ext2fs, ...
Zu aller erst musst du wissen, auf welchem Device sich dein Dateisystem befindet. Vielleicht einfach deine erste Festplatte (wd0 oder sd0), es könnte aber auch weniger offensichtlich sein. Alle erkannten und konfigurierten Devices deines Systems werden in der Ausgabe vom Kommando dmesg(1) aufgeführt: ein Devicename, gefolgt von einer einzeiligen Beschreibung des Devices. Mein erstes CD-ROM-Laufwerk wird beispielsweise wie folgt erkannt:
cd0 at scsibus0 targ 0 lun 0: <COMPAQ, DVD-ROM LTD163, GQH3> SCSI0 5/cdrom removable
Du kannst sysctl(8) verwenden, um eine viel kürzere Liste der verfügbaren Platten zu erhalten. Das Kommando
# sysctl hw.disknames
wird alle Platten anzeigen, die deinem System momentan bekannt sind,
z. B.:
hw.disknames=cd0,cd1,wd0,fd0,cd2
An diesem Punkt angekommen ist es Zeit dafür, herauszufinden, welche Partitionen sich auf dem Device befinden, und auf welcher Partition das gewünschte Dateisystem liegt. Daher untersuchen wir das Device mit disklabel(8). Das Disklabel beinhaltet eine Liste, die aus maximal 16 Partitionen besteht. Partition c steht immer für das gesamte Device. Partitionen a - b und d - p werden von OpenBSD genutzt. Partitionen i - p können automatisch für Dateisysteme anderer Betriebssysteme allokiert werden. In diesem Fall werde ich mir das Disklabel meiner Festplatte betrachten, welches eine Anzahl verschiedener Dateisysteme beinhaltet.
HINWEIS: OpenBSD wurde nach allen anderen Betriebssystemen installiert und während der Installation wurde ein Disklabel erstellt, das alle Partitionen der nativen als auch der anderen Dateisysteme enthält, die sich auf der Platte befanden. Wenn du jedoch andere Dateisysteme installiert nachdem das OpenBSD-Disklabel bereits auf der Platte installiert wurde, musst du sie nachträglich manuell hinzufügen oder ändern. Dies wird in diesem Unterkapitel behandelt.
# disklabel wd0
# using MBR partition 2: type A6 off 20338290 (0x1365672) size 29318625 (0x1bf5de1)
# /dev/rwd0c:
type: ESDI
disk: ESDI/IDE disk
label: ST340016A
flags:
bytes/sector: 512
sectors/track: 63
tracks/cylinder: 16
sectors/cylinder: 1008
cylinders: 16383
total sectors: 78165360
rpm: 3600
interleave: 1
trackskew: 0
cylinderskew: 0
headswitch: 0 # microseconds
track-to-track seek: 0 # microseconds
drivedata: 0
16 partitions:
# size offset fstype [fsize bsize cpg]
a: 408366 20338290 4.2BSD 2048 16384 16 # Cyl 20176*- 20581
b: 1638000 20746656 swap # Cyl 20582 - 22206
c: 78165360 0 unused 0 0 # Cyl 0 - 77544
d: 4194288 22384656 4.2BSD 2048 16384 16 # Cyl 22207 - 26367
e: 409248 26578944 4.2BSD 2048 16384 16 # Cyl 26368 - 26773
f: 10486224 26988192 4.2BSD 2048 16384 16 # Cyl 26774 - 37176
g: 12182499 37474416 4.2BSD 2048 16384 16 # Cyl 37177 - 49262*
i: 64197 63 unknown # Cyl 0*- 63*
j: 20274030 64260 unknown # Cyl 63*- 20176*
k: 1975932 49656978 MSDOS # Cyl 49262*- 51223*
l: 3919797 51632973 unknown # Cyl 51223*- 55111*
m: 2939832 55552833 ext2fs # Cyl 55111*- 58028*
n: 5879727 58492728 ext2fs # Cyl 58028*- 63861*
o: 13783707 64372518 ext2fs # Cyl 63861*- 77535*
Wie du in dieser Ausgabe erkennen kannst, werden die OpenBSD-Partitionen zuerst aufgelistet. Nach diesen werden einige ext2-Partitionen und eine MSDOS-Partition aufgelistet, sowie ein paar unbekannte (unknown) Partitionen. Auf i386- und amd64-Systemen kannst du mehr über diese unter Verwendung des Werkzeugs fdisk(8) in Erfahrung bringen. Für den neugierigen Leser: Partition i ist eine Wartungspartition, die vom Hersteller erzeugt wurde, Partition j ist eine NTFS-Partition und Partition l ist eine Swappartition für Linux.
Sobald du herausgefunden hast, welche dieser Partitionen die ist, die du benutzen möchtest, kannst du den letzten Schritt durchführen: das Dateisystem, das sich auf dieser befindet, mounten. Die meisten Dateisysteme werden vom GENERIC-Kernel unterstützt: Wirf einfach einen Blick in die Kernelkonfigurationsdatei, die sich im Verzeichnis /usr/src/sys/arch/<arch>/conf befindet. Einige werden jedoch nicht unterstützt, z. B. ist die NTFS-Unterstützung experimentell und daher nicht im GENERIC. Wenn du eines der Dateisysteme nutzen möchtest, die nicht in GENERIC unterstützt werden, musst du einen angepassten Kernel erzeugen.
Wenn du die Informationen auf zuvor beschriebene Weise gesammelt hast, ist es nun an der Zeit, das Dateisystem zu mounten. Lass uns annehmen, dass ein Verzeichnis namens /mnt/otherfs existiert, welches wir als Mountpunkt nutzen werden, unter dem wir das gewünschte Dateisystem mounten werden. In diesem Beispiel werden wir das ext2-Dateisystem von Partition m mounten:
# mount -t ext2fs /dev/wd0m /mnt/otherfs
Wenn du vorhast, dieses Dateisystem regulär zu nutzen, kannst du etwas Zeit sparen, indem du eine Zeile in /etc/fstab schreibst; zum Beispiel etwas wie:
/dev/wd0m /mnt/otherfs ext2fs rw,noauto,nodev,nosuid 0 0
Beachte den Wert 0 im fünften und sechsten Feld. Diese bedeuten, dass
wir nicht möchten, dass die Dateisysteme mit dump gesichert oder unter
Verwendung von fsck überprüft werden. Generell gilt, dass du solche
Aufgaben eher mit dem dazugehörigem Betriebssystem machen möchtest.
Beispielsweise habe ich eine meiner bestehenden ext2fs-Partitionen geändert: Unter Verwendung von Linux' fdisk-Programm habe ich die Größe der o-Partition (siehe die Disklabelausgabe weiter oben) auf 1 G reduziert. Wir können dies leicht sehen, indem wir einen Blick auf die Startposition (Offset: 64372518) und die Größe (13783707) werfen. Beachte, dass diese Werte Sektornummern und dass die Verwendung von Sektornummern (nicht Megabyte oder ein anderes Maß) die exakteste Angabe ist und der sicherste Weg, um diese Informationen zu lesen.
Vor dem Ändern sah die Partition wie diese aus (Ausgabe von OpenBSDs fdisk(8)-Werkzeug [nur die wichtigen Informationen werden hier angegeben]):
# fdisk wd0
. . .
Offset: 64372455 Signature: 0xAA55
Starting Ending LBA Info:
#: id C H S - C H S [ start: size ]
------------------------------------------------------------------------
0: 83 4007 1 1 - 4864 254 63 [ 64372518: 13783707 ] Linux files*
. . .
Wie du sehen kannst sind die Startposition und die Größe genau so, wie
sie zuvor von disklabel(8) angegeben wurden. (Sei jetzt nicht wegen dem
Wert verwirrt, der als Offset angegeben wird: der Wert bezieht sich auf
die Startposition der erweiterten Partition, in der sich die
ext2-Partition befindet.)
Nachdem die Partitionsgröße unter Linux geändert wurde, sieht sie wie folgt aus:
# fdisk wd0
. . .
Offset: 64372455 Signature: 0xAA55
Starting Ending LBA Info:
#: id C H S - C H S [ start: size ]
------------------------------------------------------------------------
0: 83 4007 1 1 - 4137 254 63 [ 64372518: 2104452 ] Linux files*
. . .
Dies muss nun unter Verwendung von disklabel(8) geändert werden.
Zum Beispiel kannst du disklabel -e wd0 aufrufen, womit du
einen Editor startest, der mit der Umgebungsvariable EDITOR (Standard
ist vi) angegeben wird. Ändere mit diesem Editor die Zeile des
Disklabels, um diese auf die neue Größe anzupassen:
o: 2104452 64372518 ext2fs
Schreibe das Disklabel auf die Platte, wenn du fertig bist. Nun, da das
Disklabel wieder aktuell ist, solltest du in der Lage sein, die
Partitionen wie oben beschrieben wieder mounten zu können.
Du kannst einen sehr ähnlichen Prozess ausführen, um neue Partitionen hinzuzufügen.
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.
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
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
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.
Wenn du GENERIC benutzt, ist ccd bereits eingeschaltet (in /usr/src/sys/conf/GENERIC). Wenn du einen veränderten Kernel benutzt, musst du ihn vielleicht wieder in deine Kernelkonfiguration einfügen. Wie auch immer, auf jeden Fall muss sich eine Zeile wie die folgende in deiner Konfigurationsdatei befinden:
pseudo-device ccd 4 # concatenated disk devices
Das obige Beispiel gibt dir bis zu 4 ccd-Devices (virtuelle Platten). Jetzt musst du festlegen, welche Partitionen auf deinen realen Festplatten du in den ccd einbinden willst. Benutze disklabel, um diese Partitionen als ccd-Typ zu markieren. Auf einigen Architekturen erlaubt dir disklabel das vielleicht nicht. In diesem Fall markiere sie einfach als FFS.
Wenn du ccd dazu benutzt, um mittels striping Leistung zu gewinnen, solltest du wissen, dass du keine optimale Leistung bekommst, bis du das gleiche Festplattenmodell mit den gleichen Disklabeleinstellungen benutzt.
Editiere /etc/ccd.conf, bis sie etwa so aussieht: (Mehr Informationen über das Konfigurieren von ccd findest du unter ccdconfig(8))
# Configuration file for concatenated disk devices
#
# ccd ileave flags component devices
ccd0 16 none /dev/sd2e /dev/sd3e
Um die Änderungen wirksam zu machen, führe das hier aus:
# ccdconfig -C
Solange /etc/ccd.conf existiert, wird sich ccd automatisch beim Booten konfigurieren. Jetzt hast du eine neue Festplatte (ccd0): eine Kombination von /dev/sd2e und /dev/sd3e. Benutze disklabel einfach wie gewöhnlich, um die Partition oder Partitionen zu erzeugen, die du benutzen willst. Nutze erneut die Partition c nicht, um darauf irgendetwas zu speichern. Stelle sicher, dass deine benutzten Partitionen mindestens einen Zylinder vom Anfang der Disk weg ist.
Für raid muss - wie auch bei ccd - Unterstützung im KERNEL sein. Diese Treiberunterstützung für RAID ist im Gegensatz zu ccd allerdings nicht im GENERIC-Kernel enthalten; sie muss also extra in deinen Kernel einkompiliert werden (RAID-Unterstützung vergrößert deinen i386-Kernel um gute 500k).
pseudo-device raid 4 # RAIDframe disk device
Lies die raid(4)- und raidctl(8)-Manualseiten für die kompletten Details. Es gibt dafür viele Optionen und mögliche Konfigurationen, und ein detaillierter Überblick sprengt den Rahmen dieses Dokumentes.
Frage: »Ich gebe einfach ein ,mount -u -o async /' ein, was ein Paket, welches ich brauche, benutzbar macht (das darauf besteht alle paar Momente ein paar hundert Dateien zu ändern). Wieso wird asynchrones Mounting abgelehnt und ist nicht standardmäßig aktiviert (wie in manchen anderen Unixen)? Wäre das nicht ein einfacherer und daher auch ein sichererer Weg, die Leistung mancher Applikation zu erhöhen?«
Antwort: »Asynchrone Mounts sind tatsächlich schneller als synchrone
Mounts - aber auch unsicherer. Was passiert im Falle eines
Stromausfalls - oder bei einem Hardwareproblem? Die Suche nach
Geschwindigkeit darf nicht auf Kosten der Stabilität und Zuverlässigkeit
des Systems gehen. Siehe auch die Manualseite von
mount(8).«
async All I/O to the file system should be done asynchronously.
This is a dangerous flag to set since it does not guaran-
tee to keep a consistent file system structure on the
disk. You should not use this flag unless you are pre-
pared to recreate the file system should your system
crash. The most common use of this flag is to speed up
restore(8) where it can give a factor of two speed in-
crease.
Auf der anderen Seite kannst du mehr Geschwindigkeit erhalten, wenn du sowieso nur mit temporären Daten umgehst, die du nach einem Crash wieder rekonstruieren kannst, indem du eine separate Partition nur für diese Daten benutzt, die asynchron gemountet ist. Tue das aber nur, wenn dir der Verlust aller Daten in der Partition nach irgendeinem Problem nichts ausmacht. Daher sind mfs(8)-Partitionen asynchron gemountet, weil sie ja nach jedem Neustart sowieso gelöscht und neu erzeugt werden.
[FAQ-Index] [Zum Kapitel 13 - Multimedia] [Zum Kapitel 15 - Packages und Ports]