<?xml version="1.0" encoding="iso-8859-1"?>
<!--
     The FreeBSD Documentation Project
     The FreeBSD German Documentation Project

     $FreeBSD$
     $FreeBSDde$
     basiert auf: r39631
-->

<chapter id="GEOM">
  <chapterinfo>
    <authorgroup>
      <author>
	<firstname>Tom</firstname>
	<surname>Rhodes</surname>
	<contrib>Geschrieben von </contrib>
      </author>
    </authorgroup>
    <authorgroup>
      <author>
	<firstname>Daniel</firstname>
	<surname>Seuffert</surname>
	<contrib>Übersetzt von </contrib>
      </author>
      <author>
	<firstname>Johann</firstname>
	<surname>Kois</surname>
      </author>
    </authorgroup>
  </chapterinfo>

  <title>GEOM: Modulares Framework zur
    Plattentransformation</title>

  <sect1 id="GEOM-synopsis">
    <title>Übersicht</title>

    <indexterm>
      <primary>GEOM</primary>
    </indexterm>
    <indexterm>
      <primary>GEOM Disk Framework</primary>
      <see>GEOM</see>
    </indexterm>

    <para>Dieses Kapitel behandelt den Einsatz von Laufwerken mit
      dem GEOM-Framework in &os;. Dies beinhaltet auch die wichtigen
      <acronym role="Redundant Array of Inexpensive
      Disks">RAID</acronym>-Überwachungswerkzeuge, welche das
      Framework zur Konfiguration nutzen. Dieses Kapitel enthält
      keine tiefschürfenden Betrachtungen, wie GEOM I/O nutzt
      oder steuert, sein zugrundeliegendes Subsystem oder den
      Quelltext von GEOM. Diese Information wird durch die
      &man.geom.4;-Manualpage und seine zahlreichen <quote>SEE ALSO</quote>-Verweise
      bereitgestellt. Dieses Kapitel ist auch kein ausführlicher
      Führer für
      <acronym>RAID</acronym>-Konfigurationen. Nur durch GEOM
      unterstützte <acronym>RAID</acronym>-Klassen werden
      erörtert.</para>

    <para>Nach Lesen dieses Kapitels werden Sie folgendes
      wissen:</para>

    <itemizedlist>
      <listitem>
	<para>Welche Art von
	  <acronym>RAID</acronym>-Unterstützung durch GEOM
	  verfügbar ist.</para>
      </listitem>

      <listitem>
	<para>Wie man die Basis-Dienstprogramme nutzt, um
	  verschiedene <acronym>RAID</acronym>-Stufen zu
	  konfigurieren, zu manipulieren und zu warten.</para>
      </listitem>

      <listitem>
	<para>Wie man mittels GEOM spiegelt, striped,
	  verschlüsselt und entfernte Laufwerke verbindet.</para>
      </listitem>

      <listitem>
	<para>Wie man an Laufwerken, welche an das GEOM-Framework
	  angeschlossen sind, Fehler behebt.</para>
      </listitem>
    </itemizedlist>

    <para>Bevor Sie dieses Kapitel lesen, sollten Sie:</para>

    <itemizedlist>
      <listitem>
	<para>Verstehen, wie &os; Laufwerke behandelt
	  (<xref linkend="disks"/>).</para>
      </listitem>

      <listitem>
	<para>Wissen wie man einen neuen &os;-Kernel installiert
	  und konfiguriert (<xref linkend="kernelconfig"/>).</para>
      </listitem>
    </itemizedlist>
  </sect1>

  <sect1 id="GEOM-intro">
    <title>Einführung in GEOM</title>

    <para>GEOM erlaubt den Zugriff und die Kontrolle von Klassen
      &mdash; Master Boot Records, <acronym>BSD</acronym>-Label usw.
      &mdash; durch die Nutzung von Datenträgern (Providern) oder
      den besonderen Dateien in <filename
      class="directory">/dev</filename>. Verschiedene Software
      <acronym>RAID</acronym>-Konfigurationen unterstützend, wird
      GEOM Ihnen transparenten Zugriff auf das Betriebssystem und
      System-Dienstprogramme gewähren.</para>
  </sect1>

  <sect1 id="GEOM-striping">
    <sect1info>
      <authorgroup>
	<author>
	  <firstname>Tom</firstname>
	  <surname>Rhodes</surname>
	  <contrib>Geschrieben von </contrib>
	</author>
	<author>
	  <firstname>Murray</firstname>
	  <surname>Stokely</surname>
	</author>
      </authorgroup>
    </sect1info>

    <title>RAID0 - Striping</title>

    <indexterm>
      <primary>GEOM</primary>
    </indexterm>
    <indexterm>
      <primary>Striping</primary>
    </indexterm>

    <para>Striping (stripe = Streifen) ist eine Methode, um
      verschiedene Laufwerke in einem einzigen Datenträger
      zusammenzufassen. In vielen Fällen wird dies durch die
      Nutzung von Hardware-Controllern bewerkstelligt. Das
      GEOM-Subsystem unterstützt
      Software-<acronym>RAID</acronym>0 (welches auch als Striping
      bekannt ist).</para>

    <para>In einem <acronym>RAID</acronym>0-System werden die Daten
      in einzelne Blöcke aufgeteilt, welche über alle
      angeschlossenen Laufwerke in einem Datenfeld (Array) geschrieben
      werden. Anstatt darauf warten zu müssen, dass 256K auf
      ein einzelnes Laufwerk geschrieben werden, kann ein
      <acronym>RAID</acronym>0-System gleichzeitig 64K auf jedes von 4
      Laufwerken schreiben mit entsprechend besserer I/O-Leistung.
      Dieser Durchsatz kann durch die Verwendung mehrerer
      Controller noch zusätzlich gesteigert werden.</para>

    <para>Jedes Laufwerk in einem <acronym>RAID</acronym>0-Stripe
      muss die gleiche Größe haben, da
      I/O-Anforderungen für das Lesen und Schreiben
      abwechselnd auf mehrere Laufwerke parallel erfolgen.</para>

    <mediaobject>
      <imageobject>
	<imagedata fileref="geom/striping" align="center"/>
      </imageobject>

      <textobject>
	<phrase>Disk Striping Illustration</phrase>
      </textobject>
    </mediaobject>

    <procedure>
      <title>Erzeugen eines Stripe von unformatierten
	ATA-Platten</title>

      <step>
	<para>Laden Sie das
	  <filename>geom_stripe.ko</filename>-Modul:</para>

	<screen>&prompt.root; <userinput>kldload geom_stripe</userinput></screen>
      </step>

      <step>
	<para>Stellen Sie sicher, dass ein geeigneter Mount-Punkt
	  existiert. Falls dieser Datenträger eine Root-Partition
	  werden soll, dann nutzen Sie zeitweise einen anderen
	  Mount-Punkt, beispielsweise <filename
	  class="directory">/mnt</filename>:</para>

	<screen>&prompt.root; <userinput>mkdir /mnt</userinput></screen>
      </step>

      <step>
	<para>Bestimmen Sie die Gerätenamen derjenigen Platten,
	  welche gestriped werden sollen, und erzeugen Sie ein neues
	  Stripe-Gerät.  Das folgende Beispiel verwendet zwei
	  unbenutzte und unpartitionierte
	  <acronym>ATA</acronym>-Platten, die gestriped werden sollen.
	  Lauten die Gerätenamen <filename>/dev/ad2</filename>
	  und <filename>/dev/ad3</filename>, so verwenden Sie folgenden
	  Befehl:</para>

	<screen>&prompt.root; <userinput>gstripe label -v st0 /dev/ad2 /dev/ad3</userinput>
