[FAQ Index] [Naar Sectie 13 - Multimedia] [Naar Sectie 15 - Packages en Ports]
Lees zeker eerst de disklabel(8) man pagina.
De details van het instellen van schijven in OpenBSD varieert enigszins tussen platformen. Voor i386, amd64, macppc, zaurus, en armish gebeurt de schijfinstelling in twee stadia. Eerst wordt de OpenBSD "slice" van de harde schijf gedefinieerd met fdisk(8), vervolgens wordt die slice onderverdeeld in OpenBSD partities met disklabel(8).
Alle OpenBSD platformen gebruiken echter disklabel(8) als de primaire manier om OpenBSD partities te beheren. Platformen die ook fdisk(8) gebruiken, plaatsen al de disklabel(8) partities in één enkele fdisk partitie.
Labels bevatten bepaalde informatie over uw schijf, zoals uw schijfgeometrie en informatie over de bestandssystemen op de schijf. Ze bevatten ook informatie over uw schijf zelf, zoals de draaisnelheid, "interleave", enz., die er om historische redenen in zit, en vaak onjuist is. Maak u hierover geen zorgen. De disklabel wordt vervolgens gebruikt door het bootstrap-programma om toegang te krijgen tot de schijf en om te weten waar bestandssystemen zich op de schijf bevinden. U kan meer gedetailleerde informatie over disklabel lezen in de disklabel(5) man pagina.
Op sommige platformen helpt disklabel architectuurbeperkingen qua schijfpartitionering te overwinnen. Op i386 bijvoorbeeld, kan u slechts 4 primaire partities hebben, maar met disklabel(8) gebruikt u één van deze 'primary' partities om *al* uw OpenBSD partities (bv. 'swap', '/', '/usr' en '/var', enz.) in te bewaren. En dan hebt u nog 3 partities over, beschikbaar voor andere besturingssystemen.
Een van de grote onderdelen van de OpenBSD installatie is het initieel aanmaken van labels. Tijdens de installatie gebruikt u disklabel(8) om uw afzonderlijke partities aan te maken. Als onderdeel van het installatieproces kan u uw "mount points" definiëren vanuit disklabel(8), maar u kan deze later ook wijzigen nog tijdens of na de installatie.
Er is niet één "juiste" manier om een schijf te labelen, maar er zijn veel foute manieren. Alvorens te proberen uw schijf te labelen, zie deze discussie over partitioneren en partitiegroottes.
Voor een voorbeeld van het gebruik van disklabel(8) tijdens de installatie, zie het Schijven instellen onderdeel van de Installatiegids.
Na de installatie zal één van de meest voorkomende redenen om disklabel(8) te gebruiken zijn: bekijken hoe uw schijf georganiseerd is. Het volgende commando zal u de huidige disklabel tonen, zonder hem te wijzigen:
# disklabel wd0 <-- Of welke schijf device u graag zou bekijken
# 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
Merk op hoe bij deze schijf momenteel slechts een deel van de capaciteit is toegekend. Disklabel biedt twee verschillende modi om de disklabel aan te passen: een ingebouwde commandogestuurde editor (dit is hoe u OpenBSD oorspronkelijk installeerde), en een volwaardige editor zoals vi(1). U zal misschien de commandogestuurde editor "gemakkelijker" vinden, aangezien hij u doorheen alle stappen gidst en op verzoek hulp biedt, maar de volwaardige editor heeft zeker ook nut.
Laten we aan het bovenstaande systeem een partitie toevoegen.
Waarchuwing: Wanneer u aan uw disklabel begint te peuteren, brengt u alle gegevens op uw schijf in gevaar. Zorg ervoor dat uw gegevens gebackupt zijn alvorens een bestaande disklabel te wijzigen!
We zullen de ingebouwde commandogestuurde editor gebruiken, die aangeroepen wordt met de "-E" optie van disklabel(8).
# 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 dit geval was disklabel(8) vriendelijk genoeg om een goede start "offset"
te berekenen voor de partitie.
In veel gevallen zal het dit kunnen doen, maar als u "gaten" hebt in de
disklabel (dus u hebt een partitie verwijderd, of u houdt er gewoon van om
uw leven ellendig te maken) kan het gebeuren dat u met pen en papier de
juiste offset moet berekenen.
Merk op dat hoewel disklabel(8) een beetje gezondheidscontrole uitvoert,
het heel goed mogelijk is om hier heel verkeerde dingen te doen.
Wees voorzichtig, begrijp de betekenis van de getallen die u ingeeft.
Op de meeste OpenBSD platformen zijn er zestien disklabel-partities beschikbaar, aangeduid van "a" tot "p". (bepaalde "speciale" systemen kunnen er slechts acht hebben). Elke disklabel zou een 'c' partitie moeten hebben, met een "fstype" van "unused", die de gehele fysische schijf bedekt. Als uw disklabel er niet zo uitziet, moet hij hersteld worden, de "D" optie (zie hieronder) kan helpen. Probeer nooit de "c" partitie te gebruiken voor iets anders dan toegang te krijgen tot de "raw" sectoren van de schijf, probeer niet om een bestandssysteem aan te maken op "c". Op de boot device wordt "a" gereserveerd voor de rootpartitie, en is "b" de swappartitie, maar alleen de boot device maakt dit onderscheid. Andere devices kunnen alle vijftien partities behalve "c" gebruiken voor bestandssystemen.
fdisk(8) wordt op sommige platformen (i386, amd64, macppc, zaurus en armish) gebruikt om een partitie aan te maken die herkend wordt door de boot ROM van het systeem, en waarin de OpenBSD disklabel partities geplaatst kunnen worden. Andere platformen hebben fdisk(8) niet nodig en gebruiken het niet. fdisk(8) kan ook gebruikt worden voor het manipuleren van de Master Boot Record (MBR), en dat kan een impact hebben voor alle besturingssystemen op een computer. In tegenstelling tot de fdisk-achtige programma's op sommige andere besturingssytemen, veronderstelt OpenBSD's fdisk dat u weet wat u wil doen. Voor het overgrote deel zal het u laten doen wat u moet doen, en dit maakt het een krachtig hulpmiddel om bij de hand te hebben. Het zal u ook dingen laten doen die u beter niet doet of waarvan het niet de bedoeling was dat u ze deed, dus het moet voorzichtig gebruikt worden.
Normaal zal er slechts één OpenBSD fdisk partitie op een schijf geplaatst worden. Die partitie zal dan door disklabel onderverdeeld worden in OpenBSD bestandssysteempartities.
Om gewoon uw partitietabel te bekijken met fdisk, gebruikt u:
# fdisk sd0
Dat zal een uitvoer gelijkaardig aan deze geven:
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 dit voorbeeld bekijken we de fdisk uitvoer van de eerste SCSI schijf. We kunnen de OpenBSD partitie (A6) en haar grootte zien. De * vertelt ons dat de OpenBSD partitie een bootable partitie is.
In het voorgaande voorbeeld bekeken we alleen onze informatie. Wat als we onze partietabel willen bewerken? Wel, om dat te doen moeten we de -e vlag gebruiken. Dit zal een commandoregel prompt tevoorschijn brengen om met fdisk te interageren.
# 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 is een overzicht van de commando's die u kan gebruiken wanneer u de -e vlag kiest.
Zodra u uw schijf JUIST geïnstalleerd krijgt, moet u fdisk(8) (alleen i386) en disklabel(8) gebruiken om uw schijf in te stellen in OpenBSD.
Voor i386 mensen, begin met fdisk. Andere architecturen kunnen dit negeren. In het onderstaande voorbeeld voegen we een derde SCSI schijf toe aan het systeem.
# fdisk -i sd2
Dit zal de "echte" partitietabel van de schijf initialiseren voor exclusief
gebruik door OpenBSD.
Vervolgens moet u er een disklabel voor aanmaken. Dit zal verwarrend lijken.
# disklabel -e sd2
(scherm wordt leeg, uw $EDITOR verschijnt)
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)
Ten eerste, negeer de 'c' partitie, die is er altijd en dient om programma's
als disklabel te laten functioneren!
Fstype voor OpenBSD is 4.2BSD.
Total sectors is de totale grootte van de schijf. Stel dat dit
een 3 gigabyte schijf is. Drie gigabytes betekent in schijffabrikant-termen
3000 megabytes. Deel dus 6185088/3000 (gebruik
bc(1)).
U bekomt 2061. Om dus partitiegroottes te verzinnen voor a, d, e, f, g, ...
vermenigvuldigt u gewoon X*2061 om X megabytes ruimte te krijgen op die
partitie.
De offset voor uw eerste nieuwe partitie moet hetzelfde zijn als de
"sectors/track" eerder vermeld in de uitvoer van disklabel. Voor ons is dit
63. De offset voor elke volgende partitie moet een combinatie zijn van de
grootte van elke partiite en de offset van elke partitie (Behalve de 'c'
partitie, aangezien die geen rol speelt in deze vergelijking.)
Of, als u gewoon één partitie op de schijf wil, stel dat u het hele ding voor webruimte of een home directory of zoiets wil gebruiken, neem dan gewoon de totale grootte van de schijf en trek het aantal sectoren per track ervan af. 6185088-63 = 6185025. Uw partitie is
d: 6185025 63 4.2BSD 1024 8192 16
>
Als dit allemaal nodeloos complex lijkt, kan u gewoon disklabel -E gebruiken
om dezelfde paritioneringsmodus te krijgen die u op uw installatieschijf heeft
verkregen!
Daar kan u gewoon "96M" gebruiken om "96 megabytes" te specificeren. (Of, als
u een voldoende grote schijf hebt, 96G voor 96 gigs!) Jammer genoeg gebruikt
de -E modus de BIOS schijfgeometrie, niet de werkelijke schijfgeometrie, en vaak
zijn die twee niet hetzelfde. Om over deze beperking heen te geraken, typt u
'g d' voor 'geometry disk'. (Andere opties zijn 'g b' voor 'geometry bios'
en 'g u' voor 'geometry user', of gewoon wat het label zei voordat disklabel
veranderingen aanbracht.)
Dat was veel. Maar u bent nog niet klaar. Tenslotte moet u een bestandssysteem aanmaken op die schijf met newfs(8).
# newfs sd2a
Of hoe uw schijf ook werd genoemd door OpenBSD's schijfnummeringsschema. (Kijk naar de uitvoer van dmesg(8) om te zien hoe uw schijf genoemd werd door OpenBSD.)
Zoek nu uit waar u deze nieuwe partitie die u net gemaakt hebt, gaat mounten. Stel dat u ze op /u wil plaatsen. Maak eerst de directory /u. Mount ze vervolgens.
# mount /dev/sd2a /u
Voeg dit tenslotte toe aan /etc/fstab(5).
/dev/sd2a /u ffs rw 1 1
Wat als u een bestaande directory zoals /usr/local moet migreren? U kan best de nieuwe schijf in /mnt mounten en cpio -pdum gebruiken om de /usr/local naar de /mnt directory te kopiëren. Bewerk het /etc/fstab(5) bestand om aan te geven dat de /usr/local partitie nu /dev/sd2a is (uw vers geformatteerde partitie.) Voorbeeld:
/dev/sd2a /usr/local ffs rw 1 1
Herstart in single user modus met boot -s, verplaats de bestaande /usr/local naar /usr/local-backup (of verwijder het als het vandaag uw geluksdag is) en maak een lege directory /usr/local aan. Herstart vervolgens het systeem, en voila, de bestanden zijn er!
(Opmerking: als u naar een bestand wil swappen omdat u "virtual memory exhausted" fouten krijgt, kan u best eerst de per-proces limieten proberen te verhogen met csh's unlimit(1), of sh's ulimit(1).)
Swappen naar een bestand vereist geen aangepaste kernel, hoewel dat nog steeds gedaan kan worden, zal deze faq u tonen hoe u swapruimte toevoegt op beide manieren.
Swappen naar een bestand is de gemakkelijkste en snelste manier om extra swapruimte in te stellen. Het bestand mag niet op een bestandssysteem staan dat SoftUpdates ingeschakeld heeft (dit is standaard uitgeschakeld). Om te beginnen kan u zien hoeveel swap u momenteel hebt en hoeveel u gebruikt met de swapctl(8) utility. U kan dit doen met het commando:
$ swapctl -l
Device 512-blocks Used Avail Capacity Priority
swap_device 65520 8 65512 0% 0
Dit toont de devices die momenteel gebruikt worden om te swappen en hun huidige statistieken. In het bovenstaande voorbeeld is er slechts één device, met name "swap_device". Dit is het voorgedefinieerde gebied op de schijf dat gebruikt wordt om te swappen. (Verschijnt als partitie b bij het bekijken van disklabels.) Zoals u ook kan zien in het bovenstaande voorbeeld, wordt dat device momenteel niet veel gebruikt. Maar voor de bedoeling van dit document, zullen we doen alsof er 32M extra benodigd is.
De eerste stap om een bestand als een swap device in te stellen, is om een bestand aan te maken. Het beste is om dit te doen met de dd(1) utility. Hier is een voorbeeld van het aanmaken van het bestand /var/swap dat 32M groot is.
$ 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)
Zodra dit gebeurd is, kunnen we swappen naar dat device aanzetten. Gebruik het volgende commando om het swappen naar dit device aan te zetten
$ sudo chmod 600 /var/swap
$ sudo swapctl -a /var/swap
Nu moeten we controleren om te zien of het juist werd toegevoegd aan de lijst van onze swap devices.
$ 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%
Nu het bestand is ingesteld en het swappen gebeurt, moet u een lijn toevoegen aan uw /etc/fstab bestand zodat dit bestand geconfigureerd wordt ook de volgende keer als u start. Als deze lijn niet toegevoegd wordt, zal dit swap device niet geconfigureerd worden.
$ cat /etc/fstab
/dev/wd0a / ffs rw 1 1
/var/swap /var/swap swap sw 0 0
Dit is een meer permanente oplossing om meer swapruimte toe te voegen. Om permanent naar een bestand te swappen, maakt u eerst een kernel met vnd0c als swap. Als u wd0a als root bestandssysteem hebt, is wd0b de vorige swap, gebruik deze lijn in het kernelconfiguratiebestand (raadpleeg het compileren van een nieuwe kernel indien u twijfelt):
config bsd root on wd0a swap on wd0b and vnd0c dumps on wd0b
Nadat dit gebeurd is, moet het bestand dat zal gebruikt worden om te swappen, aangemaakt worden. U doet dit best door hetzelfde commando te gebruiken als in de bovenstaande voorbeelden.
$ 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)
Nu uw bestand op zijn plaats staat, moet u het bestand toevoegen aan uw /etc/fstab. Hier is een voorbeeldlijn om met dit device als swap te starten bij het booten.
$ cat /etc/fstab
/dev/wd0a / ffs rw 1 1
/dev/vnd0c none swap sw 0 0
Op dit punt moet uw computer herstart worden zodat de kernelveranderingen kunnen plaatsvinden. Zodra dit gebeurd is, is het tijd om het device als swap te configureren. Om dit te doen zal u vnconfig(8) gebruiken.
$ sudo vnconfig -c -v vnd0 /var/swap
vnd0: 33554432 bytes on /var/swap
En dan nu de laatste stap, het swappen naar dat device aanzetten. We zullen dit gewoon doen zoals in de bovenstaande voorbeelden, met swapctl(8). Daarna zullen we controleren om te zien of het juist werd toegevoegd aan onze lijst van swap devices.
$ 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%
Soft Updates is gebaseerd op een idee voorgesteld door Greg Ganger en Yale Patt en ontwikkeld voor FreeBSD door Kirk McKusick. SoftUpdates legt een gedeeltelijke schikking op aan de buffer cache operaties die toelaat de vereiste voor het synchroon schrijven van directory entries te verwijderen uit de FFS code. Dus, een grote performantiestijging wordt waargenomen in schijf-schrijfprestatie.
Soft updates inschakelen moet gedaan worden met een mount-optie. Bij het mounten van een partitie met de mount(8) utility, kan u specificeren dat u soft updates wenst in te schakelen op die partitie. Hieronder is een voorbeeld /etc/fstab(5) lijn die één partitie sd0a heeft die we graag zouden mounten met soft updates.
/dev/sd0a / ffs rw,softdep 1 1
Opmerking voor sparc gebruikers: Schakel soft updates niet in op sun4 of sun4c machines. Deze architecturen ondersteunen slechts een heel beperkte hoeveelheid kernelgeheugen en kunnen deze functionaliteit niet gebruiken. sun4m machines zijn echter wel goed.
Hoewel OpenBSD een MBR bevat, bent u niet verplicht om deze te gebruiken, aangezien praktisch gelijk welke MBR OpenBSD kan booten. De MBR wordt gemanipuleerd door het fdisk(8) programma, dat gebruikt wordt zowel om de partitietabel de bewerken, als om de MBR code op de schijf te installeren.
OpenBSD's MBR kondigt zichzelf aan met de boodschap:
Using drive 0, partition 3.
wat de schijf en de partitie toont waar het de PBR vandaan zal laden.
Bovenop het vanzelfsprekende, toont dit ook een punt (".") achteraan, wat
aangeeft dat de machine LBA vertaling kan gebruiken om te booten.
Als de machine geen LBA translatie kon gebruiken, zou het bovenstaande
punt vervangen geweest zijn door een kommapunt (";"), dat CHS vertaling
aangeeft:
Using Drive 0, Partition 3;
Merk op dat het punt of kommapunt achteraan gebruikt kan worden als een
indicator van de "nieuwe" OpenBSD MBR, geïntroduceerd in OpenBSD 3.5.
De PBR wordt geïnstalleerd door installboot, dat verder in dit document nader beschreven wordt. De PBR kondigt zichzelf aan met de boodschap:
Loading...
en geeft daarbij een punt weer voor elk bestandssysteem-blok dat het probeert
te laden.
Ook hier, de PBR toont of hij LBA of CHS gebruikt om te laden, als hij CHS
vertaling moet gebruiken, toont hij een boodschap met een kommapunt:
Loading;...
De oudere (pre v3.5) biosboot(8) vertoonde de boodschap "reading
boot...".
boot(8) is een interactief programma. Nadat het laadt, probeert het /etc/boot.conf te localiseren en te lezen, indien het bestaat (dit is niet het geval op een standaardinstallatie), en verwerkt de commando's daarin. Tenzij anders opgelegd door /etc/boot.conf, geeft het vervolgens een prompt aan de gebruiker:
probing: pc0 com0 com1 apm mem[636k 190M a20=on]
disk: fd0 hd0+
>> OpenBSD/i386 BOOT 2.10
boot>
Het geeft de gebruiker (standaard) vijf seconden om het andere taken te
geven, maar als er geen gegeven worden voor de timeout, begint het zijn
standaardgedrag: de kernel, bsd, inladen vanaf de root partitie
van de eerste harde schijf.
De second-stage boot loader onderzoekt uw systeem hardware via de BIOS
(aangezien de OpenBSD kernel niet geladen is).
Hierboven kan u enkele dingen zien die het gezocht en gevonden heeft:
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
...
U kan de OpenBSD MBR op uw schijf installeren met het fdisk programma. Boot vanaf uw installatiemedium, kies "Shell" om een commandoprompt te krijgen:
# fdisk -u wd0
U kan met fdisk ook een specieke MBR naar de schijf schrijven:
# fdisk -u -f /usr/mdec/mbr wd0
dit zal het bestand /usr/mdec/mbr installeren als MBR van uw systeem.
Dit welbepaald bestand is op een standaard OpenBSD installatie toevallig de
standaard MBR die ook in fdisk ingebouwd zit, maar gelijk welke andere
MBR zou hier kunnen gespecificeerd worden.
OpenBSD ondersteunt een individueel bestandssysteem van maximaal 231-1, of 2,147,483,647 sectoren, en aangezien elke sector 512 bytes is, is dat een kleine hoeveelheid minder dan 1T.
Er is ook een 1T limiet op de grootte van de fysische schijf, hoewel dat onder *sommige* omstandigheden geen problemen zal veroorzaken tot 2T, dit is echter niet gegarandeerd.
Natuurlijk zijn de mogelijkheden van bestandssystemen en de mogelijkheden van bepaalde hardware twee verschillende dingen. Een nieuwe 250G harde schijf kan problemen hebben op oudere (pre >137G standaarden) interfaces, en bij sommige heel oude SCSI adapters werden problemen gezien met meer moderne schijven, en sommige oudere BIOSen zullen vasthangen wanneer ze een harde schijf met moderne grootte tegenkomen. U moet natuurlijk de mogelijkheden van uw hardware respecteren.
Om deze reden moet het volledige /bsd bestand (de kernel) op de schijf staan binnen de door het boot ROM adresseerbare gebied. Dit betekent dat op sommige oudere i386 systemen, de root partitie volledig binnen de eerste 504M moet vallen, maar nieuwere computers kunnen beperkingen van 2G, 8G, 32G, 128G of meer hebben. Het is de moeite waard om op te merken dat vele relatief nieuwe computers die schijven groter dan 128G ondersteunen, in feite BIOS beperkingen hebben waardoor ze enkel van binnen de eerste 128G kunnen booten. U kan deze systemen met grotere schijven gebruiken, maar uw root partitie moet binnen de eerste 128G vallen.
Merk op dat het mogelijk is om een 40G schijf op een oude 486 te installeren en OpenBSD er op te laden als één grote partitie, en te denken dat u met succes de bovenstaande regel overtreden hebt. Het kan u echter op de meest onaangename manier komen kwellen:
Waarom? Omdat wanneer u het nieuwe /bsd bestand "over" kopieerde, dit niet het oude overschreef, het werd een nieuwe locatie toegekend op de schijf, waarschijnlijk buiten het 504M bereik dat het BIOS ondersteunt. De boot loader kon het bestand /bsd niet opvragen, en het systeem hing vast.
Om OpenBSD te kunnen booten, moeten de boot loaders (biosboot(8) en /boot in het geval van i386) en de kernel (/bsd) binnen het door het BIOS ondersteunde bereik zitten, en binnen hun eigen mogelijkheden. Om op veilig te spelen, is de regel eenvoudig:
de volledige root partitie moet binnen de door het BIOS van de computer (of door het boot ROM) adresseerbare ruimte vallen.
Sommige niet-i386 gebruikers denken dat ze hier immuun voor zijn, maar de meeste platformen hebben een vorm van boot ROM beperking voor schijfgrootte. Helemaal zeker te weten komen wat die beperking is, kan echter moeilijk zijn.
Dit is nog een andere goede reden om uw schijf te partitioneren, veeleer dan één grote partitie te gebruiken.
Moderne versies van OpenBSD (3.5 en recenter) hebben een heel robuuste bootloader die veel onverschilliger is voor schijfgeometrie dan de oudere bootloader; ze zijn echter gevoelig aan waar het /boot bestand zich op de schijf bevindt. Als u iets doet waardoor boot(8) verplaatst wordt naar een nieuwe plek op de schijf (eigenlijk een nieuwe inode), dan zal u uw systeem "breken", het zal niet juist meer kunnen opstarten. Om uw boot block te herstellen zodat u normaal kan booten, plaatst u eerst een bootdiskette in uw diskettestation (of gebruik een bootable CD-ROM) en typ op de boot prompt "b hd0a:/bsd" om het te dwingen vanaf de eerste harde schijf (en niet vanaf de diskette) te booten. Uw machine zou zoals normaal moeten opstarten. Nu moet u de first-stage bootloader (biosboot(8)) herinstalleren op basis van de positie van het /boot bestand, met het installboot(8) programma.
Ons voorbeeld zal veronderstellen dat uw boot schijf sd0 is (maar voor IDE zou het wd0, enz. zijn):
# cd /usr/mdec; ./installboot /boot biosboot sd0
Als een nieuwere versie van bootblocks vereist is, zal u deze zelf moeten compileren. Hiervoor doet u eenvoudigweg:
# cd /sys/arch/i386/stand/
# make && make install
# cd /usr/mdec; cp ./boot /boot
# ./installboot /boot biosboot sd0 (of welk device uw harde schijf ook is)
Als u van plan bent om iets te draaien dat een productieserver zou kunnen genoemd worden, is het aan te raden om een vorm van backup te hebben voor het geval één van uw vaste schijven het begeeft.
Deze informatie zal u de standaard dump(8)/restore(8) utilities helpen gebruiken die voorzien zijn in OpenBSD. Een meer geavanceerde backup utility, "Amanda" genoemd, is ook beschikbaar via packages om meerdere servers naar één tape drive te backup'en. In de meeste omgevingen is dump(8)/restore(8) voldoende. Als u echter meerdere machines moet backupen, kan het de moeite lonen om Amanda te bekijken.
De device voorbeelden in dit document zijn voor een configuratie die SCSI schijven en tape gebruikt. In een productie-omgeving worden SCSI schijven aanbevolen eerder dan IDE vanwege de manier waarop ze slechte blokken behandelen. Dat wil niet zeggen dat deze informatie nutteloos is als u een IDE schijf of een ander type van tape drive gebruikt, uw device-namen zullen gewoon lichtjes verschillen. Zo zou sd0a bijvoorbeeld wd0a zijn in een IDE-gebaseerd systeem.
Backup naar tape vereist kennis van waar uw bestandssystemen gemount zijn. U kan te weten komen hoe uw bestandssystemen gemount zijn met het mount(8) commando op uw shell prompt. U zou uitvoer moeten krijgen gelijkaardig aan:
# mount
/dev/sd0a on / type ffs (local)
/dev/sd0h on /usr type ffs (local)
In dit voorbeeld staat het root (/) bestandssysteem fysisch op sd0a dat aangeeft: SCSI vaste schijf 0, partitie a. Het /usr bestandssysteem verblijft op sd0h, wat aangeeft: SCSI vaste schijf 0, partitie h.
Een ander voorbeeld van een meer geavanceerde mount-tabel zou kunnen zijn:
# 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 dit meer geavanceerde voorbeeld staat het root (/) bestandssysteem fysisch op sd0a. Het /var bestandssysteem staat op sd0d, het /home bestandssysteem op sd0e en tenslotte /usr op sd0h.
Om uw machine te backup'en zal u dump de naam moeten meegeven van elke vaste schijfpartitie. Hier is een voorbeeld van de commando's nodig voor een backup van de eenvoudigere mount-tabel die hoger getoond werd:
# /sbin/dump -0au -f /dev/nrst0 /dev/rsd0a
# /sbin/dump -0au -f /dev/nrst0 /dev/rsd0h
# mt -f /dev/rst0 rewind
Voor het voorbeeld van de meer geavanceerde mount tabel, zou u iets gebruiken dat lijkt op:
# /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
U kan de dump(8) man pagina bekijken om precies te leren wat elke commandolijn-optie doet. Hier is een korte omschrijving van de parameters die hierboven gebruikt werden:
Tenslotte welke partitie te backup'en (/dev/rsd0a, etc)
Aan het einde wordt het mt(1) commando gebruikt om de tape terug te spoelen. Bekijk de mt man pagina voor meer opties (zoals eject).
Als u niet zeker bent van uw tape devicenaam, gebruik dan dmesg om hem te localiseren. Een voorbeeld van een tape drive entry in dmesg zou hierop kunnen lijken:
st0 at scsibus0 targ 5 lun 0: <ARCHIVE, Python 28388-XXX, 5.28>
U hebt misschien opgemerkt dat bij de backup, toegang tot de tape gebeurt via de devicenaam "nrst0" in plaats van de "st0" naam die in dmesg gezien wordt. Wanneer u st0 als nrst0 benadert, benadert u dezelfde fysische tape maar zegt u daarbij dat hij niet moet terugspoelen aan het einde van de taak en benadert u het device in "raw" modus. Om meerdere bestandssystemen naar een enkele tape te backup'en, gebruik dan zeker het non-rewind device, als u een rewind device (rst0) gebruikt om meerdere bestandssystemen te backup'en, zal u uiteindelijk het vorige door het volgende bestandssysteem overschrijven dat dump naar tape probeert te schrijven. U kan een meer uitgebreide beschrijving van verschillende tape devices terugvinden in de dump man pagina.
Als u een klein script met de naam "backup" wou schrijven, zou dit er ongeveer zou kunnen uitzien:
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
Als geplande nachtelijke backups gewenst zijn, zou cron(8) gebruikt kunnen worden om uw backup script automatisch te starten.
Het zal ook nuttig zijn om te documenteren (op een stukje papier) hoe groot elk bestandssysteem moet zijn. U kan "df -h" gebruiken om te bepalen hoeveel ruimte elke partitie momenteel gebruikt. Dit zal handig zijn als de schijf het begeeft en u uw partitietabel op de nieuwe schijf opnieuw moet maken.
Uw gegevens herstellen zal ook fragmentatie helpen reduceren. Om er zeker van te zijn dat u alle bestanden meeneemt, is de beste manier voor een backup het systeem rebooten in single user modus. Bestandssystemen hoeven niet gemount te zijn om gebackupt te worden. Vergeet niet om root (/) r/w te mounten na het booten van uw systeem in single user modus of uw dump zal mislukken wanneer hij dumpdata probeert weg te schrijven. Geef "bsd -s" in op de boot> prompt voor single user modus.
Nadat u voor het eerst uw bestandssystemen gebackupt hebt, zou het een goed idee zijn om kort uw tape te testen en er zeker van te zijn dat de gegevens er op staan zoals u verwacht.
U kan het volgende voorbeeld gebruiken om een catalogus van bestanden op een dump tape te na te kijken:
# /sbin/restore -tvs 1 -f /dev/rst0
Dit zorgt ervoor dat een lijst van bestanden verschijnt die op de 1ste partitie van de dump tape staan. Volgens de bovenstaande voorbeelden, zou 1 uw root (/) bestandssysteem zijn.
Om te zien wat er op de 2de tape partitie staat en de uitvoer naar een bestand te sturen, zou u een commando gelijkaardig aan dit gebruiken:
# /sbin/restore -tvs 2 -f /dev/rst0 > /home/me/list.txt
Als u een mount-tabel hebt zoals de eenvoudige, zou 2 /usr zijn, als de uwe een meer geavanceerde mount-tabel is, zou 2 /var of een ander fs kunnen zijn. Het sequentienummer stemt overeen met de volgorde waarin de bestandssystemen naar tape geschreven worden.
Het voorbeeldscenario hieronder zou nuttig zijn als uw vaste schijf het volledig heeft laten afweten. Voor het geval u een enkel bestand vanaf tape wil restoren, kijk de restore man pagina na en let daarbij op de interactive mode instructies.
Als u zich goed hebt voorbereid, kan een schijf vervangen en uw gegevens restoren een heel snel proces zijn. De standaard OpenBSD installatie/boot diskette bevat reeds de vereiste restore utility en ook de binaries vereist om uw nieuwe schijf te partitioneren en bootable te maken. In de meeste gevallen zijn deze diskette en uw meest recente dump tape al wat u zal nodig hebben om weer aan de slag te geraken.
Na het fysisch vervangen van de kapotte schijf, zijn de basisstappen om uw gegevens te restoren de volgende:
Boot vanaf de OpenBSD installatie/boot diskette. Bij de menuselectie kiest
u Shell. Bescherm uw tape tegen overschrijven en plaats hem in de lezer.
Maak met het fdisk(8) commando een primaire OpenBSD partitie op deze nieuw geïnstalleerde schijf. Voorbeeld:
# fdisk -e sd0
Zie fdisk FAQ voor meer info.
Maak met het disklabel commando opnieuw uw OpenBSD partitietabel binnen die primaire OpenBSD partitie die u net met fdisk hebt aangemaakt. Voorbeeld:
# disklabel -E sd0
(Vergeet swap niet, zie disklabel FAQ voor meer info)
Gebruik het newfs commando om een proper bestandssysteem te bouwen op elke partitie die u in de vorige stap aanmaakte. Voorbeeld:
# newfs /dev/rsd0a
# newfs /dev/rsd0h
Mount uw zonet voorbereid root (/) bestandssysteem op /mnt. Voorbeeld:
# mount /dev/sd0a /mnt
Ga naar dat gemounte root bestandssysteem en start het restore proces. Voorbeeld:
# cd /mnt
# restore -rs 1 -f /dev/rst0
U zal willen dat deze nieuwe schijf bootable is, gebruik het volgende om een nieuwe MBR naar uw schijf te schrijven. Voorbeeld:
# fdisk -i sd0
Bovenop het wegschrijven van een nieuwe MBR naar de schijf, zal u er boot blocks moeten op installeren. Het volgende is een kort voorbeeld:
# cp /usr/mdec/boot /mnt/boot
# /usr/mdec/installboot -v /mnt/boot /usr/mdec/biosboot sd0
Uw nieuw root bestandssysteem op de vaste schijf zou moeten klaar zijn zodat u het kan booten en verder gaan met de rest van uw bestandssystemen te restoren. Aangezien uw besturingssysteem nog niet volledig is, zorgt u er voor om in single user modus te booten. Voer op de shell prompt de volgende commando's uit om het systeem te unmounten en te stoppen:
# umount /mnt
# halt
Verwijder de installatie/boot diskette uit het station en herstart uw systeem. Voer op de OpenBSD boot> prompt het volgende commando uit:
boot> bsd -s
De bsd -s zal ervoor zorgen dat de kernel in single user modus gestart wordt, wat alleen een root (/) bestandssysteem vereist.
In de veronderstelling dat u de bovenstaande stappen correct hebt uitgevoerd en er niets verkeerd gegaan is, zou u moeten terechtkomen op een prompt die u vraagt om een shell pad in te geven of return te duwen. Duw return om sh te gebruiken. Vervolgens zal u root in r/w willen hermounten in tegenstelling tot read only. Voer het volgende commando uit:
# mount -u -w /
Zodra u / in r/w modus gehermount hebt kan u verdergaan met uw andere bestandssystemen te restoren. Voorbeeld:
(eenvoudige mount-tabel)
# mount /dev/sd0h /usr; cd /usr; restore -rs 2 -f /dev/rst0
(meer geavanceerde mount-tabel)
# 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
U zou "restore rvsf" kunnen gebruiken in plaats van gewoon rsf om de namen van objecten te zien terwijl ze vanaf de dump set uitgepakt worden.
Tenslotte, nadat u klaar bent met al uw andere bestandssystemen op schijf te restoren, kan u herstarten in multi-user modus. Als alles ging zoals gepland, zal uw systeem weer in de toestand zijn waarin het zich bevond ten tijde van uw meest recente backup, en opnieuw klaar om te gebruiken.
Om een schijfimage (ISO images, schijfimages gemaakt met dd, enz.) te mounten in OpenBSD, moet u een vnd(4) device configureren. Bijvoorbeeld, als u een ISO image hebt staan in /tmp/ISO.image, zou u de volgende stappen volgen om de image te mounten.
# vnconfig svnd0 /tmp/ISO.image
# mount -t cd9660 /dev/svnd0c /mnt
Merk op dat aangezien dit een ISO-9660 image is, zoals gebruikt door CD's en DVD's, u als type cd9660 moet specificeren bij het mounten. Dit geldt ongeacht het type, u moet bv. type ext2fs gebruiken bij het mounten van Linux schijfimages.
Gebruik de volgende commando's om de image te unmounten.
# umount /mnt
# vnconfig -u svnd0
Raadpleeg voor meer informatie de vnconfig(8) man pagina.
DMA IDE transfers, ondersteund door pciide(4) zijn onbetrouwbaar bij vele combinaties van hardware. Tot voor kort werden de meeste "mainstream" besturingssystemen die beweerden DMA transfers met IDE schijven te ondersteunen, niet geleverd met die functionaliteit standaard ingeschakeld, vanwege onbetrouwbare hardware. Nu worden veel van diezelfde machines gebruikt voor OpenBSD.
OpenBSD is aggressief en probeert de hoogste DMA Mode die het kan configureren. Dit zal corruptie van gegevenstransfers veroorzaken in sommige configuraties vanwege buggy moederbord chipsets, buggy schijven, en/of ruis op de kabels. Gelukkig beschermt Ultra-DMA gegevenstransfers met een CRC om corruptie te detecteren. Wanneer de Ultra-DMA CRC mislukt, zal OpenBSD een foutboodschap geven en de operatie opnieuw proberen.
wd2a: aborted command, interface CRC error reading fsbn 64 of 64-79
(wd2 bn 127; cn 0 tn 2 sn 1), retrying
Na enkele keren te falen, zal OpenBSD "downgraden" naar een tragere (hopelijk meer betrouwbare) Ultra-DMA mode. Als Ultra-DMA mode 0 bereikt is, dan zal de schijf downgraden naar PIO mode.
UDMA fouten worden vaak veroorzaakt door lage kwaliteits- of beschadigde kabels. Kabelproblemen zouden gewoonlijk de eerste verdachte moeten zijn indien u veel DMA fouten of onverwacht lage DMA prestatie krijgt. Het is ook een slecht idee om de CD-ROM op hetzelfde kanaal als een harde schijf te zetten.
Als het vervangen van de kabels het probleem niet oplost en OpenBSD niet met succes downgrade't, of het proces zorgt ervoor dat uw machine hard vasthangt, of veroorzaakt buitensporig veel boodschappen op de console en in de logs, dan wil u misschien het systeem dwingen tot het standaard gebruiken van een lager DMA of UDMA level. Dit kan gedaan worden met UKC of config(8) om de vlaggen van het wd(4) device te veranderen.
De root partitie kan direct door OpenBSD gemirrored worden met de "Autoconfiguration" optie van RAIDframe.
OpenBSD 3.7-stable en later bevat ook mirroring als een functionaliteit van de ccd(4) driver. Dit systeem is ingebouwd in de GENERIC kernel en zit in de bsd.rd kernel van enkele platformen (amd64, hppa, hppa64, i386), dus het kan veel gemakkelijker te gebruiken zijn, hoewel het enkele beperkingen heeft wat betreft het herbouwen van de array. Zie:
Veel OpenBSD platformen bevatten ondersteuning voor verschillende hardware RAID producten. De opties variëren volgens platform, zie de gepaste hardware support pagina (hier getoond).
Een andere optie die beschikbaar is voor vele platformen is een van de vele producten die meerdere schijven zich als een enkele IDE of SCSI schijf laten voordoen, en vervolgens in een standaard IDE of SCSI adapter gestoken worden. Deze apparaten kunnen werken op bijna gelijk welk hardware platform dat ofwel SCSI of IDE ondersteunt.
Enkele fabricanten van deze producten:
(Opmerking: dit zijn gewoon producten waarvan OpenBSD gebruikers hun gebruik gemeld hebben -- dit is helemaal geen steunbetuiging, noch een volledige lijst.)Een vaak gestelde vraag op de mailinglijsten is "Worden de goedkope IDE of SATA RAID controllers (zoals degene die Highpoint, Promise of Adaptec HostRAID chips gebruiken) ondersteund?". Het antwoord is "Neen". Deze kaarten en chips zijn geen echte hardware RAID controllers, maar eerder BIOS-geassisteerde boot van een software RAID. Aangezien OpenBSD reeds software RAID ondersteunt op een hardware-onafhankelijke manier, is er niet veel verlangen onder OpenBSD ontwikkelaars om speciale ondersteuning voor deze kaarten te implementeren.
Bijna alle on-board SATA of IDE "RAID" controllers zijn van deze software-gebaseerde stijl, en zullen typisch goed werken als een SATA of IDE controller met de standaard IDE driver (pciide(4)), maar zullen niet werken als een hardware RAID systeem op OpenBSD.
Wanneer een bestandssysteem gemaakt wordt met newfs(8), wordt een beetje van de beschikbare ruimte op reserve gehouden weg van normale gebruikers. Dit biedt een foutenmarge wanneer u per ongeluk de schijf vult, en helpt om schijffragmentering tot een minimum te beperken. Standaard hiervoor is 5% van de schijfcapaciteit, dus als de root gebruiker achteloos de schijf aan het vullen geweest is, kan u tot 105% van de beschikbare capaciteit in gebruik zien.
Als de waarde van 5% niet gepast is voor u, kan u ze veranderen met het tunefs(8) commando.
Als u een beschadigde partitietabel hebt, zijn er verschillende dingen die u kan proberen om ze te herstellen.
Ten eerste, panikeer. Dit doet u gewoonlijk toch, dus u kan er maar beter komaf mee maken. Doe gewoon niets doms. Panikeer weg van uw machine. Ontspan vervolgens, en kijk of de onderstaande stappen u niet helpen.
Er wordt voor elke schijf een kopie van het disklabel bewaard in /var/backups als onderdeel van het dagelijkse systeemonderhoud. In de veronderstelling dat u nog steeds de var partitie hebt, kan u eenvoudigweg de uitvoer lezen en terugplaatsen in het disklabel.
In het geval u die partitie niet langer kan zien, zijn er twee opties. Herstel voldoende van de schijf zodat u ze kan zien, of herstel voldoende van de schijf zodat u uw gegevens er kan afhalen. Afhankelijk van wat er gebeurde, kan het ene of het andere te verkiezen zijn (bij stervende schijven wil u eerst de data, met vuile vingers kan u gewoon het label hebben).
De eerste tool die u nodig hebt is scan_ffs(8) (bemerk de underscore, het heet niet "scanffs"). scan_ffs(8) zal een schijf bekijken, en proberen partities te vinden en u ook zeggen welke informatie het erover terugvindt. U kan deze informatie gebruiken om het disklabel te reconstrueren. Als u gewoon /var terug wil, kan u de partitie voor /var opnieuw aanmaken, en dan het backup-label herstellen en de rest van daar uit toevoegen.
disklabel(8) zal de kernel zijn begrip van het disklabel updaten, en ook het label naar de schijf proberen te schrijven. Daarom zal u, zelfs als het gebied van de schijf dat het disklabel bevat onleesbaar is, het kunnen mount(8)en tot de volgende reboot.
We zullen een algemeen overzicht geven van het gebruik van één van deze bestandssystemen onder OpenBSD. Om een bestandssysteem te kunnen gebruiken, moet het gemount worden. Raadpleeg voor details en mountopties alstublieft de mount(8) manual pagina, en die van het mount commando voor het bestandssysteem dat u zal mounten, bv. mount_msdos, mount_ext2fs, ...
Eerst moet u weten op welk device uw bestandssysteem zich bevindt. Dit kan gewoon uw eerste harde schijf, wd0 of sd0, zijn maar het kan ook minder voor de hand liggend zijn. Alle herkende en geconfigureerde devices op uw systeem worden vermeld in de uitvoer van het dmesg(1) commando: een devicenaam, gevolgd door een beschrijving op één lijn van het device. Mijn eerste CD-ROM lezer wordt bijvoorbeeld als volgt herkend:
cd0 at scsibus0 targ 0 lun 0: <COMPAQ, DVD-ROM LTD163, GQH3> SCSI0 5/cdrom removable
Voor een veel kortere lijst van beschikbare schijven kan u het sysctl(8) commando gebruiken. Het commando
# sysctl hw.disknames
zal alle schijven tonen die uw systeem momenteel kent, bijvoorbeeld:
hw.disknames=cd0,cd1,wd0,fd0,cd2
Op dit punt is het tijd om te weten te komen welke partities er op het device zijn, en in welke partitie het gewenste bestandssysteem zit. Daarvoor onderzoeken we het device met disklabel(8). De disklabel bevat een lijst van partities, met een maximum aantal van 16. Partitie c duidt altijd het volledige device aan. Partities a-b en d-p worden gebruikt door OpenBSD. Partities i-p kunnen automatisch toegewezen worden aan bestandssystemen van andere besturingssystemen. In dit geval zal ik de disklabel van mijn harde schijf bekijken, die een aantal verschillende bestandssystemen bevat.
OPMERKING: OpenBSD werd na de andere besturingssystemen geïnstalleerd op dit systeem, en tijdens de installatie werd een disklabel op de schijf geïnstalleerd die partities bevat voor zowel de "native" als de vreemde bestandssystemen. Als u echter vreemde bestandssystemen installeert nadat de OpenBSD disklabel reeds geïnstalleerd is op de schijf, moet u ze nadien handmatig toevoegen of wijzigen. Dit zal uitgelegd worden in deze subsectie.
# 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*
Zoals gezien kan worden in de bovenstaande uitvoer, worden eerst de OpenBSD partities opgesomd. Daarbuiten zijn er een aantal ext2 partities en één MSDOS partitie, en ook enkele 'onbekende' partities. Op i386 en amd64 systemen kan u daarover gewoonlijk meer te weten komen met de fdisk(8) utility. Voor de nieuwsgierige lezer: partitie i is een onderhoudspartitie aangemaakt door de verkoper, partitie j is een NTFS partitie en partitie l is een Linux swappartitie.
Zodra u bepaald hebt welke partitie het is die u wil gebruiken, kan u overgaan tot de laatste stap: het bestandssysteem dat er in zit mounten. De meeste bestandssystemen worden ondersteund in de GENERIC kernel: kijk maar eens naar het kernelconfiguratiebestand, te vinden in de /usr/src/sys/arch/<arch>/conf directory. Sommige zijn echter niet ondersteund, bv. de NTFS ondersteuning is experimenteel en daarom niet opgenomen in GENERIC. Als u één van de bestandssystemen wil gebruiken die niet ondersteund zijn in GENERIC, zal u een aangepaste kernel moeten bouwen.
Wanneer u de benodigde informatie hebt verzameld zoals hierboven vermeld, is het tijd om het bestandssysteem te mounten. Laten we aannemen dat een directory /mnt/anderfs bestaat, die we zullen gebruiken als mountpunt waar we het gewenste bestandssysteem zullen mounten. In dit voorbeeld zullen we het ext2 bestandssysteem in partitie m mounten:
# mount -t ext2fs /dev/wd0m /mnt/anderfs
Als u van plan bent dit bestandssysteem regelmatig te gebruiken, kan u uzelf wat tijd besparen door er een lijn voor in /etc/fstab te plaatsen, bijvoorbeeld iets als:
/dev/wd0m /mnt/anderfs ext2fs rw,noauto,nodev,nosuid 0 0
Bemerk de 0 waarden in het vijfde en zesde veld.
Dit betekent dat we niet vereisen dat het bestandssysteem gedumpt moet
worden, en gecontroleerd met fsck.
In het algemeen zijn dat dingen die u wil laten afhandelen door het
moeder-besturingssyssteem geassocieerd met het bestandssysteem.
Als voorbeeld heb ik één van mijn bestaande ext2 partities gewijzigd: met het Linux fdisk programma heb ik de grootte van de 'o' partitie (zie disklabel uitvoer hierboven) gereduceerd tot 1G. We zullen ze gemakkelijk kunnen herkennen aan haar startpositie (offset: 64372518) en grootte (13783707). Merk op dat deze waarden sectornummers zijn, en dat het gebruik van sectornummers (niet megabytes of gelijk welke andere maat) de meest exacte en veiligste manier is om deze informatie uit te lezen.
Vóór de wijziging zag de partitie er als volgt uit met OpenBSD's fdisk(8) utility (alleen relevante uitvoer overlatend):
# 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*
. . .
Zoals u kan zien, zijn de startpositie en grootte precies die die eerder
door disklabel(8) vermeld werden.
(Laat u niet misleiden door de waarde aangeduid door "Offset": ze verwijst
naar de startpositie van de "extended" partitie waarin de ext2 partitie
vervat zit.)
Na het wijzigen van de partitiegrootte vanuit Linux, ziet ze er zo uit:
# 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*
. . .
Nu moet dit veranderd worden met disklabel(8).
U kan bijvoorbeeld disklabel -e wd0 ingeven, wat een editor zal
opstarten gespecificeerd door de EDITOR omgevingsvariabele (standaard is vi).
Verander binnen de editor de laatste lijn van de disklabel zodat ze de
nieuwe grootte bevat:
o: 2104452 64372518 ext2fs
Bewaar de disklabel op de schijf wanneer u klaar bent.
Nu de disklabel opnieuw up to date is, zou u uw partities moeten kunnen
mounten zoals hoger beschreven werd.
U kan een heel gelijkaardige procedure volgen om nieuwe partities toe te voegen.
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
Deze lijnen geven aan dat de
umass(4)
(USB mass storage) driver vastgehangen werd aan het geheugentoestel, en dat
hij het SCSI systeem gebruikt.
De laatste twee lijnen zijn de belangrijkste: ze zeggen op welke device node
het geheugentoestel vastgemaakt werd, en wat de totale hoeveelheid
opslagruimte is.
Als u op één of andere manier deze lijnen gemist hebt, kan u ze nadien nog
steeds zien met het
dmesg(1)
commando.
De gerapporteerde CHS geometrie is eerder fictief, aangezien het flash
geheugen behandeld wordt als gelijk welke gewone SCSI schijf.
We zullen hieronder twee scenario's bespreken.
In dit voorbeeld maakte ik gewoon één partitie a waarin ik een FFS bestandssysteem zal plaatsen:
# 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,
Laten we het bestandssysteem dat we in de a partitie aanmaakten,
mounten op /mnt/flashmem.
Maak het mountpunt eerst aan als het niet bestaat.
# mkdir /mnt/flashmem
# mount /dev/sd0a /mnt/flashmem
Er is een aanzienlijke kans dat de andere persoon niet OpenBSD gebruikt, dus er kan een vreemd bestandssysteem op het geheugentoestel staan. Daarom zullen we eerst moeten te weten komen welke partities er op het toestel staan, zoals beschreven in FAQ 14 - Vreemde Bestandssystemen.
# 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*
Zoals kan gezien worden in de disklabel uitvoer hierboven, is er slechts
één partitie i, die een FAT bestandssysteem bevat, aangemaakt op een
Windows machine.
Zoals gewoonlijk geeft de c partitie de volledige device weer.
Laten we nu het bestandssysteem in de i partitie mounten op /mnt/flashmem.
# mount -t msdos /dev/sd0i /mnt/flashmem
Nu kan u het beginnen gebruiken net zoals gelijk welke andere schijf.
WAARSCHUWING: U moet het bestandssysteem altijd unmounten voor het uittrekken van het geheugentoestel. Als u dit niet doet, kan het bestandssysteem in een inconsistente toestand achterblijven, wat kan leiden tot corrupte gegevens.
Bij het uittrekken van het geheugentoestel uit uw machine zal u opnieuw zien dat de kernel hierover boodschappen naar de console schrijft:
umass0: at uhub1 port 1 (addr 2) disconnected
sd0 detached
scsibus2 detached
umass0 detached
Schijfprestatie is een veelbetekenende factor in de globale snelheid van uw computer. Het wordt nog belangrijker wanneer uw computer een multi-user (alle soorten gebruikers, van zij die interactief inloggen tot zij die u zien als fileserver of webserver) omgeving host. Gegevensopslag heeft voortdurend aandacht nodig, vooral wanneer uw partities ruimte tekort komen of als uw schijven het laten afweten. OpenBSD heeft verscheidene mogelijkheden om de snelheid van uw schijfoperaties te vergroten en om fouttolerantie te bieden.
Als u GENERIC draait, is ccd reeds ingeschakeld (in /usr/src/sys/conf/GENERIC). Als u uw kernel hebt aangepast, moet u het mogelijk opnieuw in uw kernelconfiguratie zetten. Hoe dan ook, een lijn als deze moet in uw configuratiebestand staan:
pseudo-device ccd 4 # concatenated disk devices
Het bovenstaande voorbeeld geeft u tot 4 ccd devices (virtuele schijven). Nu moet u uitzoeken welke partities op uw werkelijke schijven u aan ccd wil besteden. Gebruik disklabel om deze partities als type 'ccd' aan te duiden. Op sommige architecturen kan het zijn dat disklabel u niet toelaat om dit te doen. Duid ze in dat geval aan als 'ffs'.
Als u ccd gebruikt om aan prestatie te winnen door striping, merk dan op dat u geen optimale prestatie zal krijgen tenzij u hetzelfde model van schijven gebruikt met dezelfde disklabel instellingen.
Bewerk /etc/ccd.conf zodat het er ongeveer zo uitziet: (kijk voor meer informatie over het configureren van ccd, naar ccdconfig(8))
# Configuration file for concatenated disk devices
#
# ccd ileave flags component devices
ccd0 16 none /dev/sd2e /dev/sd3e
Om uw wijzigingen door te voeren, draait u
# ccdconfig -C
Zolang /etc/ccd.conf bestaat, zal ccd zichzelf automatisch bij het opstarten configureren. Nu hebt u een nieuwe schijf, ccd0, een combinatie van /dev/sd2e en /dev/sd3e. Gebruik hierop gewoon disklabel zoals u normaal zou doen om de partitie(s) te maken die u wil gebruiken. Opnieuw, gebruik niet de 'c' partitie als een eigenlijke partitie waarop u dingen wil zetten. Zorg ervoor dat uw bruikbare partities ten minste één cilinder van het begin van de schijf staan.
Voor raid moet, net zoals met ccd, ondersteuning in de KERNEL zitten. In tegenstelling tot ccd, vindt u ondersteuning voor RAID niet in GENERIC, dus het moet in uw kernel gecompileerd worden (RAID ondersteuning voegt zo'n 500K toe aan de grootte van een i386 kernel).
pseudo-device raid 4 # RAIDframe disk device
Lees de raid(4) en raidctl(8) man pagina's om alle details te verkrijgen. Er zijn vele opties en mogelijke configuraties beschikbaar, en een gedetailleerde uitleg valt buiten het bestek van dit document.
Vraag: "Ik doe gewoon "mount -u -o async /" wat een pakket dat ik gebruik (dat er op staat om van tijd tot tijd enkele honderden dingen aan te raken) bruikbaar maakt. Waarom staat men afkeurend tegenover async mounten en is het niet standaard ingeschakeld (zoals het op enkele andere unixen wel is)? Is het niet een veel eenvoudigere, en daarom, veiligere manier om de prestatie in sommige toepassingen te verbeteren?"
Antwoord: "Async mounts zijn inderdaad sneller dan sync mounts, maar ze zijn
ook minder veilig. Wat gebeurt er in het geval van een stroompanne? Of een
hardware probleem? De zoektocht naar snelheid zou de betrouwbaarheid en de
stabiliteit van het systeem niet mogen opofferen. Bekijk de man pagina van
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.
Aan de andere kant, wanneer u met tijdelijke gegevens te maken hebt die u vanaf nul opnieuw kan maken na een crash, kan u snelheid winnen door een afzonderelijke partitie te gebruiken voor alleen die gegevens en deze async te mounten. Opnieuw, doe dit alleen als u het verlies van alle gegevens in de partitie niet erg vindt als er iets verkeerd gaat. Om deze reden worden mfs(8) partities asynchroon gemount, aangezien ze bij een herstart toch gewist en opnieuw gemaakt worden.
[FAQ Index] [Naar Sectie 13 - Multimedia] [Naar Sectie 15 - Packages en Ports]