[OpenBSD]

[FAQ Index] [Naar Sectie 13 - Multimedia] [Naar Sectie 15 - Packages en Ports]

14 - Inrichting van de Schijf


Inhoudsopgave


14.1 - OpenBSD's disklabel(8) gebruiken

Wat is disklabel(8)?

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.

disklabel(8) tijdens de OpenBSD installatie

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.

disklabel(8) gebruiken na de installatie

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.

Disklabel trucs en tips

14.2 - fdisk(8) gebruiken

Bekijk zeker de fdisk(8) man pagina.

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.

fdisk trucs en tips

14.3 - Extra schijven toevoegen in OpenBSD

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!

14.4 - Hoe swappen naar een bestand

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

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

Swappen via een vnode device

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%

14.5 - Soft Updates

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.

14.6 - Hoe boot OpenBSD/i386?

Het bootproces voor OpenBSD/i386 is niet triviaal, en begrijpen hoe het werkt, kan nuttig zijn om een probleem te onderzoeken wanneer er dingen niet werken. Er zijn vier sleutelelementen voor het bootproces:
  1. Master Boot Record (MBR): De Master Boot Record is de eerste fysische sector (512 bytes) op de schijf. Deze bevat de primaire partitietabel en een klein programma om de Partition Boot Record (PBR) te laden. Merk op dat in sommige omgevingen, de term "MBR" gebruikt wordt om alleen naar het code-gedeelte van dit eerste blok op de schijf te verwijzen, veeleer dan naar het volledige eerste blok (inclusief de partietabel). Het is cruciaal om de betekenis te begrijpen van "de MBR initaliseren" -- in de terminologie van OpenBSD zou dit het herschrijven van de volledige MBR sector inhouden, niet alleen de code, zoals het op sommige systemen zou kunnen betekenen. U zal dit zelden willen doen. Gebruik in de plaats fdisk(8)'s "-u" commandoregeloptie ("fdisk -u wd0").

    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.
  2. Partition Boot Record (PBR): De Partition Boot Record, ook PBR genoemd of biosboot(8) (volgens de naam van het bestand dat de code bevat) is de eerste fysische sector van de OpenBSD partitie op de schijf. De PBR is de "first-stage boot loader" voor OpenBSD. Deze wordt geladen door de MBR code, en heeft de taak om de OpenBSD second-stage boot loader, boot(8) in te laden. Net als de MBR is de PBR een heel kleine sectie van code en gegevens, in totaal slechts 512 bytes. Dat is niet voldoende om een volledige bestandssysteem-bewuste toepassing te hebben, dus veeleer dan de PBR /boot te laten lokaliseren op de schijf, wordt de BIOS-toegankelijke locatie van /boot fysisch in de PBR gecodeerd bij de installatie.

    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...".
  3. Second Stage Boot Loader, /boot: /boot wordt geladen door de PBR, en heeft de taak om toegang te krijgen tot het OpenBSD bestandssysteem via de BIOS van de machine, en om de eigenlijke kernel te localiseren en te laden. boot(8) geeft ook verscheidene opties en informatie door aan de kernel.

    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: Het '+' teken na de "hd0" geeft aan dat de BIOS tegen /boot gezegd heeft dat deze schijf toegankelijk is via LBA. Bij het uitvoeren van een eerste installatie zult u soms een '*' zien na een harde schijf -- dit geeft een schijf aan die geen geldige OpenBSD disklabel heeft.
  4. Kernel: /bsd: Dit is het doel van het bootproces, om de OpenBSD kernel in RAM te laden en juist te laten draaien. Zodra de kernel geladen is, heeft OpenBSD rechtstreeks toegang tot de hardware, niet langer via de BIOS.
Dus, het prille begin van het bootproces kan er als volgt uitzien:
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 ...

What kan er verkeerd gaan

Aangezien de PBR heel klein is, is zijn bereik van foutboodschappen vrij beperkt, en een beetje cryptisch. De meest waarschijnlijke boodschappen zijn: Andere foutboodschappen worden uitgebreid uitgelegd in de biosboot(8) manual pagina. Voor meer informatie over het i386 bootproces, zie