Metadata value stored on /dev/ad2.
Metadata value stored on /dev/ad3.
Done.</screen>

      </step>

      <step>
	<para>Schreiben Sie einen Standard-Label (auch als
	  Partitions-Tabelle bekannt) auf den neuen Datenträger
	  und installieren Sie den normalen Bootstrap-Code:</para>

        <screen>&prompt.root; <userinput>bsdlabel -wB /dev/stripe/st0</userinput></screen>
      </step>

      <step>
	<para>Dieser Prozess sollte zwei weitere Geräte im
	  Verzeichnis <filename
	  class="directory">/dev/stripe</filename> (zusätzlich zum
	  Gerät <devicename>st0</devicename>) erzeugt haben. Diese
	  schliessen <devicename>st0a</devicename> und
	  <devicename>st0c</devicename> ein. Nun kann ein Dateisystem
	  auf dem Gerät <devicename>st0a</devicename> mit dem
	  <command>newfs</command>-Dienstprogramm erzeugt
	  werden:</para>

	<screen>&prompt.root; <userinput>newfs -U /dev/stripe/st0a</userinput></screen>

	<para>Viele Zahlen rauschen nun über Ihren Bildschirm
	  und nach ein paar Sekunden wird der Prozess abgeschlossen
	  sein. Der Datenträger wurde erzeugt und kann in den
	  Verzeichnisbaum eingehängt werden.</para>
      </step>
    </procedure>

    <para>Um das erzeugte Stripe manuell zu mounten:</para>

    <screen>&prompt.root; <userinput>mount /dev/stripe/st0a /mnt</userinput></screen>

    <para>Um das erzeugte Dateisystem automatisch während des
      Startvorgangs zu mounten, müssen Sie die
      Datenträgerinformation in die Datei
      <filename>/etc/fstab</filename> schreiben.  Dazu legen Sie einen
      permanenten Mountpunkt namens
      <filename class="directory">stripe</filename> an:</para>

  <screen>&prompt.root; <userinput>mkdir /stripe</userinput>
