<?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 — Master Boot Records, <acronym>BSD</acronym>-Label usw. — 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>>> /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"' >> /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; 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"' >> /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; 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; 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; 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>