14.7 - Wat zijn de problemen met grote schijven in OpenBSD?

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.

Partitiegrootte en -locatie beperkingen

Jammer genoeg is de volledige mogelijkheid van het besturingssysteem niet beschikbaar tot NADAT het besturingssysteem in het geheugen geladen is. Het boot proces moet het boot RAM van het systeem gebruiken (en wordt er dus door beperkt).

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.

fsck(8) tijd- en geheugenvereisten

Een andere overweging i.v.m. grote bestandssystemen is de tijd en het geheugen vereist om fsck(8) uit te voeren op het bestandssysteem na een crash of stroomonderbreking. Men kan beter niet een 120G bestandssysteem zetten op een systeem met 32M RAM en verwachten dat het met succes fsck(8) uitvoert na een crash. Een grove richtlijn is dat het systeem ten minste 1M beschikbaar geheugen zou moeten hebben voor elke 1G aan schijfruimte om met succes fsck uit te voeren op de schijf. Swap kan hier gebruikt worden, maar met een aanzienlijk performantieverlies, zo erg dat het gewoonlijk onaanvaardbaar is, tenzij in speciale gevallen. De tijd vereist om fsck op de schijf uit te voeren, kan een probleem worden naarmate het bestandssysteem uitbreidt, maar u hoeft alleen de schijfruimte te fsck'en die werkelijk gealloceerd is aan gemounte bestandssystemen. Vergeet niet dat als u meerdere schijven in het systeem hebt, het zou kunnen dat ze allemaal terzelfdertijd gefsck(8)ed worden na een crash, dus dat zou meer RAM kunnen vergen dan een enkele schijf.

14.8 - Installeren van Bootblocks - i386/amd64 specifiek

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)

14.9 - Zich op het ergste voorbereiden: Backup en Restore vanaf tape

Inleiding:

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:

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.

De inhoud van een dump tape bekijken:

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.

Restore vanaf tape:

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:

14.10 - Schijfimages mounten in OpenBSD

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.

14.11 - Help! Ik krijg fouten met IDE DMA!

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.

14.13 - RAID opties voor OpenBSD

RAID (Redundant Array of Inexpensive Disks) biedt een mogelijkheid om meerdere schijven te gebruiken om betere prestaties, capaciteit en/of redundantie te geven dan men uit een enkele schijf alleen kan verkrijgen. Hoewel een volledige discussie van de voordelen en risico's van RAID buiten het bestek van dit artikel vallen, zijn er enkele punten die belangrijk zijn om hier uit te leggen: Als deze informatie nieuw is voor u, is dit geen goed vertrekpunt voor uw verkenning van RAID.

Software Opties

OpenBSD bevat RAIDframe, een software RAID oplossing. Documentatie ervoor kan op de volgende plaatsen gevonden worden:

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:

Hardware Opties

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

Niet-Opties

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.

14.14 - Waarom vertelt df(1) me dat ik meer dan 100% van mijn schijf in gebruik heb?

Mensen worden soms verrast om te ontdekken dat ze negatieve beschikbare schijfruimte hebben, of meer dan 100% van een bestandssysteem in gebruik, zoals getoond door df(1).

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.

14.15 - Partities herstellen na het verwijderen van het disklabel

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.

14.16 - Kan ik gegevens benaderen op andere bestandssystemen dan FFS?

Ja. Andere ondersteunde bestandssystemen zijn: ext2 (Linux), ISO9660 en UDF (CD-ROM, DVD media), FAT (MS-DOS en Windows), NFS, NTFS (Windows), AmigaDOS. Sommige ervan hebben beperkte, bijvoorbeeld read-only, ondersteuning. Merk op dat FreeBSD's UFS2 bestandssysteem niet ondersteund wordt.

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.

14.16.1 - De partities staan niet in mijn disklabel! Wat moet ik doen?