&prompt.root; <userinput>echo "/dev/stripe/st0a /stripe ufs rw 2 2" \</userinput>
    <userinput>&gt;&gt; /etc/fstab</userinput></screen>

    <para>Das <filename>geom_stripe.ko</filename>-Modul muss
      ebenfalls automatisch beim Systemstart geladen werden (durch
      die Aufnahme der folgenden Zeile in die Datei
      <filename>/boot/loader.conf</filename>):</para>

    <screen>&prompt.root; <userinput>echo 'geom_stripe_load="YES"' &gt;&gt; /boot/loader.conf</userinput></screen>
  </sect1>

  <sect1 id="GEOM-mirror">
    <title>RAID1 - Spiegelung</title>

    <indexterm>
      <primary>GEOM</primary>
    </indexterm>
    <indexterm>
      <primary>Disk Mirroring</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>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>

    <sect2>
      <title>Die primäre Platte spiegeln</title>

      <para>Angenommen, &os; wurde auf der ersten Platte
	<devicename>da0</devicename> installiert, dann sollte
	&man.gmirror.8; angewiesen werden, seine primären Daten
	auf dieser Platte zu speichern.</para>

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

      <screen>&prompt.root; <userinput>sysctl kern.geom.debugflags=17</userinput></screen>

      <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 class="devicefile">/dev/mirror/gm</filename>, indem Sie
	den folgenden Befehl ausführen:</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>gmirror label -vb round-robin gm0 /dev/da0</userinput></screen>

      <para>Ihr System sollte wie folgt antworten:</para>

      <screen>Metadata value stored on /dev/da0.
Done.</screen>

      <para>Initialisieren Sie GEOM.  Dadurch wird das Kernelmodul
	<filename>/boot/kernel/geom_mirror.ko</filename> geladen:</para>

      <screen>&prompt.root; <userinput>gmirror load</userinput></screen>

      <note>
	<para>Wenn dieser Befehl erfolgreich ausgeführt wurde, wird
	  die Gerätedatei <devicename>gm0</devicename> im
	  Verzeichnis <filename class="directory">/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
	<devicename>da0</devicename> durch die neue Gerätedatei
	<devicename>gm0</devicename> des Plattenspiegels.  Um die Datei
	<filename>/etc/fstab</filename> bearbeiten zu können,
	müssen Sie als Benutzer <username>root</username> 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 <devicename>da0</devicename> durch
	  <devicename>gm0</devicename>, 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
	<devicename>gm</devicename>.</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
	<devicename>gm0</devicename>-Geräte anstatt der bisherigen
	<devicename>da0</devicename>-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 <devicename>da1</devicename> 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>
    </sect2>

    <sect2>
      <title>Fehlerbehebung</title>

      <sect3>
	<title>Das System weigert sich zu starten</title>

	<para>Falls das System startet und eine Eingabeaufforderung
          ähnlich der folgenden erscheint:</para>

	<programlisting>ffs_mountroot: can't find rootvp
Root mount failed: 6
mountroot></programlisting>

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

	<screen>OK? <userinput>load geom_mirror</userinput>
