diff --git a/nl_NL.ISO8859-1/books/handbook/config/chapter.sgml b/nl_NL.ISO8859-1/books/handbook/config/chapter.sgml
index bab4302e08..0bead7e37e 100644
--- a/nl_NL.ISO8859-1/books/handbook/config/chapter.sgml
+++ b/nl_NL.ISO8859-1/books/handbook/config/chapter.sgml
@@ -1,3453 +1,3455 @@
ChernLeeGeschreven door MikeSmithNaar een tutorial van MattDillonTevens gebaseerd op tuning(7) door DannyPanstersVertaald door Instellingen en optimalisatieOverzichtsysteeminstellingensysteemoptimalisatieSysteeminstellingen zijn een belangrijk aspect van &os;.
Correcte instellingen helpen moeilijkheden bij toekomstige
upgrades te voorkomen. In dit hoofdstuk wordt het instellen van
&os; beschreven, alsmede een aantal prestatiebevorderende
maatregelen waarmee een &os; systeem geoptimaliseerd kan
worden.Na het lezen van dit hoofdstuk weet de lezer:Hoe efficiënt om te gaan met bestandssystemen en
wisselpartities;De grondbeginselen van het rc.conf
instellingensysteem en van het opstarten van toepassingen
(diensten) met
- /usr/local/etc/rc.d;
+ /usr/local/etc/rc.d;
Hoe een netwerkkaart ingesteld en getest wordt;Hoe virtuele hosts op netwerkapparatuur ingesteld
worden;
- Hoe de instellingenbestanden in /etc
- gebruikt worden;
+ Hoe de instellingenbestanden in /etc gebruikt worden;Hoe &os; geoptimaliseerd kan worden met
sysctl-variabelen;Hoe schijfprestaties te verbeteren en hoe
kernelbeperkingen gewijzigd kunnen worden.Veronderstelde voorkennis:De grondbeginselen van &unix; en &os; () begrijpen;Bekend zijn met de grondbeginselen van kernelinstellingen
en compilatie ().Initiële instellingenPartitionerenpartitioneren
- /etc
+ /etc
- /var
+ /var
- /usr
+ /usrBasispartitiesBij het aanmaken van bestandssystemen met &man.bsdlabel.8;
of &man.sysinstall.8; is het van belang dat op een harde
schijf de gegevensoverdracht het snelst is aan de buitenste
sporen en het langzaamst aan de binnenste. Kleinere en
veelgebruikte bestandssystemen kunnen daarom het beste aan de
buitenkant van de schijf geplaatst worden, terwijl grotere
- partities als /usr meer naar de
+ partities als /usr meer naar de
binnenkant van de schijf geplaatst kunnen worden. Het is een
goed idee om partities aan te maken in deze of gelijksoortige
- volgorde: root, swap, /var,
- /usr.
+ volgorde: root, swap, /var,
+ /usr.
- De grootte van de /var-partitie hangt
+ De grootte van de partitie /var hangt
af van de wijze waarop de machine gebruikt gaat worden. Het
- bestandssysteem /var wordt gebruikt voor
- onder meer postbussen, logbestanden en printergegevens en
- -wachtrijen. Postbussen en logbestanden kunnen onverwacht
+ bestandssysteem /var wordt
+ gebruikt voor onder meer postbussen, logbestanden en printergegevens
+ en -wachtrijen. Postbussen en logbestanden kunnen onverwacht
groot worden, afhankelijk van het aantal systeemgebruikers en
de bewaarduur van logbestanden. De meeste gebruikers zullen
zelden meer dan ongeveer een gigabyte aan vrije schijfruimte
- op /var nodig hebben.
+ op /var nodig hebben.Er zijn een aantal gevallen waar een grote hoeveelheid
- ruimte in /var/tmp nodig is. Wanneer
- er nieuwe software wordt geïnstalleerd met
+ ruimte in /var/tmp nodig is.
+ Wanneer er nieuwe software wordt geïnstalleerd met
&man.pkg.add.1; pakken de pakketprogramma's een tijdelijke
- kopie van de pakketten uit in /var/tmp.
- Grote softwarepakketten, zoals
- Firefox of
+ kopie van de pakketten uit in /var/tmp. Grote softwarepakketten,
+ zoals Firefox of
OpenOffice kunnen lastig zijn om
te installeren wanneer er onvoldoende vrije schijfruimte
- beschikbaar is onder /var/tmp.
+ beschikbaar is onder /var/tmp.
- De partitie /usr bevat veel van de
- benodigde systeembestanden, waaronder de &man.ports.7;
+ De partitie /usr bevat veel
+ van de benodigde systeembestanden, waaronder de &man.ports.7;
collectie (aanbevolen) en de broncode (optioneel). Beide zijn
optioneel tijdens de installatie, maar we raden voor deze
partitie tenminste 2 gigabyte aan.Het is verstandig rekening te houden met de vereiste
schijfruimte bij het kiezen van partitiegroottes. Als in een
partitie onvoldoende vrije schijfruimte is, terwijl een andere
vrijwel niet gebruikt wordt, is dat een vervelend en niet
optimaal oplosbaar probleem.&man.sysinstall.8;'s Auto-defaults
partitiekeuze kan in de ervaring van sommige gebruikers
- mogelijk te kleine /var en
- / partities opleveren. Partitioneren
- moet verstandig en niet te zuinig gebeuren.
+ mogelijk te kleine /var en
+ / partities opleveren.
+ Partitioneren moet verstandig en niet te zuinig gebeuren.Wisselpartities (swap)swap groottewisselpartitiewisselpartitiegrootteDe vuistregel is dat het wisselbestand ongeveer het
dubbele van de grootte van het systeemgeheugen (RAM) moet
zijn. Als de machine bijvoorbeeld 128 megabytes geheugen
heeft, kan het beste een wisselbestand van (tenminste)
256 megabytes gebruikt worden. Minder dan
256 megabytes swap is in dit geval af te raden. Systemen
met weinig geheugen kunnen overigens beter functioneren met
meer swap. Ook is het verstandig rekening te houden met
eventuele geheugenuitbreiding in de toekomst. Bovendien zijn
de VM paging-algoritmen van de kernel zo afgestemd dat ze het
beste presteren bij een wisselbestand van tenminste tweemaal
de grootte van het geheugen. Een te kleine swap kan dus
inefficiënties in de VM-code tot gevolg hebben en
mogelijk problemen veroorzaken als het systeemgeheugen
uitgebreid wordt.Op grotere systemen met meerdere SCSI-schijven (of
meerdere IDE-schijven op verschillende controllers) is het aan
te raden om op elke schijf een wisselpartitie in te stellen
(dit kan tot en met vier schijven), elk met ongeveer dezelfde
grootte. De kernel kan met arbitraire groottes werken, maar
interne datastructuren schalen tot viermaal de grootste
swappartitie. De kernel kan de beschikbare ruimte voor het
wisselbestand het meest optimaal indelen als de partities
ongeveer even groot zijn. Een grote swap is prima, ook als ze
zelden gebruikt wordt. Zo kan het gemakkelijker zijn om een
(uit de hand gelopen) proces dat het systeem grotendeels bezet
houdt te beëindigen, voordat er opnieuw opgestart moet
worden.Waarom partitioneren?Waarom niet één enkele grote partitie
gebruiken? Er zijn verscheidene redenen waarom dit niet zo'n
goed idee is. De verschillende partities hebben hun eigen
karakteristieke operationele gedrag en vereisten. Door ze te
scheiden zijn er betere mogelijkheden om het systeem te
- optimaliseren. Vanaf de / en
- /usr partities wordt bijvoorbeeld vooral
- gelezen en er wordt weinig naar geschreven, terwijl er in
- /var en /var/tmp
- zowel veel gelezen als geschreven wordt.
+ optimaliseren. Vanaf de / en
+ /usr partities wordt
+ bijvoorbeeld vooral gelezen en er wordt weinig naar geschreven,
+ terwijl er in /var en
+ /var/tmp zowel veel gelezen
+ als geschreven wordt.
Door een systeem goed te partitioneren wordt vermeden dat
fragmentatie die optreedt in de kleinere partities met veel
schrijfactiviteit doorsijpelt naar partities die vooral
lees-intensief zijn. Door schrijf-intensieve partities aan
het begin van de schijf te plaatsen, zijn de prestaties wat
betreft invoer/uitvoer het beste is daar waar het het meest
nodig is. Ofschoon er natuurlijk ook de best mogelijke
in/uit prestaties wenselijk zijn in de grotere partities,
weegt het plaatsen van deze bestandssystemen aan het begin van
de schijf niet tegen de voordelen van het plaatsen van
- /var aan het begin van de schijf (na root
- en swap) voor de totale snelheid van het systeem. Tenslotte
- zijn er veiligheidsoverwegingen. Een compacte en nette
+ /var aan het begin van de
+ schijf (na root en swap) voor de totale snelheid van het systeem.
+ Tenslotte zijn er veiligheidsoverwegingen. Een compacte en nette
rootpartitie die vrijwel alleen-lezen is, heeft een betere
kans om een nare crash te overleven.Hoofdinstellingenrc bestandenrc.confDe voornaamste lokatie voor systeeminstellingen is
/etc/rc.conf. Dit bestand bevat een scala
aan instellingen, die gebruikt wordt om het systeem in te stellen
bij het opstarten. De naam impliceert dit al. Het is informatie
voor de rc* bestanden (rc staat voor
resource configuration of broninstellingen).De systeembeheerder wordt geacht regels toe te voegen aan
rc.conf om de standaardinstellingen uit
/etc/defaults/rc.conf aan te passen. Het
standaardbestand moet niet letterlijk gekopiëerd worden naar
- /etc. Het bevat standaardwaardes en is niet
- bedoeld als voorbeeld. Alle wijzigingen die specifiek zijn voor
- een systeem horen in /etc/rc.conf
+ /etc. Het bevat standaardwaardes
+ en is niet bedoeld als voorbeeld. Alle wijzigingen die specifiek zijn
+ voor een systeem horen in /etc/rc.conf
thuis.In een clusterscenario is het nuttig om systeemspecifieke
instellingen te scheiden van algemene instellingen die voor het
hele cluster gelden. Hiervoor kunnen een aantal strategieën
worden gebruikt. De aanbevolen benadering is om gedeelde
instellingen in een ander bestand te plaatsen, zoals
/etc/rc.conf.site en dit in te voegen in
/etc/rc.conf, wat verder alleen
systeemspecifieke informatie bevat.Aangezien rc.conf gelezen wordt door
&man.sh.1; is dit eenvoudig te bereiken:rc.conf:. /etc/rc.conf.site
hostname="node15.example.com"
network_interfaces="fxp0 lo0"
ifconfig_fxp0="inet 10.1.1.1"rc.conf.site:defaultrouter="10.1.1.254"
saver="daemon"
blanktime="100"rc.conf.site kan dan naar elk systeem
gedistribueerd worden met rsync of een
gelijksoortig programma, terwijl rc.conf
uniek blijft.Het actualiseren van het systeem met &man.sysinstall.8; of
make world overschrijft
rc.conf niet, zodat de bestaande
systeeminstellingen niet verloren gaan.Toepassingen instellenGeïnstalleerde toepassingen hebben meestal hun eigen
instellingenbestanden, met hun eigen syntaxis, etc. Het is van
belang deze bestanden apart te houden van het basissysteem, zodat
ze makkelijk gelokaliseerd kunnen worden en beheerd kunnen worden
met de hulpmiddelen voor pakketbeheer./usr/local/etcDeze bestanden worden meestal geïnstalleerd in
- /usr/local/etc. Als een toepassing een
- uitgebreide verzameling bestanden voor instellingen heeft, wordt
+ /usr/local/etc. Als een toepassing
+ een uitgebreide verzameling bestanden voor instellingen heeft, wordt
er een submap voor aangemaakt.Bij de installatie van een port of pakket, worden normaliter
ook voorbeeldbestanden met instellingen geïnstalleerd. Deze
zijn doorgaans te herkennen aan een toevoegsel
.default. Als er geen bestaande
instellingenbestanden voor de toepassing zijn, kunnen ze gemaakt
worden door de .default-bestanden te
kopiëren.Een voorbeeld is de map
- /usr/local/etc/apache:
+ /usr/local/etc/apache:
-rw-r--r-- 1 root wheel 2184 May 20 1998 access.conf
-rw-r--r-- 1 root wheel 2184 May 20 1998 access.conf.default
-rw-r--r-- 1 root wheel 9555 May 20 1998 httpd.conf
-rw-r--r-- 1 root wheel 9555 May 20 1998 httpd.conf.default
-rw-r--r-- 1 root wheel 12205 May 20 1998 magic
-rw-r--r-- 1 root wheel 12205 May 20 1998 magic.default
-rw-r--r-- 1 root wheel 2700 May 20 1998 mime.types
-rw-r--r-- 1 root wheel 2700 May 20 1998 mime.types.default
-rw-r--r-- 1 root wheel 7980 May 20 1998 srm.conf
-rw-r--r-- 1 root wheel 7933 May 20 1998 srm.conf.defaultAan de grootte van de bestanden is te zien dat alleen
srm.conf gewijzigd is. Als later de port
Apache wordt vernieuwd, wordt dit
bestand niet overschreven.TomRhodesBijgedragen door Diensten startendienstenVeel gebruikers kiezen ervoor om software van derden te
installeren op &os; vanuit de Portscollectie. In veel gevallen
is het noodzakelijk om de software dusdanig in te stellen dat
het opstart tijdens het opstarten van de computer. Diensten
zoals mail/postfix of
www/apache13 zijn slechts
twee voorbeelden van softwarepakketten die gestart kunnen worden
tijdens de systeemstart. In deze paragraaf wordt toegelicht hoe
software van derde partijen kan worden gestart.In &os; worden de meeste diensten, zoals &man.cron.8;, door
de opstartscripts van het systeem gestart. Deze scripts kunnen
verschillen tussen &os; en leverancierversies, echter het meest
belangrijke aspect om in gedachten te houden is dat hun
opstartinstellingen verwerkt kunnen worden door simpele
opstartscripts.Voor de komst van rc.d zetten
applicaties simpelweg een opstartscript in de map /usr/local/etc/rc.d dat dan
uitgelezen werd door de opstartscripts van het systeem. Deze
scripts werden dan uitgevoerd tijdens de laatste stappen van een
systeemstart.Terwijl veel individuen bezig waren om de oude stijl van
instellen naar de nieuwe stijl over te zetten, bleef sommige
software nog steeds een script nodig hebben in de genoemde map.
De subtiele verschillen in de scripts hangen af van het wel of
niet gebruiken van rc.d.
+
Vóór &os; 5.1 werden scripts oude
stijl gebruikt en in bijna alle gevallen voldoet een
script nieuwe stijl.Elk script moet uitvoerbaar zijn door het systeem; dit wordt
meestal bereikt door gebruik te maken van het commando
chmod en het instellen van de unieke
permissies 555. Op zijn minst moeten ook de
start en stop opties
aanwezig zijn om de applicatie te starten en te stoppen.Het simpelste opstartscript ziet er waarschijnlijk als volgt
uit:#!/bin/sh
echo -n ' utility'
case "$1" in
start)
/usr/local/bin/utility
;;
stop)
kill -9 `cat /var/run/utility.pid`
;;
*)
echo "Usage: `basename $0` {start|stop}" >&2
exit 64
;;
esac
exit 0Dit script levert de opties stop en
start voor de applicatie met de naam
utility.Dit kan handmatig gestart worden met:&prompt.root; /usr/local/etc/rc.d/utility startHoewel niet alle software van derden een regel nodig heeft
in /etc/rc.conf, wordt er bijna elke dag
een wel een port veranderd om deze instellingen te ondersteunen.
De meldingen tijdens de installatie van de port bevatten vaak
meer informatie. Sommige software van derden levert
opstartscripts die de applicatie kunnen laten werken met
rc.d. Dit wordt in de volgende paragraaf
behandeld.Uitgebreide applicatieinstellingenNu &os; rc.d heeft, zijn de
instellingen van applicaties die mee moeten opstarten
versimpeld en rijker aan mogelijkheden. Door gebruik te maken
van de sleutelwoorden die in de paragraaf rc.d
behandeld worden, kunnen applicaties nu starten na andere
diensten. DNS kan bijvoorbeeld extra
opties meekrijgen van /etc/rc.conf in
plaats van hard ingestelde opties in het opstartscript. Een
basisscript ziet er ongeveer als volgt uit:#!/bin/sh
#
# PROVIDE: utility
# REQUIRE: DAEMON
# KEYWORD: shutdown
#
# WIJZIG DEZE WAARDEN NIET HIER
# MAAR IN HET BESTAND /etc/rc.conf
#
utility_enable=${utility_enable-"NO"}
utility_flags=${utility_flags-""}
utility_pidfile=${utility_pidfile-"/var/run/utility.pid"}
. /etc/rc.subr
name="utility"
rcvar=`set_rcvar`
command="/usr/local/sbin/utility"
load_rc_config $name
pidfile="${utility_pidfile}"
start_cmd="echo \"Starting ${name}.\"; /usr/bin/nice -5 ${command} ${utility_flags} ${command_args}"
run_rc_command "$1"Dit script zorgt ervoor dat
utility wordt gestart na de dienst
daemon. Het biedt ook de mogelijkheid voor
het instellingen en volgen van het PID of
het proces-ID bestand.Voor deze applicatie kan dan de volgende regel in
/etc/rc.conf geplaatst worden:utility_enable="YES"Deze methode maakt het volgende mogelijk: makkelijker
commandoregelopties manipuleren, importeren van
standaardfuncties uit /etc/rc.subr,
compatibiliteit met het gereedschap &man.rcorder.8; en het
levert makkelijkere configuratie via het bestand
rc.conf.Diensten met diensten startenAndere diensten, zoals POP3-server
daemons, IMAP, enzovoort, kunnen gestart
worden door gebruik te maken van &man.inetd.8;. Daaraan is
voorafgegaan dat die dienst uit de Portscollectie is
geïstalleerd en dat er een regel met instellingen is
toegevoegd aan /etc/inetd.conf of
één van de bestaande niet actieve regels is
geactiveerd. Werken met inetd en
zijn instellingen wordt uitgebreid toegelicht in de paragraaf
over inetd.In sommige gevallen is het handiger om &man.cron.8; te
gebruiken om diensten te starten. Deze aanpak heeft een aantal
voordelen omdat cron start als de eigenaar
van crontab. Dit stelt reguliere
gebruikers in staat om sommige applicaties te starten en te
onderhouden.cron levert een unieke optie: in plaats
van een tijdsspecificatie kan @reboot
gebruikt worden. Dit zorgt ervoor dat de taak gestart wordt als
&man.cron.8; gestart wordt, meestal tijdens een
systeemstart.TomRhodesGeschreven door cron instellencroninstellenEen zeer nuttig hulpprogramma in &os; is &man.cron.8;. De
daemon cron draait op de achtergrond en
controleert voortdurend /etc/crontab. Ook
controleert cron de map
- /var/cron/tabs, op zoek naar nieuwe
+ /var/cron/tabs, op zoek naar nieuwe
crontab bestanden. Deze
crontab bestanden bevatten informatie over
specifieke taken die cron moet verrichten op
gezette tijden.cron gebruikt twee verschillende soorten
instellingenbestanden: de systeemcrontab en gebruikerscrontabs.
Het enige verschil tussen deze twee formaten is het zesde veld.
In de systeemcrontab is dit de gebruikersnaam die het commando
uitvoert. Hierdoor kunnen met de systeemcrontab commando's als
iedere gebruiker uitgevoerd worden. In een gebruikerscrontab is
het zesde veld het uit te voeren commando en alle commando's
worden uitgevoerd als de gebruiker die de crontab heeft
aangemaakt. Dit is een belangrijke veiligheidsmaatregel.Gebruikerscrontabs geven individuele gebruikers de
mogelijkheid om bepaalde terugkerende taken automatisch te laten
uitvoeren zonder dat root-rechten noodig
zijn. Commando's in de crontab van een gebruiker worden
uitgevoerd met de rechten van de eigenaar.root kan ook een gebruikerscrontab
aanleggen. Dit is niet dezelfde als
/etc/crontab (de systeemcrontab). Omdat er
al een systeemcrontab is, is het doorgaans niet nodig om een
gebruikerscrontab voor root te
maken./etc/crontab (de systeemcrontab) ziet er
uit als volgt:# /etc/crontab - root's crontab for &os;
#
# $&os;: src/etc/crontab,v 1.32 2002/11/22 16:13:39 tom Exp $
#
#
SHELL=/bin/sh
PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin
HOME=/var/log
#
#
#minuut uur mdag maand wdag wie commando
#
#
*/5 * * * * root /usr/libexec/atrun Zoals in de meeste &os; instellingenbestanden gaat het
karakter # vooraf aan commentaar.
Commentaar wordt gebruikt als uitleg en geheugensteun.
Commentaar dient niet vermengd te worden met commando's,
anders wordt het commentaar opgevat als deel van het commando.
Blanco regels worden genegeerd.Eerst worden omgevingsvariabelen gedefiniëerd.
Hoervoor wordt het is-gelijk karakter (=)
gebruikt. In het bovenstaande voorbeeld wordt het gebruikt
voor de variabelen SHELL, PATH
en HOME. Als de regel SHELL
ontbreekt, gebruikt cron standaard
sh als shell. Voor de omgevingsvariabele
PATH bestaat geen standaardwaarde. Als
PATH ontbreekt moeten absolute paden gebruikt
worden. Als HOME ontbreekt, gebruikt
cron de thuismap van de de gebruiker die
cron aanroept.In deze commentaarregel staan de zeven velden van een
crontabdefinitie. Dit zijn minuut,
uur, mdag,
maand, wdag,
wie en commando. De
betekenissen liggen voor de hand: minuut
is het aantal minuten van het tijdstip waarop het commando
moet worden uitgevoerd; uur geeft het uur
aan; mdag staat voor de dag van de maand;
maand staat voor het maandnummer en
wdag geeft de dag van de week aan. Het
veld wie is bijzonder en bestaat alleen in
/etc/crontab. Het geeft aan als welke
gebruiker het commando uitgevoerd moet worden. Een gebruiker
die zijn eigen crontab installeert,
heeft deze optie niet. Het veld commando
bevat het uit te voeren commando.In deze regel worden aan de hierboven besproken opties
waarden toegekend. Er wordt gebruik gemaakt van
*/5 en * karakters.
Deze betekenen eerst-laatst en kunnen gezien
worden als telkens. In deze regel staat
dus dat het commando atrun elke vijf
minuten moet worden uitgevoerd door root, ongeacht welke dag of maand het is. Meer informatie over
atrun staat in &man.atrun.8;.Commando's kunnen een willekeurig aantal opties of
argumenten meekrijgen. Als commando's echter meerdere regels
nodig hebben moeten deze regels afgebroken worden met een
backslash \ karakter, om aan te geven dat ze op
de volgende regel vervolgd worden.Dit is de basisopzet voor elk crontab
bestand. De enige uitzondering is de aanwezigheid van veld zes,
waar de gebruikersnaam wordt aangegeven. Dit veld bestaat alleen
in het systeembestand /etc/crontab. Voor
crontabbestanden van individuele gebruikers
moet dit veld worden weggelaten.Een crontab installerenDe onderstaande procedure moet niet gebruikt worden om de
systeemcrontab te wijzigen of te installeren. Er kan een
gewone editor gebruikt worden. cron
ziet dat het bestand veranderd is en begint direct met het
gebruiken van de nieuwe versie. Deze
FAQ vraag geeft verdere uitleg.Om een nieuwe crontab te installeren
moet eerst een bestand in het juiste formaat gemaakt worden en
daarna moet het geiuml;nstalleerd worden met commando
crontab:&prompt.root; crontab crontabbestandIn dit voorbeeld is crontabbestand de
naam van een eerder gemaakt
crontab-bestand.Er bestaat ook een optie om een lijst van
geïnstalleerde crontab-bestanden op te
vragen, namelijk de optie van
crontab.Gebruikers die hun eigen crontabbestand willen schrijven
zonder het gebruik van een sjabloon, kunnen gebruik maken van
crontab -e. Dit opent de
EDITOR met een leeg bestand. Als het bestand
wordt opgeslagen en de editor wordt afgesloten, wordt het
bestand automatisch als crontab
geïnstalleerd.Een gebruikerscrontab kan verwijderd
worden door de met crontab de optie
te gebruiken.TomRhodesGeschreven door Gebruik van rc met &os;rc.dSinds 2002 gebruikt &os; het NetBSD rc.d
systeem bij het opstarten van het systeem. Veel van de bestanden
- in /etc/rc.d zijn scripts voor basisdiensten
- die werken met de opties ,
+ in /etc/rc.d zijn scripts voor
+ basisdiensten die werken met de opties ,
en , analoog aan
hoe diensten die via een port of pakket zijn geïnstalleerd
gestart worden met de scripts in
/usr/local/etc/rc.d. &man.sshd.8; kan
bijvoorbeeld als volgt herstart worden:&prompt.root; /etc/rc.d/sshd restartDeze procedure is vrijwel gelijk voor andere diensten.
Uiteraard worden diensten meestal automatisch tijdens het
opstarten van de computer gestart zoals in &man.rc.conf.5; staat.
Om de Network Address Translation daemon bij het opstarten te
laten starten is de volgende regel in
/etc/rc.conf bijvoorbeeld voldoende:natd_enable="YES"Als er reeds een natd_enable="NO" regel is,
kan NO gewoon in YES
veranderd worden. De rc scripts starten, voor zover nodig,
automatisch andere afhankelijke diensten.Omdat het rc.d systeem in eerste
instantie bedoeld is om diensten te starten en stoppen bij het
opstarten en afsluiten van het systeem, werken de standaardopties
, en
alleen als de juiste variabelen in
/etc/rc.conf zijn ingesteld. Het commando
sshd restart alleen dan als
sshd_enable de waarde YES
heeft in /etc/rc.conf. Als er een dienst
gestart, gestopt of herstart moet worden, ongeacht de definities
in /etc/rc.conf, moet het commando
voorafgegaan worden door one. Dus om
sshd te herstarten ongeacht
de instellingen in /etc/rc.conf, voldoet het
volgende commando:&prompt.root; /etc/rc.d/sshd onerestartHet is eenvoudig te controleren of een dienst is ingeschakeld
is in /etc/rc.conf door het bijpassende
rc.d-script uit te voeren met de optie
. Voor sshd:&prompt.root; /etc/rc.d/sshd rcvar
# sshd
$sshd_enable=YESDe tweede regel (# sshd) is de
uitvoer van sshd, geen
root-console.De optie wordt gebruikt om vast te
stellen of een dienst gestart is. Om bijvoorbeeld te controleren
of sshd gestart is:&prompt.root; /etc/rc.d/sshd status
sshd is running as pid 433.In sommige gevallen is het ook mogelijk om een dienst te
herstarten met de optie . Dan wordt er
getracht een signaal te sturen aan een individuele dienst, waarbij
de dienst de bestanden met instellingen opnieuw in moet lezen.
Meestal komt dit neer op het verzenden van het signaal
SIGHUP. Deze optie wordt niet door alle
diensten ondersteund.Het rc.d-systeem wordt niet alleen
gebruikt voor netwerkdiensten, maar ook voor het merendeel van de
systeemstart. In dit kader is bijvoorbeeld het bestand
bgfsck interessant. Als dit script wordt
uitgevoerd, wordt de volgende boodschap getoond:Starting background file system checks in 60 seconds.Dit script wordt dus gebruikt voor bestandssysteemcontrole in
de achtergrond, hetgeen alleen tijdens de systeemstart
gebeurt.Veel systeemdiensten zijn afhankelijk van andere diensten om
correct te kunnen functioneren. Zo starten NIS en andere
RPC-gebaseerde diensten niet als de dienst
rpcbind (portmapper) nog niet draait. Om dit
te stroomlijnen wordt informatie over afhankelijkheden en andere
metagegevens ingevoegd in het commentaar bovenaan het
opstartscript. Deze commentaarregels worden vervolgens tijdens de
systeemstart met &man.rcorder.8; verwerkt om zo vast te stellen in
welke volgorde de systeemdiensten gestart moeten worden.De volgende woorden moeten in alle opstartscripts staan (ze
zijn benodigd door &man.rc.subr.8; om het opstartscript te
activeren):PROVIDE: geeft aan in welke diensten
dit bestand voorziet.REQUIRE: geeft aan welke andere
diensten vereist zijn voor deze dienst. Dit script wordt
uitgevoerd na de aangegeven
diensten.BEFORE: geeft diensten aan die
afhankelijk zijn van deze dienst. Dit bestand wordt
uitgevoerd vóór de
aangegeven diensten.Met deze methode kan een systeembeheerder gemakkelijk
systeemdiensten besturen, zonder gedoe met
runlevels zoals bij sommige andere &unix;
systemen.Meer informatie over het rc.d-systeem
staat in &man.rc.8; en &man.rc.subr.8;. Als u geïnteresseerd
bent in het schrijven van uw eigen
rc.d-script of om de huidige scripts te
verbeteren is wellicht dit
artikel interessant.MarcFonvieilleGeschreven door Netwerkkaarten instellennetwerkkaarteninstellenHet is tegenwoordig nauwelijks voorstelbaar dat een computer
geen netwerkverbinding heeft. Het toevoegen en instellen van een
netwerkkaart is een gebruikelijke taak voor een
&os;-beheerder.Het juiste stuurprogramma vindennetwerkkaartenstuurprogrammaVoor het zoeken begint, moet duidelijk zijn om welke kaart
het gaat, welke chip erop zit en of het een PCI- of ISA-kaart
is. &os; ondersteunt vele kaarten. Op de Hardware
Compatibiliteitslijst voor de betreffende uitgave staan de
kaarten die ondersteund worden.Als duidelijk is dat een kaart ondersteund wordt, moet
vastgesteld worden wat het geschikte stuurprogramma is. In het
bestand /usr/src/sys/conf/NOTES staat een
lijst van stuurprogramma's voor netwerkinterfaces met wat
informatie over de ondersteunde chipsets of kaarten. In geval
van twijfel biedt de hulppagina voor het stuurprogramma
(man) vaak uitkomst. In het algemeen bevat
deze meer informatie over de ondersteunde hardware en mogelijke
problemen die kunnen optreden.Als een veelgebruikte kaart gebruikt wordt, hoeft meestal
niet ver gezocht te worden. Stuurprogramma's voor
veelvoorkomende netwerkinterfaces zijn al aanwezig in de
algemene kernel GENERIC. In dat geval
wordt zo'n kaart al gevonden bij het opstarten, bijvoorbeeld met
het volgende bericht:dc0: <82c169 PNIC 10/100BaseTX> port 0xa000-0xa0ff mem 0xd3800000-0xd38
000ff irq 15 at device 11.0 on pci0
dc0: Ethernet address: 00:a0:cc:da:da:da
miibus0: <MII bus> on dc0
ukphy0: <Generic IEEE 802.3u media interface> on miibus0
ukphy0: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto
dc1: <82c169 PNIC 10/100BaseTX> port 0x9800-0x98ff mem 0xd3000000-0xd30
000ff irq 11 at device 12.0 on pci0
dc1: Ethernet address: 00:a0:cc:da:da:db
miibus1: <MII bus> on dc1
ukphy1: <Generic IEEE 802.3u media interface> on miibus1
ukphy1: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, autoIn dit voorbeeld zitten er twee kaarten in het systeem die
het stuurprogramma &man.dc.4; gebruiken.Als het stuurprogramma voor een NIC geen onderdeel is van de
kernel GENERIC, dan dient het juiste
stuurprogramma voor die NIC geladen te worden. Dit kan op twee
manieren:De meest eenvoudige manier is het laden van een
kernelmodule voor een netwerkkaart met &man.kldload.8; of
automatisch tijdens het opstarten van het systeem door de
benodigde regel toe te voegen aan
/boot/loader.conf. Niet alle
NIC-stuurprogramma's zijn als module beschikbaar. Zo zijn
er bijvoorbeeld geen modules beschikbaar voor
ISA-kaarten.Ondersteuning voor een kaart kan ook in de kernel
gecompileerd worden. In
/usr/src/sys/conf/NOTES,
/usr/src/sys/arch/conf/NOTES
en de hulppagina van het stuurprogramma is na te lezen wat
er in het kernelinstellingenbestand moet staan. In staat meer informatie over het
compileren van een eigen kernel. Als een netwerkkaart al
bij het opstarten wordt herkend door de kernel
GENERIC, is er geen reden om een andere
kernel te bouwen.Gebruik maken van &windows;
NDIS-stuurpgrogramma'sNDISNDISulator&windows; driversMicrosoft WindowsMicrosoft Windowsdevice driversKLD (kernel loadable object)Helaas zijn er nog steeds veel leveranciers die geen
schema's leveren voor stuurprogramma's aan de open-source
gemeenschap, omdat ze deze informatie beschouwen als
handelsgeheimen. Als gevolg daarvan hebben de ontwikkelaars
van &os; en andere projecten twee keuzes: zelf de
stuurprogramma's ontwikkelen door een langdurig en pijnlijk
proces van de huidige stuurprogramma's te ontcijferen, of door
gebruik te maken van de huidige binaire bestanden voor het
µsoft.windows; platform. De meeste ontwikkelaars,
inclusief diegeen die gekoppeld zijn aan &os;, hebben voor het
laatste gekozen.Dankzij de bijdragen van Bill Paul (wpaul) is er vanaf
&os; 5.3-RELEASE native ondersteuning
voor de Network Driver Interface Specification (NDIS). De
&os; NDISulator (ook wel bekend als Project Evil) neemt een
binair &windows; stuurprogramma en doet net alsof deze in een
&windows; systeem draait. Omdat het stuurprogramma
&man.ndis.4; een &windows; binary gebruikt; is het alleen
bruikbaar op &i386;- en amd64-systemen.Het stuurprogramma &man.ndis.4; is ontwikkeld om
ondersteuning te geven aan PCI-, CardBus- en
PCMCIA-apparaten, USB-apparaten worden nog niet
ondersteund.Om gebruik te kunnen maken van de NDISulator heeft u drie
dingen nodig:De bronbestanden van de kernelEen &windowsxp; stuurprogramma (met de extensie
.SYS)Een instellingenbestand van het &windowsxp;
stuurprogramma (met de extensie
.INF)Lokaliseer de bestanden voor uw specifieke kaart. Over
het algemeen kunnen deze gevonden worden op de bijgeleverde
CD's of op de website van de leverancier. In de volgende
voorbeelden maken we gebruik van
W32DRIVER.SYS en
W32DRIVER.INF.Let op, u kunt geen gebruik maken van een &windows;/i386
stuurprogramma op &os;/amd64, hiervoor zult u een
&windows;/amd64 stuurprogramma moeten gebruiken om het
werkend te krijgen.De volgende stap is het compileren van het binaire
stuurprogramma in een laadbare kernelmodule. Om dit voor
elkaar te krijgen moet &man.ndisgen.8; gebruikt worden als
root.&prompt.root; ndisgen /pad/naar/W32DRIVER.INF/pad/naar/W32DRIVER.SYSHet gereedschap &man.ndisgen.8; is interactief en zal
vragen om extra informatie als dat nodig is; het zal een
kernelmodule produceren in de huidige map die als volgt
gebruikt kan worden:&prompt.root; kldload ./W32DRIVER.koNaast de gegenereerde kernelmodule, moeten ook de modules
ndis.ko en
if_ndis.ko geladen worden. Dit zou
automatisch moeten gebeuren als er een module geladen wordt
dit afhankelijk is van &man.ndis.4;. Als ze handmatig
ingeladen moeten worden gebruik dan de volgende
commando's:&prompt.root; kldload ndis
&prompt.root; kldload if_ndisHet eerste commando laadt de stuurprogrammawrapper voor de
NDIS miniport, de tweede laadt de daadwerkelijke
netwerkinterface.Controleer nu &man.dmesg.8; om te zien of er ergens fouten
voorkomen. Als alles goed gegaan is ziet u ongeveer het
volgende:ndis0: <Wireless-G PCI Adapter> mem 0xf4100000-0xf4101fff irq 3 at device 8.0 on pci1
ndis0: NDIS API version: 5.0
ndis0: Ethernet address: 0a:b1:2c:d3:4e:f5
ndis0: 11b rates: 1Mbps 2Mbps 5.5Mbps 11Mbps
ndis0: 11g rates: 6Mbps 9Mbps 12Mbps 18Mbps 36Mbps 48Mbps 54MbpsVanaf dit moment kan de ndis0
net zo gebruikt worden als elke andere netwerkkaart (bv.
dc0).Het systeem kan geconfigureerd worden zodat de
NDIS-modules automatisch gestart worden tijdens het opstarten
van het systeem, net zoals bij andere modules. Kopieer eerst
de gegenereerde module W32DRIVER.ko naar
de map /boot/modules.
Voeg daarna de volgende regel toe aan
/boot/loader.conf:W32DRIVER_load="YES"De netwerkkaart instellennetwerkkaarteninstellenNadat een geschikt stuurprogramma geladen is, moet de kaart
nog ingesteld worden. Mogelijk is dit al gebeurd door
sysinstall tijdens de
installatie.Om de instellen van de netwerkkaarten weer te geven:&prompt.user; ifconfig
dc0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
inet 192.168.1.3 netmask 0xffffff00 broadcast 192.168.1.255
ether 00:a0:cc:da:da:da
media: Ethernet autoselect (100baseTX <full-duplex>)
status: active
dc1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
inet 10.0.0.1 netmask 0xffffff00 broadcast 10.0.0.255
ether 00:a0:cc:da:da:db
media: Ethernet 10baseT/UTP
status: no carrier
lp0: flags=8810<POINTOPOINT,SIMPLEX,MULTICAST> mtu 1500
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
inet 127.0.0.1 netmask 0xff000000
tun0: flags=8010<POINTOPOINT,MULTICAST> mtu 1500Op oudere versies van of &os; moet volgens
&man.ifconfig.8; misschien de optie
gebruikt worden. In &man.ifconfig.8; zijn meer details over
de syntaxis te lezen. In dit voorbeeld is de uitvoer over
IPv6 (inet6 etc.) achterwege
gelaten.In dit voorbeeld werden de volgende apparaten
weergegeven:dc0: de eerste
Ethernet-interface;dc1: de tweede
Ethernet-interface;lp0: de parallelle
poortinterface;lo0: het
loopback-apparaat;tun0: het tunnelapparaat
gebruikt door ppp.&os; gebruikt de naam van het stuurprogramma gevolgd door
een nummer voor de volgorde waarop de kaarten gedetecteerd zijn
bij het opstarten. sis2 is de derde
netwerkkaart in het systeem die het stuurprogramma &man.sis.4;
gebruikt.In het vorige voorbeeld is het apparaat
dc0 volledig operationeel. Dit blijkt
uit de volgende indicatoren:UP betekent dat de kaart ingesteld is
en klaar is voor gebruik;De kaart heeft een Internet (inet)
adres (in dit geval 192.168.1.3);Het heeft een geldig subnetmasker
(netmask; 0xffffff00 is hetzelfde als
255.255.255.0);Het heeft een geldig broadcastadres (in dit geval
192.168.1.255);Het MAC-adres van de kaart (ether) is
00:a0:cc:da:da:da;De fysieke mediaselectie staat in autoselectiemodus
(media: Ethernet autoselect (100baseTX
<full-duplex>)).
dc1 is ingesteld om met
10baseT/UTP-media te werken. Meer
informatie over de mogelijke mediatypes staan in de
hulppagina's voor het betreffende stuurprogramma.De status van de verbinding (status)
is active, dat wil zeggen dat de drager
is gevonden. Bij dc1staat echter
status: no carrier. Dit is normaal als
er geen Ethernetkabel in de kaart gestoken is.Als de uitvoer &man.ifconfig.8; er ongeveer zoals hieronder
uitziet, dan is de netwerkkaart nog niet ingesteld:dc0: flags=8843<BROADCAST,SIMPLEX,MULTICAST> mtu 1500
ether 00:a0:cc:da:da:daOm de kaart in te stellen zijn
root-rechten nodig. De netwerkkaart kan
vanaf de console worden ingesteld met &man.ifconfig.8;, maar dan
moet dat na elke herstart herhaald worden. Daarom wordt het
vrijwel altijd in /etc/rc.conf
gezet.In /etc/rc.conf moet voor elke
netwerkkaart in een systeem een regel toegevoegd worden. In het
huidige voorbeeld zou dat het volgende kunnen zijn:ifconfig_dc0="inet 192.168.1.3 netmask 255.255.255.0"
ifconfig_dc1="inet 10.0.0.1 netmask 255.255.255.0 media 10baseT/UTP"dc0, dc1,
enzovoort, moeten vervangen worden door de correcte
stuurprogramma's voor de netwerkkaarten, zo ook de
IP-adressen. In de handleiding van het
stuurprogramma en van &man.ifconfig.8; staan meer details over
de mogelijke opties en in &man.rc.conf.5; staat meer informatie
over /etc/rc.conf.Als het netwerk al is ingesteld tijdens het installeren van
&os; staan er al enkele regels met betrekking tot de
netwerkkaart(en) in /etc/rc.conf. Het is
dus handig /etc/rc.conf te controleren
voordat er regels toegevoegd worden.Ook /etc/hosts moet worden gewijzigd om
de namen en IP adressen van verschillende
machines op het lokale netwerk, als ze er nog niet in staan.
Meer informatie staat in &man.hosts.5; en
/usr/share/examples/etc/hosts.Testen en problemen oplossenAls de veranderingen in /etc/rc.conf
zijn gemaakt, moet het systeem opnieuw gestarten worden (of
moeten nauwkeurig alle daemons gestart of herstart worden).
Veranderingen aan de interface(s) worden dan toegepast en dan
kan er controleerd worden of herstarten goed werkt zonder
foutmeldingen.Als de kaart werkt, maar de prestaties zijn slecht, dan kan
het de moeite waard zijn om &man.tuning.7; door te nemen.
Incorrecte netwerkinstellingen kunnen ook tot langzame
verbindingen leiden.Soms kunnen enkele device timeouts
optreden. Met sommige kaarten is dit normaal gedrag. Maar als
dit continu gebeurt of storend is, is het verstandig uit te
zoeken of er geen sprake is van een hardwareconfict tussen de
netwerkkaart en een ander apparaat. Ook dient nogmaals de
bekabeling gecontroleerd te worden. Misschien zit er niets
anders op dan een andere netwerkkaart te gebruiken.Het is ook mogelijk dat er watchdog
timeout foutmeldingen optreden. Als eerste moet
dan de netwerkkabel gecontroleerd worden. Veel kaarten hebben
een PCI-slot nodig dat Bus Mastering ondersteunt. Sommige
oudere moederborden hebben maar één PCI-slot
waarmee dit kan (meestal slot 0). In de documentatie van de
netwerkkaart en het moederbord is na te gaan of dit het
probleem is.No route to host meldingen treden op
als het systeem niet in staat is om een pakket naar de
eindbestemming te routeren. Dit kan gebeuren als er geen
standaardroute aangegeven is of als er een kabel niet verbonden
is. De uitvoer van netstat -rn moet
gecontroleerd worden of er een geldige route is naar de
bestemming. Mocht dit niet het geval zijn, dan staat er meer
informatie in .ping: sendto: Permission denied
foutmeldingen worden vaak veroorzaakt door een verkeerd
ingestelde firewall. Als de kernel ipfw
activeert bij het opstarten zonder dat er firewallregels zijn
gedefiniëerd, is het standaardbeleid om alle verkeer te
weigeren, zelfs pings! In staat meer
informatie.Er kan ook sprake zijn van onvoldoende prestaties doordat de
instelling van de mediaselectie niet optimaal is. In dergelijke
gevallen is het mogelijk om de mediaselectie niet als
autoselect in te stellen, maar expliciet aan
te geven wat de mediaselectie moet zijn, bijvoorbeeld
10baseT/UTP voor twisted pair. Hoewel dit voor de meeste
hardware helpt, kan het zijn dat de problemen blijven. Dan
moeten nogmaals de netwerkinstellingen gecontroleerd worden en
geeft de &man.tuning.7; handleiding wellicht meer
informatie.Virtuele hostsvirtuele hostsIP-aliassen&os; wordt veel gebruikt voor virtuele sitehosting, waarbij
één fysieke server er op het netwerk uitziet alsof
het meerdere servers zijn. Dit kan bereikt worden door meerdere
IP-adressen toe te kennen aan dezelfde
interface.Een bepaalde netwerkinterface heeft een echt
adres en kan daarnaast een willekeurig aantal
alias-adressen hebben. Normaliter worden
dergelijke aliassen toegevoegd door aliasregels toe te voegen aan
/etc/rc.conf.Een aliasregel voor de interface
fxp0 ziet er zo uit:ifconfig_fxp0_alias0="inet xxx.xxx.xxx.xxx netmask xxx.xxx.xxx.xxx"De aliasregels moeten beginnen met alias0
en moete elkaar dan opvolgen (bijvoorbeeld
_alias1,, _alias2,
enzovoort). Het instelproces stopt als er een nummer
ontbreekt.Het is belangrijk dat aliassen het juiste netmasker hebben.
Dit is eenvoudig: Een bepaalde interface moet altijd
één adres hebben dat het netmasker van het netwerk
correct representeert. Elk ander adres binnen dit netwerk op deze
interface (alias) moet een netmasker van allemaal
1'en (bits) hebben (getoond als 255.255.255.255 of 0xffffffff).Een voorbeeld. Stel de interface
fxp0 is verbonden met twee netwerken, het
netwerk 10.1.1.0 met masker
255.255.255.0 en het netwerk
202.0.75.16 met netmasker
255.255.255.240. Het systeem
moet ook de adressen 10.1.1.1 tot
en met 10.1.1.5 en 202.0.75.17 tot en met 202.0.75.20 krijgen. Zoals hierboven
vermeld, heeft alleen het eerste adres in een netwerkreeks (in dit
geval 10.0.1.1 en 202.0.75.17) een geldig netmasker. Alle
overige (10.1.1.2 tot en met
10.1.1.5 en 202.0.75.18 tot en met 202.0.75.20) moeten ingesteld worden met
het netmasker 255.255.255.255.De volgende regels voor /etc/rc.conf
stellen een adapter in voor het bovenstaande scenario:ifconfig_fxp0="inet 10.1.1.1 netmask 255.255.255.0"
ifconfig_fxp0_alias0="inet 10.1.1.2 netmask 255.255.255.255"
ifconfig_fxp0_alias1="inet 10.1.1.3 netmask 255.255.255.255"
ifconfig_fxp0_alias2="inet 10.1.1.4 netmask 255.255.255.255"
ifconfig_fxp0_alias3="inet 10.1.1.5 netmask 255.255.255.255"
ifconfig_fxp0_alias4="inet 202.0.75.17 netmask 255.255.255.240"
ifconfig_fxp0_alias5="inet 202.0.75.18 netmask 255.255.255.255"
ifconfig_fxp0_alias6="inet 202.0.75.19 netmask 255.255.255.255"
ifconfig_fxp0_alias7="inet 202.0.75.20 netmask 255.255.255.255"Instellingenbestanden
- /etc layout
+ /etc layoutInstellingengegevens wordt in een aantal mappen bewaard.
Daar zijn onder andere:
- /etc
+ /etcGenerieke systeeminstellingenbestanden, specifiek
voor het systeem.
- /etc/defaults
+ /etc/defaults
- De standaardversies van
- systeeminstellingenbestanden die gebruikt worden als er
- geen in /etc staat.
+ De standaardversies van systeeminstellingenbestanden.
- /etc/mail
+ /etc/mailExtra &man.sendmail.8; instellingenbestanden of
- instellingenbestanden voor andere MTAs.
-
+ instellingenbestanden voor andere MTAs.
- /etc/ppp
+ /etc/pppInstellingen voor zowel gebruiker- als kernel-ppp
programma's.
- /etc/namedb
+ /etc/namedbStandaardlocatie voor &man.named.8; gegevens.
Normaal gesproken bevinden zich hier
- named.conf en
- zonebestanden.
+ named.conf en zonebestanden.
- /usr/local/etc
+ /usr/local/etcInstellingenbestanden voor geïnstalleerde
software. Kan submappen hebben waarin bij elkaar
horende instellingengegevens van een applicatie
gegroepeerd zijn.
- /usr/local/etc/rc.d
+ /usr/local/etc/rc.dStart- en stopscripts voor geïnstalleerde
diensten.
- /var/db
+ /var/dbAutomatisch gemaakte systeemspecifieke
databasebestanden, zoals de pakketdatabase, de
&man.locate.1; database, enzovoort.HostnamenhostnaamDNS/etc/resolv.confresolv.confIn /etc/resolv.conf wordt
voorgeschreven op welke wijze &os; het Domain Name System
(DNS) moet gebruiken.De meest voorkomende termen in
resolv.conf zijn:nameserverHet IP-adres van een
naamserver die ondervraagd moet worden voor
naam/IP-conversie. De servers
worden in volgorde geprobeerd en het maximale aantal
is drie.searchZoeklijst voor het opzoeken van hostnamen.
Meestal wordt deze bepaald door het domein waarop de
lokale hostnaam zich bevindt.domainDe lokale domeinnaam.Een typisch resolv.conf
bestand:search example.com
nameserver 147.11.1.11
nameserver 147.11.100.30search en domain
dienen niet tegelijk gebruikt te worden.Als DHCP wordt gebruikt: &man.dhclient.8; overschrijft
meestal resolv.conf met informatie
ontvangen van de DHCP-server./etc/hostshosts/etc/hosts is een eenvoudige
tekstdatabase uit de dagen van het oude Internet. Het werkt
samen met DNS en NIS om namen en IP
adressen over en weer te vertalen. Lokale computers,
verbonden via een LAN, kunnen hier het beste in opgenomen
worden om zo op simpele wijze naam/IP
conversie voor een LAN te hebben, zonder noodzaak voor een
&man.named.8; server. Ook kunnen naamaliassen toegekend
worden (vergelijkbaar met CNAMES bij DNS). Op soortgelijke
wijze kan /etc/hosts gebruikt worden als
een (zeer beperkte) lokale DNS cache.# $&os;$
#
# Host Database
# Dit bestand hoort de adressen en aliassen te bevatten
# voor de lokale hosts die dit bestand gebruiken.
# Bij gebruik van DNS of NIS hoeft dit bestand helemaal niet gebruikt
# te worden. Zie /etc/nsswitch.conf voor de volgorde van resolutie.
#
#
::1 localhost localhost.my.domain myname.my.domain
127.0.0.1 localhost localhost.my.domain myname.my.domain
#
# Verzonnen netwerk.
#10.0.0.2 myname.my.domain myname
#10.0.0.3 myfriend.my.domain myfriend
#
# Volgens RFC 1918 mogen de volgende IP netwerken gebruikt worden
# als private netwerken die niet met Internet verbonden zijn:
#
# 10.0.0.0 - 10.255.255.255
# 172.16.0.0 - 172.31.255.255
# 192.168.0.0 - 192.168.255.255
#
# Als er toch verbinding moet zijn met Internet, zijn echte
# officieel toegewezen nummers nodig. Probeer ECHT GEEN eigen
# netwerknummers te verzinnen, maar vraag ze op bij de provider
# (als die er is) of bij de Internet Registry (ftp naar
# rs.internic.net, map `/templates').
#/etc/hosts heeft als formaat:[Internet address] [official hostname] [alias1] [alias2] ...Bijvoorbeeld:10.0.0.1 myRealHostname.example.com myRealHostname foobar1 foobar2In &man.hosts.5; staat meer informatie.Logboekbestanden instellenlogboekbestandensyslog.confsyslog.confsyslog.conf is het
instellingenbestand voor het programma &man.syslogd.8;. Het
geeft aan welke soorten syslog-berichten
er gelogd moeten worden en naar welke logboekbestanden,
apparaten, gebruikers of machines.# $&os;$
#
# Spaties zijn TOEGESTAAN als veldscheiding in dit bestand.
# Maar andere *nix-achtige systemen eisen nog steeds het gebruik
# van tabs als veldscheiding. Als dit bestand gedeeld wordt met
# andere systemen, is het verstandig alle tabs als veldscheiding
# te gebruiken.
# Zie ook de handleding van syslog.conf(5).
*.err;kern.debug;auth.notice;mail.crit /dev/console
*.notice;kern.debug;lpr.info;mail.crit;news.err /var/log/messages
security.* /var/log/security
mail.info /var/log/maillog
lpr.info /var/log/lpd-errs
cron.* /var/log/cron
*.err root
*.notice;news.err root
*.alert root
*.emerg *
# verwijder het commentaarkarakter om alle schrijfacties naar
# /dev/console naar /var/log/console.log te schrijven.
#console.info /var/log/console.log
# verwijder het commentaarkarakter om alle berichten naar
# /var/log/all.log te schrijven.
#*.* /var/log/all.log
# # verwijder het commentaarkarakter om alle logs naar een andere
# host in te schakelen met de naam loghost.
#*.* @loghost
# # verwijder het commentaarkarakter als inn draait.
# news.crit /var/log/news/news.crit
# news.err /var/log/news/news.err
# news.notice /var/log/news/news.notice
!startslip
*.* /var/log/slip.log
!ppp
*.* /var/log/ppp.logIn &man.syslog.conf.5; staat meer informatie.newsyslog.confnewsyslog.confnewsyslog.conf is het
instellingenbestand voor &man.newsyslog.8;, een programma dat
op gezette tijden via &man.cron.8; wordt uitgevoerd.
&man.newsyslog.8; stelt vast wanneer logboekbestanden
gearchiveerd moeten worden of anderszins opnieuw gerangschikt
moeten worden. logfile wordt hernoemd
naar logfile.0,
logfile.0
naar logfile.1, enzovoort.newsyslog.conf geeft aan welke
logboekbestanden beheerd moeten worden, hoeveel er in
archieven bewaard moeten worden en wanneer ze aangemaakt
moeten worden. Logboekbestanden kunnen gereorganiseerd en/of
gearchiveerd worden als ze een bepaalde grootte bereikt
hebben of op een bepaald periodiek tijdstip of een bepaalde
datum.# instellingenbestand voor newsyslog
# $&os;$
#
# filename [owner:group] mode count size when [ZB] [/pid_file] [sig_num]
/var/log/cron 600 3 100 * Z
/var/log/amd.log 644 7 100 * Z
/var/log/kerberos.log 644 7 100 * Z
/var/log/lpd-errs 644 7 100 * Z
/var/log/maillog 644 7 * @T00 Z
/var/log/sendmail.st 644 10 * 168 B
/var/log/messages 644 5 100 * Z
/var/log/all.log 600 7 * @T00 Z
/var/log/slip.log 600 3 100 * Z
/var/log/ppp.log 600 3 100 * Z
/var/log/security 600 10 100 * Z
/var/log/wtmp 644 3 * @01T05 B
/var/log/daily.log 640 7 * @T00 Z
/var/log/weekly.log 640 5 1 $W6D0 Z
/var/log/monthly.log 640 12 * $M1D0 Z
/var/log/console.log 640 5 100 * ZIn &man.newsyslog.8; staat meer informatie.sysctl.confsysctl.confsysctlsysctl.conf lijkt veel op
rc.conf. Waardetoekenning heeft weer de
vorm variable=value. De ingestelde
&man.sysctl.8;-waarden worden doorgevoerd op het moment dat het
systeem naar multi-user modus gaat. Niet alle variabelen kunnen
in deze modus gewijzigd worden.Om te voorkomen dat er logregels geplaatst worden als
processen crashen en om te voorkomen dat andere gebruikers
kunnen zien welke processen er gestart zijn door een andere
gebruiker, kunnen de volgende instellingen worden gezet in
sysctl.conf:#Log exits met fatale signalen niet (bv. sig 11)
kern.logsigexit=0
# Voorkom dat gebruikers informatie zien over processen die
# worden gedraaid onder een ander UID.
security.bsd.see_other_uids=0Optimaliseren met sysctlsysctloptimaliseringmet sysctl&man.sysctl.8; is een interface waarmee veranderingen gemaakt
kunnen worden aan een draaiend &os;-systeem. Er zijn onder meer
vele geavanceerde opties voor de TCP/IP-stack
en het virtuele geheugensysteem, waarmee een ervaren
systeembeheerder de systeemprestaties drastisch kan verbeteren.
Met &man.sysctl.8; kunnen meer dan vijfhonderd systeemvariabelen
opgevraagd en ingesteld worden.In essentie heeft &man.sysctl.8; twee functies: het lezen en
wijzigen van systeeminstellingen.Om alle leesbare variabelen te tonen:&prompt.user; sysctl -aOm een bepaalde variabele op te vragen, bijvoorbeeld
kern.maxproc:&prompt.user; sysctl kern.maxproc
kern.maxproc: 1044Om een bepaalde variabele toe te kennen (te wijzigen), is de
syntaxis
variable=value:&prompt.root; sysctl kern.maxfiles=5000
kern.maxfiles: 2088 -> 5000Waarden van sysctl-variabelen zijn doorgaans strings (tekst),
getallen of booleans (1 als waar,
0 als onwaar).Om automatisch variabelen in te stellen als de machine start,
kunnen ze toegevoegd worden aan
/etc/sysctl.conf. Meer informatie staat in
&man.sysctl.conf.5; en .TomRhodesGeschreven door &man.sysctl.8; alleen-lezenIn sommige gevallen is het wenselijk om &man.sysctl.8;-waarden
die alleen-lezen zijn toch te wijzigen. Hoewel dit soms
onontkoombaar is, kan het alleen bij een (her)start gedaan
worden.Op sommige laptops is bijvoorbeeld het apparaat
&man.cardbus.4; niet in staat om geheugenregio's af te tasten, met
als gevolg foutmeldingen als:cbb0: Could not map register memory
device_probe_and_attach: cbb0 attach returned 12In dergelijke gevallen moeten er meestal enkele
&man.sysctl.8;-instellingen gewijzigd worden die alleen-lezen zijn
en een standaardwaarde hebben. Dit kan bereikt worden door
&man.sysctl.8; OIDs in de lokale
/boot/loader.conf te zetten.
Standaardinstellingen staan in
/boot/defaults/loader.conf.Om het bovenstaande probleem op te lossen moet in
/boot/loader.confhw.pci.allow_unsupported_io_range=1 ingesteld
worden. Dan werkt &man.cardbus.4; wel goed.Harde schijven optimaliserenSysctl-variabelenvfs.vmiodirenablevfs.vmiodirenableDe sysctl-variabele vfs.vmiodirenable
kan de waarde 0 (uit) of 1 (aan) hebben. De standaardwaarde
is 1. Deze variabele bepaalt hoe mappen door het systeem in
een cache bewaard worden. De meeste mappen zijn klein en
gebruiken slechts een klein fragment (typisch 1 K) in het
bestandssysteem en nog minder (typisch 512 bytes) in de
buffercache. Als deze variabele uit staat (op 0) bewaart de
buffercache slechts een bepaald aantal mappen in de cache, ook
al is er een overvloed aan geheugen beschikbaar. Wanneer deze
aan staat (op 1), wordt de VM paginacache gebruikt, waardoor
voor het cachen van mappen al het geheugen kan worden
gebruikt. Het is echter wel zo dat het minimale in-core
geheugen dat gebruikt wordt om een map te cachen in dat geval
de fysieke paginagrootte is (typisch 4 K) in plaats van
512 bytes. Het is aan te raden deze optie aan te laten
staan als gebruik gemaakt wordt van diensten die met grote
aantallen bestanden werken, zoals webcaches, grote
mailsystemen en newsservers. Als deze optie aan blijft staan,
verlaagt die de prestaties niet, ook al kost het meer
geheugen. Door experimenteren is dit voor een systeem na te
gaan.vfs.write_behindvfs.write_behindDe sysctl-variabele vfs.write_behind
staat standaard aan (1). Dit betekent dat
het bestandssysteem gegevens naar het medium gaat schrijven op
het moment dat er een volledig cluster aan gegevens verzameld
is. Dit is meestal het geval bij het schrijven van grote
sequentiële bestanden. Het idee is om te voorkomen dat
de buffercache verzadigd raakt met vuile buffers zonder dat
dit bijdraagt aan de I/O-prestaties. Dit kan echter processen
ophouden en onder sommige omstandigheden is het wellicht beter
deze sysctl uit te zetten.vfs.hirunningspacevfs.hirunningspaceDe sysctl-variabele vfs.hirunningspace
bepaalt hoeveel nog te schrijven gegevens er in het complete
systeem op elk moment in de wachtrij naar schijfcontrollers
mag staan. De standaardwaarde is meestal voldoende, maar op
machines met veel schijven, is het beter deze te verhogen naar
vier of vijf megabyte. Het instellen van
een te hoge waarde (groter dan de schrijfdrempel van de
buffercache) kan leiden tot zeer slechte prestaties bij
clustering. Stel deze waarde niet arbitrair hoog in! Hogere
schrijfwaarden kunnen vertraging veroorzaken in het lezen, als
dit tegelijk plaatsvindt.Er zijn verscheidene andere sysctl's voor buffercache en
VM-pagecache. Het wordt afgeraden deze te wijzigen. Het
VM-systeem is zeer goed in staat zichzelf automatisch te
optimaliseren.vm.swap_idle_enabledvm.swap_idle_enabledDe sysctl-variabele
vm.swap_idle_enabled is nuttig in grote
meergebruikersystemen met veel gebruikers die af- en aanmelden
en veel onbenutte processen. Dergelijke systemen hebben de
neiging om voortdurend de vrije geheugenreserves onder druk
te zetten. Het is mogelijk om de prioriteit van
geheugenpagina's die verband houden met onbenutte processen
sneller te laten dalen dan met het normale pageout-algoritme,
door deze sysctl aan te zetten en via
vm.swap_idle_threshold1 en
vm.swap_idle_threshold2 de swapout
hysterese (in seconden onbenut) af te stemmen. Deze optie
dient alleen gebruikt te worden als ze echt nodig is, want de
andere kant van de medaille is dat dit eerder pre-page
geheugen inhoudt in plaats van later, waardoor het meer
wisselbestand- en schijfbandbreedte kost. In een klein
systeem heeft deze optie een voorspelbaar effect, maar in
grote systemen waar al sprake is van een matige paging kan
deze optie het mogelijk maken voor het VM-systeem om hele
processen gemakkelijk in en uit het geheugen te halen.hw.ata.wchw.ata.wcTen tijde van &os; 4.3 is er geflirt met het
uitzetten van IDE-schrijfcaching. Hierdoor neemt de
bandbraadte naar IDE-schijven af, maar het werd als
noodzakelijk beschouwd vanwege ernstige problemen met
gegevensinconsistentie die door harde schijfproducenten
geëintroduceerd waren. Het probleem is dat IDE-schijven
niet de waarheid vertellen over wanneer een schrijfactie
klaar is. Door IDE-schrijfcaching wordt data niet alleen
ongeordend geschreven, maar soms kan zelfs het schrijven van
sommige blokken voortdurend uitgesteld worden als er sprake is
van een hoge schijfbelasting. Een crash of stroomstoring kan
dan ernstige corruptie aan het bestandssysteem veroorzaken.
Daarom werd de standaardinstelling van &os; voor alle
zekerheid gewijzigd. Helaas was het resultaat een groot
verlies aan prestaties en na die uitgave is de
standaardwaarde weer terug veranderd. Met de sysctl-variabele
hw.ata.wc kan gecontroleerd worden of
schrijfcaching aan of uit staat. Als schrijfcaching uit
staat, kan het die weer aangezet worden door
hw.ata.wc op 1 te zetten. Aangezien dit
een kernelvariabele is, moet deze ingesteld worden vanuit de
bootloader tijdens het opstarten. Nadat de kernel eenmaal
opgestart is, heeft het wijzigen van deze sysctl geen
effect.Meer informatie staat in &man.ata.4;.SCSI_DELAY
(kern.cam.scsi_delay)kern.cam.scsi.delaykerneloptiesSCSI_DELAYDe kernelinstelling SCSI_DELAY kan
gebruikt worden om de opstarttijd te versnellen. De
standaardwaarde is nogal hoog en kan 15
seconden vertraging veroorzaken. Met modernere SCSI-systemen
is 5 seconden al voldoende. Nieuwere
versies van &os; (5.0 en hoger) gebruiken de opstartvariabele
kern.cam.scsi_delay. Zowel deze als de
optie SCSI_DELAY gebruiken waarden
uitgedrukt in milliseconden en
niet in
seconden.SoftupdatesSoftupdatestunefs&man.tunefs.8; kan gebruikt worden om een bestandsysteem
nauwkeurig af te stellen. Het heeft veel opties, maar nu wordt
alleen het aan- en uitzetten van softupdates besproken. Dat
gaat als volgt:&prompt.root; tunefs -n enable /filesystem
&prompt.root; tunefs -n disable /filesystemEen bestandssysteem kan niet met &man.tunefs.8; gewijzigd
worden als het aangekoppeld is. Softupdates aanzetten wordt dus
in het algemeen gedaan vanuit enkelegebruikermodus, voordat
partities aangekoppeld zijn.Softupdates zorgen voor een drastische verbetering van de
prestaties met betrekking tot metagegevens, met name het
aanmaken en verwijderen van bestanden, door gebruik van een
geheugencache. Het wordt dan ook aangeraden om op alle
bestandssystemen softupdates te gebruiken. Er zijn twee nadelen
aan softupdates: softupdates garanderen een consistent
bestandssysteem in geval van een crash, maar het kan makkelijk
enkele seconden (zelfs een minuut) achter liggen met het
daadwerkelijk bijwerken op de fysieke harde schijf. Als een
systeem crasht gaat wellicht meer werk verloren dan anders het
geval zou zijn. Daarnaast vertragen softupdates het vrijgeven
van bestandssysteemblokken. Als een bestandssysteem (zoals de
rootpartitie) bijna vol is, dan kan het verrichten van een grote
update, zoals make installworld, ertoe leiden
dat het bestandssysteem ruimtegebrek krijgt en dat daardoor de
operatie mislukt.Meer over softupdatesSoftupdatesdetailsEr zijn traditioneel twee methodes om de metagegevens van
een bestandssysteem terug naar de schijf te schrijven. Het
bijwerken van metagegevens houdt het bijwerken van van
niet-inhoudelijke gegevens zoals inodes of mappen in.Historisch gezien was het gebruikelijk om updates aan
metagegevens synchroon weg te schrijven. Als een map
bijvoorbeeld gewijzigd was, wachtte het systeem totdat de
verandering daadwerkelijk naar de schijf geschreven was. De
gegevensbuffers (de inhoud van een bestand) werden
doorgeschoven naar de buffercache en op een later moment
asynchroon op de schijf opgeslagen. Het voordeel van deze
benadering is dat ze altijd veilig is. Als het systeem faalt
tijdens het bijwerken, zijn de metagegevens nog altijd
consistent. Een bestand kan volledig gecreëerd zijn of
helemaal niet. Als de gegevensblokken van een bestand nog
niet van de buffercache naar de schijf geschreven zijn ten
tijde van de crash, is &man.fsck.8; in staat om dit te
herkennen en het bestandssysteem te repareren door de lengte
van het bestand nul te maken. Deze implementatie is ook
helder en eenvoudig. Het nadeel is echter dat het wijzigen
van metagegevens een traag proces is. Een
rm -r benadert bijvoorbeeld alle bestanden
in een map sequentiëel, maar elke mapverandering
(verwijderen van een bestand) wordt synchroon naar de schijf
geschreven. Dit omvat ook het bijwerken van de map zelf, van
de inodetabel en mogelijk ook van indirecte blokken die voor
het bestand in kwestie zijn gealloceerd. Gelijksoortige
processen spelen zich af bij een commando als
tar -x, waarbij een grote
bestandshiëearchie wordt uitgepakt.De tweede mogelijkheid is om het bijwerken van
metagegevens asynchroon weg te schrijven. Dit is standaard in
&linux;/ext2fs en als een *BSD UFS-bestandssysteem met
mount -o async aangekoppeld is, is de
werking hetzelfde. Alle bijwerkingen aan metagegevens worden
eenvoudigweg doorgegeven aan de buffercache en vermengd met
inhoudelijke updates van de bestandsgegevens. Het voordeel
is een grote winst aan snelheid, omdat er niet telkens gewacht
hoeft te worden op het bijwerken van metagegevens tot deze
daadwerkelijk naar de schijf geschreven zijn. De
implementatie is ook in dit geval helder en eenvoudig. Het
grote nadeel is uiteraard dat er geen enkele garantie is voor
de consistentie van het bestandssysteem. Als het systeem
faalt tijdens een operatie waarbij veel metagegevens worden
bijgewerkt (bijvoorbeeld door een stroomstoring of iemand
drukt op de resetknop), blijft het bestandssysteem in een
onvoorspelbare toestand achter. Er is geen mogelijkheid om de
toestand van het bestandssysteem te onderzoeken als het
systeem weer opstart, want de gegevensblokken van een bestand
kunnen al weggeschreven zijn geweest terwijl het wegschrijven
van bijwerkingen aan de inodetabel of de bijhorende map nog
niet plaats heeft gevonden. Het is zelfs onmogelijk om een
fsck te implementeren die de overgebleven
chaos kan opruimen: de benodigde informatie is gewoon niet
volledig aanwezig op de schijf. Als een bestandssysteem op
deze manier onherstelbaar beschadigd is, is de enige optie
&man.newfs.8; te gebruiken en vervolgens te herstellen van
een backup.De gebruikelijke oplossing voor dit probleem is het
implementeren van dirty region logging,
ook wel journaling genoemd, hoewel deze
term niet consistent gebruikt wordt en soms ook wordt gebruikt
voor andere vormen van transactielogging. Het bijwerken van
metagegevens wordt nog steeds synchroon geschreven, maar
slechts naar een klein gebied van de schijf. Later worden ze
dan naar de juiste locatie verplaatst. Omdat het loggebied
klein is, hoeven de koppen van de schijf zelfs tijdens
schrijfintensieve operaties nog maar over een kleine fysieke
afstand te bewegen en door deze snellere respons zijn dit
soort operaties sneller dan op de traditionele manier. De
extra complexiteit van de implementatie is nogal beperkt, dus
het risico van introductie van extra bugs valt mee. Een
nadeel is dat alle metagegevens tweemaal geschreven worden
(eerst naar het loggebied en later nog eens naar de
definitieve locatie). Dus bij normaal gebruik kan er sprake
zijn van wat men wel noemt een performance
pessimization. Anderzijds kunnen in geval van een
crash alle nog uitstaande metagegevensoperaties snel worden
teruggedraaid of vanuit het loggebied alsnog worden afgemaakt
wanneer de machine weer opstart. Het bestandssysteem start
dan snel op.Kirk McKusick, de vader van het Berkeley FFS, loste dit
probleem op met softupdates, wat betekent dat alle uitstaande
acties voor het bijwerken van metagegevens in het geheugen
bewaard worden en dan geordend naar de schijf geschreven
worden. Dit heeft het gevolg dat in geval van intensieve
operaties met betrekking tot metagegevens, latere bijwerkingen
aan een item eerdere bewerkingen opvangen
(catch) als deze nog in het geheugen zitten en
nog niet weggeschreven waren. Dus alle operaties, op
bijvoorbeeld een map, worden in het algemeen eerst in het
geheugen uitgevoerd voordat er wordt bijgewerkt naar schijf.
De gegevensblokken worden geordend conform hun positie, zodat
ze nooit weggeschreven worden voordat hun metagegevens
geschreven zijn. Als het systeem een crash ondervindt,
veroorzaakt dat impliciet het terugdraaien van uitstaande
operaties (log rewind): alle operaties die nog
niet weggeschreven waren lijken nooit gebeurd te zijn. Zo
wordt een consistent bestandssysteem in stand gehouden dat
eruit ziet alsof het 30 tot 60 seconden eerder was. Het
gebruikte algoritme garandeert dat alle bronnen die in gebruik
zijn als zodanig gemarkeerd worden in hun daarvoor geschikte
bitmaps: blokken en inodes. Na een crash is de enige
allocatiefout die kan optreden dat bronnen gemarkeerd kunnen
zijn als in gebruik (used), terwijl ze
feitelijk alweer beschikbaar (free) zijn.
&man.fsck.8; herkent deze situatie en stelt dergelijke vrij
te maken bronnen opnieuw beschikbaar. Het is volkomen veilig
om na een crash te negeren dat het bestandssysteem niet schoon
is en het tot aankoppelen te dwingen met
mount -f. Om niet langer gebruikte
bronnen vrij te maken moet later &man.fsck.8; uitgevoerd
worden. Dit is dan ook het idee achter background
fsck: op het moment dat het systeem aan het
opstarten is, wordt er alleen een
snapshot van het systeem bewaard.
fsck kan later uitgevoerd worden. Alle
bestandssystemen kunnen dirty aangekoppeld
worden en het systeem kan gewoon verder opstarten naar
meergebruikermodus. Vervolgens zijn er
fscks gepland die in de achtergrond draaien
voor elk bestandssysteem dat niet schoon is en waarmee
bezette bronnen vrijgegeven worden. Bestandssystemen die geen
gebruik maken van softupdates moeten echter nog steeds gebruik
maken van de normale fsck in de
voorgrond.Het voordeel van softupdates is dat operaties op
metagegevens bijna net zo snel zijn als asynchrone updates
(dat wil zeggen sneller dan met logging,
waarbij de metagegevens keer op keer geschreven worden).
Nadelen zijn de complexiteit van de code (wat een groter
risico op bugs impliceert in een gebied dat bijzonder
gevoelig is voor verlies van gebruikersgegevens) en een
groter geheugenverbruik. Tevens moet de gebruiker wennen aan
enkele eigenaardigheden. Na een crash lijkt de toestand van
het bestandssysteem wat ouder. In situaties
waar de standaard synchrone benadering een aantal lege
bestanden zou hebben achtergelaten na
fsck, is het met softupdates juist zo dat
dergelijke bestanden er helemaal niet zijn, omdat de
metagegevens of de bestandsinhoud nooit naar de schijf zijn
geschreven. Schijfruimte wordt pas vrijgegeven als de
bijwerkingen aan metagegevens en inhoudelijke
bestandsgegevens weggeschreven zijn, wat mogelijk pas enige
tijd na het uitvoeren van rm plaatsvindt.
Dit kan problemen veroorzaken als er grote hoeveelheden
gegevens naar een bestandssysteem geschreven worden dat
onvoldoende vrije ruimte heeft om alle bestanden twee keer te
kunnen bevatten (bijvoorbeeld in /tmp).Fijnafstemming van kernellimietenfijnafstemmingkernellimietenBestandsproceslimietenkern.maxfileskern.maxfileskern.maxfiles kan worden verhoogd of
verlaagd, afhankelijk van de systeembehoeften. Deze variabele
geeft het maximale aantal bestandsdescriptors op een systeem.
Als de bestandsdescriptortabel vol is, toont de systeembuffer
meerdere malen file: table is full, het
geen achteraf te zien is met dmesg.Elk geopend bestand, socket of fifo heeft een
bestandsdescriptor. Een grote produktieserver kan makkelijk
enige duizenden bestandsdescriptors nodig hebben, afhankelijk
van het soort en aantal diensten die tegelijk draaien.In oudere versies van &os; werd de standaard waarde van
kern.maxfiles afgeleid van de optie
in het kernelconfiguratiebestand.
kern.maxfiles groeit evenredig met de
waarde van maxusers. Als een aangepaste
kernel wordt gebouwd, is het een goed idee om deze kerneloptie
in te stellen afhankelijk van het gebruikt van een systeem
(maar niet te laag). Hoewel een produktieserver misschien
niet 256 gelijktijdige gebruikers heeft, kunnen de benodigde
systeembronnen het beste vergeleken worden met een
grootschalige webserver.De optie maxusers stelt de grootte van
een aantal belangrijke systeemtabellen in. Dit aantal moet
ruwweg gelijk zijn aan het aantal gebruikers dat verwacht
wordt gelijktijdig van de machine gebruik te maken.Vanaf &os; 4.5 wordt kern.maxusers
automatisch ingesteld tijdens het opstarten gebaseerd op de
hoeveelheid beschikbare geheugen in het systeem en kan worden
vastgesteld tijdens het draaien door te kijken naar de
alleen-lezen sysctl kern.maxusers. Sommige
configuraties hebben grotere of kleinere waarden nodig van
kern.maxusers, deze kunnen worden gezet
als een opstartvariabele. Waardes van 64, 128 en 256 zijn
daarin niet ongewoon. We raden aan om niet boven de 256 te
gaan tenzij er heel veel bestandsdescriptors benodigd zijn;
veel van de aanpasbaare waarden die standaard worden bepaald
door kern.maxusers kunnen individueel
worden overschreven tijdens het opstarten en/of tijdens het
draaien van het systeem in
/boot/loader.conf (zie de handleiding
&man.loader.conf.5; of het bestand
/boot/defaults/loader.conf voor een paar
aanwijzingen) of zoals elders beschreven in dit document.
+
Systemen die ouder zijn dan &os; 4.4 moeten deze waarden
instellen via de kerneloptie &man.config.8;
.
+
Voor oudere versies stelt het systeem deze waarde zelf in
als deze uitdrukkelijk op 0 is gezet.
Het auto-tuning-algoritme stelt
maxusers in afhankelijk van de
hoeveelheid geheugen in het systeem, met een minimum van
32 en een maximum van 384.Als het gewenst is om deze waarde zelf aan te geven, wordt
aangeraden om maxusers minstens op 4 te
zetten, met name als het X Window systeem in gebruik is of als
er software gecompileerd wordt. De reden hiervoor is dat de
belangrijkste tabel die door maxusers
ingesteld wordt, het maximum aantal processen is, dat
ingesteld wordt op 20 + 16 * maxusers, dus
als maxusers op 1 ingesteld wordt, zijn er
maar 36 gelijktijdige processen mogelijk, inclusief de
ongeveer achttien processen die door het systeem tijdens het
opstarten start en de ongeveer vijftien processen die
waarschijnlijk aangemaakt worden door het opstarten van het X
Window systeem. Zelfs een eenvoudige taak als het afbeelden
van een hulppagina start negen processen op om de pagina te
filteren, te decomprimeren en af te beelden. Als
maxusers op 64 ingesteld wordt, zijn er
1044 gelijktijdige processen mogelijk, wat genoeg moet zijn
voor bijna alle soorten gebruik. Als echter de gevreesde
fout proc table full verschijnt als er
geprobeerd wordt om een programma op te starten of als er een
server gedraaid wordt met een groot aantal gelijktijdige
gebruikers, zoals ftp.FreeBSD.org, kan het getal altijd
verhoogd worden en kan de kernel opnieuw gebouwd
worden.maxusers stelt
geen grens aan het aantal gebruikers
dat zich op de machine kan aanmelden. Het stelt gewoon
verschillende tabelgroottes in op redelijke waardes,
uitgaande van het maximum aantal gebruikers dat
waarschijnlijk de machine gebruikt en van het aantal
processen dat elk van deze gebruikers zal draaien. Een
sleutelwoord dat wel het aantal
gelijktijdige aanmeldingen op afstand en X-terminalvensters
begrensd is pseudo-device pty
16. In &os; 5.X kan dit getal
genegeerd worden omdat daar het stuurprogramma &man.pty.4;
auto-cloning is. Er kan eenvoudig gebruik
worden gemaakt van de regel device pty
in het instellingenbestand.kern.ipc.somaxconnkern.ipc.somaxconnDe sysctl-variabele kern.ipc.somaxconn
beparkt de grootte van de luisterwachtrij voor het accepteren
van nieuwe TCP-verbindingen. De standaardwaarde van
128 is meestal te laag voor robuuste
behandeling van nieuwe verbindingen in een zwaarbeladen
webserveromgeving. Voor zulke omgevingen wordt aangeraden
deze waarde te verhogen tot 1024 of hoger.
De dienstdaemon beperkt misschien zelf de luisterwachtrij
(bijvoorbeeld &man.sendmail.8; of
Apache), maar heeft vaak een
mogelijkheid in een configuratiebestand de wachtrijgrootte
aan te passen. Grote luisterwachtrijen zijn ook beter in het
ontwijken van Ontzegging van Dienst (DoS)
aanvallen.NetwerkbeperkingenDe kerneloptie NMBCLUSTERS bepaalt het
aantal netwerk-Mbufs dat beschikbaar is voor een systeem. Een
veel bezochte server met een laag aantal Mbufs beperkt de
mogelijkheden van &os;. Elk cluster staat voor ongeveer
2 K geheugen, dus een waarde van 1024 stelt 2 megabyte
aan kernelgeheugen voor, dat is gereserveerd voor
netwerkbuffers. Een simpele berekening geeft aan hoeveel er
nodig is. Stel dat een webserver met een maximum van 1000
simultane verbindingen voor elke verbinding 16 K aan
ontvangstnetwerkbuffers en 16 K aan zendbuffers kost, dan
is ongeveer 32 MB aan netbuffers nodig voor de webserver.
Een goede vuistregel is te vermeniguldigen met twee, dus
2x32 MB / 2 KB = 64 MB /
2 kB = 32768. Voor machines met veel geheugen wordt
4096 tot 32768 aangeraden. Er moet in geen geval een arbitrair
hoge waarde voor deze sysctl opgegeven worden, want dat kan
leiden tot een crash tijdens het opstarten. Met de optie
van &man.netstat.1; kan het clustergebruik
van het netwerk bekeken worden.De loaderparameter kern.ipc.nmbclusters
moet gebruikt worden om dit tijdens het opstarten toe te passen.
Alleen voor oudere versies van &os; is het nodig om de
kerneloptie NMBCLUSTERS te gebruiken.Voor drukke servers die extensief gebruik maken van de
systeemaanroep &man.sendfile.2;, kan het nodig zijn het aantal
&man.sendfile.2;-buffers te verhogen via de kerneloptie
NSFBUFS of door de waarde in te stellen in
/boot/loader.conf (in &man.loader.8; staan
details). Als er in de procestabel processen staan met een
status sfbufa is dat een algemene indicator
dat deze parameter aangepast moet worden. De sysctl-variabele
kern.ipc.nsfbufs is alleen-lezen en laat zien
op welke waarde deze kernelvariabele is ingesteld. Deze
parameter schaalt engiszins met de variabele
kern.maxusers, maar het kan nodig zijn om
deze bij te stellen.Zelfs als een socket als non-blocking gemarkeerd is, dan
nog kan het aanroepen van &man.sendfile.2; op de non-blocking
socket ertoe leiden dat er toch blokkade optreedt totdat er
voldoende struct sf_buf's vrijgemaakt
zijn.net.inet.ip.portrange.*net.inet.ip.portrange.*De sysctl-variabelen
net.inet.ip.portrange.* bepalen welke reeks
poortnummers automatisch gebonden wordt aan TCP- en
UDP-sockets. Er zijn drie gebieden: een laag gebied, een
(standaard) middengebied en een hoog gebied. De meeste
netwerkprogramma's gebruiken het standaardbereik, wat
begrensd wordt door
net.inet.ip.portrange.first en
net.inet.ip.portrange.last met
standaardwaarden van respectievelijk 1024 en 5000. Gebonden
poortreeksen worden gebruikt voor uitgaande verbindingen en
het is onder bepaalde omstandigheden mogelijk dat poorten op
raken. Dit gebeurt meestal in het geval van een zwaar belaste
webproxy. Poortbereik is niet van belang als vooral diensten
draaien die zich bezighouden met inkomende verbindingen, zoals
een normale webserver, of als het aantal uitgaande
verbindingen beperkt is, zoals bij een mailrelay. Voor
situaties waarin een tekort aan poorten dreigt, wordt
aangeraden om net.inet.ip.portrange.last
bescheiden op te hogen. Een waarde van
10000, 20000 of
30000 is redelijk. Er moet ook rekening
met effecten op firewalls gehouden worden als de poortreeks
gewijzigd wordt. Sommige firewalls kunnen grote poortreeksen
blokkeren, meestal de lagere poorten, en verwachten dat andere
systemen hogere poorten gebruiken voor uitgaande verbindingen.
Om deze reden wordt het niet aanbevolen om
net.inet.ip.portrange.first te
verlagen.TCP Bandbreedtevertragingsproduct (TCP Bandwidth Delay
Product)TCP bandbreedtevertragingsproductnet.inet.tcp.inflight.enableDe TCP-bandbreedtevertragingsproductlimitatie lijkt op
TCP/Vegas in NetBSD. Het kan aangezet worden door de
sysctl-variabele
net.inet.tcp.inflight.enable de waarde
1 te geven. Het systeem tracht dan het
bandbreedtevertragingssprodukt te berekenen voor elke
verbinding en beperkt dan de hoeveelheid gegevens in de
wachtrij naar het netwerk tot de hoeveelheid die vereist is om
maximale doorvoer te kunnen handhaven.Dit is nuttig bij gebruik van modems, Gigabit Ethernet of
zelfs bij WAN-verbindingen met hoge snelheid (of elke andere
verbinding met een groot bandbreedtevertragingsprodukt), in
het bijzonder als ook windowschaling of een groot
verzendwindow gebruikt wordt. Als deze optie aangezet wordt,
dient ook net.inet.tcp.inflight.debug de
waarde 0 te krijgen (geen debugging) en
voor produktiegebruik kan het instellen van
net.inet.tcp.inflight.min naar minstens
6144 voordeel opleveren. Het instellen van
hoge minima kan effectief het beperken van bandbreedte
ondermijnen, afhankelijk van de verbinding. De mogelijkheid
tot limitering zorgt ervoor dat de hoeveelheid gegevens die
opgebouwd wordt, in tussentijdse route- en switchwachtrijen
verlaagd kan worden en tevens kan de hoeveelheid gegevens die
opgebouwd wordt in de interfacewachtrij van de lokale host
verlaagd worden. Met minder pakketten in wachtrijen kunnen
interactieve verbindingen opereren met lagere
Round Trip tijden, met name over langzame
modems. Deze optie gaat alleen over datatransmissie (upload /
serverkant) en heeft geen effect gegevensontvangst (download /
cliëntkant).Aanpassen van
net.inet.tcp.inflight.stab wordt
niet aangeraden. Deze parameter krijgt
standaard een waarde van 20, wat 2 maximale pakketten opgeteld
bij de bandbreedtevensterberekening representeert. Het extra
venster is nodig om het algoritme stabiel te houden en om de
reactietijd bij veranderende omstandigheden te verbeteren,
maar het kan ook leiden tot langere pingtijden over langzame
verbindingen (zonder het inflight-algoritme kan dit echter nog
erger zijn). In dergelijke gevallen kan deze parameter
misschien verlaagd worden naar 15, 10 of 5 en misschien moet
voor het gewenste effect ook
net.inet.tcp.inflight.min verlaagd worden
(bijvoorbeeld naar 3500). Het verlagen van deze parameters
moet pas in laatste instantie overwogen worden.Virtueel Geheugenkern.maxvnodesEen vnode is de interne representatie van een bestand of
een map. Het verlagen van het aantal beschikbare vnodes voor
het besturingssysteem leidt dus tot een daling van schijf-I/O.
Normaliter wordt dit door het besturingssysteem afgehandeld en
hoeft de instelling niet gewijzigd te worden. Im sommige
gevallen kan schijf-I/O de beperkende factor zijn en kan het
systeem alle beschikbare vnodes in gebruik hebben. Dan dient
deze instelling gewijzigd te worden. De hoeveelheid inactief
en beschikbaar RAM dient meegenomen te worden in de
beslissing.Het huidige aantal gebruikte vnodes kan als volgt bekeken
worden:&prompt.root; sysctl vfs.numvnodes
vfs.numvnodes: 91349Om het maximale aantal vnodes weer te geven:&prompt.root; sysctl kern.maxvnodes
kern.maxvnodes: 100000Als het huidige aantal gebruikte vnodes dicht bij het
maximale aantal ligt, is het verstandig om
kern.maxvnodes op te hogen met 1.000.
Ook vfs.numvnodes dient in de gaten
gehouden te worden. Als de waarde weer tot aan het maximum
stijgt, dan moet kern.maxvnodes verder
opgehoogd worden. Er dient een verschuiving op te treden in
het door &man.top.1; gerapporteerde geheugengebruik. Er hoort
meer geheugen actief te zijn.Wisselbestandruimte toevoegenHoe goed er ook gepland wordt, soms draait een systeem gewoon
niet zoals verwacht. Een oorzaak hiervoor kan een tekort aan
wisselbestandruimte zijn. Als blijkt dat er meer
wisselbestandruimte nodig is, kan dat eenvoudig. Er zijn drie
manieren om de totale ruimte beschikbaar als wisselbestand te
vergroten: een nieuwe harde schijf toevoegen, swappen over NFS of
een wisselbestand maken op een bestaande (UFS of andere)
partitie.Kijk voor informatie over het beveiligen van het
wisselbestand, welke opties hiervoor bestaan, en waarom dit gedaan
zou moeten worden in van het
handboek.Wisselbestand (partitie) op een nieuwe harde schijfDit is natuurlijk de beste manier om de wisselbestandsruimte
te vergroten en een goed excuus om een extra harde schijf toe te
voegen. Die komt immers altijd wel van pas. In dat geval kan
het beste de discussie over wisselbestandruimte in nog eens herlezen worden om
wat suggesties op te doen over hoe wisselbestandpartitie(s) het
beste ingedeeld kunnen worden.Swappen over NFSIn het algemeen wordt swappen over NFS niet aangeraden
behalve als het onmogelijk is om naar een lokale schijf te
swappen. NFS-swappen wordt gelimiteerd door de hoeveelheid
beschikbare bandbreedte en belast het de NFS-server.WisselbestandenHet is mogelijk om een bestand aan te maken van een bepaalde
grootte en dit als swap te gebruiken. In dit voorbeeld wordt
een bestand van 64 MB gebruikt,
/usr/swap0. Uiteraard kan een willekeurige
naam gebruikt worden.Een wisselbestand aanmaken op &os;De kernel moet het stuurprogramma voor de
geheugenschijf (&man.md.4;) bevatten. Dat zit standaard
in de kernel GENERIC.device md # Memory "disks"Het wisselbestand /usr/swap0
aanmaken:&prompt.root; dd if=/dev/zero of=/usr/swap0 bs=1024k count=64De correcte rechten op /usr/swap0
instellen:&prompt.root; chmod 0600 /usr/swap0Het wisselbestand opnemen in
/etc/rc.conf:swapfile="/usr/swap0" # Instellen op naam van wisselbestand als hulpwisselbestand gewenst isDe machine moet herstart worden of om het
wisselbestand direct in te schakelen:&prompt.root; mdconfig -a -t vnode -f /usr/swap0 -u 0 && swapon /dev/md0HitenPandyaGeschreven door TomRhodesEnergie- en bronnenbeheerHet is belangrijk om hardwarebronnen op een efficiënte
wijze te benutten. Voordat ACPI
geïntroduceerd werd was het lastig en onflexibel om het
energieverbruik en de thermische eigenschappen van een systeem te
beheersen. De hardware werd beheerst de BIOS
en dus had de gebruiker minder controle en zichtbaarheid in de
energiebeheerinstellingen. Enige gelimiteerde configuratie was
mogelijk via Advanced Power Management (APM).
Energie- en bronnenbeheer is een belangrijk onderdeel van moderne
machines. Het besturingssysteem moet bijvoorbeeld systeemlimieten
in de gaten houdt (en mogelijk een SMS sturen of iets dergelijks)
als de systeemtemperatuur onverwacht toeneemt.In dit deel van het &os; handboek wordt uitgebreide informatie
verschaft over ACPI. Aan het einde worden
referenties geleverd naar meer leesmateriaal.Wat is ACPI?ACPIAPMAdvanced Configuration and Power Interface
(ACPI) is een standaard die door een
alliantie van producenten geschreven is, met als doel te
voorzien in een een standaardinterface voor hardwarebronnen- en
energiebeheer. Een belangrijk element is dat het meer
flexibiliteit en beheersmogelijkheden biedt aan het
besturingssysteem (OS). Moderne systemen
hebben de limieten van de huidige PNP-interfaces verder opgerekt
dan wenselijk en misschien wel mogelijk was.
ACPI is de directe opvolger van
APM (Advanced Power Management). Centraal is
het verleggen van hardwarebeheer en -monitoring naar de OS-laag
in plaats van de zeer beperkte BIOS-laag.Tekortkomingen van APMMet de Advanced Power Management (APM)
faciliteit kan het energieverbruik van een systeem geregeld
worden op basis van de systeemactiviteit. Het APM-BIOS wordt
geleverd door de systeemproducent of -verkoper en het is
specifiek voor dat betreffende hardwareplatform. Een
APM-stuurprogramma in het besturingssysteem regelt vervolgens de
toegang tot de APM Software Interface, die
het besturen van vermogensniveau mogelijk maakt. APM dient nog
steeds gebruikt te worden met systemen die gefabriceerd zijn
voor het jaar 2000.Er zijn vier hoofdproblemen met APM te onderscheiden: ten
eerste wordt het energiebeheer verricht door een BIOS
(afhankelijk van producent) en het besturingssysteem heeft daar
geen kennis van. De gebruiker die idle-time waarden instelt
voor een harde schijf in het APM-BIOS is hier een voorbeeld van.
Dan zal het BIOS de harde schijf langzamer kunnen laten draaien
zonder dat het besturingssysteem de noodzaak ziet of het
goedkeurt. Ten tweede: de APM-logica is ingebed in de BIOS,
waardoor het buiten het besturingssysteem om opereert. Dit
houdt in dat gebruikers problemen met hun APM-BIOS alleen kunnen
verhelpen door een nieuw BIOS in het ROM te flashen, wat een
gevaarlijke en mogelijk onherstelbare operatie is. Ten derde is
APM een producent-specifieke technologie, in de zin dat er
altijd een hoge mate van duplicatie zal zijn van al dan niet
geslaagde pogingen om het wiel opnieuw uit te vinden en
uiteraard ook van bugs. Er is geen enkele garantie dat het
wegnemen van een bug door een producent ook een zelfde bug
wegneemt bij een concurrent. Tenslotte is het van belang te
weten dat de APM-BIOS in het algemeen gewoon te weing geheugen
kon gebruiken om een ingewikkeld energiebeheer te kunnen
implementeren. Laat staan dat deze goed aanpasbaar was aan
veranderlijke doelstellingen voor de betreffende machine.Plug-n-play BIOS (PNPBIOS) was in veel
situaties onbetrouwbaar. PNPBIOS is 16-bitstechnologie, dus het
besturingssysteem moet 16-bit emulatie gebruiken om met
PNPBIOS-methoden te kunnen samenwerken.Het &os;-stuurprogramma APM is
gedocumenteerd in &man.apm.4;.ACPI instellenHet stuurprogramma acpi.ko wordt
standaard geladen bij het opstarten door de &man.loader.8; en
hoeft niet gecompileerd te worden. De
redenatie is dat er met modules gemakkelijker gewerkt kan
worden, bijvoorbeeld een andere acpi.ko
gebruiken zonder dat er een nieuwe kernel gebouwd moet worden.
Dit heeft het voordeel dat testen eenvoudiger is. Een andere
reden is dat het opstarten van ACPI nadat
een systeem eenmaal volledig opgestart is meestal niet goed
werkt. Mocht er hinder ondervonden worden, dan kan
ACPI beter uitgeschakeld worden. Dit
stuurprogramma kan niet gestopt worden als het eenmaal geladen
is, omdat de systeembus het gebruikt voor allerlei interacties
met hardware. ACPI kan uitgezet worden door
het instellen van hint.acpi.0.disabled="1" in
/boot/loader.conf of in de &man.loader.8;
prompt.ACPI en APM
kunnen niet samenleven en moeten afzonderlijk en exclusief
gebruikt worden. De laatste die gestart wordt bepaalt of het
stuurprogramma de ander wel of niet ziet.In haar eenvoudigste vorm kan ACPI
gebruikt worden om het systeem in slaapmodus te zetten met
&man.acpiconf.8; met de vlag en een optie
1-5. De meeste gebruikers hebben alleen
1 of 3 nodig. De optie
5 verricht een soft-off, wat
hetzelfde is als:&prompt.root; halt -pAndere opties zijn mogelijk via &man.sysctl.8;. Zie de
handleidingen van &man.acpi.4; en &man.acpiconf.8; voor meer
informatie.NateLawsonGeschreven door PeterSchultzMet medewerking van TomRhodes&os; ACPI gebruiken en debuggenACPI is een totaal nieuwe manier om
apparaten te ontdekken, om energieverbruik te beheren en om een
gestandaardiseerde toegang te bieden tot allerlei apparaten die
eerder via het BIOS beheerd werden. Er wordt
voortdurend vooruitgang geboekt om ACPI op alle
systemen te laten werken, maar bugs in de
ACPIMachine Language
(AML) bytecode van sommige moederborden,
onvolledigheden in de subsystemen van de kernel van &os; en bugs
in de &intel; ACPI-CA interpreter blijven
opduiken.Deze tekst is bedoeld om u te helpen met het bijstaan van de
&os; ACPI beheerders met het vinden van de
hoofdoorzaken van problemen die u opmerkt en met het debuggen en
het vinden van een oplossing.Debuginformatie aanleverenVoordat een probleem wordt gemeld, moet het zeker zijn dat
de laatste BIOS versie draait en indien
beschikbaar de geïntregeerde controller firmware
versie.Diegenen die meteen een probleem willen indienen, sturen de
volgende informatie naar
freebsd-acpi@FreeBSD.org:Omschrijving van het foutieve gedrag, inclusief
systeemtype en -model en alles wat de fout kan veroorzaken.
Als het een nieuw fenomeen is, dan dient ook zo accuraat
mogelijk aangegeven te worden wanneer de fout het eerst
optrad.De uitvoer van &man.dmesg.8; van boot
-v, inclusief foutmeldingen die gegenereerd
worden als de fout optreedt.De uitvoer van &man.dmesg.8; van boot
-v met ACPI uitgeschakeld,
indien het uitzetten van ACPI het
probleem oplost.Uitvoer van sysctl hw.acpi. Dit is
tevens een goede manier om uit te vinden welke
ACPI-mogelijkheden een systeem
heeft.Een URL waar de
ACPISource
Language (ASL) gevonden
kan worden. De ASL dient
niet rechtstreeks naar de lijst
gezonden te worden, omdat deze nogal groot kan zijn. Een
kopie van een ASL kan gemaakt worden met het volgende
commando:&prompt.root; acpidump -dt > naam-systeem.asl(Vervang uw aanmeldnaam door
$NAME en producent/model door
$SYSTEM. Bijvoorbeeld:
njl-FooCo6000.asl)De meeste &os;-programmeurs lezen de &a.current;, maar
problemen gaan bij voorkeur ook naar &a.acpi.name; zodat ze
zeker gezien worden. Het kan enige tijd duren voordat er
antwoord komt, omdat deze mensen elders ook nog volledige banen
hebben. Als de bug niet meteen duidelijk is, komt er
waarschijnlijk en verzoek om een PR in te
dienen via &man.send-pr.1;. Als er een PR
moet worden opgesteld, dan dient alle hierboven gevraagde
informatie vermeld te worden. Dit helpt om het probleem te
kunnen volgen en oplossen. Het sturen van een
PR zonder eerst &a.acpi.name; te mailen is
niet wenselijk, aangezien men PRs gebruikt
als herinnering van bestaande problemen, niet als
rapportagesysteem. Mogelijk is een probleem al eens door iemand
anders gemeld.AchtergrondACPI is aanwezig op alle moderne
computers die voldoen aan de ia32 (x86), ia64 (Itanium) of amd64
(AMD) architecturen. De volledige standaard heeft vele
mogelijkheden zoals CPU-prestatiebeheer,
energiebeheer, thermische zones, diverse batterijsystemen,
ingebedde controllers en busnummering. De meeste systemen
implementeren minder dan de volledige standaard. Een
desktopsysteem implementeert bijvoorbeeld meestal alleen
busnummering, terwijl laptops mogelijk ook koeling- en
batterijbeheer ondersteunen. Laptops hebben ook suspend en
resume (slapen en wakker worden) met hun eigen aanverwante
comlexiteit.Een ACPI-compliant systeem heeft
verscheidene componenten. Het BIOS- en
chipsetverkopers bieden verscheidene vaste tabellen aan zoals
FADT in het geheugen die zaken als de
APIC-afbeelding (gebruikt voor
SMP), configuratieregisters, en eenvoudige
configuratiewaarden specificeren. Ook wordt er een tabel van
bytecode (de Differentiated System
Description Table of DSDT)
geleverd die een op een boomstructuur lijkende namespace biedt
voor apparaten en methoden.Het stuurprogramma ACPI moet de
voorgedefinieerde tabellen verwerken, een interpreter voor de
bytecode implementeren en apparaatstuurprogramma's en de kernel
aanpassen om informatie van het
ACPI-subsysteem te accepteren. &intel; heeft
een interpreter beschikbaar gesteld (ACPI-CA)
die door &os; en ook door &linux; en NetBSD gebruikt wordt. De
ACPI-CA-broncode staat in src/sys/contrib/dev/acpica. De
lijmcode die ACPI-CA laat werken met &os;
staat in src/sys/dev/acpica/Osd.
Stuurprogramma's die verscheidene
ACPI-apparaten implementeren staan in
src/sys/dev/acpica.Algemene problemenWil ACPI goed werken, dan moeten alle
onderdelen goed werken. Hieronder staan enkele algemene
problemen in volgorde van hoe vaak ze optreden en enkele
mogelijke oplossingen of manieren om de problemen te
vermijden.MuisproblemenSoms doet een muis het niet bij het opstarten uit de
slaapstand. Een bekend lapmiddel is het toevoegen van
hint.psm.0.flags="0x3000" aan het bestand
/boot/loader.conf. Als dat niet werkt,
dan wordt aangeraden een bugrapport in te sturen, zoals
eerder is beschreven.Suspend/resumeACPI heeft drie slaapstanden waarbij
het geheugen (RAM) wordt ingezet. Dit
zijn de STR-toestanden
S1-S3, en nog een
slaap-met-gebruik-van-harde-schijf toestand
(STD) die S4 heet.
S5 is zacht uit en is de
normale status van een systeem als het is aangesloten maar
niet is aangezet. S4 kan feitelijk op twee
manieren geïmplementeerd worden:
S4BIOS is een slaapstand
naar schijf met behulp van het BIOS en
S4OS wordt volledig door
het besturingssysteem geïmplenteerd.als eerste dienen de sysctl hw.acpi
items die iets met de slaapstand te maken hebben gecontroleerd
te worden. Hieronder staan de resultaten voor een
Thinkpad:hw.acpi.supported_sleep_state: S3 S4 S5
hw.acpi.s4bios: 0Dit betekent dat hier acpiconf -s
gebruikt kan worden om S3,
S4OS en
S5 te testen. Als
gelijk was aan (1), dan zou er
S4BIOS ondersteuning
zijn in plaats van S4
OS.Als suspend/resume getest moet worden, dient, indien
ondersteund, bij S1 begonnen te worden.
Deze toestand heeft de grootste kans om te werken, omdat deze
niet veel stuurprogrammaondersteuning vereist. Niemand heeft
nog S2 geïmplementeerd, maar het is
ongeveer hetzelfde als S1. Daarna wordt
S3 getest. Dit is het diepste
STR-niveau en heeft uitgebreide
ondersteuning van stuurprogramma's nodig om hardware goed
opnieuw te kunnen starten. Mochten er blokkades optreden,
dan kan naar de &a.acpi.name; lijst gemaild worden. Er kan
echter geen snelle oplossing verwacht worden, omdat er nog de
nodige stuurprogramma's/hardware liggen om getest en bewerkt
te worden.Om een probleem te kunnen isoleren helpt het om zoveel
mogelijk stuurprogramma's uit de kernel te halen. Als dit
werkt, kan er teruggewerkt worden naar het stuurpgrogramma dat
schuldig is aan het falen. Meestal vertonen binaire
stuurprogramma's als nvidia.ko, X11
beeldschermstuurprogramma's en USB de
meeste problemen, terwijl bijvoorbeeld Ethernet-interfaces
meestal meteen goed werken. Als de stuurprogramma's zonder
problemen geladen en verwijderd kunnen worden, dan is dit te
automatiseren door de juiste commando's in
/etc/rc.suspend en
/etc/rc.resume te zetten. Er staat een
voorbeeld (achter commentaartekens) voor het laden en
verwijderen van een stuurprogramma. Als het beeldscherm er na
wakker worden vreemd uitziet, kan geprobeerd worden
op nul te zetten. Met
langere of kortere waarden voor
kan bekeken worden of dat
helpt.In geval van problemen is het ook een optie om een recente
&linux; distibutie met ondersteuning voor
ACPI support te starten en daarvan de
suspend/resume ondersteuning op dezelfde hardware uit te
proberen. Als het werkt met &linux;, dan is het
waarschijnlijk een &os; stuurprogrammaprobleem en als het
mogelijk is uit te vinden over welk stuurpgroramma het gaat,
kan dat bijdragen aan het oplossen van het probleem.
ACPI houdt zich in het algemeen niet bezig
met andere stuurprogramma's zoals geluid,
ATA, enzovoort. Als er dus een echt
probleem met een stuurprogramma is, dan is waarchijnlijk
uiteindelijk ook nodig naar de &a.current.name; lijst te
posten en naar de beheerder van het stuurprogramma. Voor
degenen met moed is het vooral aan te raden een paar
&man.printf.3;s in problematische stukken van een
stuurprogramma te plaatsen voor debugging om na te gaan waar
de resumefunctie precies hangt.Tot slot kan geprobeerd worden om ACPI
uit te zetten en in plaats daarvan APM aan
te zetten. Als suspend/resume werkt met
APM, is het wellicht verstandig het daarbij
te houden, vooral met wat oudere apparatuur (voor 2000).
Producenten hebben nogal wat tijd nodig gehad om
ACPI ondersteuning goed te krijgen en voor
oudere hardware is het waarschijnlijker dat er
BIOS-problemen zijn met
ACPI.Systeem hangt (tijdelijk of permanent)Meestal is het hangen van het systeem het gevolg van
verloren interrupts of een interruptstorm. Chipsets kunnen
een heleboel problemen hebben, afhankelijk van hoe het
BIOS interrupts instelt voor het opstarten,
of de APIC (MADT) tabel
correct is en de routering van het System Control
Interrupt (SCI).interruptstormsInterruptstorms kunnen onderscheiden worden van verloren
geraakte interrupts door de uitvoer van vmstat
-i te controleren en de regel met
acpi0 goed te lezen. Als de teller in
toenemende mate hoger staat dan enkele per seconde, dan is
sprake van een interruptstorm. Als het systeem lijkt te
hangen, is het wellicht nog mogelijk door te dringen tot
de DDB (CTRLALTESC) en
show interrupts uit te voeren.APICuitschakelenDe beste hoop in geval van interruptproblemen is om
APIC-ondersteuning uit te zetten met
hint.apic.0.disabled="1" in
loader.conf.PanicsPanics zijn relatief zeldzaam met ACPI
en krijgen de hoogste prioriteit bij het oplossen. Eerst
moeten de verschillende gebeurtenissen waarmee de panic (als
mogelijk) te reproduceren is geïsoleerd worden en moet
een backtrace gemaakt worden. options DDB
dient aangezet te worden en er dient een een seriële
console () of een
&man.dump.8; partitie te komen. In DDB is
een backtrace te maken met tr. Als de
backtrace handmatig opgeschreven moet worden, is het
belangrijk dat in ieder geval de bovenste en onderste vijf (5)
regels van de backtrace genoteerd worden.Daarna dient getracht te worden het systeem te starten
zonder ACPI. Als dat werkt, is het
ACPI-subsysteem geïsoleerd en kunnen
de verschillende -waarden
uitgeprobeerd worden. In &man.acpi.4; staan enkele
voorbeelden.Systeem slaat aan na slaapstand of stophw.acpi.disable_on_poweroff="0" kan
uitgezet worden in &man.loader.conf.5;. Hierdoor schakelt
ACPI bepaalde gebeurtenissen tijdens het
afsluitproces niet uit. Om dezelfde redenen moeten sommige
systemen deze waarde altijd op 1
(standaard) hebben staan. In het algemeen lost dit een
probleem op waarbij een systeem spontaan weer opkomt nadat het
in slaapstand is gezet of geheel gestopt is.Overige problemenAls er nog andere problemen zijn met
ACPI (met een docking station of
apparaten niet gedetecteerd, enzovoort), dan kan een mail met
beschijving naar de mailinglijst gezonden worden. Sommige
zaken kunnen echter gerelateerd zijn aan delen van het
ACPI-subsysteem die nog niet af zijn,
dus het kan in sommige gevallen een tijd duren. Gebruikers
moeten soms geduld en de bereidheid om eventuele
patches uit te proberen hebben.ASL, acpidump en
IASLACPIASLHet grootste probleem is dat
BIOS-producenten vaak incorrecte (of gewoon
foutieve) bytecode leveren. Dit blijkt doorgaans uit
kernelboodschappen als:ACPI-1287: *** Error: Method execution failed [\\_SB_.PCI0.LPC0.FIGD._STA] \\
(Node 0xc3f6d160), AE_NOT_FOUNDVaak kunnen dergelijke problemen geoplost worden door de
BIOS bij te werken tot de laatste revisie.
De meeste consoleberichten zijn onschuldig, maar als er andere
problemen zijn, zoals batterijstatus die niet werkt, dan ligt
het voor de hand te zoeken naar problemen in de
AML-code. De bytecode die
AML genoemd wordt, wordt gecompileerd van een
broncodetaal ASL. Deze staat weer in een
tabel DSDT. Met &man.acpidump.8; kan een
kopie van de ASL gemaakt worden. Dan moeten
zowel de opties (laat inhoud van vaste
tabellen zien) als (disassembleer
AML naar ASL) gebruikt
worden. In Debuginformatie
aanleveren staat een voorbeeld.De eenvoudigste eerste controle is de
ASL-code opnieuw compileren en kijken of er
foutmeldingen optreden. Waarschuwingen kunnen doorgaans
genegeerd worden, maar fouten zijn bugs die er meestal toe
leiden dat ACPI niet correct werkt. Om
ASL te hercompileren:&prompt.root; iasl eigen.aslASL reparerenACPIASLOp langere termijn is het de bedoeling dat voor vrijwel elke
machine ACPI werkt zonder enig ingrijpen van
de gebruiker. Op dit moment wordt er echter nog gewerkt aan
oplossingen voor veel voorkomende vergissingen die
BIOS-producenten maken. De µsoft;
interpreter (acpi.sys en
acpiec.sys) controleert niet strikt of het
BIOS volledig aan de standaard voldoet,
waardoor het voorkomt dat BIOS-makers die
alleen testen onder &windows; bepaalde fouten in hun
ASL nooit correct repareren. &os; hoopt door
te gaan met de identificatie en documentatie van welk
niet-standaard gedrag precies wordt toegelaten door
µsoft;'s interpreter en te dit te repliceren zodat &os;
kan werken zonder dat gebruikers zich gedwongen zien om de
ASL te repareren. Als een tijdelijke
oplossing en om te helpen met het in kaart brengen van bepaald
gedrag, kan de ASL handmatig gerepareerd
worden. Mocht dit lukken, dan wordt erop aangedrongen een
&man.diff.1; van de oude en de nieuwe ASL te
mailen, zodat het foutieve gedrag mogelijk in
ACPI-CA kan worden verwerkt, waardoor andere
gebruikers niet meer handmatig met hun ASL
aan de gang hoeven.ACPIfoutmeldingenHieronder staat een lijst algemene foutmeldingen, hun
oorzaken en hoe ze op te lossen:_OS afhankelijkhedenSommige AMLs gaan ervan uit dat de
wereld enkel bestaat uit &windows; versies. &os; kan zich
voordoen als elk OS om te kijken of dit
problemen oplost. Een gemakkelijke manier om dit te doen is
hw.acpi.osname="Windows 2001" in te stellen
in /boot/loader.conf of andere
gelijksoortige strings die in een ASL
staan.Ontbrekende return-opdrachtenSommige methoden hebben geen specifieke returnwaarde,
zoals wel vereist wordt door de standaard. Hoewel
ACPI-CA hier niets mee doet, heeft &os;
de mogelijkheid tot impliciete returns. Er kunnen ook
expliciete return-opdrachten toegevoegd worden waar vereist,
als het bekend is welke waarden teruggevoerd moeten worden.
Om iasl te dwingen tot compilatie van
ASL kan de schakeloptie
gebruikt worden.De standaard AML aanpassenNadat eigen.asl aangepast is, kan
deze als volgt gecompileerd worden:&prompt.root; iasl eigen.aslMet de optie is af te dwingen dat de
AML gemaakt wordt, zelfs als er
compileerfouten optreden. Sommige fouten (zoals ontbrekende
return-opdrachten) worden automatisch opgelost door de
interpreter.DSDT.aml is de standaardnaam voor het
bestand dat door iasl wordt geproduceerd.
Dit is in plaats van de foutieve versie uit het
BIOS (die nog steeds aanwezig is in het
flashgeneugen) te laden door
/boot/loader.conf als volgt te
wijzigen:acpi_dsdt_load="YES"
acpi_dsdt_name="/boot/DSDT.aml"DSDT.aml moet in de map /boot staan.Debuguitvoer van ACPI verkrijgenACPIproblemenACPIdebuggenHet stuurprogramma ACPI heeft een zeer
flexibele debugfaciliteit. Er kan zowel een verzameling van
subsystemen aangegeven worden als het niveau van uitvoerigheid.
De te debuggen subsystemen worden aangegeven als lagen
(layers) en zijn opgedeeld in
ACPI-CA-componenten (ACPI_ALL_COMPONENTS) en
ACPI-hardware-ondersteuning
(ACPI_ALL_DRIVERS). De uitvoerigheid van debuguitvoer wordt
aangegeven als het niveau (level) en gaat van
CPI_LV_ERROR (alleen fouten rapporteren) tot ACPI_LV_VERBOSE
(alles). Het niveau is een bitmasker en dus kunnen er meerdere
opties tegelijk ingeschakeld worden (gescheiden door spaties).
In de praktijk wordt wellicht een seriële console gebruikt
om de uitvoer te loggen als deze zo omvangrijk is dat de
console berichtbuffer vol loopt (misschien wel meerdere keren).
Een complete lijst van de individuele lagen en niveaus staat in
&man.acpi.4;.Debuguitvoer staat standaard niet aan. Door
options ACPI_DEBUG toe te voegen aan het
bestand met kernelinstellingen als ACPI als
de kernel is gebouwd, wordt het ingeschakeld. Door
ACPI_DEBUG=1 toe te voegen aan
/etc/make.conf wordt het systeembreed
ingeschakeld. Als ACPI als module wordt
gebruikt (de normale situatie), dan hoeft slechts de module
acpi.ko opnieuw gecompileerd te
worden:&prompt.root; cd /sys/modules/acpi/acpi
&& make clean &&
make ACPI_DEBUG=1acpi.ko moet in
/boot/kernel komen te
staan en de gewenste debuglaag en het gewenste niveau van
uitvoerigheid dienen toegevoegd te worden aan
loader.conf. Hieronder een voorbeeld
waarmee debuguitvoer wordt aangezet voor alle
ACPI-CA-componenten en alle
ACPI-hardware-stuurprogramma's
(CPU, LID, enzovoort.
Het niveau van uitvoerigheid is het laagst mogelijke. Er
worden alleen fouten gemeld.debug.acpi.layer="ACPI_ALL_COMPONENTS ACPI_ALL_DRIVERS"
debug.acpi.level="ACPI_LV_ERROR"Als de gezochte informatie wordt veroorzaakt door een
specifieke gebeurtenis (bijvoorbeeld in en uit slaapstand gaan),
dan kunnen wijzigingen aan loader.conf
achterwege blijven en in plaats daarvan kan
sysctl gebruikt worden om laag en niveau in
te stellen na het opstarten en zo het systeem voor te bereiden
op die specifieke gebeurtenis. De sysctls
hebben dezelfde namen als de parameters in
loader.conf.VerwijzingenMeer informatie over ACPI staat op de
volgende locaties:De &a.acpi;De ACPI mailinglijst archieven
De oude ACPI mailinglijst archieven
De ACPI 2.0 specificatie
&os; Handleidingen: &man.acpi.4;,
&man.acpi.thermal.4;, &man.acpidump.8;, &man.iasl.8;,
&man.acpidb.8;
DSDT debugging informatie.
(Gebruikt Compaq als voorbeeld, maar van algemeen
nut).
diff --git a/nl_NL.ISO8859-1/books/handbook/geom/chapter.sgml b/nl_NL.ISO8859-1/books/handbook/geom/chapter.sgml
index 12142d5fe9..f0739a33d2 100644
--- a/nl_NL.ISO8859-1/books/handbook/geom/chapter.sgml
+++ b/nl_NL.ISO8859-1/books/handbook/geom/chapter.sgml
@@ -1,816 +1,851 @@
TomRhodesGeschreven door SiebrandMazelandVertaald door GEOM: Modulair schijftransformatie raamwerkOverzichtGEOMGEOM schijf raamwerkGEOMDit hoofdstuk beschrijft het gebruik van schijven in het
GEOM raamwerk in &os;. Hieronder vallen de belangrijkste
RAID
besturingsprogramma's die het raamwerk gebruikt voor
instellingen. In dit hoofdstuk wordt niet diepgaand beschreven
hoe GEOM omgaat met I/O, het onderliggende subsysteem of code.
Die informatie staat in het hulppagina voor &man.geom.4; en de
verscheidene SEE ALSO referenties. Dit hoofdstuk
is ook geen definitief stuk over het instellen van
RAID. Alleen de door GEOM ondersteunde
RAID-classificaties worden beschreven.Na het lezen van dit hoofdstuk weet de lezer:Welk type RAID-ondersteuning via GEOM
beschikbaar is;Hoe de basisgereedschappen te gebruiken om de
verschillende RAID-niveaus in te stellen,
te onderhouden en te wijzigen;Hoe schijfapparaten via GEOM te spiegelen, aaneen te
schakelen, te versleutelen en vanaf afstand schijven aan te
sluiten;Hoe problemen op te lossen met schijven die via het GEOM
raamwerk zijn aangesloten.Veronderstelde voorkennis:Begrijpen hoe &os; omgaat met schijfapparaten ();Weten hoe een nieuwe &os; kernel in te stellen en te
installeren ().GEOM inleidingGEOM staat toegang en controle toe op klassen, Master Boot
Records, BSD labels, enzovoort, door gebruik
te maken van diensten of de speciale bestanden in /dev. GEOM ondersteunt
verschillende software RAID instellingen en
biedt transparante toegang tot het besturingssysteem en de
hulpprogramma's.TomRhodesGeschreven door MurrayStokelyRAID0 - aaneengeschakeldGEOMaaneengeschakeldAaneenschakelen is een methode die gebruikt wordt
om meerdere schijven te combineren tot een enkele volume. In
veel gevallen wordt dit gedaan met hardware controllers. Het
GEOM subsysteem biedt softwareondersteuning voor
RAID0, ook wel bekend als aaneenschakelen
(disk striping).In een RAID0-systeem worden gegevens
opgedeeld in blokken die verdeeld worden over de schijven in een
reeks. In plaats van te hoeven wachten tot een systeem 256k naar
één schijf heeft geschreven, kan een
RAID0-systeem tegelijkertijd 64k naar vier
verschillende schijven schrijven, waardoor superieure I/O
prestaties worden bereikt. Deze prestaties kunnen nog verbeterd
worden door meerdere schijfcontrollers te gebruiken.Iedere schijf in een
RAID0-aaneenschakeling moet van dezelfde
grootte zijn, omdat I/O-verzoeken altijd zijn opgebouwd uit
precies gelijk over de schijven verdeelde verzoeken tot lezen of
schrijven.Illustratie aaneengeschakelde schijvenOngeformatteerde ATA-schijven aaneenschakelenLaad de module geom_stripe.ko:&prompt.root; kldload geom_stripeZorg ervoor dat er een koppelpunt beschikbaar is. Als dit
volume een rootpartitie wordt, gebruikt dan tijdelijk een
ander koppelpunt zoals /mnt:&prompt.root; mkdir /mntStel de apparaatnamen voor de schijven vast die aaneen
worden geschakeld en maak het nieuwe apparaat aan. Om twee
ongebruikte, ongepartitioneerde ATA
schijven aaneen te schakelen (/dev/ad2
en /dev/ad3):&prompt.root; gstripe label -v st0 /dev/ad2 /dev/ad3
Metadata value stored on /dev/ad2.
Metadata value stored on /dev/ad3.
Done.Schrijf een standaard label naar de nieuwe partitie, ook
wel bekend als een partitietabel en installeer de standaard
opstart code:&prompt.root; bsdlabel -wB /dev/stripe/st0Dit proces hoort twee nieuwe apparaten gemaakt te hebben
in de map /dev/stripe
naast het apparaat st0, te weten
st0a en
st0c. Vanaf nu kan er een
bestandssysteem op st0a worden
gezet met behulp van de newfs applicatie:
&prompt.root; newfs -U /dev/stripe/st0aNa het uitvoeren van het bovenstaande commando rollen er
veel getallen over het scherm en na een aantal seconden is
het proces afgerond. Het volume is gereed en klaar om
aangekoppeld te worden.Om de nieuwe aaneengeschakelde schijf handmatig te koppelen
moet het volgende gedaan worden:&prompt.root; mount /dev/stripe/st0a /mntOm dit aaneengeschakelde bestandssysteem automatisch aan te
koppelen bij het opstarten wordt de volume-informatie in
/etc/fstab gezet. Voor dit doel wordt een
permanent koppelpunt, genaamd stripe, aangemaakt:&prompt.root; mkdir /stripe
&prompt.root; echo "/dev/stripe/st0a /mnt ufs rw 2 2" \>> /etc/fstabLaadt de module geom_stripe.ko ook
automatisch bij het initialiseren van een systeem door de volgende
regel toe te voegen aan /boot/loader.conf:
&prompt.root; echo 'geom_stripe_load="YES"' >> /boot/loader.confRAID1 - spiegelenGEOMschijf spiegelenSpiegelen (mirroring) is een technologie die
door veel bedrijven en thuisgebruikers wordt ingezet om gegevens
te back-uppen zonder onderbrekingen. Als er een spiegel bestaat,
betekent dat eenvoudigweg dat schijfB een kopie is van schijfA,
of misschien zijn schijvenC+D een kopie van schijvenA+B. Los van
de schijfinstellingen is het belangrijkste aspect dat de
gegevens van de ene schijf of partitie worden gerepliceerd naar
de andere. Later kunnen die gegevens eenvoudiger worden hersteld
of geback-upped zonder dat dit leidt tot onderbrekingen in
dienstverlening of toegang tot gegevens en schijven kunnen zelfs
fysiek worden opgeslagen in een kluis.Begin met een systeem dat twee schijven heeft van gelijke
grootte. Deze oefeningen stellen dat het directe-toegang
(&man.da.4;) SCSI-schijven zijn.Primaire schijven spiegelenAannemende dat &os; op het eerste
da0-schijfapparaat is
geïnstalleerd, dient er aan &man.gmirror.8; verteld te
worden om daar de primaire gegevens op te slaan.Voordat de mirror gebouwd wordt, dient aanvullende
debuginformatie en openingstoegang tot het apparaat aangezet te
worden door de &man.sysctl.8;-optie
kern.geom.debugflags op de volgende waarde in
te stellen:&prompt.root; sysctl kern.geom.debugflags=17Maak nu de mirror aan. Begin het proces door informatie
over metagegevens op het primaire schijfapparaat op te slaan,
waardoor effectief het apparaat /dev/mirror/gm aangemaakt
wordt met het volgende commando:Het creëeren van een mirror buiten de opstartschijf
kan resulteren in gegevensverlies als er enige gegevens zijn
opgeslagen op de laatste sector van de schijf. Dit gevaar
wordt verminderd als het creëeren van de mirror direct na
een verse installatie van &os; wordt gedaan.&prompt.root; gmirror label -vb round-robin gm0 /dev/da0Het systeem hoort te antwoorden met:Metadata value stored on /dev/da0.
Done.Initialiseer GEOM, dit zal de kernelmodule
/boot/kernel/geom_mirror.ko laden:&prompt.root; gmirror loadWanneer dit commando succesvol verloopt, maakt het het
apparaatknooppunt gm0 aan onder de
map /dev/mirror.Maak het mogelijk om de kernelmodule
geom_mirror.ko tijdens systeeminitialisatie
te laden:&prompt.root; echo 'geom_mirror_load="YES"' >> /boot/loader.confBewerk het bestand /etc/fstab, waarbij
verwijzingen naar het oude da0 worden
vervangen door de nieuwe apparaatknooppunten van het
mirrorapparaat gm0.Indien &man.vi.1; de geprefereerde tekstverwerker is, is
het volgende een gemakkelijke manier om deze taak te
volbrengen:&prompt.root; vi /etc/fstabMaak een reservekopie van de huidige gegevens van
fstab in &man.vi.1; door :w
/etc/fstab.bak in te typen. Vervang daarna alle
oude verwijzingen naar da0 door
gm0 door
:%s/da/mirror\/gm/g in te typen.Het resulterende fstab zou er ongeveer
hetzelfde als het volgende uit moeten zien. Het maakt niet uit
of de schijfstations SCSI of
RAID zijn, het
RAID-apparaat zal ongeacht hiervan
gm zijn.# Device Mountpoint FStype Options Dump Pass#
/dev/mirror/gm0s1b none swap sw 0 0
/dev/mirror/gm0s1a / ufs rw 1 1
/dev/mirror/gm0s1d /usr ufs rw 0 0
/dev/mirror/gm0s1f /home ufs rw 2 2
#/dev/mirror/gm0s2d /store ufs rw 2 2
/dev/mirror/gm0s1e /var ufs rw 2 2
/dev/acd0 /cdrom cd9660 ro,noauto 0 0Start het systeem opnieuw op:&prompt.root; shutdown -r nowTijdens de systeeminitialisatie dient het apparaat
gm0 in plaats van
da0 gebruikt te worden. Als het
systeem volledig is geïnitialiseerd, kan dit gecontroleerd
worden door de uitvoer van het commando mount
te inspecteren:&prompt.root; mount
Filesystem 1K-blocks Used Avail Capacity Mounted on
/dev/mirror/gm0s1a 1012974 224604 707334 24% /
devfs 1 1 0 100% /dev
/dev/mirror/gm0s1f 45970182 28596 42263972 0% /home
/dev/mirror/gm0s1d 6090094 1348356 4254532 24% /usr
/dev/mirror/gm0s1e 3045006 2241420 559986 80% /var
devfs 1 1 0 100% /var/named/devDe uitvoer ziet er als verwacht uit. Plaats als laatste
stap, om synchronisatie te beginnen, de schijf
da1 in de mirror met het volgende
commando:&prompt.root; gmirror insert gm0 /dev/da1De status kan gecontroleerd worden tijdens het bouwen van de
mirror met het volgende commando:&prompt.root; gmirror statusWanneer de mirror gebouwd is en alle huidige gegevens zijn
gesynchroniseerd, dient de uitvoer van het bovenstaande commando
er als volgt uit te zien: Name Status Components
mirror/gm0 COMPLETE da0
da1Als er problemen zijn, of als de mirror nog bezig is om het
bouwproces te voltooien, zal het voorbeeld
DEGRADED in plaats van
COMPLETE laten zien.Problemen oplossenSysteem weigert op te startenAls een systeem opstart in een prompt dat op het volgende
lijkt:ffs_mountroot: can't find rootvp
Root mount failed: 6
mountroot>Herstart te machine met de aan/uit-schakelaar of met de
resetknop. Selecteer in het bootmenu optie zes (6).
Hierdoor komt een systeem in een &man.loader.8; prompt. Laad
de kernelmodules handmatig:OK? load geom_mirror
OK? bootAls dit werkt werd de module om welke reden dan ook niet
juist geladen. Controleer of de relevante regel in
/boot/loader.conf correct is. Als het
probleem aanhoudt, zet dan de onderstaande regel in het
bestand met kernelinstellingen en herbouw en installeer de
kernel.options GEOM_MIRRORHiermee moet het probleem opgelost zijn.Herstellen van falende schijvenHet mooie aan het spiegelen van schijven is dat als een
schijf faalt, deze vervangen kan worden, aangenomen zonder
gegevensverlies.Neem met betrekking tot de vorige
RAID1-configuratie aan dat
da1 het geeft begeven en vervangen moet
worden. Bepaal, om het te vervangen, welke schijf het heeft
begeven en schakel het systeem uit. Op dit moment kan de schijf
worden verwisseld door een nieuwe en kan het systeem weer worden
opgestart. Nadat het systeem is herstart, kunnen de volgende
commando's worden gebruikt om de schijf te vervangen:&prompt.root; gmirror forget gm0&prompt.root; gmirror insert gm0 /dev/da1Gebruik het commando gmirror status om de
voortgang van het herbouwen te bekijken. Zo eenvoudig is het.GEOM Gate netwerk apparatenGEOM ondersteund het op afstand gebruiken van apparaten, zoals
schijven, CD-ROMs, bestanden, etc. door het gebruik van de gate
applicaties. Dit is vergelijkbaar met NFS.
Om te beginnen moet er een exports bestand gemaakt worden.
Dit bestand specificeert wie de geëxporteerde bron mag
benaderen en welke rechten er op dat moment verleend worden.
Bijvoorbeeld om de vierde slice te exporteren van de eerste
SCSI schijf, moet het volgende in
/etc/gg.exports gezet worden:192.168.1.0/24 RW /dev/da0s4dDit staat alle machines in het privé netwerk toe om het
bestandssysteem op da0s4d te benaderen.
Om dit apparaat te kunnen exporteren is het van belang dat de
schijf nog niet gekoppeld is en moet de &man.ggated.8; dienst
gestart worden.&prompt.root; ggatedOm vervolgens het apparaat aan een client machine te koppelen
moet het volgende gedaan worden:&prompt.root; ggatec create -o rw 192.168.1.1 /dev/da0s4d
ggate0
&prompt.root; mount /dev/ggate0 /mntVanaf dit moment kan de schijf benaderd worden via het
koppelpunt /mnt.Let op, dit mislukt als de schijf reeds gekoppeld is op
de server machine of als deze reeds gekoppeld is aan een andere
machine op het netwerk.Zodra het apparaat niet langer nodig is, kan het veilig
ontkoppeld worden met behulp van &man.umount.8; net zoals met
elke andere schijf.Het labelen van schijvenGEOMDisk LabelsTijdens het initialiseren van het systeem zal de &os; kernel
apparaatknooppunten creëren nadat het een apparaat gevonden
heeft. Deze manier om te zoeken naar apparaten levert wat
problemen op bijvoorbeeld wanneer er een nieuwe schijf wordt
toegevoegd via USB. Het is hoogst
waarschijnlijk dat een flash apparaat een apparaatknooppunt
krijgt van da0, waarna de originele
da0 op schuift naar
da1. Dit levert problemen op als
bestandssystemen worden gekoppeld als ze gedefinieerd zijn in
/etc/fstab, dit kan zelfs ertoe leiden dat
het systeem niet opstart.Een mogelijke oplossing hiervoor is om de
SCSI schijven een vaste plek te geven op
een bepaalde volgorde, zodat zodra er een nieuwe schijf
geplaatst wordt, deze een ongebruikt apparaatknooppunt
toegewezen krijgt. Maar wat als er USB
apparaten zijn die de primaire SCSI schijf
vervangt? Dit gebeurd omdat USB apparaten
meestal eerder gevonden worden dan een SCSI
kaart. Een oplossing hiervoor is om de apparaten pas toe te
voegen als het systeem reeds gestart is, een andere methode kan
zijn om alleen een enkele ATA schijf te
koppelen en nooit SCSI schijven door middel
van /etc/fstab.Maar er is een betere oplossing beschikbaar. Door het gebruik
van glabel kunnen beheerders en gebruikers een
label toevoegen aan een schijf, en deze labels gebruiken in
/etc/fstab. Omdat glabel
het label bewaard in de laatste sector van de schijf, kan het
label bewaard blijven ook na een reboot en kan het
bestandssysteem altijd gekoppeld worden ongeacht welk
apparaatknooppunt toegekend is aan het apparaat.Uiteraard hoeft een label niet permanent te zijn, het
glabel programma kan zowel tijdelijke als
permanente labels aanmaken. Alleen een permanent label blijft
beschikbaar ook na een reboot. Zie de &man.glabel.8;
handleiding voor meer informatie over de verschillen tussen de
labeltypes.Label types en voorbeeldenEr zijn twee type labels: een generiek label en een
bestandssysteemlabel. Labels kunnen permanent of tijdelijk
zijn. Permanente labels kunnen met de commando's &man.tunefs.8;
of &man.newfs.8; aangemaakt worden. Ze zullen vervolgens worden
aangemaakt in een submap van
/dev, welke genoemd wordt
naar het bestandssysteemtype. Bijvoorbeeld
UFS2 labels worden geplaatst in de map
/dev/ufs. Permanente
labels kunnen ook worden aangemaakt met het commando
glabel label. Deze zijn niet specifiek voor
het bestandssysteem, en zullen in de map /dev/label aangemaakt
worden.Een tijdelijk label verdwijnt na een herstart van het
systeem. Deze labels worden gecreëerd in
/dev/label en zijn
perfect voor experimenten. Een tijdelijk kan met het commando
glabel create worden aangemaakt. Lees voor
meer informatie de handleidingpagina van &man.glabel.8;.Om een permanent label te schrijven voor een
UFS2-bestandssysteem zonder de huidige data
te vernietigen:&prompt.root; tunefs -L home/dev/da3Als het bestandssyteem vol is kan dit leiden tot data
corruptie; echter als het bestandssysteem vol is zou het
hoofddoel moeten zijn om oude achtergebleven bestanden weg
te halen in plaats van het toevoegen van labels.Er zou nu een label moeten bestaan in
/dev/ufs, welke
toegevoegd kan worden aan het /etc/fstab
bestand:/dev/ufs/home /home ufs rw 2 2Het bestandssysteem mag niet aangekoppeld zijn op het
moment dat tunefs gebruikt wordt.Nu kan het bestandssysteem net als normaal worden gekoppeld:
&prompt.root; mount /homeVanaf dit moment is het mogelijk om, zolang de
geom_label.ko geladen wordt tijdens het
opstarten van het systeem, of als deze is meegecompileerd door
middel van de GEOM_LABEL optie in de kernel,
het apparaatknooppunt te wijzigen zonder ernstige gevolgen voor
het systeem.Bestandssystemen kunnen ook een standaard label mee krijgen
door gebruik te maken van de optie met het
newfs commando. Zie de &man.newfs.8;
handleiding voor meer informatie.Het volgende commando kan worden gebruikt om een label te
verwijderen:&prompt.root; glabel destroy homeHet volgende voorbeeld laat zien hoe de partities van een
opstartschijf gelabeld worden.Partities op de opstartschijf labelenDoor de partities op de opstartschijf permanent te labelen
zou het systeem in staat moeten zijn om normaal door te gaan
met opstarten, zelfs als de schijf verplaatst is naar een
andere controller of is overgeplaatst naar een ander systeem.
In dit voorbeeld wordt aangenomen dat er een enkele
ATA-schijf wordt gebruikt, die momenteel
als ad0 door het systeem wordt
herkend. Het wordt ook aangenomen dat het standaard
partitieschema van &os; wordt gebruikt, met de
bestandssystemen /,
/var,
/usr, en
/tmp, alsmede een
wisselpartitie.Start het systeem opnieuw op, en druk bij de
&man.loader.8;-prompt op 4 om in enkele gebruikersmodus op te
starten. Geef dan de volgende commando's:&prompt.root; glabel label rootfs /dev/ad0s1a
GEOM_LABEL: Label for provider /dev/ad0s1a is label/rootfs
&prompt.root; glabel label var /dev/ad0s1d
GEOM_LABEL: Label for provider /dev/ad0s1d is label/var
&prompt.root; glabel label usr /dev/ad0s1f
GEOM_LABEL: Label for provider /dev/ad0s1f is label/usr
&prompt.root; glabel label tmp /dev/ad0s1e
GEOM_LABEL: Label for provider /dev/ad0s1e is label/tmp
&prompt.root; glabel label swap /dev/ad0s1b
GEOM_LABEL: Label for provider /dev/ad0s1b is label/swap
&prompt.root; exitHet systeem zal doorgaan met opstarten in
meergebruikersmodus. Bewerk, nadat het opstarten is voltooid,
/etc/fstab en vervang de conventionele
namen door de respectievelijke labels. Het uiteindelijke
bestand /etc/fstab zal er als volgt
uitzien:# Device Mountpoint FStype Options Dump Pass#
/dev/label/swap none swap sw 0 0
/dev/label/rootfs / ufs rw 1 1
/dev/label/tmp /tmp ufs rw 2 2
/dev/label/usr /usr ufs rw 2 2
/dev/label/var /var ufs rw 2 2Het systeem kan nu worden herstart. Als alles goed ging,
zal het normaal opstarten en zal mount dit
laten zien:&prompt.root; mount
/dev/label/rootfs on / (ufs, local)
devfs on /dev (devfs, local)
/dev/label/tmp on /tmp (ufs, local, soft-updates)
/dev/label/usr on /usr (ufs, local, soft-updates)
/dev/label/var on /var (ufs, local, soft-updates)
+
+ Beginnend met &os; 7.2 ondersteunt de klasse &man.glabel.8;
+ een nieuw labeltype voor UFS-bestandssystemen,
+ gebaseerd op het unieke id van het bestandssysteem,
+ ufsid. Deze labels kunnen in de map /dev/ufsid gevonden worden en
+ worden automatisch tijdens het opstarten aangemaakt. Het is
+ mogelijk om de ufsid-labels te gebruiken om
+ partities aan te koppelen door middel van de faciliteit
+ /etc/fstab. Gebruik glabel
+ status om een lijst van bestandssystemen en hun
+ overeenkomende ufsid-labels te ontvangen:
+
+ &prompt.user; glabel status
+ Name Status Components
+ufsid/486b6fc38d330916 N/A ad4s1d
+ufsid/486b6fc16926168e N/A ad4s1f
+
+ In het bovenstaande voorbeeld representeert
+ ad4s1d het bestandssysteem /var, terwijl
+ ad4s1f het bestandssysteem /usr representeert. Door gebruik
+ te maken van de gegeven ufsid-waarden kunnen
+ deze partities nu aangekoppeld worden met de volgende regels in
+ /etc/fstab:
+
+ /dev/ufsid/486b6fc38d330916 /var ufs rw 2 2
+/dev/ufsid/486b6fc16926168e /usr ufs rw 2 2
+
+ Elke partitie met een ufsid-label kan op
+ deze manier worden aangekoppeld, waardoor het niet meer nodig is
+ om handmatig permanente labels voor ze aan te maken, terwijl er
+ nog steeds van de voordelen van apparaatnaam-onafhankelijk
+ aankoppelen genoten kan worden.UFS logboeken door middel van GEOMGEOMJournalingMet de komst van &os; 7.0 komt ook de langverwachte
optie van UFS logboeken. De implementatie
zelf is gedaan door middel van het GEOM subsysteem, welke
makkelijk geconfigureerd kan worden met behulp van de
&man.gjournal.8; applicatie.Wat is logboeken? Logboek mogelijkheden betekend het opslaan
van bestandssysteem transacties, zoals wijzigingen die een
complete schrijfactie zijn, voor er meta-data wordt toegevoegd
en voor de wijzigingen op schijf worden gezet. Deze transactie
log kan later opnieuw afgespeeld worden om te voorkomen dat er
bestandssysteem inconsistenties voorkomen.Deze methode is een extra manier om te beschermen tegen
gegevensverlies en inconsistenties van het bestandssysteem. In
tegenstelling tot Soft Updates, welke bijhoud welke meta-data
wijzigingen er worden uitgevoerd en Snapshots, wat een beeld
bestand is van het bestandssysteem, wordt er een complete log
bewaard in de schijfruimte die speciaal voor deze taak is
gereserveerd, en in sommige gevallen op een compleet andere
schijf.In tegenstelling tot andere logboek implementaties is de
gjournal methode blok gebaseerd en niet
geïmplementeerd als onderdeel van het bestandssysteem maar
als uitbreiding op GEOM.Om ondersteuning in te schakelen voor
gjournal, moet de kernel over de volgende optie
beschikken, welke standaard is op 7.X-systemen:options UFS_GJOURNALIndien gejournalde volumes tijdens het opstarten aangekoppeld
moeten worden, moet de kernelmodule
geom_journal.ko ook geladen zijn, door de
volgende regel aan /boot/loader.conf toe te
voegen:geom_journal_load="YES"Ook kan deze functie in een eigen kernel worden ingebouwd,
door de volgende regel aan het kernelinstellingenbestand toe te
voegen:options GEOM_JOURNALHet creëren van een logboek op een vrij en beschikbaar
bestandssysteem kan nu gedaan worden met behulp van de volgende
stappen, ervan uitgaande dat da4 de
nieuwe beschikbare SCSI schijf is:&prompt.root; gjournal label /dev/da4
&prompt.root; gjournal loadOp dit moment zou er een ad4
apparaatknooppunt en een ad4.journal
apparaatknooppunt moeten zijn. Nu kan er een bestandssysteem op
gezet worden:&prompt.root; newfs -O 2 -J /dev/da4.journalHet hiervoor ingevoerde commando zal een
UFS2 bestandssysteem met logboek
ondersteuning aanmaken.Koppel het apparaat op een gewenst koppelpunt met:&prompt.root; mount /dev/da4.journal /mntIn het geval dat er meerdere slices zijn, zal er een logboek
voor elke slice gecreëerd worden. Bijvoorbeeld, als
ad4s1 en ad4s2
allebei slices zijn, dan zal gjournal een
ad4s1.journal en een
ad4s2.journal creëeren. In het
geval dat het commando twee keer gestart wordt, wordt het
resultaat journals.In sommige gevallen kan het gewenst zijn om het logboek op een
andere schijf te bewaren. Voor deze gevallen moet de
logboekleverancier of het opslagapparaat gespecificeerd worden
achter het apparaat waarop de logboek functionaliteit aangebracht
moet worden. De logboekfunctionaliteit kan ook worden
ingeschakeld op een reeds bestaand systeem met behulp van
tunefs. Maak echter altijd een backup voor dat
dit soort dingen uitgeprobeerd worden. In de meeste gevallen zal
gjournal falen als het geen actueel logboek
kan maken, maar het voorkomt geen dataverlies als gevolg van
verkeerd gebruik van tunefs.Het is ook mogelijk om een journal van de opstartschijf van
een &os;-systeem bij te houden. Voor gedetailleerde instructies
over deze taak wordt naar het artikel Implementing UFS
Journaling on a Desktop PC verwezen.