Tom Rhodes Written by GEOM: Modulares Framework für Plattentransformation Synopsis GEOM GEOM Disk Framework GEOM Dieses Kapitel behandelt die Nutzung von Laufwerken mit dem GEOM-Framework in &os;. Dies beinhaltet auch die wichtigen RAID -Ü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 SEE ALSO-Verweise bereitgestellt. Dieses Kapitel ist auch kein ausführlicher Führer für RAID-Konfigurationen. Nur durch GEOM unterstützte RAID-Klassen werden erörtert. Nach Lesen dieses Kapitels werden Sie folgendes wissen: Welche Art von RAID-Unterstützung durch GEOM verfügbar ist. Wie man die Basis-Dienstprogramme nutzt, um verschiedene RAID-Stufen zu konfigurieren, zu manipulieren und zu warten. Wie man mittels GEOM spiegelt, striped, verschlüsselt und entfernte Laufwerke verbindet. Wie man an Laufwerken, welche an das GEOM-Framework angeschlossen sind, Fehler behebt. Bevor Sie dieses Kapitel lesen, sollten Sie: Verstehen, wie &os; Laufwerke behandelt (). Wissen wie man einen neuen &os;-Kernel installiert und konfiguriert (). Einführung in GEOM GEOM erlaubt den Zugriff und die Kontrolle von Klassen — Master Boot Records, BSD-Label usw. — durch die Nutzung von Datenträgern (Providern) oder den besonderen Dateien in /dev. Verschiedene Software RAID-Konfigurationen unterstützend wird GEOM Ihnen transparenten Zugriff auf das Betriebssystem und System-Dienstprogramme gewähren. Tom Rhodes Written by Murray Stokely RAID0 - Striping GEOM Striping 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 stellt Unterstützung für Software-RAID0 zur Verfügung, welches auch als Striping bekannt ist. In einem RAID0-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, daß 256K auf ein einzelnes Laufwerk geschrieben werden, kann ein RAID0-System gleichzeitig 64K auf jedes von 4 Laufwerken schreiben mit entsprechend besserer I/O-Leistung. Dieser Durchsatz kann noch durch die Verwendung mehrerer Controller zusätzlich gesteigert werden. Jedes Laufwerk in einem RAID0-Stripe muß die gleiche Größe haben, da I/O-Anforderungen für das Lesen und Schreiben abwechselnd auf mehrere Laufwerke parallel erfolgen. Disk Striping Illustration Erzeugen eines Stripe von unformatierten ATA-Platten Laden Sie das geom_stripe -Modul: &prompt.root; kldload geom_stripe Stellen Sie sicher, daß ein geeigneter Mount-Punkt Existiert. Falls dieser Datenträger eine Root-Partition werden soll, dann nutzen Sie zeitweise einen anderen Mount-Punkt wie z.B. /mnt: &prompt.root; mkdir /mnt Bestimmen Sie die Gerätenamen derjenigen Platten, welche gestriped werden sollen, und erzeugen Sie ein neues Stripe-Gerät. um zum Beispiel zwei unbenutzte und unpartitionierte ATA-Platten zu stripen Im Falle von /dev/ad2 und /dev/ad3: &prompt.root; gstripe label -v st0 /dev/ad2 /dev/ad3 Schreiben Sie einen Standard-Label, auch als Partitions-Tabelle bekannt, auf den neuen Datenträger und installieren Sie den normalen Bootstrap-Code: &prompt.root; bsdlabel -wB /dev/stripe/st0 Dieser Prozess sollte zwei weitere Geräte im Verzeichnis /dev/stripe zusätzlich zum Gerät st0 erzeugt haben. Diese schliessen st0a und st0c ein. Nun kann ein Dateisystem auf dem Gerät st0a mit dem newfs-Dienstprogramm erzeugt werden: &prompt.root; newfs -U /dev/stripe/st0a Viele Zahlen rauschen nun über Ihren Bildschirm und nach ein paar Sekunden wird der Prozess abgeschlossen sein. Der Datenträger wurde erzeugt und ist bereit, um gemountet zu werden. Um das erzeugte Stripe manuell zu mounten: &prompt.root; mount /dev/stripe/st0a /mnt Um das erzeugte Dateisystem automatisch während des Startvorgangs zu mounten, müssen Sie die Datenträger-Information in die Datei /etc/fstab schreiben: &prompt.root; echo "/dev/stripe/st0a /mnt ufs rw 2 2" \ >> /etc/fstab Das geom_stripe-Modul muß ebenfalls automatisch beim Systemstart geladen werden durch Hinzufügung folgender Zeile zu /boot/loader.conf: &prompt.root; echo 'geom_stripe_load="YES"' >> /boot/loader.conf RAID1 - Spiegelung GEOM Disk Mirroring T 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, daß PlatteB die PlatteA dupliziert. Oder PlatteC+D duplizieren PlatteA+A. Der wichtigste Aspekt ist, daß 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. Stellen Sie zu Beginn sicher, daß ihr System zwei Platten mit identischer Größe aufweist. In dieser Übung gehen wir davon aus, daß es direkt zugängliche (&man.da.4;) SCSI-Platten sind. Beginnen Sie mit der Installation von &os; auf die erste Platte mit nur 2 Partitionen. Eine soll eine Swap-Partition sein mit der doppelten Größe des RAM und der gesamte verbelibende Rest soll für Root-Dateisystem (/) genutzt werden. Es ist möglich separate Platten für andere Mount-Punkte zu verwenden, dies wird jedoch den Schwierigkeitgrad verzehnfachen durch das händische Abändern der Einstellungen von &man.bsdlabel.8; und &man.fdisk.8;. Starten Sie neu und warten Sie ab, bis das System vollständig initalisiert ist. Sobald der Prozess abgeschlossen ist loggen Sie sich bitte als Nutzer root ein. Erzeugen Sie das Gerät /dev/mirror/gm und verbinden Sie es mit /dev/da1: &prompt.root; gmirror label -vnb round-robin gm0 /dev/da1 Das System sollte folgendermassen anworten: Metadata value stored on /dev/da1. Done. Initialisieren Sie GEOM, dies wird durch das /boot/kernel/geom_mirror.ko-Kernelmodul laden: &prompt.root; gmirror load Dieser Befehl sollte den gm0 Geräte-Knotenpunkt (device node) unter dem Verzeichnis /dev/mirror erzeugt haben. Instalieren Sie den typischen fdisk-Label und Boot-Code auf dem neuen Gerät gm0: &prompt.root; fdisk -vBI /dev/mirror/gm0 Installieren Sie nun die typische bsdlabel -Information: &prompt.root; bsdlabel -wB /dev/mirror/gm0s1 Falls mehrere Slices und Partitionen existieren, ist es erforderlich die Flags für die zwei obigen Befehle abzuändern. Sie müssen die exakte Slice- und Partitionsgröße der anderen Platte wiedergeben. Nutzen Sie das Dienstprogramm &man.newfs.8;, um ein UFS-Dateisystem auf dem Geräte-Knotenpunkt gm0s1a zu erzeugen: &prompt.root; newfs -U /dev/mirror/gm0s1a Dies sollte das System dazu veranlasst haben einige Informationen und ein Bündel von Zahlen auszugeben. Das ist gut so. Suchen Sie den Bildschirm nach etwaigen Fehlermeldungen ab und hängen Sie das Gerät zum Mount-Punkt /mnt ein: &prompt.root; mount /dev/mirror/gm0s1a /mnt Verschieben Sie nun alle Daten von der Startplatte zu diesem neuen Dateisystem. Dieses Beispiel nutzt die Befehle &man.dump.8; und &man.restore.8;, allerdings würde auch &man.dd.1; in diesem Szenario funktionieren. &prompt.root; dump -L -0 -f- / |(cd /mnt && restore -r -v -f-) Dies muß für jedes Dateisystem durchgeführt werden. Verschieben Sie einfach das geeignete Dateisystem auf den richtigen Platz durch Nutzung des obigen Befehls. Bearbeiten Sie nun die duplizierte Datei /mnt/etc/fstab und entfernen oder auskommentieren Sie die Swap-Datei Es sollte angemerkt werden, daß das Auskommentieren der Swap-Datei in der fstab höchstwahrscheinlich eine andere Art nach sich zieht, wie Swap-Platz zur Verfügung gestellt wird. Lesen Sie hierzu bitte für weitergehende Informationen. . Ändern Sie die anderen Dateisystem-Informationen, um die neue Platte zu nutzen, wie im folgenden Beispiel gezeigt: # Device Mountpoint FStype Options Dump Pass# #/dev/da0s2b none swap sw 0 0 /dev/mirror/gm0s1a / ufs rw 1 1 Erzeugen Sie nun eine neue boot.config-Datei auf der laufenden wie auf der neuen Root-Partition. Diese Datei wird dem BIOS des Systems helfen vom richtigen Laufwerk zu starten: &prompt.root; echo "1:da(1,a)/boot/loader" > /boot.config &prompt.root; echo "1:da(1,a)/boot/loader" > /mnt/boot.config Wir haben es auf beiden Root-Partitionen erzeugt, um sicherzustellen, daß der Startvorgang richtig abläuft. Falls aus irgendeinem Grunde das System nicht von der neuen Root-Partition lesen kann ist eine Ausweichmöglichkeit vorhanden. Vergewissern Sie sich, daß das Modul geom_mirror.ko beim Starten geladen wird durch Ausführung dieses Befehls: &prompt.root; echo 'geom_mirror_load="YES"' >> /mnt/boot/loader.conf Starten Sie das System neu: &prompt.root; shutdown -r now Wenn alles glatt gegangen ist, sollte das System vom Gerät gm0s1a gestartet sein und eine Eingabeaufforderung sollte auf Sie warten. Falls etwas schief gegangen ist, lesen Sie bitte den folgenden Abschnitt Fehlerbehebung. Fügen Sie nun das Laufwerk da0 dem Gerät gm0 hinzu. &prompt.root; gmirror configure -a gm0 &prompt.root; gmirror insert gm0 /dev/da0 Das Flag weist &man.gmirror.8; an automatische Synchronisation zu nutzen; d.h. alle Schreibvorgänge werden automatisch gespiegelt. Die Manualpage erklärt, wie Platten ausgetauscht bzw. wiederhergestelt werden. Sie nutzt allerdings data anstelle von gm0 in unserem Beispiel. Fehlerbehebung Das System weigert sich zu starten Falls das System startet und eine Eingabeaufforderung erscheint ähnlich wie: ffs_mountroot: can't find rootvp Root mount failed: 6 mountroot> 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: OK? load geom_mirror OK? boot Falls dies funktioniert wurde das Modul aus welchen Gründen auch immer nicht richtig geladen. Setzen Sie: options GEOM_MIRROR in die Konfigurationsdatei des Kernels und führen Sie einen Rebuild und eine erneute Installation durch. Dies sollte das Problem beseitigen. GEOM Gate Netzwerkgeräte GEOM unterstützt die Verwendung entfernter Geräte wie Festplatten, CD-ROMs, Dateien usw. mittels Nutzung der Gate-Dienstprogramme. Dies ist vergleichbar mit NFS. Zu Beginn muß 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 SCSI-Platte zu exportieren, ist die folgende Datei /etc/gg.exports mehr als ausreichend: 192.168.1.0/24 RW /dev/da0s4d Sie wird allen Hosts innerhalb des privaten Netzwerkes Zugriff auf das Dateisystem auf der Partition da0s4d erlauben. Um dieses Gerät zu exportieren stellen Sie bitte sicher, daß es momentan nicht gemounted ist und starten Sie den &man.ggated.8; Server-Daemon: &prompt.root; ggated Um nun mount auf der Client-Maschine auszuführen geben Sie bitte die folgenden Befehle ein: &prompt.root; ggatec create -o rw 192.168.1.1 /dev/da0s4d ggate0 &prompt.root; mount /dev/ggate0 /mnt Von nun an kann auf das Gerät durch den Mount-Punkt /mnt zugegriffen werden. Es sollte darauf hingewiesen werden, daß dies scheitern wird, falls das Gerät momentan entweder auf dem Server oder irgendeiner anderen Maschine gemountet ist. Wenn das Gerät nicht länger gebraucht wird, dann kann es sicher mit dem Befehl &man.umount.8; ausgehängt werden genauso wie jedes andere Laufwerk. Das Labeln von Laufwerken GEOM Disk Labels 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 Geräte wirft einige Fragen auf, zum Beispiel was passiert, falls ein neues Laufwerk mittels USB hinzugefügt wird? Es ist sehr wahrscheinlich, daß ein Flash-Speicher-Gerät den Gerätenamen da0 erhält während gleichzeitig das bisherige da0 zu da1 wird. Dies verursacht Probleme beim Einhängen von Dateisystemen, wenn diese in der /etc/fstab aufgeführt sind und schlussendlich mag das auch dazu führen, daß das System nicht mehr startet. Eine Lösung für dieses Problem ist das Aneinanderketten der SCSI-Geräte, damit ein neues Gerät, welches der SCSI-Karte hinzugefügt wird, unbenutzte Gerätenummern erhält. Aber was geschieht, wenn ein USB-Gerät möglicherweise die primäre SCSI-Platte ersetzt? Dies kann passieren, weil USB-Geräte normalerweise vor der SCSI-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 ATA-Laufwerk zu nutzen und die SCSI-Geräte niemals in der /etc/fstab aufzuführen. Eine bessere Lösung ist verfügbar. Durch Verwendung des glabel-Dienstprogramms kann ein Administrator oder Nutzer seine Laufwerke mit Labeln versehen und diese in der /etc/fstab nutzen. Da glabel seine Label im letzten Sektor jedes vorhandenen Datenträgers speichert, wird das Label persistent bleiben ü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. Der Label muß permanent (dauerhaft) sein. Man kann Das Dienstprogramm glabel 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. Label-Typen und Beispiele Es gibt zwei Arten von Labeln: generische Label und Dateisystem-Label. Der Unterschied zwischen beiden ist die automatische Erkennung bei dauerhaften Labeln und die Tatsache, daß dieser Typ von Labeln persistent über Neustarts hinweg ist. Diese Label erhalten ein spezielles Verzeichnis in /dev, welches auf Basis der Dateisystem-Art benannt wird. UFS2-Dateisystem-Label werden zum Beispiel im Verzeichnis /dev/ufs2 angelegt. Ein generischer Label verschwindet mit dem nächsten Systemstart. Diese Label werden im Verzeichnis /dev/label erzeugt und sind ideal für Testzwecke. Permanente Label können mit den Dienstprogrammen tunefs oder newfs auf dem Dateisystem erzeugt werden. Um ein permanentes Label auf einem UFS2-Dateisystem ohne Löschung von Daten zu erzeugen, kann man folgenden Befehl verwenden: &prompt.root; tunefs -L home /dev/da3 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. Ein Label sollte nun in class="directory">/dev/ufs2 vorhanden sein, der zu /etc/fstab hinzugefügt wird: /dev/ufs2/home /home ufs rw 2 2 Das Dateisystem darf nicht gemountet sein beim Versuch tunefs auszuführen. Nun kann das Dateisystem wie üblich gemountet werden: &prompt.root; mount /home Der folgende Befehl kann genutzt werden, um das Label zu beseitigen: &prompt.root; glabel destroy home Von nun an kann der Geräte-Knotenpunkt sIch ohne negative effekte auf das System ändern, solange das Kernelmodul geom_label.ko beim Systemstart mittels /boot/loader.conf geladen wird oder die GEOM_LABEL -Kernel-Option aktiv ist. Dateisysteme können auch mit einem Standard-Label erzeugt werden mittels des Flags in newfs. Lesen Sie bitte die Manualpage von &man.newfs.8; für weitere Informationen.