OK? <userinput>boot</userinput></screen>

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

	<programlisting>options	GEOM_MIRROR</programlisting>

	<para>in die Konfigurationsdatei des Kernels auf und führen
	  Sie einen Rebuild und eine erneute Installation durch. Dies
	  sollte das Problem beseitigen.</para>
      </sect3>
    </sect2>

    <sect2>
      <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>Basierend auf der vorhin besprochenen
	<acronym>RAID</acronym>1-Konfiguration, nehmen wir nun an, dass
	die Platte <devicename>da1</devicename> 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>

      <screen>&prompt.root; <userinput>gmirror forget gm0</userinput></screen>

      <screen>&prompt.root; <userinput>gmirror insert gm0 /dev/da1</userinput></screen>

      <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>
    </sect2>
  </sect1>

  <sect1 id="geom-ggate">
    <title>GEOM Gate Netzwerkgeräte</title>

    <para>GEOM unterstützt die Verwendung entfernter Geräte
      wie Festplatten, CD-ROMs, Dateien usw. mittels Nutzung
      der Gate-Dienstprogramme. Dies ist vergleichbar mit
      <acronym>NFS</acronym>.</para>

    <para>Zu Beginn muss eine Exportdatei erzeugt werden. Diese
      Datei legt fest, wer Zugriff auf die exportierten Ressourcen
      hat und welche Zugriffstechniken angeboten werden. Um zum
      Beispiel den vierten Slice auf der ersten
      <acronym>SCSI</acronym>-Platte zu exportieren, ist die
      folgende Datei <filename>/etc/gg.exports</filename>
      mehr als ausreichend:</para>

    <programlisting>192.168.1.0/24 RW /dev/da0s4d</programlisting>

    <para>Sie wird allen Hosts innerhalb des privaten Netzwerkes
      den Zugriff auf das Dateisystem auf der Partition
      <devicename>da0s4d</devicename> erlauben.</para>

    <para>Um dieses Gerät zu exportieren, stellen Sie bitte
      sicher, dass es momentan nicht gemounted ist und
      starten Sie den &man.ggated.8; Server-Daemon:</para>

    <screen>&prompt.root; <userinput>ggated</userinput></screen>

    <para>Um nun <command>mount</command> auf der Client-Maschine
      auszuführen, geben Sie bitte die folgenden Befehle
      ein:</para>

    <screen>&prompt.root; <userinput>ggatec create -o rw 192.168.1.1 /dev/da0s4d</userinput>
