[OpenBSD]

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

14 - Inrichting van de Schijf


Inhoudsopgave


14.1 - Schijven en Partities

De details voor het instellen van schijven in OpenBSD variëren per platform, dus u zou de installatie-instructies in het INSTALL.<arch> voor uw platform moeten lezen om de bijzonderheden voor uw systeem vast te stellen.

Identificatie van de schijf

OpenBSD benadert massa-opslag op de meeste platformen met twee stuurprogramma's, afhankelijk van de normale set commando's die dat type apparaat ondersteunt: De eerste schijf van ieder type dat door OpenBSD geïdentificeerd wordt, zal schijf '0' zijn, de tweede zal '1' zijn, enz. Dus de eerste IDE-achtige schijf zal wd0 zijn, de derde SCSI-achtige schijf zal sd2 zijn. Als u twee SCSI-achtige schijven en drie IDE-achtige schijven in een systeem hebt, dan heeft u sd0, sd1, wd0, wd1, en wd2 op die machine. De volgorde is gebaseerd op de volgorde waarin ze worden gevonden tijdens the hardware-detectie bij het opstarten. Er zijn een paar belangrijke punten om in gedachten te houden:

Partitioneren

Om historische redenen wordt de term "partitie" veelal gebruikt voor twee verschillende dingen in OpenBSD en dat leidt tot enige verwarring.

De twee soorten "partitie" zijn:

Alle OpenBSD platformen gebruiken disklabel(8) als de primaire wijze om OpenBSD bestandssysteem partities te beheren, maar slechts enkele platformen hebben ook fdisk(8) nodig om partitietabel partities te beheren. Op de platformen die fdisk partities gebruiken, wordt één fdisk partitie gebruikt voor alle OpenBSD bestandssysteem partities. Deze partitie wordt dan onderverdeeld in disklabel partities. Deze disklabel partitions worden "a" tot en met "p" genoemd. Enkele van deze zijn "speciaal":

Identificatie van de partitie

Een OpenBSD bestandssysteem wordt gekenmerkt door de schijf waar het op staat, plus de bestandssysteem partitie op die schijf. Dus een bestandssysteem kan worden gekenmerkt door kenmerken als "sd0a" (de "a" partitie op het eerste "sd" apparaat), "wd2h" (de "h" partitie op het derde "wd" apparaat) of "sd1c" (het gehele tweede "sd" apparaat). De device file voor het block-device zou /dev/sd0a zijn, /dev/rsd0a zou de device file voor het "raw" (character) device.

Sommige utilities staan u toe om de "korte" naam van een partitie (zoals "sd0d") of een schijf (zoals "wd1") te gebruiken in plaats van de echte naam van het apparaat (resp. "/dev/sd0d" of "/dev/wd1c").

Merk nogmaals op dat als u gegevens zet op wd2d en later wd1 van het systeem verwijdert en opnieuw opstart, dat uw gegevens dan op wd1d staan, aangezien uw oude wd2 nu wd1 is. De identificatie van een schijf wijzigt echter niet na het opstarten, dus als een USB-schijf wordt verwijderd of stuk gaat, zal de identificatie van andere schijven niet veranderen totdat u opnieuw opstart.

Disklabel Unique Identifiers

