MFen r39631 -> r39988

This commit is contained in:
Rene Ladan 2012-11-22 13:44:34 +00:00
parent bc436f5733
commit 3f9ca4a10b
Notes: svn2git 2020-12-08 03:00:23 +00:00
svn path=/head/; revision=40127

View file

@ -5,7 +5,7 @@
$FreeBSD$
%SOURCE% en_US.ISO8859-1/books/handbook/geom/chapter.xml
%SRCID% 39631
%SRCID% 39988
-->
<chapter id="GEOM">
@ -244,220 +244,586 @@ Done.</screen>
<indexterm><primary>schijf spiegelen</primary></indexterm>
<para>Spiegelen (<quote>mirroring</quote>) 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.</para>
<indexterm><primary>RAID1</primary></indexterm>
<para>Begin met een systeem dat twee schijven heeft van gelijke
grootte. Deze oefeningen stellen dat het directe-toegang
(&man.da.4;) <acronym>SCSI</acronym>-schijven zijn.</para>
<para><acronym>RAID1</acronym>, of <firstterm>spiegelen</firstterm>, is de
techniek om dezelfde gegevens naar meer dan één schijf te schrijven.
Spiegels worden normaliter gebruikt om tegen gegevensverlies te beschermen
indien een schijf kapot gaat. Elke schijf in een spiegel bevat een
identieke kopie van de gegevens. Wanneer een individuele schijf het
begeeft, blijft de spiegel functioneren, en levert het gegevens van de
schijven die nog wel functioneren. De computer blijft draaien en de
beheerder heeft tijd om de kapotte schijf te vervangen zonder onderbreking
voor de gebruikers.</para>
<sect2>
<title>Primaire schijven spiegelen</title>
<para>Twee veelvoorkomende situaties worden in deze voorbeelden getoond.
Het eerste is het maken van een spiegel van twee nieuwe schijven en het
als vervanging voor een bestaande enkele schijf te gebruiken. Het tweede
voorbeeld maakt een spiegel op een enkele nieuwe schijf aan, kopieert de
gegevens van de oude schijf er naar toe, en plaatst daarna de oude schijf
in de spiegel. Hoewel deze procedure iets moeilijker is, is er maar één
nieuwe schijf nodig.</para>
<para>Aannemende dat &os; op het eerste
<devicename>da0</devicename>-schijfapparaat is
geïnstalleerd, dient er aan &man.gmirror.8; verteld te
worden om daar de primaire gegevens op te slaan.</para>
<para>Traditioneel zijn de twee schijven in een spiegel van hetzelfde model
en hebben ze dezelfde capaciteit, maar &man.gmirror.8; verplicht dit niet.
Spiegels die met ongelijke schijven zijn gemaakt zullen de capaciteit van
de kleinste schijf in de spiegel aannemen. Extra schijfruimte op grotere
schijven zal ongebruikt blijven. Schijven die later in de spiegel worden
geplaatst moeten tenminste evenveel capaciteit hebben als de kleinste
schijf die reeds in de spiegel zit.</para>
<para>Voordat de mirror gebouwd wordt, dient aanvullende
debuginformatie en openingstoegang tot het apparaat aangezet te
worden door de &man.sysctl.8;-optie
<varname>kern.geom.debugflags</varname> op de volgende waarde in
te stellen:</para>
<warning>
<para>De procedures voor het spiegelen die hier getoond worden zijn
niet-destructief, maar maak zoals bij elke grote schijfoperatie eerst
een volledige back-up.</para>
</warning>
<screen>&prompt.root; <userinput>sysctl kern.geom.debugflags=17</userinput></screen>
<sect2 id="GEOM-mirror-metadata">
<title>Kwesties met meta-gegevens</title>
<para>Maak nu de mirror aan. Begin het proces door informatie
over metagegevens op het primaire schijfapparaat op te slaan,
waardoor effectief het apparaat <filename
class="devicefile">/dev/mirror/gm</filename> aangemaakt
wordt met het volgende commando:</para>
<para>Veel schijfsystemen slaan meta-gegevens op aan het einde van elke
schijf. Oude meta-gegevens dienen gewist te worden voordat de schijf
herbruikt wordt voor een spiegel. De meeste problemen worden
veroorzaakt door twee soorten van achtergebleven meta-gegevens:
GPT-partitietabellen en oude meta-gegevens van &man.gmirror.8; van een
vorige spiegel.</para>
<warning>
<para>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. De volgende procedure
werkt ook niet samen met de instellingen van de standaardinstallatie
van &os;&nbsp;9.<replaceable>X</replaceable> dat het nieuwe
partitieschema <acronym>GPT</acronym> gebruikt. GEOM zal de
metagegevens van <acronym>GPT</acronym> overschrijven, wat'
gegevensverlies en mogelijk een onstartbaar systeem tot gevolg
heeft.</para>
</warning>
<para>GPT-meta-gegevens kunnen gewist worden met &man.gpart.8;. Dit
voorbeeld wist zowel de primaire als de back-up GPT-partitietabellen van
schijf <devicename>ada8</devicename>:</para>
<screen>&prompt.root; <userinput>gmirror label -vb round-robin gm0 /dev/da0</userinput></screen>
<screen>&prompt.root; <userinput>gpart destroy -F ada8</userinput></screen>
<para>&man.gmirror.8; kan in één stap een schijf uit een actieve spiegel
halen en de meta-gegevens wissen. Hier wordt de voorbeeldschijf
<devicename>ada8</devicename> uit de actieve spiegel
<devicename>gm4</devicename> gehaald:</para>
<para>Het systeem hoort te antwoorden met:</para>
<screen>&prompt.root; <userinput>gmirror remove gm4 ada8</userinput></screen>
<screen>Metadata value stored on /dev/da0.
Done.</screen>
<para>Gebruik, als de spiegel niet draait maar er nog oude meta-gegevens
van de spiegel op de schijf staan, <command>gmirror clear</command> om
deze te verwijderen:</para>
<para>Initialiseer GEOM, dit zal de kernelmodule
<filename>/boot/kernel/geom_mirror.ko</filename> laden:</para>
<screen>&prompt.root; <userinput>gmirror clear ada8</userinput></screen>
<screen>&prompt.root; <userinput>gmirror load</userinput></screen>
<note>
<para>Wanneer dit commando succesvol verloopt, maakt het het
apparaatknooppunt <devicename>gm0</devicename> aan onder de
map <filename class="directory">/dev/mirror</filename>.</para>
</note>
<para>Maak het mogelijk om de kernelmodule
<filename>geom_mirror.ko</filename> tijdens systeeminitialisatie
te laden:</para>
<screen>&prompt.root; <userinput>echo 'geom_mirror_load="YES"' &gt;&gt; /boot/loader.conf</userinput></screen>
<para>Bewerk het bestand <filename>/etc/fstab</filename>, waarbij
verwijzingen naar het oude <devicename>da0</devicename> worden
vervangen door de nieuwe apparaatknooppunten van het
mirrorapparaat <devicename>gm0</devicename>.</para>
<note>
<para>Indien &man.vi.1; de geprefereerde tekstverwerker is, is
het volgende een gemakkelijke manier om deze taak te
volbrengen:</para>
<screen>&prompt.root; <userinput>vi /etc/fstab</userinput></screen>
<para>Maak een reservekopie van de huidige gegevens van
<filename>fstab</filename> in &man.vi.1; door <userinput>:w
/etc/fstab.bak</userinput> in te typen. Vervang daarna alle
oude verwijzingen naar <devicename>da0</devicename> door
<devicename>gm0</devicename> door
<userinput>:%s/da/mirror\/gm/g</userinput> in te typen.</para>
</note>
<para>Het resulterende <filename>fstab</filename> zou er ongeveer
hetzelfde als het volgende uit moeten zien. Het maakt niet uit
of de schijfstations <acronym>SCSI</acronym> of
<acronym>RAID</acronym> zijn, het
<acronym>RAID</acronym>-apparaat zal ongeacht hiervan
<devicename>gm</devicename> zijn.</para>
<programlisting># 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 0</programlisting>
<para>Start het systeem opnieuw op:</para>
<screen>&prompt.root; <userinput>shutdown -r now</userinput></screen>
<para>Tijdens de systeeminitialisatie dient het apparaat
<devicename>gm0</devicename> in plaats van
<devicename>da0</devicename> gebruikt te worden. Als het
systeem volledig is geïnitialiseerd, kan dit gecontroleerd
worden door de uitvoer van het commando <command>mount</command>
te inspecteren:</para>
<screen>&prompt.root; <userinput>mount</userinput>
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/dev</screen>
<para>De uitvoer ziet er als verwacht uit. Plaats als laatste
stap, om synchronisatie te beginnen, de schijf
<devicename>da1</devicename> in de mirror met het volgende
commando:</para>
<screen>&prompt.root; <userinput>gmirror insert gm0 /dev/da1</userinput></screen>
<para>De status kan gecontroleerd worden tijdens het bouwen van de
mirror met het volgende commando:</para>
<screen>&prompt.root; <userinput>gmirror status</userinput></screen>
<para>Wanneer de mirror gebouwd is en alle huidige gegevens zijn
gesynchroniseerd, dient de uitvoer van het bovenstaande commando
er als volgt uit te zien:</para>
<screen> Name Status Components
mirror/gm0 COMPLETE da0
da1</screen>
<para>Als er problemen zijn, of als de mirror nog bezig is om het
bouwproces te voltooien, zal het voorbeeld
<literal>DEGRADED</literal> in plaats van
<literal>COMPLETE</literal> laten zien.</para>
<para>&man.gmirror.8; slaat één blok aan meta-gegevens aan het einde van
de schijf op. Omdat GPT-partitieschema's ook meta-gegevens aan het
einde van de schijf opslaan, wordt het spiegelen van volledige
GPT-schijven met &man.gmirror.8; niet aangeraden. Hier wordt
MBR-partitionering gebruikt omdat het alleen een partitietabel aan het
begin van de schijf opslaat en niet conflicteert met
&man.gmirror.8;.</para>
</sect2>
<sect2>
<title>Een spiegel met twee nieuwe schijven maken</title>
<para>In dit voorbeeld is &os; reeds op een enkele schijf
<devicename>ada0</devicename> geïnstalleerd. Twee nieuwe schijven,
<devicename>ada1</devicename> en <devicename>ada2</devicename> zijn met
het systeem verbonden. Er zal een nieuwe spiegel op deze twee schijven
aangemaakt worden die de oude enkele schijf zal vervangen.</para>
<para>&man.gmirror.8; heeft een kernelmodule
<filename>geom_mirror.ko</filename> nodig, ingebouwd in de kernel of
geladen tijdens het opstarten of draaien. Laadt nu handmatig de
kernelmodule:</para>
<screen>&prompt.root; <userinput>gmirror load</userinput></screen>
<para>Maak de spiegel aan met de twee nieuwe schijven:</para>
<screen>&prompt.root; <userinput>gmirror label -v gm0 /dev/ada1 /dev/ada2</userinput></screen>
<para><devicename>gm0</devicename> is een door de gebruiker gekozen
apparaatnaam die aan de nieuwe spiegel wordt toegekend. Nadat de
spiegel is gestart, zal deze apparaatnaam verschijnen in de map
<filename>/dev/mirror/</filename>.</para>
<para>Nu kunnen er met &man.gpart.8; MBR- en bsdlabel-partitietabellen op
de spiegel worden aangemaakt. Hier wordt er een traditioneel schema
van een gesplitst bestandssysteem getoond, met partities voor
<filename>/</filename>, swap, <filename>/var</filename>,
<filename>/tmp</filename> en <filename>/usr</filename>. Dit werkt ook
voor een enkel bestandssysteem met enkel <filename>/</filename> en
een wisselpartitie.</para>
<para>Partities op de spiegel hoeven niet dezelfde grootte te hebben als
die op de bestaande schijf, maar moeten groot genoeg zijn om alle
gegevens die reeds op <devicename>ada0</devicename> staan te kunnen
bevatten.</para>
<screen>&prompt.root; <userinput>gpart create -s MBR mirror/gm0</userinput>
&prompt.root; <userinput>gpart add -t freebsd -a 4k mirror/gm0</userinput>
&prompt.root; <userinput>gpart show mirror/gm0</userinput>
=> 63 156301423 mirror/gm0 MBR (74G)
63 63 - free - (31k)
126 156301299 1 freebsd (74G)
156301425 61 - free - (30k)</screen>
<screen>&prompt.root; <userinput>gpart create -s BSD mirror/gm0s1</userinput>
&prompt.root; <userinput>gpart add -t freebsd-ufs -a 4k -s 2g mirror/gm0s1</userinput>
&prompt.root; <userinput>gpart add -t freebsd-swap -a 4k -s 4g mirror/gm0s1</userinput>
&prompt.root; <userinput>gpart add -t freebsd-ufs -a 4k -s 2g mirror/gm0s1</userinput>
&prompt.root; <userinput>gpart add -t freebsd-ufs -a 4k -s 1g mirror/gm0s1</userinput>
&prompt.root; <userinput>gpart add -t freebsd-ufs -a 4k mirror/gm0s1</userinput>
&prompt.root; <userinput>gpart show mirror/gm0s1</userinput>
=> 0 156301299 mirror/gm0s1 BSD (74G)
0 2 - free - (1.0k)
2 4194304 1 freebsd-ufs (2.0G)
4194306 8388608 2 freebsd-swap (4.0G)
12582914 4194304 4 freebsd-ufs (2.0G)
16777218 2097152 5 freebsd-ufs (1.0G)
18874370 137426928 6 freebsd-ufs (65G)
156301298 1 - free - (512B)</screen>
<para>Maak de spiegel opstartbaar door opstartcode in het MBR en bsdlabel
te installeren en de actieve slice in te stellen:</para>
<screen>&prompt.root; <userinput>gpart bootcode -b /boot/mbr mirror/gm0</userinput>
&prompt.root; <userinput>gpart set -a active -i 1 mirror/gm0</userinput>
&prompt.root; <userinput>gpart bootcode -b /boot/boot mirror/gm0s1</userinput></screen>
<para>Formatteer de bestandssystemen op de nieuwe spiegel en zet daarbij
soft-updates aan.</para>
<screen>&prompt.root; <userinput>newfs -U /dev/mirror/gm0s1a</userinput>
&prompt.root; <userinput>newfs -U /dev/mirror/gm0s1d</userinput>
&prompt.root; <userinput>newfs -U /dev/mirror/gm0s1e</userinput>
&prompt.root; <userinput>newfs -U /dev/mirror/gm0s1f</userinput></screen>
<para>Bestandssystemen van de originele schijf
(<devicename>ada0</devicename>) kunnen nu met &man.dump.8; en
&man.restore.8; naar de spiegel gekopieerd worden:</para>
<screen>&prompt.root; <userinput>mount /dev/mirror/gm0s1a /mnt</userinput>
&prompt.root; <userinput>dump -C16 -b64 -0aL -f - / | (cd /mnt && restore -rf -)</userinput>
&prompt.root; <userinput>mount /dev/mirror/gm0s1d /mnt/var</userinput>
&prompt.root; <userinput>mount /dev/mirror/gm0s1e /mnt/tmp</userinput>
&prompt.root; <userinput>mount /dev/mirror/gm0s1f /mnt/usr</userinput>
&prompt.root; <userinput>dump -C16 -b64 -0aL -f - /var | (cd /mnt/var && restore -rf -)</userinput>
&prompt.root; <userinput>dump -C16 -b64 -0aL -f - /tmp | (cd /mnt/tmp && restore -rf -)</userinput>
&prompt.root; <userinput>dump -C16 -b64 -0aL -f - /usr | (cd /mnt/usr && restore -rf -)</userinput></screen>
<para><filename>/mnt/etc/fstab</filename> moet bewerkt worden om naar de
nieuwe bestandssystemen op de spiegel te wijzen:</para>
<programlisting># Device Mountpoint FStype Options Dump Pass#
/dev/mirror/gm0s1a / ufs rw 1 1
/dev/mirror/gm0s1b none swap sw 0 0
/dev/mirror/gm0s1d /var ufs rw 2 2
/dev/mirror/gm0s1e /tmp ufs rw 2 2
/dev/mirror/gm0s1f /usr ufs rw 2 2</programlisting>
<para>Als de kernelmodule &man.gmirror.8; niet in de kernel is ingebouwd,
wordt <filename>/mnt/boot/loader.conf</filename> bewerkt om de module
tijdens het opstarten te laden:</para>
<programlisting>geom_mirror_load="YES"</programlisting>
<para>Herstart het systeem om de nieuwe spiegel te testen en te verifiëren
dat alle gegevens zijn gekopieerd. Het BIOS zal de spiegel als twee
individuele schijven zien in plaats van als een spiegel. Omdat de
schijven identiek zijn, maakt het niet uit vanaf welke schijf wordt
opgestart.</para>
<para>Bekijk de sectie <link linkend="gmirror-troubleshooting">Problemen
oplossen</link> als er problemen zijn tijdens het opstarten. Door de
originele <devicename>ada0</devicename> uit te schakelen en los te
koppelen kan het als offline back-up bewaard worden.</para>
<para>Tijdens het gebruik zal de spiegel zich net zoals de originele
enkele schijf gedragen.</para>
</sect2>
<sect2>
<title>Een spiegel met een bestaande schijf aanmaken</title>
<para>In dit voorbeeld is &os; reeds geïnstalleerd op een enkele schijf,
<devicename>ada0</devicename>. Een nieuwe schijf,
<devicename>ada1</devicename>, is met het systeem verbonden. Er zal
een spiegel van één schijf worden aangemaakt op de nieuwe schijf, het
bestaande systeem zal ernaar worden gekopieerd, en daarna zal de oude
schijf in de spiegel worden geplaatst. Deze enigszins complexe
procedure is nodig omdat &man.gmirror.8; een blok van 512 bytes aan
meta-gegevens aan het einde van elke schijf moet plaatsen en de
bestaande <devicename>ada0</devicename> meestal alle ruimte reeds heeft
toegewezen.</para>
<para>Laadt de kernelmodule &man.gmirror.8;:</para>
<screen>&prompt.root; <userinput>gmirror load</userinput></screen>
<para>Controleer de mediagrootte van de originele schijf met
&man.diskinfo.8;:</para>
<screen>&prompt.root; <userinput>diskinfo -v ada0 | head -n3</userinput>
/dev/ada0
512 # sectorsize
1000204821504 # mediasize in bytes (931G)</screen>
<para>Maak een spiegel aan op de nieuwe schijf. Om er zeker van te zijn
dat de capaciteit van de spiegel niet groter is dan die van de originele
schijf, wordt &man.gnop.8; gebruikt om een nepschijf van precies
dezelfde grootte aan te maken. Deze schijf slaat geen gegevens op, maar
wordt alleen gebruikt om de grootte van de spiegel te begrenzen.
Wanneer &man.gmirror.8; de spiegel aanmaakt, zal het de capaciteit
beperken tot de grootte van <devicename>gzero.nop</devicename> zelfs
als de nieuwe schijf (<devicename>ada1</devicename>) meer ruimte heeft.
Merk op dat de <replaceable>1000204821504</replaceable> op de tweede
regel gelijk moet zijn aan de mediagrootte van
<devicename>ada0</devicename> zoals hierboven door &man.diskinfo.8; is
getoond.</para>
<screen>&prompt.root; <userinput>geom zero load</userinput>
&prompt.root; <userinput>gnop create -s 1000204821504 gzero</userinput>
&prompt.root; <userinput>gmirror label -v gm0 gzero.nop ada1</userinput>
&prompt.root; <userinput>gmirror forget gm0</userinput></screen>
<para><devicename>gzero.nop</devicename> slaat geen gegevens op, dus ziet
de spiegel het niet als verbonden. De spiegel wordt verteld om
componenten die niet verbonden zijn te <quote>vergeten</quote>, waarbij
referenties naar <devicename>gzero.nop</devicename> worden verwijderd.
Het resultaat is een spiegelapparaat dat slechts één enkele schijf,
<devicename>ada1</devicename>, bevat.</para>
<para>Bekijk de partitietabel van <devicename>ada0</devicename> nadat
<devicename>gm0</devicename> is aangemaakt.</para>
<para>Deze uitvoer komt van een schijf van 1&nbsp;TB. Als er wat
niet-toegewezen ruimte aanwezig is aan het einde van de schijf, kan de
inhoud direct van <devicename>ada0</devicename> naar de nieuwe spiegel
worden gekopieerd.</para>
<para>Als de uitvoer echter toont dat alle ruimte op de schijf is
toegewezen zoals in de volgende lijst, is er geen ruimte over voor de
512 bytes aan meta-gegevens van &man.gmirror.8; aan het einde van de
schijf.</para>
<screen>&prompt.root; <userinput>gpart show ada0</userinput>
=> 63 1953525105 ada0 MBR (931G)
63 1953525105 1 freebsd [active] (931G)</screen>
<para>In dit geval moet de partitietabel worden bewerkt om de capaciteit
op <devicename>mirror/gm0</devicename> met één sector te verminderen.
De procedure hiervoor wordt later uitgelegd.</para>
<para>In beide gevallen dienen de partitietabellen op de primaire schijf
eerst gekopieerd te worden. Dit kan gedaan worden met de subcommando's
<command>backup</command> en <command>restore</command> van
&man.gpart.8;.</para>
<screen>&prompt.root; <userinput>gpart backup ada0 &gt; table.ada0</userinput>
&prompt.root; <userinput>gpart backup ada0s1 &gt; table.ada0s1</userinput></screen>
<para>Deze subcommando's maken twee bestanden aan,
<filename>table.ada0</filename> en <filename>table.ada0s1</filename>.
Dit voorbeeld komt van een schijf van 1&nbsp;TB af:</para>
<screen>&prompt.root; <userinput>cat table.ada0</userinput>
MBR 4
1 freebsd 63 1953525105 [active]</screen>
<screen>&prompt.root; <userinput>cat table.ada0s1</userinput>
BSD 8
1 freebsd-ufs 0 4194304
2 freebsd-swap 4194304 33554432
4 freebsd-ufs 37748736 50331648
5 freebsd-ufs 88080384 41943040
6 freebsd-ufs 130023424 838860800
7 freebsd-ufs 968884224 984640881</screen>
<para>Als de gehele schijf was gebruikt in de uitvoer van &man.gpart.8;
<command>show</command>, dan moet de capaciteit in deze partitietabellen
met één sector verminderd worden. Bewerk de twee bestanden zodat de
grootte van zowel de slice als de laatste partitie met één verminderd
wordt. Dit zijn de laatste getallen in elke lijst.</para>
<screen>&prompt.root; <userinput>cat table.ada0</userinput>
MBR 4
1 freebsd 63 <emphasis>1953525104</emphasis> [active]</screen>
<screen>&prompt.root; <userinput>cat table.ada0s1</userinput>
BSD 8
1 freebsd-ufs 0 4194304
2 freebsd-swap 4194304 33554432
4 freebsd-ufs 37748736 50331648
5 freebsd-ufs 88080384 41943040
6 freebsd-ufs 130023424 838860800
7 freebsd-ufs 968884224 <emphasis>984640880</emphasis></screen>
<para>Als er tenminste één sector aan het einde van de schijf niet was
toegewezen, kunnen deze twee bestanden ongewijzigd gebruikt worden.</para>
<para>Herstel nu de partitietabel naar
<devicename>mirror/gm0</devicename>.</para>
<screen>&prompt.root; <userinput>gpart restore mirror/gm0 &lt; table.ada0</userinput>
&prompt.root; <userinput>gpart restore mirror/gm0s1 &lt; table.ada0s1</userinput></screen>
<para>Controleer de partitietabel met &man.gpart.8;
<command>show</command>. Dit voorbeeld heeft
<devicename>gm0s1a</devicename> voor <filename>/</filename>,
<devicename>gm0s1d</devicename> voor <filename>/var</filename>,
<devicename>gm0s1e</devicename> voor <filename>/usr</filename>,
<devicename>gm0s1f</devicename> voor <filename>/data1</filename> en
<devicename>gm0s1g</devicename> voor <filename>/data2</filename>.</para>
<screen>&prompt.root; <userinput>gpart show mirror/gm0</userinput>
=> 63 1953525104 mirror/gm0 MBR (931G)
63 1953525042 1 freebsd [active] (931G)
1953525105 62 - free - (31k)
&prompt.root; <userinput>gpart show mirror/gm0s1</userinput>
=> 0 1953525042 mirror/gm0s1 BSD (931G)
0 2097152 1 freebsd-ufs (1.0G)
2097152 16777216 2 freebsd-swap (8.0G)
18874368 41943040 4 freebsd-ufs (20G)
60817408 20971520 5 freebsd-ufs (10G)
81788928 629145600 6 freebsd-ufs (300G)
710934528 1242590514 7 freebsd-ufs (592G)
1953525042 63 - free - (31k)</screen>
<para>Zowel de slice als de laatste partitie dienen wat vrije ruimte aan
het einde van elke schijf te hebben.</para>
<para>Maak bestandssystemen aan op deze nieuwe partities. Het aantal
partities zal variëren, overeenkomend met de partities op de originele
schijf, <devicename>ada0</devicename>.</para>
<screen>&prompt.root; <userinput>newfs -U /dev/mirror/gm0s1a</userinput>
&prompt.root; <userinput>newfs -U /dev/mirror/gm0s1d</userinput>
&prompt.root; <userinput>newfs -U /dev/mirror/gm0s1e</userinput>
&prompt.root; <userinput>newfs -U /dev/mirror/gm0s1f</userinput>
&prompt.root; <userinput>newfs -U /dev/mirror/gm0s1g</userinput></screen>
<para>Maak de spiegel opstartbaar door opstartcode in het MBR en bsdlabel
te installeren en de actieve slice in te stellen:</para>
<screen>&prompt.root; <userinput>gpart bootcode -b /boot/mbr mirror/gm0</userinput>
&prompt.root; <userinput>gpart set -a active -i 1 mirror/gm0</userinput>
&prompt.root; <userinput>gpart bootcode -b /boot/boot mirror/gm0s1</userinput></screen>
<para>Pas <filename>/etc/fstab</filename> aan zodat het de nieuwe
partities op de spiegel gebruikt. Maak eerst een kopie van dit bestand
als <filename>/etc/fstab.orig</filename>.</para>
<screen>&prompt.root; <userinput>cp /etc/fstab /etc/fstab.orig</userinput></screen>
<para>Wijzig <filename>/etc/fstab</filename> door
<devicename>/dev/ada0</devicename> door
<devicename>mirror/gm0</devicename> te vervangen.</para>
<programlisting># Device Mountpoint FStype Options Dump Pass#
/dev/mirror/gm0s1a / ufs rw 1 1
/dev/mirror/gm0s1b none swap sw 0 0
/dev/mirror/gm0s1d /var ufs rw 2 2
/dev/mirror/gm0s1e /usr ufs rw 2 2
/dev/mirror/gm0s1f /data1 ufs rw 2 2
/dev/mirror/gm0s1g /data2 ufs rw 2 2</programlisting>
<para>Als de kernelmodule &man.gmirror.8; niet in de kernel is gebouwd,
wijzig dan <filename>/boot/loader.conf</filename> om het te
laden:</para>
<programlisting>geom_mirror_load="YES"</programlisting>
<para>Bestandssystemen van de originele schijf kunnen nu met &man.dump.8;
en &man.restore.8; naar de spiegel gekopieerd worden. Merk op dat het
maken van een snapshot voor elk bestandssysteem dat met <command>dump
-L</command> gedumpt is even kan duren.</para>
<screen>&prompt.root; <userinput>mount /dev/mirror/gm0s1a /mnt</userinput>
&prompt.root; <userinput>dump -C16 -b64 -0aL -f - / | (cd /mnt && restore -rf -)</userinput>
&prompt.root; <userinput>mount /dev/mirror/gm0s1d /mnt/var</userinput>
&prompt.root; <userinput>mount /dev/mirror/gm0s1e /mnt/usr</userinput>
&prompt.root; <userinput>mount /dev/mirror/gm0s1f /mnt/data1</userinput>
&prompt.root; <userinput>mount /dev/mirror/gm0s1g /mnt/data2</userinput>
&prompt.root; <userinput>dump -C16 -b64 -0aL -f - /usr | (cd /mnt/usr && restore -rf -)</userinput>
&prompt.root; <userinput>dump -C16 -b64 -0aL -f - /var | (cd /mnt/var && restore -rf -)</userinput>
&prompt.root; <userinput>dump -C16 -b64 -0aL -f - /data1 | (cd /mnt/data1 && restore -rf -)</userinput>
&prompt.root; <userinput>dump -C16 -b64 -0aL -f - /data2 | (cd /mnt/data2 && restore -rf -)</userinput></screen>
<para>Start het systeem opnieuw op vanaf <devicename>ada1</devicename>.
Als alles werkt, zal het systeem opstarten vanaf
<devicename>mirror/gm0</devicename>, wat nu dezelfde gegevens bevat die
<devicename>ada0</devicename> eerder bevatte. Zie de sectie <link
linkend="gmirror-troubleshooting">Problemen oplossen</link> als er
problemen zijn met het opstarten.</para>
<para>Op dit moment bestaat de spiegel nog steeds alleen uit de enkele
schijf <devicename>ada1</devicename>.</para>
<para>Nadat er succesvol van <devicename>mirror/gm0</devicename> is
opgestart, is de laatste stap het plaatsen van
<devicename>ada0</devicename> in de spiegel.</para>
<important>
<para>Als <devicename>ada0</devicename> in de spiegel wordt geplaatst,
zal de vorige inhoud worden overschreven door gegevens in de spiegel.
Ben er zeker van dat <devicename>mirror/gm0</devicename> dezelfde
gegevens bevat als <devicename>ada0</devicename> voordat
<devicename>ada0</devicename> aan de spiegel wordt toegevoegd. Als
er iets mis is met de gegevens die door &man.dump.8; en
&man.restore.8; gekopieerd zijn, draai dan
<filename>/etc/fstab</filename> terug om de bestandssystemen op
<devicename>ada0</devicename> aan te koppelen, start opnieuw op, en
probeer de hele procedure nogmaals.</para>
</important>
<screen>&prompt.root; <userinput>gmirror insert gm0 ada0</userinput>
GEOM_MIRROR: Device gm0: rebuilding provider ada0</screen>
<para>De synchronisatie tussen de twee schijven zal onmiddellijk beginnen.
&man.gmirror.8; <command>status</command> toont de voortgang.</para>
<screen>&prompt.root; <userinput>gmirror status</userinput>
Name Status Components
mirror/gm0 DEGRADED ada1 (ACTIVE)
ada0 (SYNCHRONIZING, 64%)</screen>
<para>Na een tijd zal de synchronisatie voltooid zijn.</para>
<screen>GEOM_MIRROR: Device gm0: rebuilding provider ada0 finished.
&prompt.root; <userinput>gmirror status</userinput>
Name Status Components
mirror/gm0 COMPLETE ada1 (ACTIVE)
ada0 (ACTIVE)</screen>
<para><devicename>mirror/gm0</devicename> bestaat nu uit de twee schijven
<devicename>ada0</devicename> en <devicename>ada1</devicename>, en de
inhoud wordt automatisch met elkaar gesynchroniseerd. In het gebruik
zal <devicename>mirror/gm0</devicename> zich net zo gedragen als de
originele enkele schijf.</para>
</sect2>
<sect2 id="gmirror-troubleshooting">
<title>Problemen oplossen</title>
<sect3>
<title>Systeem weigert op te starten</title>
<title>Problemen met opstarten</title>
<para>Als een systeem opstart in een prompt dat op het volgende
lijkt:</para>
<sect4>
<title>BIOS-instellingen</title>
<programlisting>ffs_mountroot: can't find rootvp
Root mount failed: 6
mountroot></programlisting>
<para>Mogelijk is het nodig om de BIOS-instellingen te wijzigen om
van één van de nieuwe gespiegelde schijven op te starten. Beide
spiegelschijven kunnen gebruikt worden voor het opstarten. Als
componenten van een spiegel bevatten ze identieke gegevens.</para>
</sect4>
<para>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:</para>
<sect4>
<title>Opstartproblemen</title>
<screen>OK? <userinput>load geom_mirror</userinput>
OK? <userinput>boot</userinput></screen>
<para>Als het opstarten met dit bericht stopt, is er iets mis met het
spiegelapparaat:</para>
<para>Als dit werkt werd de module om welke reden dan ook niet
juist geladen. Controleer of de relevante regel in
<filename>/boot/loader.conf</filename> correct is. Als het
probleem aanhoudt, zet dan de onderstaande regel in het
bestand met kernelinstellingen en herbouw en installeer de
kernel.</para>
<screen>Mounting from ufs:/dev/mirror/gm0s1a failed with error 19.
<programlisting>options GEOM_MIRROR</programlisting>
Loader variables:
vfs.root.mountfrom=ufs:/dev/mirror/gm0s1a
vfs.root.mountfrom.options=rw
<para>Hiermee moet het probleem opgelost zijn.</para>
Manual root filesystem specification:
&lt;fstype&gt;:&lt;device&gt; [options]
Mount &lt;device&gt; using filesystem &lt;fstype&gt;
and with the specified (optional) option list.
eg. ufs:/dev/da0s1a
zfs:tank
cd9660:/dev/acd0 ro
(which is equivalent to: mount -t cd9660 -o ro /dev/acd0 /)
? List valid disk boot devices
. Yield 1 second (for background tasks)
&lt;empty line&gt; Abort manual input
mountroot&gt;</screen>
<para>Het vergeten om de module <filename>geom_mirror</filename> in
<filename>/boot/loader.conf</filename> te laden kan dit probleem
veroorzaken. Start op vanaf een &os;-9 of nieuwere CD of USB-stick
en kies <literal>Shell</literal> op de eerste prompt om dit op te
lossen. Laadt daarna de spiegelmodule en en koppel het
spiegelapparaat aan:</para>
<screen>&prompt.root; <userinput>gmirror load</userinput>
&prompt.root; <userinput>mount /dev/mirror/gm0s1a /mnt</userinput></screen>
<para>Voeg een regel om de spiegelmodule te laden toe aan
<filename>/mnt/boot/loader.conf</filename>:</para>
<programlisting>geom_mirror_load="YES"</programlisting>
<para>Sla het bestand op en start opnieuw op.</para>
<para>Andere problemen die <literal>error 19</literal> veroorzaken
zijn lastiger om op te lossen. Typ
<literal>ufs:/dev/ada0s1a</literal> in op de prompt. Hoewel het
systeem van <devicename>ada0</devicename> zou moeten opstarten,
verschijnt er een andere prompt om een shell uit te kiezen omdat
<filename>/etc/fstab</filename> onjuist is. Druk op de prompt op
de Enter-toets. Draai de wijzigingen tot nu toe terug door
<filename>/etc/fstab</filename> terug te draaien, waardoor de
bestandssystemen vanaf de originele schijf (
<devicename>ada0</devicename>) in plaats vanaf de spiegel worden
aangekoppeld. Start het systeem opnieuw op en probeer de procedure
nogmaals.</para>
<screen>Enter full pathname of shell or RETURN for /bin/sh:
&prompt.root; <userinput>cp /etc/fstab.orig /etc/fstab</userinput>
&prompt.root; <userinput>reboot</userinput></screen>
</sect4>
</sect3>
</sect2>
<sect2>
<title>Herstellen van falende schijven</title>
<para>Het mooie aan het spiegelen van schijven is dat als een
schijf faalt, deze vervangen kan worden, aangenomen zonder
gegevensverlies.</para>
<para>Het mooie aan het spiegelen van schijven is dat een individuele
schijf kan falen zonder dat de spiegel gegevens verliest.</para>
<para>Neem met betrekking tot de vorige
<acronym>RAID</acronym>1-configuratie aan dat
<devicename>da1</devicename> 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:</para>
<para><devicename>ada0</devicename> is één van de twee schijven die de
spiegel in het vorige voorbeeld vormen. Als
<devicename>ada0</devicename> faalt zal de spiegel blijven werken en
gegevens leveren van de overgebleven werkende schijf,
<devicename>ada1</devicename>.</para>
<para>Om de kapotte schijf te vervangen wordt de computer uitgezet en de
kapotte schijf fysiek vervangen door een nieuwe schijf van gelijke of
grotere capaciteit. Fabrikanten passen enigszins willekeurige waarden
toe om schijven in gigabytes aan te duiden, de enige manier om er echt
zeker van te zijn is om de totale hoeveelheid aan sectors aangegeven
door <command>diskinfo -v</command> te vergelijken. Een schijf met een
grotere capaciteit dan in de spiegel zal werken, alhoewel de extra
ruimte op de nieuwe schijf niet gebruikt zal worden.</para>
<para>Nadat de computer opnieuw is aangezet, zal de spiegel in een
<quote>degraded</quote> toestand met slechts één schijf draaien. De
spiegel wordt verteld om schijven die momenteel niet verbonden zijn te
vergeten:</para>
<screen>&prompt.root; <userinput>gmirror forget gm0</userinput></screen>
<screen>&prompt.root; <userinput>gmirror insert gm0 /dev/da1</userinput></screen>
<para>Alle oude meta-gegevens zouden <link
linkend="GEOM-mirror-metadata">van de vervangende schijf gewist</link>
moeten zijn. Daarna wordt de schijf, in dit voorbeeld
<devicename>ada4</devicename>, in de spiegel geplaatst:</para>
<para>Gebruik het commando <command>gmirror status</command> om de
voortgang van het herbouwen te bekijken. Zo eenvoudig is het.</para>
<screen>&prompt.root; <userinput>gmirror insert gm0 /dev/ada4</userinput></screen>
<para>De hersynchronisatie begint wanneer de nieuwe schijf in de spiegel
wordt geplaatst. Het kopiëren van gegevens van de spiegel naar een
nieuwe schijf kan een tijd duren. De prestaties van de spiegel zullen
tijdens het kopiëren sterk verminderd zijn, dus is het het beste om
nieuwe schijven in te voegen wanneer de vraag op de computer laag
is.</para>
<para>De voortgang kan met <command>gmirror status</command> gevolgd
worden, wat de schijven die gesynchroniseerd en het percentage van de
voltooiing laat zien. Tijdens de hersynchronisatie zal de status
<computeroutput>DEGRADED</computeroutput> zijn en veranderen in
<computeroutput>COMPLETE</computeroutput> wanneer het proces is
voltooid.</para>
</sect2>
</sect1>