ggate0
&prompt.root; <userinput>mount /dev/ggate0 /mnt</userinput></screen>

    <para>Von nun an kann auf das Gerät über den Mount-Punkt
      <filename class="directory">/mnt</filename> zugegriffen
      werden.</para>

    <note>
      <para>Es sollte darauf hingewiesen werden, dass dies
	scheitern wird, falls das Gerät momentan entweder
	auf dem Server oder irgendeiner anderen Maschine
	gemountet ist.</para>
    </note>

    <para>Wenn das Gerät nicht länger gebraucht wird,
      dann kann es mit dem Befehl &man.umount.8;
      ausgehängt werden (genauso wie jedes andere Laufwerk
      auch).</para>
  </sect1>

  <sect1 id="geom-glabel">
    <title>Das Labeln von Laufwerken</title>

    <indexterm>
      <primary>GEOM</primary>
    </indexterm>
    <indexterm>
      <primary>Disk Labels</primary>
    </indexterm>

    <para>Während der Initialisierung des Systems legt der
      &os;-Kernel für jedes gefundene Gerät Knotenpunkte
      an. Diese Methode für die Überprüfung auf
      vorhandene Geräte wirft einige Fragen auf.  Was passiert
      beispielsweise, wenn ein neues
      <acronym>USB</acronym>-Laufwerk hinzugefügt wird?
      Es ist sehr wahrscheinlich, dass ein
      Flash-Speicher-Gerät den Gerätenamen
      <devicename>da0</devicename> erhält, während
      gleichzeitig das bisherige <devicename>da0</devicename>
      zu <devicename>da1</devicename> wird. Dies verursacht
      Probleme beim Einhängen von Dateisystemen, wenn diese
      in der <filename>/etc/fstab</filename> aufgeführt
      sind und schlussendlich mag das auch dazu führen,
      dass das System nicht mehr startet.</para>

    <para>Eine Lösung für dieses Problem ist das
      Aneinanderketten der <acronym>SCSI</acronym>-Geräte,
      damit ein neues Gerät, welches der
      <acronym>SCSI</acronym>-Karte hinzugefügt wird,
      unbenutzte Gerätenummern erhält. Aber was
      geschieht, wenn ein <acronym>USB</acronym>-Gerät
      möglicherweise die primäre
      <acronym>SCSI</acronym>-Platte ersetzt? Dies kann
      passieren, weil <acronym>USB</acronym>-Geräte
      normalerweise vor der <acronym>SCSI</acronym>-Karte
      geprüft werden. Eine Lösung ist das
      Hinzufügen dieser Geräte, nachdem das System
      gestartet ist. Eine andere Lösung könnte sein,
      nur ein einzelnes <acronym>ATA</acronym>-Laufwerk zu
      nutzen und die <acronym>SCSI</acronym>-Geräte niemals
      in der <filename>/etc/fstab</filename> aufzuführen.</para>

    <para>Es gibt allerdings eine bessere Lösung. Durch
      Verwendung des <command>glabel</command>-Dienstprogramms
      kann ein Administrator oder Benutzer seine Laufwerke mit
      Labeln versehen und diese in der <filename>/etc/fstab</filename>
      nutzen. Da <command>glabel</command> seine Label im letzten
      Sektor jedes vorhandenen Datenträgers speichert, wird
      das Label persistent bleiben (auch über Neustarts hinweg).
      Durch Nutzung dieses Labels als Gerät kann das
      Dateisystem immer gemountet sein, unabhängig davon,
      durch welchen Geräte-Knotenpunkt auf ihn zugegriffen
      wird.</para>

    <note>
      <para>Der Label muss permanent (dauerhaft) sein.
	Man kann das Dienstprogramm <command>glabel</command>
	nutzen, um sowohl transiniente als auch permanente Label
	zu erzeugen. Aber nur permanente (persistente) Label
	bleiben konsistent über Neustarts hinweg. Lesen
	Sie die &man.glabel.8;-Manualpage für weitere
	Unterschiede zwischen den Label-Typen.</para>
    </note>

    <sect2>
      <title>Label-Typen und Beispiele</title>

      <para>Es gibt zwei Arten von Labeln: generische Label und
	Dateisystem-Label.  Label können dauerhaft (permanent)
	oder temporär sein.  Permanente Label können mit
	&man.tunefs.8; oder &man.newfs.8; in einem speziellen
	spezielles Verzeichnis in <filename
	class="directory">/dev</filename> erzeugt werden, welches
	entsprechend der Dateisystem-Art benannt wird.
	<acronym>UFS</acronym>2-Dateisystem-Label werden zum
	Beispiel im Verzeichnis
	<filename class="directory">/dev/ufs</filename>
	angelegt.  Permanente Label können außerdem durch
	den Befehl <command>glabel label</command> erzeugt werden.
	Diese Label sind dann allerdings nicht dateisystemspezisch
	und werden im Unterverzeichnis <filename
	class="directory">/dev/label</filename> erzeugt.</para>

      <para>Ein temporäres Label verschwindet mit dem
	nächsten Systemstart. Diese Label werden im
	Verzeichnis <filename class="directory">/dev/label</filename>
	erzeugt und sind ideal für Testzwecke.  Ein temporäres
	Label kann durch den Befehl <command>glabel create</command>
	erzeugt werden.  Weitere Informationen finden sich in der
	Manualpage &man.glabel.8;.</para>