Als u vreemde bestandssystemen op uw systeem installeert (vaak het resultaat van het toevoegen van een nieuw besturingssysteem) nadat u reeds OpenBSD hebt geïnstalleerd, dan zal er reeds een disklabel aanwezig zijn, en deze zal niet automatisch geüpdatet worden om de nieuwe vreemde bestandssysteem-partities te bevatten. Als u ze wil gebruiken, moet u deze partities handmatig toevoegen of wijzigen met disklabel(8).

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.

14.17 - Kan ik een flash geheugentoestel gebruiken met OpenBSD?

Normaal moet het geheugentoestel herkend worden wanneer u het in een poort van uw machine steekt. Kort na het insteken worden door de kernel een aantal boodschappen naar de console geschreven. Wanneer ik bijvoorbeeld mijn USB flash geheugentoestel insteek, zie ik het volgende op mijn console:
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.

Het toestel is nieuw/leeg en u wil het alleen met OpenBSD gebruiken

U zal een disklabel op het toestel moeten initialiseren, en ten minste één partitie aanmaken. Lees alstublieft OpenBSD's disklabel gebruiken en de disklabel(8) manual pagina voor details hierover.

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

U kreeg het geheugentoestel van iemand met wie u gegevens wil uitwisselen

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

14.18 - Schijfprestaties optimaliseren

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.

14.18.1 - CCD

De eerste mogelijkheid is het gebruik van ccd(4), de Concatenated Disk Driver. Dit laat u toe om verscheidene partities samen te voegen tot één virtuele schijf (en dus kan u verscheidene schijven er laten uitzien als één schijf). Dit concept is gelijkaardig aan dat van LVM (logical volume management), dat men in veel commerciële Unix varianten vindt.

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.

14.18.2 - RAID

Een andere oplossing is raid(4), dat u raidctl(8) zal laten gebruiken om uw raid devices te controleren. OpenBSD's RAID is gebaseerd op Greg Oster's NetBSD port van de CMU RAIDframe software. OpenBSD heeft ondersteuning voor RAID levels 0, 1, 4, en 5.

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.

14.18.3 - Soft updates

Nog een tool die gebruikt kan worden om uw systeem te versnellen is softupdates. Een van de traagste operaties in het traditionele BSD bestandssysteem is het updaten van metainfo (wat onder meer gebeurt wanneer u bestanden en directories aanmaakt of verwijdert). Softupdates probeert metainfo te updaten in RAM in plaats van elke metainfo update naar de harde schijf te schrijven. Een ander effect hiervan is dat de metainfo op de schijf altijd volledig zou moeten zijn, hoewel deze niet altijd up-to-date is. Zodoende zou een systeemcrash geen volledige fsck(8) vereisen bij het opstarten, maar slechts een achtergrondversie van fsck die wijzigingen aan de metainfo in RAM aanbrengt (à la softupdates). Dit betekent dat een server rebooten veel sneller gaat, aangezien u niet hoeft te wachten op fsck! (OpenBSD heeft deze mogelijkheid nog niet.) U kan meer lezen over softupdates in de Softupdates FAQ entry.

14.18.4 - Grootte van de namei() cache

De naam-naar-inode vertaling (ook bekend als namei()) cache controleert de snelheid van padnaam naar inode(5) vertaling. Een redelijke manier om een waarde voor de cache af te leiden, mocht een groot aantal namei() "cache misses" opgemerkt worden met een tool zoals systat(1), is om de huidige door het systeem berekende waarden te onderzoeken met sysctl(8), (dat deze parameter "kern.maxvnodes" noemt) en om deze waarde te verhogen tot ofwel de namei() cache hit rate verbetert of het bepaald wordt dat het systeem geen aanzienlijk voordeel uit een verhoging van de grootte van de namei() cache. Nadat de waarde bepaald is, kan u ze bij de systeemstart instellen met sysctl.conf(5).

14.19 - Waarom gebruiken we geen async mounts?

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]


[terug] www@openbsd.org
$OpenBSD: faq14.html,v 1.41 2007/11/19 10:43:15 tobias Exp $