Update to r39909:

Rework the gmirror section to create mirrors properly.
This commit is contained in:
Bjoern Heidotting 2016-03-23 19:45:48 +00:00
parent 31b1c079e9
commit 490865b44f
Notes: svn2git 2020-12-08 03:00:23 +00:00
svn path=/head/; revision=48461

View file

@ -5,7 +5,7 @@
$FreeBSD$
$FreeBSDde$
basiert auf: r38401
basiert auf: r39909
-->
<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" xml:id="GEOM">
<info><title>GEOM: Modulares Framework zur
@ -246,210 +246,578 @@ Done.</screen>
<indexterm>
<primary>Disk Mirroring</primary>
</indexterm>
<indexterm>
<primary>RAID1</primary>
</indexterm>
<para>Spiegelung (Mirroring) ist eine Technik, welche von vielen
Firmen und Heimnutzern eingesetzt wird, um Daten ohne
Unterbrechung zu sichern. Wenn ein Spiegel existiert, dann
bedeutet dies einfach nur, dass PlatteB die PlatteA
dupliziert. Oder PlatteC+D duplizieren PlatteA+A. Der
wichtigste Aspekt ist, dass Daten einer Platte oder
Partition dupliziert werden, unabhängig von der
Konfiguration der Platte. Dadurch kann später diese
Information leichter wiederhergestellt, ohne
Zugriffsunterbrechung gesichert oder sogar physisch in einem
Datentresor gelagert werden.</para>
<para>Spiegelung (<acronym>RAID1</acronym> / Mirroring) ist eine
Technik, bei der identische Daten auf mehr als ein Laufwerk
geschrieben werden. Spiegel werden in der Regel zum Schutz vor
Datenverlust aufgrund von Festplattenausfällen verwendet. Jedes
Laufwerk in einem Spiegel enthält eine identische Kopie der
Daten. Wenn ein einzelnes Laufwerk ausfällt, funktioniert der
Spiegel weiterhin und die Daten werden von den restlichen
Festplatten bereit gestellt. Der Rechner läuft einfach weiter
und der Administrator hat die Gelegentheit, das defekte Laufwerk
auszutauschen.</para>
<para>Stellen Sie zu Beginn sicher, dass ihr System zwei
Platten mit identischer Größe aufweist. In dieser
Übung gehen wir davon aus, dass es direkt
zugängliche (&man.da.4;) <acronym>SCSI</acronym>-Platten
sind.</para>
<para>Zwei häufige Situationen werden in diesem Beispiel
erläutert. Im ersten Beispiel wird ein Spiegel aus zwei
neuen Laufwerken erstellt, der die existierende Platte ersetzt.
Das zweite Beispiel erzeugt ein Spiegel mit einem einzigen
Laufwerk, kopiert dann die Daten von der alten Platte und fügt
die alte Platte zum Spiegel hinzu. Obwohl dieses Verfahren
etwas komplizierter ist, wird nur ein neues Laufwerk
benötigt.</para>
<sect2>
<title>Die primäre Platte spiegeln</title>
<para>Traditionell sind die Laufwerke in einem Spiegel vom
gleichen Modell und besitzen die gleiche Kapazität. Dies ist
jedoch keine Voraussetzung für &man.gmirror.8;. Hier können
Spiegel mit unterschiedlichen Kapazitäten verwendet werden. Die
Kapazität richtet sich dann nach dem kleinsten Laufwerk im
Spiegel. Zusätzlicher Speicherplatz auf größeren Laufwerken
bleibt dann ungenutzt. Werden später weitere Laufwerke zum
Spiegel hinzugefügt, müssen diese mindestens so viel Kapazität
haben wie das kleinste Laufwerk im Spiegel.</para>
<para>Angenommen, &os; wurde auf der ersten Platte
<filename>da0</filename> installiert, dann sollte
&man.gmirror.8; angewiesen werden, seine primären Daten
auf dieser Platte zu speichern.</para>
<warning>
<para>Die hier gezeigten Verfahren löschen keine Daten. Dennoch
sollte, wie bei jeder größeren Operation, zuerst eine
vollständige Sicherung erstellt werden.</para>
</warning>
<para>Bevor Sie den Spiegel aufbauen, sollten Sie die maximale
Protokollierung aktivieren und den Zugang zum Gerät
gestatten. Dazu setzen Sie die &man.sysctl.8;-Option
<varname>kern.geom.debugflags</varname> auf den folgenden
Wert:</para>
<sect2 xml:id="geom-mirror-metadata">
<title>Probleme mit Metadaten</title>
<screen>&prompt.root; <userinput>sysctl kern.geom.debugflags=17</userinput></screen>
<para>Viele Plattensysteme speichern Metadaten am Ende der
Platte. Alte Metadaten sollten vor der Wiederverwendung in
einem Spiegel gelöscht werden, da die meisten Probleme aus
zwei Arten von übrig gebliebenen Metadaten resultieren:
<acronym>GPT</acronym>-Partitionstabellen und alte Metadaten
aus einem vorherigen Spiegel.</para>
<para>Nun können Sie den Spiegel aufbauen. Beginnen Sie den
Prozess, indem Sie die Metadaten-Informationen auf das Gerät
der primären Platte speichern. Konkret erzeugen Sie dabei
das Gerät
<filename>/dev/mirror/gm</filename>, indem Sie
den folgenden Befehl ausführen:</para>
<para><acronym>GPT</acronym>-Metadaten können mit &man.gpart.8;
gelöscht werden. Dieses Beispiel löscht sowohl die primären,
als auch die <acronym>GPT</acronym>-Partitionstabelle von der
Festplatte <filename>ada8</filename>:</para>
<warning>
<para>Die Spiegelung der Bootplatte kann zu Datenverlust
führen, wenn Sie Daten im letzten Sektor der Platte
gespeichert haben. Dieses Risiko lässt sich minimieren,
wenn Sie den Spiegel unmittelbar nach der Installation von
&os; aufsetzen. Die im folgenden beschriebene Vorgehensweise ist
ebenfalls nicht kompatibel mit den
Standard-Installationseinstellungen von
&os;&nbsp;9.<replaceable>X</replaceable>, die das neue
<acronym>GPT</acronym>-Partitionsschema verwenden. GEOM wird
<acronym>GPT</acronym>-Metadaten überschreiben, was zu
Datenverlust und einem möglicherweise nicht bootbarem System
führt.</para>
</warning>
<screen>&prompt.root; <userinput>gpart destroy -F ada8</userinput></screen>
<screen>&prompt.root; <userinput>gmirror label -vb round-robin gm0 /dev/da0</userinput></screen>
<para>Mit &man.gmirror.8; kann eine Platte aus einem aktiven
Spiegel entfernt und gleichzeitig die Metadaten gelöscht
werden. In diesem Beispiel wird die Platte
<filename>ada8</filename> aus dem aktiven Spiegel
<filename>gm4</filename> entfernt:</para>
<para>Ihr System sollte wie folgt antworten:</para>
<screen>&prompt.root; <userinput>gmirror remove gm4 ada8</userinput></screen>
<screen>Metadata value stored on /dev/da0.
Done.</screen>
<para>Wenn der Spiegel nicht aktiv ist, sich jedoch noch alte
Metadaten auf der Festplatte befinden, benutzen Sie
<command>gmirror clear</command>, um die Metadaten zu
entfernen:</para>
<para>Initialisieren Sie GEOM. Dadurch wird das Kernelmodul
<filename>/boot/kernel/geom_mirror.ko</filename> geladen:</para>
<screen>&prompt.root; <userinput>gmirror clear ada8</userinput></screen>
<screen>&prompt.root; <userinput>gmirror load</userinput></screen>
<note>
<para>Wenn dieser Befehl erfolgreich ausgeführt wurde, wird
die Gerätedatei <filename>gm0</filename> im
Verzeichnis <filename>/dev/mirror</filename>
erzeugt.</para>
</note>
<para>Stellen Sie sicher, dass das Kernelmodul
<filename>geom_mirror.ko</filename> beim Systemstart automatisch
geladen wird:</para>
<screen>&prompt.root; <userinput>echo 'geom_mirror_load="YES"' &gt;&gt; /boot/loader.conf</userinput></screen>
<para>Bearbeiten Sie die Datei <filename>/etc/fstab</filename>
und ersetzen Sie alle Verweise auf die alte Gerätedatei
<filename>da0</filename> durch die neue Gerätedatei
<filename>gm0</filename> des Plattenspiegels. Um die Datei
<filename>/etc/fstab</filename> bearbeiten zu können,
müssen Sie als Benutzer <systemitem class="username">root</systemitem> am
System angemeldet sein.</para>
<note>
<para>Sollte &man.vi.1; ihr bevorzugter Texteditor sein,
kouml;nnen Sie diese Änderungen ganz einfach wie
folgt durchführen:</para>
<screen>&prompt.root; <userinput>vi /etc/fstab</userinput></screen>
<para>Bevor Sie die Datei bearbeiten, sollten Sie ein Backup
anlegen. Haben Sie die Datei mit &man.vi.1; geöffnet,
können Sie durch die Eingabe von
<userinput>:w /etc/fstab.bak</userinput> eine Sicherungskopie
der Datei anlegen. Danach ersetzen Sie alle alten Referenzen
auf <filename>da0</filename> durch
<filename>gm0</filename>, indem Sie
<userinput>:%s/da/mirror\/gm/g</userinput> eingeben.</para>
</note>
<para>Die geänderte <filename>fstab</filename> sollte nun
ähnlich wie im folgenden Beispiel aussehen. Es spielt
dabei keine Rolle, ob Sie <acronym>SCSI</acronym>- oder
<acronym>ATA</acronym>-Platten verwenden. Das
<acronym>RAID</acronym>-Gerät heißt in jedem Fall
<filename>gm</filename>.</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>Führen Sie einen Systemneustart durch:</para>
<screen>&prompt.root; <userinput>shutdown -r now</userinput></screen>
<para>Wenn das System gestartet wird, sollten Sie nun nur noch
<filename>gm0</filename>-Geräte anstatt der bisherigen
<filename>da0</filename>-Geräte sehen. Nachdem das
System vollständig initialisiert wurde, können Sie
die neue Konfiguration testen, indem Sie den Befehl
<command>mount</command> ausführen:</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>Hier ist alles in Ordnung. Alle Werte sehen aus wie
erwartet. Um die Synchronisierung zu beginnen, integrieren
Sie nun die Platte <filename>da1</filename> in den
Spiegel, indem Sie den folgenden Befehl eingeben:</para>
<screen>&prompt.root; <userinput>gmirror insert gm0 /dev/da1</userinput></screen>
<para>Während die Platten gespiegelt werden, können
Sie den Fortschritt durch die Eingabe des folgenden Befehls
überprüfen:</para>
<screen>&prompt.root; <userinput>gmirror status</userinput></screen>
<para>Nachdem die Plattenspiegelung erfolgreich abgeschlossen
wurde (und alle Daten synchronisiert wurden), sollte Sie
eine Ausgabe ähnlich der folgenden erhalten, wenn Sie
den Befehl erneut ausführen:</para>
<screen> Name Status Components
mirror/gm0 COMPLETE da0
da1</screen>
<para>Sollten Probleme aufgetreten oder sollte die
Synchronisierung noch nicht abgeschlossen sein, wäre
der Status <literal>DEGRADED</literal> anstatt
<literal>COMPLETE</literal>.</para>
<para>&man.gmirror.8; speichert einen Datenblock an Metadaten am
Ende der Festplatte. Da das
<acronym>GPT</acronym>-Partitionschema die Metadaten auch am
Ende der Platte speichert, wird es nicht empfohlen, mit
&man.gmirror.8; einen Spiegel aus einem gesamten
<acronym>GPT</acronym>-Datenträger zu erstellen. In diesen
Fällen sollte eine <acronym>MBR</acronym>-Partitionierung
benutzt werden, weil hier nur eine Partitionstabelle am Anfang
der Platte gespeichert wird und somit nicht mit den Metadaten
des Spiegels im Konflikt steht.</para>
</sect2>
<sect2>
<title>Einen Spiegel mit zwei neuen Festplatten
erstellen</title>
<para>In diesem Beispiel wurde &os; bereits auf der vorhandenen
Festplatte <filename>ada0</filename> installiert. Zwei neue
Platten, <filename>ada1</filename> und
<filename>ada2</filename>, wurden bereits mit dem System
verbunden. Ein neuer Spiegel soll mit diesen beiden Platten
erzeugt und verwendet werden, um die alte vorhandene Platte zu
ersetzen.</para>
<para>Das Kernelmodul <filename>geom_mirror.ko</filename> muss
entweder in den Kernel eingebaut, oder zur Laufzeit geladen
werden. Sie können das Modul manuell laden:</para>
<screen>&prompt.root; <userinput>gmirror load</userinput></screen>
<para>Erstellen Sie den Spiegel mit den beiden neuen
Festplatten:</para>
<screen>&prompt.root; <userinput>gmirror label -v gm0 /dev/ada1 /dev/ada2</userinput></screen>
<para><filename>gm0</filename> ist ein vom Benutzer gewählter
Name, der dem neuen Spiegel zugeordnet wird. Nachdem der
Spiegel gestartet wurde, erscheint dieser Gerätename in
<filename>/dev/mirror/</filename>.</para>
<para><acronym>MBR</acronym>- und
<application>bsdlabel</application>-Partitionstabellen können
jetzt auf dem neuen Spiegel erzeugt werden. Dieses Beispiel
verwendet das herkömmliche Dateisystem-Layout für
<filename>/</filename>, swap, <filename>/var</filename>,
<filename>/tmp</filename> und <filename>/usr</filename>. Eine
einzelne Root- und Swap-Partition würde ebenfalls
funktionieren.</para>
<para>Die Partitionen auf dem Spiegel müssen nicht zwingend die
gleiche Größe wie die auf der Festplatte haben, aber sie
müssen groß genug sein, um alle Daten aufnehmen zu können, die
bereits auf <filename>ada0</filename> gespeichert sind.</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>
=&gt; 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>
=&gt; 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>Damit von dem Spiegel gebootet werden kann, muss der
Bootcode in den <acronym>MBR</acronym> installiert, ein
bsdlabel erstellt und die aktive Partition gesetzt
werden:</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>Erstellen Sie die Dateisysteme auf dem neuen Spiegel und
aktivieren Sie Soft-Updates:</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>Die Dateisysteme der vorhandenen Platte
<filename>ada0</filename> können jetzt mit &man.dump.8; und
&man.restore.8; auf den Spiegel kopiert werden.</para>
<screen>&prompt.root; <userinput>mount /dev/mirror/gm0s1a /mnt</userinput>
&prompt.root; <userinput>dump -C16 -b64 -0aL -f - / | (cd /mnt &amp;&amp; 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 &amp;&amp; restore -rf -)</userinput>
&prompt.root; <userinput>dump -C16 -b64 -0aL -f - /tmp | (cd /mnt/tmp &amp;&amp; restore -rf -)</userinput>
&prompt.root; <userinput>dump -C16 -b64 -0aL -f - /usr | (cd /mnt/usr &amp;&amp; restore -rf -)</userinput></screen>
<para>Fügen Sie die Dateisysteme für den Spiegel in
<filename>/etc/rc.conf</filename> hinzu:</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>Wenn das Modul <filename>geom_mirror.ko</filename> nicht
im Kernel enthalten ist, können Sie
<filename>/mnt/boot/loader.conf</filename> bearbeiten, damit
das Modul beim Systemstart geladen wird:</para>
<programlisting>geom_mirror_load="YES"</programlisting>
<para>Starten Sie das System neu und überprüfen Sie, ob
alle Daten erfolgreich kopiert wurden. Das
<acronym>BIOS</acronym> wird den Spiegel vermutlich als
zwei einzelne Laufwerke erkennen. Da beide Laufwerke
jedoch identisch sind, spielt es keine Rolle, welches
Laufwerk zum Booten ausgewählt wird.</para>
<para>Falls es Probleme beim Booten gibt, lesen Sie den
<xref linkend="gmirror-troubleshooting"/>. Die alte
Festplatte <filename>ada0</filename> kann vom System
getrennt und als Offline-Sicherung aufbewahrt werden.</para>
<para>Im laufenden Betrieb verhält sich der Spiegel genau
wie ein einzelnes Laufwerk.</para>
</sect2>
<sect2>
<title>Einen Spiegel mit einem vorhandenen Laufwerk
erstellen</title>
<para>In diesem Beispiel wurde &os; bereits auf der
Festplatte <filename>ada0</filename> installiert und eine
weitere Platte, <filename>ada1</filename>, wurde an
das System angeschlossen. Zunächst wird ein Spiegel mit
einer Festplatte erstellt, dann das vorhandene System auf
den Spiegel kopiert. Zuletzt wird die alte Festplatte in den
Spiegel eingefügt. Diese etwas komplexere Vorgehensweise ist
erforderlich, da <command>gmirror</command> 512 Byte an
Metadaten am Ende der Festplatte speichert, und die bestehende
Platte, <filename>ada0</filename>, in der Regel den Platz
bereits belegt hat.</para>
<para>Laden Sie das Kernelmodul
<filename>geom_mirror.ko</filename>:</para>
<screen>&prompt.root; <userinput>gmirror load</userinput></screen>
<para>Prüfen Sie mit <command>diskinfo</command> die Mediengröße
der vorhandenen Festplatte:</para>
<screen>&prompt.root; <userinput>diskinfo -v ada0 | head -n3</userinput>
/dev/ada0
512 # sectorsize
1000204821504 # mediasize in bytes (931G)</screen>
<para>Jetzt können Sie den Spiegel auf der neuen Festplatte
erzeugen. Um sicherzustellen, dass die Kapazität nicht größer
ist, als die Kapazität der vorhandenen Platte
<filename>ada0</filename>, benutzen Sie &man.gnop.8; um eine
Platte mit der exakt gleichen Größe zu imitieren. Diese
Platte speichert keine Daten und wird nur verwendet, um die
Größe des Spiegels zu begrenzen. &man.gmirror.8; wird die
Kapazität des Spiegels auf die Größe von
<filename>gzero.nop</filename> beschränken, auch wenn die neue
Festplatte <filename>ada1</filename> mehr Platz zur Verfügung
hätte. Beachten Sie, dass
<replaceable>1000204821504</replaceable> in der zweiten Zeile
der ermittelten Mediengröße von <command>diskinfo</command>
entspricht.</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>Da <filename>gzero.nop</filename> keine Daten speichert,
sieht der Spiegel sie als nicht verbunden an. Der Spiegel ist
so konfiguriert, dass er nicht verbundene Komponenten einfach
<quote>vergisst</quote>. Das Ergebnis ist ein Spiegel mit nur
einer einzigen Platte, <filename>ada1</filename>.</para>
<para>Sehen Sie sich nach der Erstellung von
<filename>gm0</filename> die Partitionstabelle von
<filename>ada0</filename> an. Diese Ausgabe stammt von einer
1&nbsp;TB Festplatte. Falls am Ende der Platte noch freier
Speicherplatz ist, kann der Inhalt von
<filename>ada0</filename> direkt auf den Spiegel kopiert
werden.</para>
<para>Falls jedoch der gesamte Speicherplatz auf der Platte
zugeordnet ist, dann gibt es keinen Platz mehr für die 512
Byte Metadaten für den Spiegel am Ende der Platte, wie in
dieser Auflistung zu sehen.</para>
<screen>&prompt.root; <userinput>gpart show ada0</userinput>
=&gt; 63 1953525105 ada0 MBR (931G)
63 1953525105 1 freebsd [active] (931G)</screen>
<para>In diesem Fall muss die Partitionstabelle bearbeitet
werden, um die Kapazität von <filename>mirror/gm0</filename>
um einen Sektor zu reduzieren. Dieses Verfahren wird später
erläutert.</para>
<para>In beiden Fällen sollte die Partitionstabelle der primären
Platte mit <command>gpart backup</command> gesichert
werden.</para>
<screen>&prompt.root; <userinput>gpart backup ada0 &gt; table.ada0</userinput>
&prompt.root; <userinput>gpart backup ada0s1 &gt; table.ada0s1</userinput></screen>
<para>Diese Kommandos erstellen zwei Dateien,
<filename>table.ada0</filename> und
<filename>table.ada0s1</filename>. Das Beispiel verwendet
eine 1&nbsp;TB Festplatte:</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>Wenn am Ende der Platte kein Platz vorhanden ist, muss
die Größe des Slice und der letzten Partition verringert
werden. Bearbeiten Sie die beiden Dateien, und verringern
Sie die Größe der Slice und der Partition jeweils um eins.
Dies bezieht sich auf die letzten Zahlen in der Liste.</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>Wenn mindestens ein Sektor der Platte nicht zugewiesen
wurde, kann die Platte ohne Modifikation verwendet
werden.</para>
<para>Jetzt kann die Partitionstabelle auf
<filename>mirror/gm0</filename> wiederhergestellt
werden:</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>Prüfen Sie die Partitionstabellen mit
<command>gpart show</command>. Dieses Beispiel nutzt
<filename>gm0s1a</filename> für <filename>/</filename>,
<filename>gm0s1d</filename> für <filename>/var</filename>,
<filename>gm0s1e</filename> für <filename>/usr</filename>,
<filename>gm0s1f</filename> für <filename>/data1</filename>
und <filename>gm0s1g</filename> für
<filename>/data2</filename>.</para>
<screen>&prompt.root; <userinput>gpart show mirror/gm0</userinput>
=&gt; 63 1953525104 mirror/gm0 MBR (931G)
63 1953525042 1 freebsd [active] (931G)
1953525105 62 - free - (31k)
&prompt.root; <userinput>gpart show mirror/gm0s1</userinput>
=&gt; 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>Sowohl die Slice, als auch die letzte Partition, muss
mindestens einen freien Block am Ende der Platte haben.</para>
<para>Erstellen Sie Dateisysteme auf diesen neuen
Partitionen:</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>Damit Sie von dem Spiegel booten können, müssen Sie den
Bootcode in den <acronym>MBR</acronym> installieren, ein
bsdlabel anlegen und das aktive Slice setzen:</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>Bearbeiten Sie <filename>/etc/fstab</filename>, um die
neuen Partitionen auf dem Spiegel nutzen zu können. Speichern
Sie zunächst eine Kopie der Datei unter
<filename>/etc/fstab.orig</filename>:</para>
<screen>&prompt.root; <userinput>cp /etc/fstab /etc/fstab.orig</userinput></screen>
<para>Ersetzen Sie in <filename>/etc/fstab</filename>
<filename>/dev/ada0</filename> durch
<filename>mirror/gm0</filename>.</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>Wenn das Modul <filename>geom_mirror.ko</filename> nicht
im Kernel enthalten ist, können Sie
<filename>/boot/loader.conf</filename> bearbeiten, damit
das Modul beim Systemstart geladen wird:</para>
<programlisting>geom_mirror_load="YES"</programlisting>
<para>Die Dateisysteme der ursprünglichen Platte können jetzt
mit &man.dump.8; und &man.restore.8; auf den Spiegel kopiert
werden. Wenn Sie das Dateisystem mit <command>dump
-L</command> sichern, wird zunächst ein Snapshot des
Dateisystems erstellt, was einige Zeit dauern kann.</para>
<screen>&prompt.root; <userinput>mount /dev/mirror/gm0s1a /mnt</userinput>
&prompt.root; <userinput>dump -C16 -b64 -0aL -f - / | (cd /mnt &amp;&amp; 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 &amp;&amp; restore -rf -)</userinput>
&prompt.root; <userinput>dump -C16 -b64 -0aL -f - /var | (cd /mnt/var &amp;&amp; restore -rf -)</userinput>
&prompt.root; <userinput>dump -C16 -b64 -0aL -f - /data1 | (cd /mnt/data1 &amp;&amp; restore -rf -)</userinput>
&prompt.root; <userinput>dump -C16 -b64 -0aL -f - /data2 | (cd /mnt/data2 &amp;&amp; restore -rf -)</userinput></screen>
<para>Starten Sie das System neu und booten Sie von
<filename>ada1</filename>. Wenn alles funktioniert, wird
das System von <filename>mirror/gm0</filename> booten,
welches jetzt die gleichen Daten enthält wie
<filename>ada0</filename>. Lesen Sie <xref
linkend="gmirror-troubleshooting"/>, falls es Probleme beim
Booten gibt.</para>
<para>An dieser Stelle besteht der Spiegel immer noch aus der
einzelnen Platte <filename>ada1</filename>.</para>
<para>Nachdem erfolgreich von <filename>mirror/gm0</filename>
gebootet wurde, besteht der letzte Schritt darin,
<filename>ada0</filename> in den Spiegel einzufügen.</para>
<important>
<para>Wenn Sie <filename>ada0</filename> in den Spiegel
einfügen, wird der Inhalt der Platte mit den Daten aus
dem Spiegel überschrieben. Sie müssen sicherstellen, das
<filename>mirror/gm0</filename> den gleichen Inhalt wie
<filename>ada0</filename> hat, bevor Sie
<filename>ada0</filename> zum Spiegel hinzufügen. Falls der
zuvor mit &man.dump.8; und &man.restore.8; kopierte Inhalt
nicht mit dem von <filename>ada0</filename> identisch ist,
machen Sie die Änderungen an <filename>/etc/fstab</filename>
rückgängig, starten Sie das System neu und beginnen Sie die
Prozedur von vorn.</para>
</important>
<screen>&prompt.root; <userinput>gmirror insert gm0 ada0</userinput>
GEOM_MIRROR: Device gm0: rebuilding provider ada0</screen>
<para>Die Synchronisation zwischen den beiden Platten wird
direkt gestartet. Verwenden Sie <command>gmirror
status</command> um den Fortschritt zu beobachten.</para>
<screen>&prompt.root; <userinput>gmirror status</userinput>
Name Status Components
girror/gm0 DEGRADED ada1 (ACTIVE)
ada0 (SYNCHRONIZING, 64%)</screen>
<para>Nach einer Weile wird die Wiederherstellung abgeschlossen
sein.</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><filename>mirror/gm0</filename> besteht nun aus den beiden
Platten <filename>ada0</filename> und
<filename>ada1</filename>. Der Inhalt der beiden Platten wird
automatisch miteinander synchronisiert. Im laufenden Betrieb
verhält sich <filename>mirror/gm0</filename> wie eine einzelne
Festplatte.</para>
</sect2>
<sect2 xml:id="gmirror-troubleshooting">
<title>Fehlerbehebung</title>
<sect3>
<title>Das System weigert sich zu starten</title>
<title>Probleme beim Bootvorgang</title>
<para>Falls das System startet und eine Eingabeaufforderung
ähnlich der folgenden erscheint:</para>
<sect4>
<title>BIOS-Einstellungen</title>
<programlisting>ffs_mountroot: can't find rootvp
Root mount failed: 6
mountroot&gt;</programlisting>
<para>Möglicherweise müssen die
<acronym>BIOS</acronym>-Einstellungen geändert werden, um
von dem neuen gespiegelten Laufwerk zu booten. Beide
Platten des Spiegels können zum Booten verwendet werden.
Als Komponenten des Spiegels enthalten sie identische
Daten.</para>
</sect4>
<para>Starten Sie den Rechner neu mit der Power- oder
Resettaste. Wählen Sie im Startmenü Option sechs
(6). Dadurch erscheint eine Eingabeaufforderung für
&man.loader.8;. Laden Sie nun das Kernelmodul
händisch:</para>
<sect4>
<title>Probleme beim Booten</title>
<screen>OK? <userinput>load geom_mirror</userinput>
OK? <userinput>boot</userinput></screen>
<para>Wenn der Bootvorgang mit der folgenden Meldung
abbricht, ist irgendwas mit dem Spiegel nicht in
Ordnung:</para>
<para>Falls dies funktioniert, wurde das Modul (aus welchen
Gründen auch immer) nicht richtig geladen. Prüfen
Sie, ob Ihr Eintrag in der Datei
<filename>/boot/loader.conf</filename> korrekt ist. Sollte
das Problem weiterhin bestehen, nehmen Sie die Zeile</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>in die Konfigurationsdatei des Kernels auf und führen
Sie einen Rebuild und eine erneute Installation durch. Dies
sollte das Problem beseitigen.</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>Dieses Problem kann durch ein nicht geladenes
Kernelmodul <filename>geom_mirror.ko</filename> in
<filename>/boot/loader.conf</filename> verursacht werden.
Um das Problem zu beheben, booten Sie von einem
&os;-Installationsmedium und wählen Sie
<literal>Shell</literal> an der Eingabeaufforderung. Laden
Sie dann das Modul und hängen Sie den Spiegel ein:</para>
<screen>&prompt.root; <userinput>gmirror load</userinput>
&prompt.root; <userinput>mount /dev/mirror/gm0s1a /mnt</userinput></screen>
<para>Bearbeiten Sie dann
<filename>/mnt/boot/loader.conf</filename> und fügen Sie
eine Zeile für das Kernelmodul hinzu:</para>
<programlisting>geom_mirror_load="YES"</programlisting>
<para>Speichern Sie die Datei und starten Sie das System
neu.</para>
<para>Andere Probleme, die <literal>error 19</literal>
verursachen können, sind nur mit mehr Aufwand zu beheben.
Obwohl das System von <filename>ada0</filename> booten
sollte, wird ein weiterer Prompt erscheinen, wenn
<filename>/etc/fstab</filename> fehlerhaft ist. Geben
Sie am Loader-Prompt <literal>ufs:/dev/ada0s1a</literal> ein
und drücken Sie <keycap>Enter</keycap>. Machen Sie die
Änderungen an <filename>/etc/fstab</filename> rückgängig und
hängen Sie anstelle des Spiegels die originale Festplatte
(<filename>ada0</filename>) ein. Starten Sie dann das
System neu und versuchen Sie den Vorgang erneut.</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>
@ -457,29 +825,51 @@ OK? <userinput>boot</userinput></screen>
<title>Wiederherstellung des Systems nach einem
Plattenausfall</title>
<para>Das Schöne an der Plattenspiegelung ist, dass eine
kaputte Platte ersetzt werden kann, ohne dass Sie dabei
Daten verlieren.</para>
<para>Das Schöne an der Plattenspiegelung ist, dass eine Platte
ausfallen kann, ohne dass Sie dabei Daten verlieren. Falls
<filename>ada0</filename> aus dem obigen Beispiel ausfällt,
steht der Spiegel weiterhin zur Verfügung und bietet die Daten
von der verbleibenden Platte <filename>ada1</filename>
an.</para>
<para>Basierend auf der vorhin besprochenen
<acronym>RAID</acronym>1-Konfiguration, nehmen wir nun an, dass
die Platte <filename>da1</filename> ausgefallen ist und daher
ersetzt werden muss. Um dies zu tun, müssen Sie
feststellen, welche Platte ausgefallen ist und das System
herunterfahren. Nun können Sie die kaputte Platte gegen
eine neue Platte austauschen und das System wieder starten.
Nachdem der Systemstart abgeschlossen ist, verwenden Sie die
folgenden Befehle, um die Plattenspiegelung wieder zu
reaktivieren:</para>
<para>Um das ausgefallene Laufwerk zu ersetzen, muss das System
heruntergefahren werden und das ausgefallene Laufwerk durch
ein neues Laufwerk von gleicher oder größerer Kapazität
ersetzt werden. Hersteller verwenden oft etwas
willkürliche Werte für die Kapazität. Der einzige Weg, um
wirklich sicher zu sein, ist die Gesamtzahl der Sektoren von
<command>diskinfo -V</command> zu vergleichen. Ein Laufwerk
mit größerer Kapazität wird funktionieren, allerdings wird der
zusätzliche Platz ungenutzt bleiben.</para>
<para>Nachdem der Rechner wieder eingeschaltet ist, wird der
Spiegel im <quote>degraded</quote> Modus ausgeführt werden.
Der Spiegel wird angewiesen, Laufwerke zu vergessen, die noch
nicht verbunden sind:</para>
<screen>&prompt.root; <userinput>gmirror forget gm0</userinput></screen>
<screen>&prompt.root; <userinput>gmirror insert gm0 /dev/da1</userinput></screen>
<para>Alte Metadaten sollten von der Ersatzfestplatte nach den
Anweisungen in <xref linkend="geom-mirror-metadata"/> gelöscht
werden. Anschließend kann die Ersatzfestplatte, in diesem
Beispiel <filename>ada4</filename>, in den Spiegel eingefügt
werden:</para>
<para>Der Befehl <command>gmirror</command> <option>status</option>
erlaubt es Ihnen, den Fortschritt bei der Wiederherstellung der
Plattenspiegelung zu beobachten. Das ist alles, was Sie tun
müssen.</para>
<screen>&prompt.root; <userinput>gmirror insert gm0 /dev/ada4</userinput></screen>
<para>Die Wiederherstellung beginnt, sobald das neue Laufwerk in
den Spiegel eingesetzt wird. Das Kopieren der Daten vom
Spiegel auf das neue Laufwerk kann eine Weile dauern. Die
Leistung des Spiegels ist während dieser Zeit stark reduziert,
deswegen sollten neue Laufwerke idealerweise dann eingefügt
werden, wenn der Rechner nicht benötigt wird.</para>
<para>Der Fortschritt der Wiederherstellung kann mit
<command>gmirror status</command> überwacht werden. Während
der Wiederherstellung ist der Status
<computeroutput>DEGRADED</computeroutput>. Wenn der Vorgang
abgeschlossen ist, wechselt der Status zu
<computeroutput>COMPLETE</computeroutput>.</para>
</sect2>
</sect1>