<!-- XXXTR: How do you create a file system label without running newfs
            or when there is no newfs (e.g.: cd9660)? -->

      <para>Um ein permanentes Label auf einem
	<acronym>UFS</acronym>2-Dateisystem ohne
	Löschung von Daten zu erzeugen, kann man folgenden
	Befehl verwenden:</para>

      <screen>&prompt.root; <userinput>tunefs -L <replaceable>home</replaceable> <replaceable>/dev/da3</replaceable></userinput></screen>

      <warning>
	<para>Wenn das Dateisystem voll ist, kann dies zu
	  Datenkorruption führen; aber egal wie, falls das
	  Dateisystem voll ist, sollte das Hauptziel die
	  Entfernung ungenützter Dateien und nicht das
	  Hinzufügen von Labeln sein.</para>
      </warning>

      <para>Ein Label sollte nun in
	<filename class="directory">/dev/ufs</filename> vorhanden
	sein, der zu <filename>/etc/fstab</filename>
	hinzugefügt wird:</para>

      <programlisting>/dev/ufs/home		/home            ufs     rw              2      2</programlisting>

      <note>
	<para>Das Dateisystem darf nicht gemountet sein beim
	  Versuch, <command>tunefs</command> auszuführen.</para>
      </note>

      <para>Nun kann das Dateisystem wie üblich gemountet
	werden:</para>

      <screen>&prompt.root; <userinput>mount /home</userinput></screen>

      <para>Von nun an kann der Geräte-Knotenpunkt sich ohne
	negative Effekte auf das System ändern, solange das
	Kernelmodul <filename>geom_label.ko</filename> beim
	Systemstart mittels <filename>/boot/loader.conf</filename>
	geladen wird oder die
	<literal>GEOM_LABEL</literal>-Kernel-Option aktiv ist.</para>

      <para>Dateisysteme können auch mit einem Standard-Label
	erzeugt werden (mittels des Flags <option>-L</option> in
	<command>newfs</command>). Lesen Sie bitte die Manualpage
	von &man.newfs.8; für weitere Informationen.</para>

      <para>Der folgende Befehl kann genutzt werden, um das Label
	zu beseitigen:</para>

      <screen>&prompt.root; <userinput>glabel destroy home</userinput></screen>

      <para>Das folgende Beispiel zeigt Ihnen, wie Sie Label für
	die Partitionen einer Bootplatte erzeugen.</para>

      <example>
	<title>Die Partitionen einer Bootplatte labeln</title>

	<para>Durch das Erstellen von permanenten Labeln für die
	  Partitionen einer Bootplatte sollte das System selbst dann noch
	  normal starten können, wenn Sie die Platte an einen
	  anderen Controller anschließen oder in ein anderes
	  System installieren.  In diesem Beispiel nehmen wir an, dass
	  nur eine einzige <acronym>ATA</acronym>-Platte verwendet wird,
	  die Ihr System derzeit als <devicename>ad0</devicename>
	  erkennt.  Weiters nehmen wir an, dass Sie das
	  Standard-Partionierungsschema von &os; vewendet haben und Ihre
	  Platte daher die Dateisysteme
	  <filename class="directory">/</filename>,
	  <filename class="directory">/var</filename>,
	  <filename class="directory">/usr</filename> sowie
	  <filename class="directory">/tmp</filename> aufweist.
	  Zusätzlich wurde eine Swap-Partition angelegt.</para>

	<para>Starten Sie das System neu.  Am &man.loader.8;-Prompt
	  drücken Sie die Taste <keycap>4</keycap>, um in den
	  Single-User-Modus zu gelangen.  Dort führen Sie die
	  folgenden Befehle aus:</para>

	<screen>&prompt.root; <userinput>glabel label rootfs /dev/ad0s1a</userinput>
GEOM_LABEL: Label for provider /dev/ad0s1a is label/rootfs
&prompt.root; <userinput>glabel label var /dev/ad0s1d</userinput>
GEOM_LABEL: Label for provider /dev/ad0s1d is label/var
&prompt.root; <userinput>glabel label usr /dev/ad0s1f</userinput>
GEOM_LABEL: Label for provider /dev/ad0s1f is label/usr
&prompt.root; <userinput>glabel label tmp /dev/ad0s1e</userinput>
GEOM_LABEL: Label for provider /dev/ad0s1e is label/tmp
&prompt.root; <userinput>glabel label swap /dev/ad0s1b</userinput>
GEOM_LABEL: Label for provider /dev/ad0s1b is label/swap
&prompt.root; <userinput>exit</userinput></screen>

	<para>Das System startet daraufhin in den Multi-User-Modus.
	  Nachdem der Startvorgang abgeschlossen ist, editieren Sie die
	  Datei <filename>/etc/fstab</filename> und ersetzen die
	  konventionellen Gerätedateien durch die entsprechenden
	  Label.  Ihre modifizierte <filename>/etc/fstab</filename>
	  sollte nun ähnlich der folgenden Ausgabe aussehen:</para>

	<programlisting># 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       2</programlisting>

	<para>Starten Sie Ihr System neu.  Traten keine Probleme auf,
	  wird das System normal hochfahren und Sie erhalten die folgende
	  Ausgabe, wenn Sie den Befehl <command>mount</command>
	  ausführen:</para>

	<screen>&prompt.root; <userinput>mount</userinput>