Schijven kunnen ook worden geïdentificeerd met Disklabel Unique Identifiers (DUID's), een hexadicimaal getal van 16 cijfers, beheerd door het diskmap(4) device. Dit getal wordt automatisch gegenereerd als een willekeurig getal als een disklabel voor de eerste keer wordt gecreëerd, maar valt terug op enkel nullen voor bestaande (pre-OpenBSD 4.8) labels. Indien gewenst kan disklabel(8) worden gebruikt om het UID te wijzigen. Deze UID's zijn "persistent" -- als u uw schijven op deze manier identificeert, dan is schijf "f18e359c8fa2522b" altijd f18e359c8fa2522b, ongeacht de wijze waarop deze wordt aangesloten. U kunt partities op de schijf specificeren door een punt en de partitie-letter toe te voegen, bijvoorbeeld f18e359c8fa2522b.d is de 'd' partitie van de schijf f18e359c8fa2522b en zal ALTIJD refereren aan hetzelfde stuk opslag, ongeacht de volgorde of de interface waarmee het is verbonden met het systeem.

Deze UID's kunnen bijna overal worden gebruikt waar een partitie of een apparaat wordt gespecificeerd, bijvoorbeeld in /etc/fstab of op opdrachtregels. Uiteraard kunnen schijven en partities ook worden aangeduid op de traditionele wijze, met apparaat, volgnummer en partitie (bv. /dev/sd1f), en beide kunnen door elkaar worden gebruikt.

Merk op dat het DUID een kenmerk is van het disklabel, maar omdat OpenBSD slechts één disklabel per disk ondersteunt is dat slechts een academisch detail.

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-achtige schijf. We kunnen de OpenBSD partitie (id 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 - 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. 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 onderdeel Aangepaste disklabel layout 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
type: ESDI
disk: ESDI/IDE disk
label: SAMSUNG HD154UI 
duid: d920a43a5a56ad5f
flags:
bytes/sector: 512
sectors/track: 63
tracks/cylinder: 16
sectors/cylinder: 1008
cylinders: 2907021
total sectors: 2930277168
boundstart: 64
boundend: 2930272065
drivedata: 0 

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

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: [36680096] 
size: [2893591969] 1T
Rounding to cylinder: 2147483536
FS type: [4.2BSD] 
> p m
OpenBSD area: 64-2930272065; size: 1430796.9M; free: 364310.8M
#                size           offset  fstype [fsize bsize  cpg]
  a:           500.0M               64  4.2BSD   2048 16384    1 # /
  b:          2048.5M          1024128    swap                   
  c:       1430799.4M                0  unused                   
  d:          2048.5M          5219424  4.2BSD   2048 16384    1 # /usr
  e:          2048.5M          9414720  4.2BSD   2048 16384    1 # /tmp
  f:         10240.5M         13610016  4.2BSD   2048 16384    1 # /var
  h:          1024.2M         34582464  4.2BSD   2048 16384    1 # /home
  k:       1048575.9M         36680192  4.2BSD   8192 65536    1
> q
Write new label?: [y]
In 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.4 - 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-achtige 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 96G voor 96 gigs.

Dat was veel. Maar u bent nog niet klaar. Tenslotte moet u een bestandssysteem aanmaken op die schijf met newfs(8).

# newfs sd2d 

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

Voeg dit tenslotte toe aan /etc/fstab(5).

/dev/sd2d /u ffs rw 1 1

Wat als u een bestaande directory zoals /usr/local moet migreren? U kunt het best de nieuwe schijf in /mnt mounten en /usr/local naar de /mnt directory kopiëren. Bijvoorbeeld:

# cd /usr/local && pax -rw -p e . /mnt
Bewerk het /etc/fstab(5) bestand om aan te geven dat de /usr/local partitie nu /dev/sd2d is (uw vers geformatteerde partitie). Voorbeeld:
/dev/sd2d /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.5 - Hoe wordt swap gebruikt?

14.5.1 - Over swap

In het verleden werden er allerlei regels uitgestort over beheerders over de hoeveelheid swap die op hun machines ingesteld moest worden. Het probleem is uiteraard, dat er weinig "normale" applicaties zijn.

Een niet voor de hand liggend gebruik van swap is om een plek te bieden aan de kernel om een kopie te dumpen van wat er in de core zit in het geval van een system panic voor latere analyse. Om dit te laten werken, moet u een swap-partitie hebben (geen swap-file) die minstens zo groot is als de hoeveelheid RAM. Het systeem bewaart standaard een kopie van deze dump in /var/crash wanneer het opstart, dus als u dit automatisch wilt kunnen doen, dan moet er voldoende vrije ruimte zijn op /var. U kunt het systeem echter ook booten in sinlge-user mode en savecore(8) gebruiken om de demp elders op te slaan.

Veel typen systemen kunnen correct geconfigureerd zijn met helemaal geen swap. Een firewall bijvoorbeeld zou niet moeten swappen bij normaal gebruik. Machines met flash opslag zouden in het algemeen niet moeten swappen. Als uw firewall op flash is gebaseerd, heeft u wellicht een (klein) voordeel door geen swap partitie te alloceren, maar in de meeste andere gevallen kan een swap partitie absoluut geen kwaad; de meeste schijven hebben meer dan genoeg ruimte om een beetje swap te alloceren.

Er zijn allerlei soorten tips over het optimaliseren van swap (waar op de schijf, aparte schijven, etc.), maar als u in een situatie zit waarbij het optimaliseren van swap een probleem is, dan heeft u waarschijnlijk meer RAM nodig. De beste optimalisatie voor swap is in het algemeen om het niet nodig te hebben.

In OpenBSD wordt swap beheerd met het swapctl(8) programma, dat swap devices en bestanden toevoegt, verwijdert, laat zien en prioriteiten toekent.

14.5.2 - Swappen naar een partitie

Op OpenBSD wordt de 'b' partitie op de boot disk standaard en automatisch gebruikt voor swap. Hiervoor is geen configuratie nodig. Als u geen swap op de boot disk wilt gebruiken, definieer dan geen 'b' partitie. Als u wilt swappen op andere partities of andere schijven, dan moet u deze partities in /etc/fstab definiëren met regels als:

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

14.5.3 - Swapping to a file

(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(1)'s unlimit, of sh(1)'s ulimit.)

Soms blijkt uw eerste gok over de hoeveelheid swap die u nodig heeft niet te kloppen en moet u extra swapruimte toevoegen, soms met spoed (bijvoorbeeld: "Gut, als we met deze snelheid de swap opstoken, worden we binnen 5 minuten geplet"). Als u zich in deze positie bevindt, kan het toevoegen van swapruimte in een bestand op een bestaand filesystem een snelle oplossing bieden.

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

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

Het bootproces voor OpenBSD/i386 en OpenBSD/amd64 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 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 inhouden, daarbij de bestaande partitie-tabel wissen en niet alleen de code, zoals het wellicht inhoudt op sommige systemen. U zal dit meestal niet willen doen. Gebruik in de plaats fdisk(8)'s "-u" commandoregeloptie ("fdisk -u wd0") om de MBR boot code te (her)installaren.

    Hoewel OpenBSD zijn eigen MBR code bevat, bent u niet verplicht om deze te gebruiken, aangezien praktisch gelijk welke MBR code 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 de bovenstaande punt zijn vervangen door een puntkomma (";"), 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 512 bytes 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(8), 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;... 
    

  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 3.21
    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 3.21
boot>
booting hd0a:/bsd 4464500+838332 [58+204240+181750]=0x56cfd0
entry point at 0x100120

[ using 386464 bytes of bsd ELF symbol table ]
Copyright (c) 1982, 1986, 1989, 1991, 1993       <- Kernel
        The Regents of the University of California.  All rights reserved.
Copyright (c) 1995-2013 OpenBSD.  All rights reserved.  http://www.OpenBSD.org

OpenBSD 5.4 (GENERIC) #37: Tue Jul 30 12:05:01 MDT 2013
    deraadt@i386.openbsd.org:/usr/src/sys/arch/i386/compile/GENERIC
   ...

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.8 - Wat zijn de problemen met grote schijven in OpenBSD?

OpenBSD ondersteunt zowel FFS als FFS2 (ook bekend als UFS en UFS2) bestandssystemen. FFS is het historische OpenBSD bestandssysteem, FFS2 is nieuw vanaf 4.3. Alvorens de grenzen van elk systeem te bekijken, moeten we enkele meer algemene systeemgrenzen bekijken.

Natuurlijk zijn de mogelijkheden van bestandssystemen en de mogelijkheden van bepaalde hardware twee verschillende dingen. Een nieuwere 250G harde schijf kan problemen hebben op oudere (pre >137G standaarden) interfaces (hoewel ze voor het grootste deel gewoon prima werken), 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 en boot code 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 vallen binnen de ruimte die ondersteund wordt door het boot ROM.

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/amd64) 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. Dit is nog een reden waarom u NIET al uw schijfruimte wil toekennen gewoon omdat ze er is. Bestandssystemen mounten met RO of ze niet mounten helpt om te vermijden dat ze gefsck(8)ed moeten worden na het struikelen over een netsnoer. Het reduceren van het aantal inodes (met de -i optie van newfs) kan ook helpen om de fsck-tijd te verbeteren, ervan uitgaande dat u ze ook echt niet nodig heeft.

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.

FFS vs. FFS2

Met FFS ondersteunt OpenBSD een individueel bestandssysteem tot 231-1, ofwel 2,147,483,647 blokken, en aangezien elke blok 512 bytes groot is, is dat iets minder dan 1T. FFS2 kan veel grotere bestandssystemen aan, hoewel andere grenzen zullen bereikt worden lang voordat de grenzen van het bestandssysteem bereikt zijn.

De boot/installatiekernels ondersteunen alleen FFS, niet FFS2, dus systeempartities met een sleutelrol (/, /usr, /var, /tmp) mogen niet FFS2 zijn, of ernstige onderhoudsproblemen kunnen zich voordoen (er zou toch geen reden mogen zijn waarom die partities zo groot moeten zijn). Om deze reden worden heel grote partities best alleen gebruikt worden voor "niet-systeem" partities, bijvoorbeeld /home, /var/www/, /bigarray, etc.

Merk op dat niet alle controllers en drivers grote schijven ondersteunen. Bijvoorbeeld, ami(4) heeft een begrenzing van 2TB per logisch volume. Wees er altijd van bewust wat er beschikbaar was op het moment dat een controller of interface werd gemaakt en vertrouw niet op "de connector past".

Schijven groter dan 2TB

Het MBR-systeem van PC's ondersteunt alleen schijven met een grootte tot 2TB. fdisk(8) zal schijven van meer dan 2TB laten zien als 2TB. Dit hindert OpenBSD op geen enkele wijze om grotere disks te gebruiken, omdat het MBR alleen wordt gebruikt om het OS te kunnen starten. Als het OS eenmaal draait worden de bestandssystemen bepaald door het disklabel en dat heeft geen limiet van 2TB.

Om schijven groter dan 2TB te kunnen gebruiken maakt u een OpenBSD-partitie op de schijf met fdisk, ongeacht de grootte die fdisk laat zien. Als u de disk indeelt met disklabel(8), gebruik dan de "b" optie om de grenzen die OpenBSD ziet (die standaard zijn ingesteld op de grootte van de fdisk partitie) in te stellen op de gehele schijf. U kunt nu uw partities maken zoals u wenst. U moet echter nog steeds de mogelijkheden van uw BIOS respecteren, die de beperking heeft om alleen fdisk partities te snappen. Uw 'a' partitie moet geheel binnen het fdisk-gedeelte van uw schijf liggen, in aanvulling op eventuele beperkingen van het BIOS.

14.9 - Installeren van Bootblocks - i386/amd64 specifiek

OpenBSD heeft een heel robuuste bootloader die vrij onverschillig is voor schijfgeometrie. Hij is echter wel gevoelig voor 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 boot-CDROM in uw CD-speler (of gebruik een bootable floppy) en typ op de boot prompt "boot hd0a:/bsd" om het te dwingen vanaf de eerste harde schijf (en niet vanaf de CD of 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
Merk op dat "/boot" de fysieke locatie van het bestand "boot" is dat u wilt gebruiken voor het booten van het systeem zoals het momenteel gemount is. Als uw situatie enigszins afwijkt en u net geboot heeft vanaf CD, waarbij uw 'a' partitie is gemount op /mnt, dan moet u waarschijnlijk "/mnt/boot" gebruiken. installboot(8) doet twee dingen -- het installeert het bestand "biosboot" op de juiste plek in het Partition Boot Record en modificeert het met de fysieke locatie van het "/boot" bestand.

14.10 - 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 of de data op een andere wijze verloren gaat.

Deze informatie zal u de standaard dump(8)/restore(8) utilities helpen gebruiken die voorzien zijn in OpenBSD. Meer geavanceerde backup utilities, zoals "Amanda" en "Bacula" zijn beschikbaar via packages om meerdere servers naar schijf en tape te backuppen.

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-achtige 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.11 - 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 vnd0 /tmp/ISO.image
# mount -t cd9660 /dev/vnd0c /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 vnd0

Raadpleeg voor meer informatie de vnconfig(8) man pagina.

14.12 - Help! Ik krijg fouten met IDE DMA!

DMA IDE transfers, ondersteund door pciide(4) zijn onbetrouwbaar bij vele combinaties van oudere hardware.

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.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). Sommige ervan hebben beperkte, bijvoorbeeld read-only, ondersteuning.

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

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

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

14.17.1 - Flashgeheugen als draagbaar opslagtoestel

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, 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.17.2 - Flashgeheugen als bootable opslag

Men kan flashgeheugen op verschillende manieren ook gebruiken als bootable schijf met OpenBSD. Dit kan worden gedaan met zowel USB-apparaten (ervanuitgaande dat uw computer kan booten vanaf USB, dat kunnen ze niet allemaal) als met niet-USB (zoals CF) apparaten met een IDE of SATA adapter. (Niet-USB apparaten aangesloten met een USB-adapter worden behandeld als USB-apparaten.) In sommige gevallen kunt u een apparaat op beide manieren gebruiken (de media laden in een USB-adapter, maar gebruiken in een IDE-adapter).

Een flashapparaat dat is aangesloten op een USB-poort zal verschijnen als een sd(4) SCSI-achtig apparaat. Als het is aangesloten op een IDE-adapter, dan zal het verschijnen als een wd(4) apparaat.

In het geval van flashmedia in een IDE-adapater, dan kan ieder systeem ervan booten dat kan booten van een IDE harde schijf op dezelfde adapter. Op alle mogelijke wijzen ziet het systeem de flashmedia als een IDE schijf. Configureer de hardware simpelweg op de juiste manier en installeer OpenBSD op de flashschijf zoals gebruikelijk.

In het geval van booten vanaf een USB-device moet uw systeem kunnen booten vanaf het USB-device zonder te worden afgeleid door andere apparaten op het systeem. Merk op dat als u de intentie heeft om een draagbare boot-omgeving op een USB-apparaat te maken, dat u dan echt DUIDs zou moeten gebruiken in plaats van de traditionele "/dev/sd0X" notatie. Het USB-apparaat zal verschijnen als een SCSI-disk, soms sd0. Als u dit apparaat zonder DUID verbindt met een systeem dat al enkele SCSI-achtige apparaten heeft (zoals apparaten aangesloten op een ahci(4) interface), dan zal het een andere identificatie toegewezen krijgen, wat het rouleren van systeem naar systeem zou compliceren, omdat u /etc/fstab zou moeten aanpassen. Met DUID's is dit probleem volledig opgelost.

Enkele opmerkingen:

14.17.3 - Hoe kan ik een "Live" bootable USB toestel maken?

Het is erg makkelijk om een bootalble USB flash (of andere!) schijf te maken die kan worden gebruikt als een "live" OpenBSD-systeem zonder OpenBSD te installeren op de lokale harde schijf van een machine. Vanzelfsprekend moet de doelmachine van een USB toestel kunnen booten, maar het initiële laden kan worden gedaan vanaf iedere machine met een USB interface.

Enkele redenen waarom u dit wellicht zou willen:

Het maken van zo'n "live OpenBSD schijf" is eenvoudig. Dat is alles!

Er zijn enkele zaken die u wellicht wilt doen na de installatie om uw resultaten te verbeteren:

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 enkele mogelijkheden om de snelheid van uw schijfoperaties te vergroten.

14.18.1 - Soft updates

Een belangrijke 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. U kan meer lezen over softupdates in de Softupdates FAQ paragraaf.

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

14.20 - Dupliceren van uw root-partitie: altroot

OpenBSD biedt een "altroot" voorziening in de daily scripts. Als de omgevingsvariabele ROOTBACKUP=1 is gezet in ofwel /etc/daily.local of root's crontab(5) en er een partitie is gespecificeerd in /etc/fstab om te mounten op /altroot met de optie "xx", dan wordt iedere nacht de gehele inhoud van de root-partitie gedupliceerd naar de /altroot-partitie. Ervan uitgaande dat we onze root-partitie willen backuppen naar wd1a, dan voegen we de volgende regel toe aan /etc/fstab
/dev/wd1a /altroot ffs xx 0 0
en zetten we de passende omgevingsvariabele in /etc/daily.local:
# echo ROOTBACKUP=1 >>/etc/daily.local
Aangezien het altroot-proces uw /etc directory omvat, zorgt dit ervoor dat wijzigingen in de configuratie dagelijks gebackupt worden.

Dit is een kopie van de "disk image" met dd(8), geen kopie van ieder bestand, dus zorg ervoor dat uw /altroot precies even groot of groter is dan uw root-partities. Vermijd tevens excessief grote root-partities zodat het proces niet te lang duurt.

Voor volledige redundantie zouden ook de andere partities gedupliceerd moeten worden, met behulp van softraid schijven, dump(8)/restore(8), rsync, etc. Dit kan handmatig worden gedaan of als onderdeel van een regelmatig schema, zoals de weekly.local, daily.local of monthly.local scripts.

In het algemeen zult u uw "altroot"-partitie op een andere schijf willen hebben die is ingesteld om te kunnen opstarten, mocht de primaire schijf falen. Het is mogelijk om "altroot" op dezelfde schijf te hebben als uw boot-schijf, maar de voordelen zijn dan beperkt.

Merk op dat we de altroot-schijf niet hebben aangeduid met het DUID maar met een device-naam. We willen waarschijnlijk een kopie maken van de boot-schijf naar een tweede schijf, dit kan echter veranderen als de volgorde van de schijven wordt verwisseld. Om deze reden vullen we de 'root' en 'altroot' in /etc/fstab in als een device-naam en niet als DUID.

14.21 - Hoe gebruik ik softraid(4)?

Softraid(4) werkt door het nabootsen van een scsibus(4) met sd(4) apparaten, gemaakt door het combineren van een aantal OpenBSD disklabel(8) partities ("chunks") tot een virtuele schijf ("volume") met de gewenste RAID-strategie ("discipline"), zoals RAID0, RAID1, RAID4, RAID5 of Crypto. (Merk op dat alleen RAID0, RAID1 en Crypto op dit moment ondersteund worden.)

Deze virtuele disk wordt behandeld als iedere andere disk -- eerst wordt deze gepartitioneerd met fdisk(8) (op fdisk-platformen) en vervolgens met disklabel(8), binnen deze partities wordt een bestandssysteem gemaakt, vervolgens gemount en gebruikt.

Enkele algemene woorden over RAID:

14.21.1 - De installatie

Softraid diskruimte kan worden gemaakt met vrije (of toegevoegde!) stukken schijfruimte na de installatie, maar dat is slechts een speciale (en eenvoudige) variant op het toevoegen van softraid tijdens de installatie.

De hulpmiddelen om een softraid-systeem samen te stellen zitten in het standaard OpenBSD systeem (voor het toevoegen van softraid na de installatie), maar ze zijn ook beschikbaar op de CD-ROM en bsd.rd installatie-kernels. Ze zijn niet beschikbaar op de floppies vanwege ruimtegebruik; een eenvoudig alternatief is om een zeer minimale installatie van OpenBSD te doen vanaf floppy, daarna van bsd.rd op te starten vanaf uw zojuist geïnstalleerde systeem en de installatie zoals gewenst over te doen.

Het installatieproces is iets anders dan de standaard OpenBSD installatie, aangezien u vanuit de shell uw softraid(4)-schijf moet aanmaken voordat u verder gaat met de installatie. Zodra de softraid(4)-schijf is gemaakt, kunt u de installatie vrijwel normaal uitoveren, waarbij u de partities die u in RAID wilt hebben plaatst op de nieuw aangemaakte schijf.

U kunt van te voren alleen de RAID-partities maken en samenvoegen tot een softraid(4) volume en de installer de rest laten doen, maar het is waarschijnlijk makkelijker om ook de root en swap-partities te maken voordat u de installer start.

Dit betekent dat u de schijf nauwkeurig moet indelen voordat u de installer start en een aantal handelingen handmatig moet uitvoeren die de installer normaliter voor u doet.

De installatie-kernel heeft slechts /dev ingangen voor één wd(4) apparaat en één sd(4) apparaat bij het opstarten, dus u moet meer ingangen aanmaken om uw softraid-apparaten te configureren. Dit proces wordt normaliter automatisch gedaan door de installer, maar u heeft de installer nog niet gedraaid en u voegt een schijf toe die niet bestond tijdens het opstarten. Als we bijvoorbeeld een tweede en derde wd(4) apparaat nodig hebben en een tweede sd(4) (denk eraan dat softraid apparaten sd(4) apparaten zijn), dan kunt u het volgende doen vanuit de shell:

# cd /dev
# sh MAKEDEV wd1 wd2 sd1
U heeft nu ondersteuning voor sd0, sd1, wd0, wd1 en wd2.

U wilt de fysieke schijf goed indelen met fdisk(1) (indien van toepassing op uw platform -- zorg ervoor dat de tweede schijf bootable is!) en vervolgens met disklabel de partities inrichten.

De fdisk(8) stappen hierover zetten een MBR en een OpenBSD-partitie op de schijf. ALS u de volledige schijf wilt gebruiken voor OpenBSD (als er dus NIETS anders op de schijf staat), dan kan dat met een enkel commando voor iedere schijf:

# fdisk -iy wd0
# fdisk -iy wd1
(Zorg ervoor dat u begrijpt wat die commando's doen met eventuele gegevens op uw schijf voordat u ze blindelings uitvoert!) In andere gevallen zult u een OpenBSD-partitie moeten maken op de nieuwe schijven.

Partities maken voor softraid

Als u softraid(4)-partities maakt, geef ze dan het type "RAID" in plaats van "4.2BSD" of "swap". In dit geval maken we de gewenste partities op wd0:
# disklabel -E wd0
Label editor (enter '?' for help at any prompt)
> a a
offset: [64] ENTER 
size: [30282461] 500m
Rounding to cylinder (16065 sectors): 1028096
FS type: [4.2BSD] ENTER 
> a b
offset: [1028160]  ENTER 
size: [29254365] 500m
Rounding to cylinder (16065 sectors): 1028160
FS type: [swap] ENTER 
> a m
offset: [3148740]  ENTER
size: [28226205] 10g
Rounding to cylinder (16065 sectors): 20980890
FS type: [4.2BSD] RAID
> q
Write new label?: [y] ENTER

Vervolgens moeten we de tweede schijf zo voorbereiden dat deze op de belangrijkste punten overeenkomt met de indeling van de eerste schijf. Aangezien we het /altroot-systeem gebruiken, willen we een 'a' partitie op de tweede schijf met dezelfde grootte als de 'a' op de eerste. We willen dat het systeem van de tweede schijf draait net als van de eerste, dus maken we een even grote swap-partities (al kan die ook wat groter of kleiner zijn). We willen ook een RAID-partitie met dezelfde grootte als op de eerste schijf. Als de RAID-partities niet even groot zijn, dan bepaalt de kleinste de grootte van het uiteindelijke RAID volume.

Kortom...u moet echt het proces van hierboven exact herhalen bij de tweede schijf, wd1.

Het RAID volume samenstellen

We nemen aan uw RAID-partities op wd0m en wd1m staan. Merk op dat de letter van de RAID-partitie om het even is, deze hoeft niet gelijk te zijn op beide schijven. Het maakt het echter een stuk eenvoudiger als ze wel gelijk zijn.

Merk op dat softraid(4) wat moet rondneuzen om het bewijs te vinden van de partities die hij moet samenvoegen. Als uw schijf eerder is gebruikt voor softraid is het daarom raadzaam om met dd(1) de eerste megabyte of zo van iedere partitie te wissen voordat we verder gaan:

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

Nu maken we onze eerste softraid(4)-schijf met bioctl(8):

# bioctl -c 1 -l /dev/wd0m,/dev/wd1m softraid0
Dit maakt een RAID1-volume ("-c 1") met de genoemde partities ("-l /dev/wd0m,/dev/wd1m") en met de softraid0 driver. Als er geen andere sd(4) apparaten op dit systeem zijn, dan wordt dit sd0. Merk op dat als u meerdere RAID-apparaten maakt, op één schijf of op meerdere schijven, u altijd softraid0 gebruikt als virtuele interface. U gebruikt niet softraid1 of hoger. Denk eraan dat "softraid0" een virtuele RAID-controller is en u kunt vele virtuele schijven aan deze controller hangen.

Dit maakt een nieuwe schijf "sd0" (ervan uitgaande dat er geen andere sd(4) schijven op uw systeem zijn). Dit apparaat wordt nu getoond op de systeemconsole en in dmesg ale een nieuw geïstalleerd apparaat:

scsibus1 at softraid0: 1 targets
sd0 at scsibus2 targ 0 lun 0: <OPENBSD, SR RAID 1, 005> SCSI2 0/direct fixed
sd0: 10244MB, 512 bytes/sec, 20980362 sec total
Dit laat zien dat we nu een nieuwe SCSI-bus hebben en een nieuwe schijf. Dit volume zal vanaf nu automatisch gevonden en samengesteld worden als het systeem opstart.

Omdat het nieuwe apparaat waarschijnlijk een hoop rommel heeft waar u een MBR en een disklabel verwacht, wordt u sterk aangeraden om het eerste stuk te vullen met nullen, als u dat niet heeft gedaan met de losse delen hierboven:

# dd if=/dev/zero of=/dev/rsd0c bs=1m count=1
U bent nu klaar om OpenBSD te installeren op uw systeem. Voer de installatie uit zoals normaal door "install" te typen op de prompt van het boot-medium. Let erop dat u "custom"-indeling kiest voor het disklabel wanneer hierom gevraagd wordt, anders wordt uw RAID-partitie overschreven! Gebruik de 'n'-optie van disklabel om het mount-punt van uw root-partitie te definiëren en maak alle partities op uw nieuwe softraidschijf (sd0 in het voorbeeld hierboven) die aanwezig zou moeten zijn, in plaats van op uw niet-RAID-schijven.

U kunt nu opnieuw opstarten en als u alles goed heeft gedaan dan worden de RAID-delen automatisch samengesteld en worden alle partities op de juiste plek gemount.

14.21.3 - Softraid opmerkingen

Complicaties als er andere sd(4)-schijven zijn

Softraid-schijven worden samengesteld nadat alle andere IDE, SATA, SAS en SCSI-schijven zijn gekoppeld. Daarom verandert de aanduiding van de softraid-schijf als het aandel sd(4) schijven verandert (door toevoegen of verwijderen van apparaten -- of als een apparaat faalt). Om deze reden is het erg belangrijk dat u DUID (Disklabel Unique Identifiers) gebruikt in plaats van schijfnamen in uw fstab(5) bestand.

Het root-device kunt u beter niet opgeven met DUID.

RAID1 met drie schijven?

Softraid ondersteunt RAID1 met meer dan twee "delen" en de voorbeelden in de manpage laten een configuratie met drie schijven zien. RAID1 dupliceert simpelweg de gegevens over alle delen opslag, twee delen biedt volledige redundantie, drie geef extra fouttolerantie. Het voordeel van RAID met drie (of meer!) schijven is dat het geval van het falen van een enkele schijf, u NOG STEEDS volledige redundantie heeft. Zie het als een hot spare die geen tijd nodig heeft om te vullen! In theorie is een RAID1 met drie schijven langzamer met schrijven dan met twee schijven, maar hij is veel sneller met schijven dan een RAID1 met twee schijven die aan het herstellen is.

14.21.4 - Herstellen van rampen

Dit is het deel dat u wilt overslaan, maar toch niet overslaat. Dit deel is de reden voor RAID -- als schijven nooit zouden falen, dan zou u de complexiteit RAID niet aan uw systeem toevoegen! Helaas is het erg moeilijk om aan te geven hoe systemen precies falen, dus het is zeer waarschijnlijk dat het in uw geval niet precies zal verlopen zoals hier vermeld. Maar als u de tijd neemt om de strategie die hier is beschreven te begrijpen en het WAAROM snapt, dan kunt u ze hopelijk gebruiken om te herstellen van de situaties die zich in uw geval voordoen.

Bedenk dat fouten vaak niet eenvoudig zijn. De auteur van dit artikel heeft een schijf in een hardware RAID-behuizing gehad met een kortsluiting in de voedingsaansluiting die er niet alleen voor zorgde dat de schijf vervangen moest worden, maar ook de RAID-behuizing en de voeding van een tweede computer die hij gebruikte om te kijken of de schijf echt stuk was. En omdat hij de vervangende behuizing niet juist had ingesteld, moest de data ook vanaf backup worden teruggezet.

De stappen die nodig zijn voor het herstel van het systeem kunnen worden uitgevoerd in single user mode of vanaf de installatie kernel (bsd.rd).

Als u van plan bent om te oefenen met softraid-herstel (en we raden STERK aan om dat te doen!), dan kan het handig zijn om een schijf die u heeft verwijderd uit de RAID-opstelling volledig te wissen voordat u deze terugplaatst. Niet alleen bootst dit beter na dat u de schijf vervangt door een nieuwe, maar het voorkomt ook de verwarring die kan ontstaan als het systeem de restanten van een softraid-indeling ziet.

Herstel van een fout gebeurt meestal in twee stappen -- de eerste stap is om het systeem draaiend te krijgen, de tweede stap is om de defecte RAID-array te herstellen. Tussen deze twee stappen kan enige tijd zitten als u geen reserve-schijf bij de hand hebt.

Herstel van defecte schijf: secondaire schijf

Dit is relatief eenvoudig. U kunt de defecte schijf verwijderen om het systeem weer in de lucht te krijgen.

Als u klaar bent om het systeem te repareren, kunt u de defecte schijf vervangen, te RAID aanmaken en andere disklabel-partieies en dat de mirror herstellen. Ervan utigaande dat uw RAID-volume sd0 is en dat u de defecte schijf wd1m vervangt, dan zou het volgende moeten werken:

Herstel van defecte schijf: primaire schijf

Veel PC-achtige computers kunnen niet opstarten van de tweede schijf als de eerste defect is maar nog wel aangesloten, behalve als deze zo dood is dat hij niet wordt gezien. Vele kunnen niet booten als het niet de "eerste" is, ook al is er geen andre schijf.

Als de eerste schijf faalt, dan moet u deze in het algemeen verwijderen en in veel gevallen moet u de tweede schijf "opwaarderen" tot eerste schijf voordat het systeem kan opstarten. Dit kan betekenen dat u de jumpers anders moet instellen, de schijf op een andere poort moet aansluiten of een variant hierop. Uiteraard moet de tweede schijf niet alleen uw RAID-partitie bevatten, maar ook functioneel kunnen opstarten.

Zodra uw systeem draait op de tweede schijf en er een nieuwe schijf in zit, dan kunt u de RAID herstellen zoals hierboven.

Herstel van het "schuiven" van uw schijven

Stel dat u vier schijven in uw systeem heeft, sd0, sd1, sd2 sn sd3, en dat bij een hardware vervanging of upgrade de schijven uit de machine zijn gehaald en dat u niet meer weet welke welke was?

Gelukkig kan softraid hier goed mee overweg. Het beschouwt de schijven als "zwervend", maar stelt de array succesvol samen. De opstartschijf in de machine moet echter wel bootable zijn en als u zojuist wijzigingen in de root-partitie heeft gemaakt, dan wilt u waarschijnlijk zeker weten dat u niet per ongeluk van uw altroot-partitie start.

14.21.5 - Softraid Crypto

Cryptographische softraid(4)-volumes zijn tamelijk eenvoudig in te stellen: Als dit gedaan is, kunt u het crypto-volume "ontsleutelen" wanneer nodig met:
# bioctl -c C -l /dev/sd1m softraid0
Passphrase: My Crypto Pass Phrase
softraid0: CRYPTO volume attached as sd1
U kunt de versleutelde partities vervolgens mouten zoasl gebruikelijk.

Om een crypto-volume te ontkoppelen (waardoor het weer onbruikbaar wordt), dient u alle bestandssystemen te umounten en typt u het volgende (waarbij wd1 het versleutelde volume is):

# bioctl -d sd1
De manpage hiervoor ziet er een beetje eng uit, aangezien het -d commando wordt omschreven als het "verwijderen" van het volume. Maar in geval van crypto deactiveert het slechts het versleutelde volume zodat niet meer beanderd kan worden zonder passphrase.

Er zijn nog vele andere mogelijkheden met softraid en er worden nieuwe eigenschappen toegevoegd en verbeteringen doorgevoerd. Raadpleeg daarom de manpages van bioctl(8) en softraid(4) op uw systeem.

Ik ben mijn passphrase vergeten!

Helaas. Dit is echte encryptie en er is geen achterdeur of een magisch hulpmiddel om te ontsteutelen. Als uw passphrase kwijt is, dan is de data op uw softraid crypto volume verloren.

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


[terug] www@openbsd.org
$OpenBSD: faq14.html,v 1.84 2013/11/03 08:09:59 ajacoutot Exp $