/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)</screen>
      </example>

      <para>Beginnend mit &os;&nbsp;7.2, unterstützt
	&man.glabel.8; einen neuen Labeltyp für
	<acronym>UFS</acronym>-Dateisysteme.  Dieser basiert auf der
	eindeutigen Dateisystem-ID <literal>ufsid</literal>.
	Derartige Label finden sich im Verzeichnis
	<filename class="directory">/dev/ufsid</filename> und werden
	während des Systemstarts automatisch erzeugt.  Es ist
	möglich, diese <literal>ufsid</literal>-Label zum
	automatischen Einhängen von Partitionen in der Datei
	<filename>/etc/fstab</filename> einzusetzen.  Verwenden Sie
	den Befehl <command>glabel status</command>, um eine Liste
	aller Dateisysteme und ihrer <literal>ufsid</literal>-Label
	zu erhalten:</para>

      <screen>&prompt.user; <userinput>glabel status</userinput>
                  Name  Status  Components
ufsid/486b6fc38d330916     N/A  ad4s1d
ufsid/486b6fc16926168e     N/A  ad4s1f</screen>

      <para>In diesem Beispiel repräsentiert
	<devicename>ad4s1d</devicename> das
	<filename class="directory">/var</filename>-Dateisystem,
	während <devicename>ad4s1f</devicename> dem
	<filename class="directory">/usr</filename>-Dateisystem
	entspricht.  Wenn Sie die angegebenen
	<literal>ufsid</literal>-Werte verwenden, können
	diese Dateisysteme durch die folgenden Einträge in
	der Datei <filename>/etc/fstab</filename> gemountet
	werden:</para>

      <programlisting>/dev/ufsid/486b6fc38d330916        /var        ufs        rw        2      2
/dev/ufsid/486b6fc16926168e        /usr        ufs        rw        2      2</programlisting>

      <para>Jede Partition, die ein <literal>ufsid</literal>-Label
	aufweist, kann auf diese Art gemountet werden.  Dies hat
	den Vorteil, dass Sie keine permanenten Label mehr anlegen
	müssen, wobei sich die Platten nach wie vor über
	geräteunabhängige Namen ansprechen und mounten
	lassen.</para>
    </sect2>
  </sect1>

  <sect1 id="geom-gjournal">
    <title>UFS Journaling in GEOM</title>

    <indexterm>
      <primary>GEOM</primary>
    </indexterm>
    <indexterm>
      <primary>Journaling</primary>
    </indexterm>

    <para>Mit &os;&nbsp;7.0 wurde eine lang erwartete Funktion,
      das Journaling, implementiert.  Diese Funktion wird über
      das <acronym>GEOM</acronym>-Subsystem realisiert und kann
      über das Werkzeug &man.gjournal.8; eingerichtet
      werden.</para>

    <para>Was ist Journaling?  Bei Journaling wird ein Protokoll
      über alle Dateisystemtransaktionen angelegt, inklusive
      aller Veränderungen, aus denen ein kompletter
      Schreibvorgang besteht, bevor diese Änderungen (Metadaten
      sowie tatsächliche Schreibvorgänge) physisch auf
      der Festplatte ausgeführt werden.  Dieses Protokoll kann
      später erneut aufgerufen werden, um diese Vorgänge
      zu wiederholen (beispielsweise um Systeminkonsistenzen zu
      vermeiden).</para>

    <para>Diese Technik bietet eine weitere Möglichkeit,
      sich vor Datenverlust und Dateisystem-Inkonsistenzen zu
      schützen.  Im Gegensatz zu Soft Updates (die
      Metadaten-Aktualisierungen verfolgen und erzwingen) und
      Snapshots (die ein Image eines Dateisystems darstellen) wird
      bei Journaling ein tatsächliches Protokoll in einem
      speziell dafür bereitgestellten Bereich der Festplatte
      (oder manchmal sogar auf einer separaten Platte)
      gespeichert.</para>

    <para>Im Gegensatz zu anderen Journaling-Dateisystemen arbeitet
      die <command>gjournal</command>-Methode blockbasiert und wurde
      nicht als Teil des Dateisystems implementiert, sondern als
      <acronym>GEOM</acronym>-Erweiterung.</para>

    <para>Um die <command>gjournal</command>-Unterstützung zu
      aktivieren, muss der &os;-Kernel die folgende Option enthalten
      (was seit &os;&nbsp;7.0 bereits in der Voreinstellung der Fall
      ist):</para>

    <programlisting>options	UFS_GJOURNAL</programlisting>

    <para>Um ein Volume mit Journalunterstützung beim Systemstart
      automatisch zu mounten,  muss das Kernelmodul
      <filename>geom_journal.ko</filename> ebenfalls automatisch geladen
      werden (durch einen entsprechenden Eintrag in der Datei
      <filename>/boot/loader.conf</filename>):</para>

    <programlisting>geom_journal_load="YES"</programlisting>

    <para>Alternativ können Sie auch einen angepassten Kernel
      bauen, der diese Funktionalität enthält, indem Sie die
      folgende Zeile in Ihrer Kernelkonfigurationsdatei
      aufnehmen:</para>

    <programlisting>options     GEOM_JOURNAL</programlisting>

    <para>Das Anlegen eines neuen Journals auf einem freien Dateisystem
      erfolgt durch die folgenden Schritte (im Folgenden wird
      angenommen, dass es sich bei <devicename>da4</devicename> um
      eine neue <acronym>SCSI</acronym>-Platte handelt):</para>

    <screen>&prompt.root; <userinput>gjournal load</userinput>
&prompt.root; <userinput>gjournal label /dev/da4</userinput></screen>

    <para>Danach sollten die Gerätedateien
      <devicename>/dev/da4</devicename> sowie
      <devicename>/dev/da4.journal</devicename> vorhanden sein.  Nun
      können Sie auf diesem Gerät ein Dateisystem
      anlegen:</para>

    <screen>&prompt.root; <userinput>newfs -O 2 -J /dev/da4.journal</userinput></screen>

    <para>Dieser Befehl erzeugt ein <acronym>UFS</acronym>2-Dateisystem
      auf dem Gerät, für das im letzten Schritt das
      Journaling aktiviert wurde.</para>

    <para>Danach hängen Sie das neue Dateisystem mit
      <command>mount</command> in Ihren Verzeichnisbaum ein:</para>

    <screen>&prompt.root; <userinput>mount /dev/da4.journal <replaceable>/mnt</replaceable></userinput></screen>

    <note>
      <para>Falls auf Ihrem System mehrere Slices angelegt sind
	(beispielsweise <devicename>ad4s1</devicename> sowie
	<devicename>ad4s2</devicename>), wird
	<command>gjournal</command> für jedes Slice ein
	Journal anlegen (also <devicename>ad4s1.journal</devicename>
	sowie <devicename>ad4s2.journal</devicename>).</para>
    </note>

    <para>Um die Leistung zu optimieren, kann das Journal auf eine
      externe Platte ausgelagert werden.  In einem solchen Fall
      geben Sie die Gerätedatei der Platte nach dem Gerät
      an, für das Sie Journaling aktivieren wollen.
      Theoretisch ist es auch möglich, Journaling auf bereits
      existierenden Dateisystemen durch das Werkzeug
      <command>tunefs</command> zu aktivieren.  Machen Sie aber
      in jedem Fall ein Backup Ihrer Daten, bevor Sie versuchen,
      ein existierendes Dateisystem zu ändern.
      <command>gjournal</command> wird zwar den Vorgang abbrechen,
      wenn es das Journal nicht erzeugen kann, allerdings schützt
      Sie dies nicht vor Datenverlust durch einen fehlerhaften Einsatz
      von <command>tunefs</command>.</para>

    <para>Es ist möglich, Journale auch für die Bootplatte
      eines &os;-System zu verwenden.  Lesen Sie bitte den Artikel
      <ulink
      url="&url.articles.gjournal-desktop.en;/article.html">
      Implementing UFS Journaling on a Desktop PC</ulink>, wenn Sie
      an einer derartigen Konfiguration interessiert sind.</para>
  </sect1>
</chapter>