<?xml version="1.0" encoding="iso-8859-1"?> <!-- The FreeBSD Documentation Project The FreeBSD German Documentation Project $FreeBSD$ $FreeBSDde: de-docproj/books/handbook/disks/chapter.xml,v 1.187 2012/04/26 19:32:48 bcr Exp $ basiert auf: r51746 --> <chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" xml:id="disks"> <info> <title>Speichermedien</title> <authorgroup> <author> <personname> <firstname>Bernd</firstname> <surname>Warken</surname> </personname> <contrib>Übersetzt von </contrib> </author> <author> <personname> <firstname>Martin</firstname> <surname>Heinen</surname> </personname> </author> </authorgroup> </info> <sect1 xml:id="disks-synopsis"> <title>Übersicht</title> <para>Dieses Kapitel behandelt die Benutzung von Laufwerken unter &os;. Hierzu zählen <acronym>SCSI</acronym>- und <acronym>IDE</acronym>-Geräte, <acronym>CD</acronym>- und <acronym>DVD</acronym>-Medien, speicherbasierte Laufwerke und <acronym>USB</acronym>-Geräte.</para> <para>Nachdem Sie dieses Kapitel gelesen haben, werden Sie Folgendes wissen:</para> <itemizedlist> <listitem> <para>Wie Sie zusätzliche Laufwerke zu einem &os;-System hinzufügen.</para> </listitem> <listitem> <para>Wie Sie unter &os; die Partition einer Festplatte vergrößern.</para> </listitem> <listitem> <para>Wie Sie &os; zur Verwendung von <acronym>USB</acronym>-Speichermedien konfigurieren.</para> </listitem> <listitem> <para>Wie Sie <acronym>CD</acronym>- und <acronym>DVD</acronym>-Medien unter &os; benutzen.</para> </listitem> <listitem> <para>Wie Sie die unter &os; erhältlichen Backup-Programme benutzen.</para> </listitem> <listitem> <para>Wie Sie RAM-Disks einrichten.</para> </listitem> <listitem> <para>Was Dateisystem-Schnappschüsse sind und wie sie effizient eingesetzt werden.</para> </listitem> <listitem> <para>Wie Sie mit Quotas die Benutzung von Laufwerken einschränken.</para> </listitem> <listitem> <para>Wie Sie Festplatten und Swap verschlüsseln, um Daten vor Angreifern zu schützen.</para> </listitem> <listitem> <para>Wie Sie ein hochverfügbares Speichernetzwerk konfigurieren.</para> </listitem> </itemizedlist> <para>Bevor Sie dieses Kapitel lesen,</para> <itemizedlist> <listitem> <para>sollten Sie wissen, wie Sie einen <link linkend="kernelconfig">neuen &os;-Kernel konfigurieren und installieren</link>.</para> </listitem> </itemizedlist> </sect1> <sect1 xml:id="disks-adding"> <info> <title>Hinzufügen von Laufwerken</title> <authorgroup> <author> <personname> <firstname>David</firstname> <surname>O'Brian</surname> </personname> <contrib>Im Original von </contrib> </author> </authorgroup> </info> <indexterm> <primary>Laufwerke</primary> <secondary>hinzufügen</secondary> </indexterm> <para>Dieser Abschnitt beschreibt, wie Sie ein neues <acronym>SATA</acronym>-Laufwerk zu einer Maschine hinzufügen, die momentan nur ein Laufwerk hat. Dazu schalten Sie zuerst den Rechner aus und installieren das Laufwerk entsprechend der Anleitungen Ihres Rechners, Ihres Controllers und des Laufwerkherstellers. Starten Sie das System neu und melden Sie sich als Benutzer <systemitem class="username">root</systemitem> an.</para> <para>Kontrollieren Sie <filename>/var/run/dmesg.boot</filename>, um sicherzustellen, dass das neue Laufwerk gefunden wurde. In diesem Beispiel erscheint das neu hinzugefügte <acronym>SATA</acronym>-Laufwerk als <filename>ada1</filename>.</para> <indexterm><primary>Partitionen</primary></indexterm> <indexterm> <primary><command>gpart</command></primary> </indexterm> <para>In diesem Beispiel wird eine einzige große Partition auf der Festplatte erstellt. Verwendet wird das <link xlink:href="https://de.wikipedia.org/wiki/GUID_Partition_Table"> <acronym>GPT</acronym></link>-Partitionsschema, welches gegenüber dem älteren und weniger vielseitigen <acronym>MBR</acronym>-Schema bevorzug wird.</para> <note> <para>Wenn die hinzugefügte Festplatte nicht leer ist, können alte Partitionsinformationen mit <command>gpart delete</command> entfernt werden. Details finden Sie in &man.gpart.8;.</para> </note> <para>Zuerst wird das Partitionsschema erstellt und dann eine einzelne Partition angefügt. Zur Verbesserung der Leistung auf neueren Festplatten mit größeren Blockgrößen, wird die Partition an einer Megabyte-Grenze ausgerichtet:</para> <screen>&prompt.root; <userinput>gpart create -s GPT ada1</userinput> &prompt.root; <userinput>gpart add -t freebsd-ufs -a 1M ada1</userinput></screen> <para>Je nach Anwendung kann es wünschenswert sein, mehrere kleinere Partitionen zu haben. In &man.gpart.8; finden Sie Optionen zum Erstellen von kleineren Partitionen.</para> <para>Informationen über die Partitionen der Festplatte werden mit <command>gpart show</command> angezeigt:</para> <screen>&prompt.user; <userinput>gpart show ada1</userinput> => 34 1465146988 ada1 GPT (699G) 34 2014 - free - (1.0M) 2048 1465143296 1 freebsd-ufs (699G) 1465145344 1678 - free - (839K)</screen> <para>Ein Dateisystem wird in der neuen Partition erstellt:</para> <screen>&prompt.root; <userinput>newfs -U /dev/ada1p1</userinput></screen> <para>Ein leeres Verzeichnis wird als Mountpunkt erstellt, also ein Speicherort für die Montage der neuen Festplatte im originalen Dateisystem:</para> <screen>&prompt.root; <userinput>mkdir /newdisk</userinput></screen> <para>Abschließend wird ein Eintrag in <filename>/etc/fstab</filename> hinzugefügt, damit die neue Festplatte automatisch beim Start eingehängt wird:</para> <programlisting>/dev/ada1p1 /newdisk ufs rw 2 2</programlisting> <para>Die neue Festplatte kann manuell montiert werden, ohne das System neu zu starten:</para> <screen>&prompt.root; <userinput>mount /newdisk</userinput></screen> </sect1> <sect1 xml:id="disks-growing"> <info> <title>Partitionen vergrößern</title> <authorgroup> <author> <personname> <firstname>Allan</firstname> <surname>Jude</surname> </personname> <contrib>Beigetragen von </contrib> </author> </authorgroup> <authorgroup> <author> <personname> <firstname>Björn</firstname> <surname>Heidotting</surname> </personname> <contrib>Übersetzt von </contrib> </author> </authorgroup> </info> <indexterm> <primary>Partitionen</primary> <secondary>vergrößern</secondary> </indexterm> <para>Die Kapazität einer Festplatte kann sich ohne Änderungen an bereits vorhandenen Daten erhöhen. Dies geschieht üblicherweise mit virtuellen Maschinen, wenn sich herausstellt, dass die virtuelle Festplatte zu klein ist und vergrößert werden soll. Zuweilen wird auch ein Abbild einer Platte auf einen <acronym>USB</acronym>-Stick geschrieben, ohne dabei die volle Kapazität zu nutzen. Dieser Abschnitt beschreibt, wie man Platten vergrößert, bzw. <emphasis>erweitert</emphasis>, um die Vorteile der erhöhten Kapazität zu nutzen.</para> <para>Überprüfen Sie <filename>/var/run/dmesg.boot</filename>, um den Gerätenamen der Festplatte zu bestimmen, die vergrößert werden soll. In diesem Beispiel gibt es nur eine <acronym>SATA</acronym>-Festplatte im System, so dass die Platte als <filename>ada0</filename> angezeigt wird.</para> <indexterm><primary>Partitionen</primary></indexterm> <indexterm> <primary><command>gpart</command></primary> </indexterm> <para>Um die aktuelle Konfiguration der Partitionen auf der Festplatte anzuzeigen:</para> <screen>&prompt.root; <userinput>gpart show <replaceable>ada0</replaceable></userinput> => 34 83886013 ada0 GPT (48G) [CORRUPT] 34 128 1 freebsd-boot (64k) 162 79691648 2 freebsd-ufs (38G) 79691810 4194236 3 freebsd-swap (2G) 83886046 1 - free - (512B)</screen> <note> <para>Wenn die Festplatte mit dem <link xlink:href="http://en.wikipedia.org/wiki/GUID_Partition_Table"> <acronym>GPT</acronym></link>-Partitionsschema formatiert wurde kann es vorkommen, dass sie als <quote>corrupted</quote> angezeigt wird, weil sich die Sicherung der <acronym>GPT</acronym>-Partitionstabellen nicht mehr am Ende des Laufwerks befinden. Reparieren Sie in so einem Fall die Partitionstabelle mit <command>gpart</command>:</para> <screen>&prompt.root; <userinput>gpart recover <replaceable>ada0</replaceable></userinput> ada0 recovered</screen> </note> <para>Nun steht der zusätzliche Speicherplatz zur Verfügung und kann verwendet werden, um eine neue Partition anzulegen oder eine bestehende Partition zu erweitern:</para> <screen>&prompt.root; <userinput>gpart show <replaceable>ada0</replaceable></userinput> => 34 102399933 ada0 GPT (48G) 34 128 1 freebsd-boot (64k) 162 79691648 2 freebsd-ufs (38G) 79691810 4194236 3 freebsd-swap (2G) 83886046 18513921 - free - (8.8G)</screen> <para>Partitionen können nur auf zusammenhängenden, freien Speicherplatz vergrößert werden. In diesem Beispiel wird die letzte Partition der Platte als Swap-Speicher genutzt, aber die zweite Partition ist die, dessen Größe verändert werden soll. Weil der Swap-Speicher nur temporäre Daten enthält, kann er gefahrlos ausgehangen, gelöscht und nachdem die zweite Partition vergrößert wurde, als dritte Partition neu erstellt werden.</para> <para>Deaktivieren Sie Swap-Speicher Partition:</para> <screen>&prompt.root; <userinput>swapoff <replaceable>/dev/ada0p3</replaceable></userinput></screen> <para>Löschen Sie die dritte Partition, angegeben mit dem Schalter <option>-i</option>, der Festplatte <replaceable>ada0</replaceable>:</para> <screen>&prompt.root; <userinput>gpart delete -i <replaceable>3</replaceable> <replaceable>ada0</replaceable></userinput> ada0p3 deleted &prompt.root; <userinput>gpart show <replaceable>ada0</replaceable></userinput> => 34 102399933 ada0 GPT (48G) 34 128 1 freebsd-boot (64k) 162 79691648 2 freebsd-ufs (38G) 79691810 22708157 - free - (10G)</screen> <warning> <para>Es besteht die Gefahr von Datenverlust, wenn die Partitionstabelle eines eingehangenen Dateisystems verändert wird. Es empfiehlt sich daher, die folgenden Schritte auf einem ausgehangenen Dateisystem durchzuführen, während die Umsetzung über eine Live-<acronym>CD-ROM</acronym> oder von einem <acronym>USB</acronym>-Gerät erfolgt. Wenn es jedoch absolut notwendig ist, kann ein eingehangenes Dateisystem auch vergrößert werden, nachdem die Sicherheitsfunktionen von GEOM deaktiviert wurden:</para> <screen>&prompt.root; <userinput>sysctl kern.geom.debugflags=16</userinput></screen> </warning> <para>Vergrößern Sie die Partition und lassen Sie Platz, um die Swap-Partition in der gewünschten Größe neu erstellen zu können. Die zu ändernde Partition wird mit <option>-i</option> und die neue gewünschte Größe mit <option>-s</option> angegeben. Optional wird die Ausrichtung der Partition mit <option>-a</option> festgelegt. Dieser Schritt ändert nur die Größe der Partition. Das Dateisystem innerhalb der Partition wird in einem separaten Schritt erweitert.</para> <screen>&prompt.root; <userinput>gpart resize -i <replaceable>2</replaceable> -s <replaceable>47G</replaceable> -a 4k <replaceable>ada0</replaceable></userinput> ada0p2 resized &prompt.root; <userinput>gpart show <replaceable>ada0</replaceable></userinput> => 34 102399933 ada0 GPT (48G) 34 128 1 freebsd-boot (64k) 162 98566144 2 freebsd-ufs (47G) 98566306 3833661 - free - (1.8G)</screen> <para>Erstellen Sie die Swap-Partition neu und aktivieren Sie sie:</para> <screen>&prompt.root; <userinput>gpart add -t freebsd-swap -a 4k <replaceable>ada0</replaceable></userinput> ada0p3 added &prompt.root; <userinput>gpart show <replaceable>ada0</replaceable></userinput> => 34 102399933 ada0 GPT (48G) 34 128 1 freebsd-boot (64k) 162 98566144 2 freebsd-ufs (47G) 98566306 3833661 3 freebsd-swap (1.8G) &prompt.root; <userinput>swapon <replaceable>/dev/ada0p3</replaceable></userinput></screen> <para>Erweitern Sie das <acronym>UFS</acronym>-Dateisystem, um die Kapazität der vergrößerten Partition zu nutzen:</para> <screen>&prompt.root; <userinput>growfs <replaceable>/dev/ada0p2</replaceable></userinput> Device is mounted read-write; resizing will result in temporary write suspension for /. It's strongly recommended to make a backup before growing the file system. OK to grow file system on /dev/ada0p2, mounted on /, from 38GB to 47GB? [Yes/No] <userinput>Yes</userinput> super-block backups (for fsck -b #) at: 80781312, 82063552, 83345792, 84628032, 85910272, 87192512, 88474752, 89756992, 91039232, 92321472, 93603712, 94885952, 96168192, 97450432</screen> <para>Wenn das Dateisystem <acronym>ZFS</acronym> ist, wird die Größenänderung mit dem Unterkommando <option>online</option> und <option>-e</option> ausgelöst:</para> <screen>&prompt.root; <userinput>zfs online -e <replaceable>zroot</replaceable> <replaceable>/dev/ada0p2</replaceable></userinput></screen> <para>Sowohl die Partition als auch das Dateisystem wurden jetzt vergrößert, um den neu zur Verfügung stehenden Speicherplatz zu nutzen.</para> </sect1> <sect1 xml:id="usb-disks"> <info> <title><acronym>USB</acronym> Speichermedien</title> <authorgroup> <author> <personname> <firstname>Marc</firstname> <surname>Fonvieille</surname> </personname> <contrib>Beigetragen von </contrib> </author> </authorgroup> </info> <indexterm> <primary>USB</primary> <secondary>Speichermedien</secondary> </indexterm> <para>Der Universal Serial Bus (<acronym>USB</acronym>) wird von vielen externen Speichern benutzt: Festplatten, <acronym>USB</acronym>-Thumbdrives sowie von <acronym>CD</acronym>- und <acronym>DVD</acronym>-Brennern. &os; bietet Unterstützung für Geräte mit <acronym>USB</acronym> 1.x, 2.0 und 3.0.</para> <note> <para>Die Unterstützung für <acronym>USB</acronym> 3.0 ist mit einiger Hardware, einschließlich Haswell (Lynx Point) Chipsätzen, nicht kompatibel. Wenn &os; beim Booten mit dem Fehler <errorname>failed with error 19</errorname> abbricht, müssen Sie xHCI/USB3 im <acronym>BIOS</acronym> deaktivieren.</para> </note> <para>Unterstützung für <acronym>USB</acronym>-Massenspeicher ist im <filename>GENERIC</filename>-Kernel enthalten. Für einen angepassten Kernel müssen die nachstehenden Zeilen in der Kernelkonfigurationsdatei enthalten sein:</para> <programlisting>device scbus # SCSI bus (required for ATA/SCSI) device da # Direct Access (disks) device pass # Passthrough device (direct ATA/SCSI access) device uhci # provides USB 1.x support device ohci # provides USB 1.x support device ehci # provides USB 2.0 support device xhci # provides USB 3.0 support device usb # USB Bus (required) device umass # Disks/Mass storage - Requires scbus and da device cd # needed for CD and DVD burners</programlisting> <para>&os; benutzt den &man.umass.4;-Treiber, der das <acronym>SCSI</acronym>-Subsystem verwendet um auf <acronym>USB</acronym>-Geräte zuzugreifen. Da alle <acronym>USB</acronym>-Geräte vom System als <acronym>SCSI</acronym>-Geräte erkannt werden, dürfen Sie <emphasis>nicht</emphasis> <option>device atapicam</option> in die Kernelkonfigurationsdatei aufnehmen, wenn es sich bei dem Gerät um einen <acronym>CD</acronym>- oder <acronym>DVD</acronym>-Brenner handelt.</para> <para>Der übrige Abschnitt beschreibt, wie Sie überprüfen können ob ein <acronym>USB</acronym>-Gerät von &os; erkannt wird und wie Sie das Gerät so konfigurieren, dass es verwendet werden kann.</para> <sect2> <title>Konfiguration von Geräten</title> <para>Um die <acronym>USB</acronym>-Konfiguration zu testen, schließen Sie das <acronym>USB</acronym>-Gerät an. Verwenden Sie <command>dmesg</command> um zu überprüfen, ob das Gerät in den Systemmeldungen erscheint. Dies sollte in etwa so aussehen:</para> <screen>umass0: <STECH Simple Drive, class 0/0, rev 2.00/1.04, addr 3> on usbus0 umass0: SCSI over Bulk-Only; quirks = 0x0100 umass0:4:0:-1: Attached to scbus4 da0 at umass-sim0 bus 0 scbus4 target 0 lun 0 da0: <STECH Simple Drive 1.04> Fixed Direct Access SCSI-4 device da0: Serial Number WD-WXE508CAN263 da0: 40.000MB/s transfers da0: 152627MB (312581808 512 byte sectors: 255H 63S/T 19457C) da0: quirks=0x2<NO_6_BYTE></screen> <para>Fabrikat, Gerätedatei (<filename>da0</filename>), Geschwindigkeit und Kapazität werden je nach Gerät unterschiedlich sein.</para> <para>Da ein <acronym>USB</acronym>-Gerät als <acronym>SCSI</acronym>-Gerät erkannt wird, kann <command>camcontrol</command> benutzt werden, um die mit dem System verbundenen <acronym>USB</acronym>-Massenspeicher anzuzeigen:</para> <screen>&prompt.root; <userinput>camcontrol devlist</userinput> <STECH Simple Drive 1.04> at scbus4 target 0 lun 0 (pass3,da0)</screen> <para>Alternativ kann <command>usbconfig</command> benutzt werden, um die Geräte aufzulisten. Weitere Informationen zu diesem Kommando finden Sie in &man.usbconfig.8;.</para> <screen>&prompt.root; <userinput>usbconfig</userinput> ugen0.3: <Simple Drive STECH> at usbus0, cfg=0 md=HOST spd=HIGH (480Mbps) pwr=ON (2mA)</screen> <para>Wenn das Gerät noch nicht formatiert ist, finden Sie in <xref linkend="disks-adding"/> Informationen, wie Sie <acronym>USB</acronym>-Laufwerke formatieren und Partitionen einrichten. Wenn das Laufwerk bereits ein Dateisystem enthält, kann es von <systemitem class="username">root</systemitem> nach den Anweisungen in <xref linkend="mount-unmount"/> eingehängt werden.</para> <warning> <para>Aus Sicherheitsgründen sollten Sie Benutzern, denen Sie nicht vertrauen, das Einhängen (z.B. durch die unten beschriebene Aktivierung von <literal>vfs.usermount</literal>) beliebiger Medien verbieten. Die meisten Dateisysteme wurden nicht entwickelt, um sich vor böswilligen Geräten zu schützen.</para> </warning> <para>Um auch normalen Anwendern das Einhängen des Laufwerks zu gestatten, könnten Sie beispielsweise mit &man.pw.8; alle potentiellen Benutzer dieser Gerätedateien in die Gruppe <systemitem class="groupname">operator</systemitem> aufnehmen. Außerdem muss sichergestellt werden, dass <systemitem class="groupname">operator</systemitem> Schreib- und Lesezugriff auf diese Gerätedateien haben. Hierfür werden die folgenden Zeilen in <filename>/etc/devfs.rules</filename> hinzugefügt:</para> <programlisting>[localrules=5] add path 'da*' mode 0660 group operator</programlisting> <note> <para>Verfügt das System über interne <acronym>SCSI</acronym>-Laufwerke, so verändern Sie die zweite Zeile wie folgt:</para> <programlisting>add path 'da[<replaceable>3</replaceable>-9]*' mode 0660 group operator</programlisting> <para>Dies wird die ersten drei <acronym>SCSI</acronym>-Laufwerke (<filename>da0</filename> bis <filename>da2</filename>) davon ausschließen, in die Gruppe <systemitem class="groupname">operator</systemitem> aufgenommen zu werden. Ersetzen Sie <literal>3</literal> durch die Anzahl der <acronym>SCSI</acronym>-Laufwerke. Weitere Informationen zu dieser Datei finden Sie in &man.devfs.rules.5;.</para> </note> <para>Aktivieren Sie nun die Regeln in <filename>/etc/rc.conf</filename>:</para> <programlisting>devfs_system_ruleset="localrules"</programlisting> <para>Als nächstes müssen Sie das System anweisen, auch normalen Benutzern das mounten von Dateisystemen zu erlauben, indem Sie die folgende Zeile in <filename>/etc/sysctl.conf</filename> hinzufügen:</para> <programlisting>vfs.usermount=1</programlisting> <para>Da diese Einstellung erst nach einem Neustart wirksam wird, können Sie diese Variable mit <command>sysctl</command> auch direkt setzen:</para> <screen>&prompt.root; <userinput>sysctl vfs.usermount=1</userinput> vfs.usermount: 0 -> 1</screen> <para>Zuletzt müssen Sie noch ein Verzeichnis anlegen, in das das <acronym>USB</acronym>-Laufwerk eingehängt werden soll. Dieses Verzeichnis muss dem Benutzer gehören, der das <acronym>USB</acronym>-Laufwerk in den Verzeichnisbaum einhängen will. Dazu legen Sie als <systemitem class="username">root</systemitem> ein Unterverzeichnis <filename>/mnt/<replaceable>username</replaceable></filename> an, wobei Sie <replaceable>username</replaceable> durch den Login des jeweiligen Benutzers sowie <replaceable>usergroup</replaceable> durch die primäre Gruppe des Benutzers ersetzen:</para> <screen>&prompt.root; <userinput>mkdir /mnt/<replaceable>username</replaceable></userinput> &prompt.root; <userinput>chown <replaceable>username</replaceable>:<replaceable>usergroup</replaceable> /mnt/<replaceable>username</replaceable></userinput></screen> <para>Wenn Sie nun beispielsweise einen <acronym>USB</acronym>-Stick anschließen, wird automatisch die Gerätedatei <filename>/dev/da0s1</filename> erzeugt. Ist das Gerät mit einem <acronym>FAT</acronym>-Dateisystem formatiert, kann es der Benutzer mit dem folgenden Befehl in den Verzeichnisbaum einhängen:</para> <screen>&prompt.user; <userinput>mount -t msdosfs -o -m=644,-M=755 /dev/da0s1 /mnt/<replaceable>username</replaceable></userinput></screen> <para>Bevor das Gerät entfernt werden kann, <emphasis>muss</emphasis> es abgehängt werden:</para> <screen>&prompt.root; <userinput>umount /mnt/<replaceable>username</replaceable></userinput></screen> <para>Nach Entfernen des Geräts stehen in den Systemmeldungen Einträge, ähnlich der folgenden:</para> <screen>umass0: at uhub3, port 2, addr 3 (disconnected) da0 at umass-sim0 bus 0 scbus4 target 0 lun 0 da0: <STECH Simple Drive 1.04> s/n WD-WXE508CAN263 detached (da0:umass-sim0:0:0:0): Periph destroyed</screen> </sect2> <sect2> <title>Automatisches Einhängen von Wechselmedien</title> <para>Damit <acronym>USB</acronym>-Geräte automatisch eingehängt werden, muss der Kommentar für folgende Zeile in <filename>/etc/auto_master</filename> entfernt werden:</para> <screen>/media -media -nosuid</screen> <para>Anschließend fügen Sie folgende Zeilen in <filename>/etc/devd.conf</filename> hinzu:</para> <screen>notify 100 { match "system" "GEOM"; match "subsystem" "DEV"; action "/usr/sbin/automount -c"; };</screen> <para>Falls &man.autofs.5; und &man.devd.8; bereits ausgeführt werden, müssen Sie die Konfiguration neu einlesen:</para> <screen>&prompt.root; <userinput>service automount restart</userinput> &prompt.root; <userinput>service devd restart</userinput></screen> <para>&man.autofs.5; wird beim Booten automatisch gestartet, wenn Sie folgende Zeile in <filename>/etc/rc.conf</filename> hinzufügen:</para> <programlisting>autofs_enable="YES"</programlisting> <para>Damit &man.autofs.5; funktioniert, muss &man.devd.8; aktiviert sein, was aber in der Voreinstellung der Fall ist.</para> <para>Starten Sie jetzt die Dienste:</para> <screen>&prompt.root; <userinput>service automount start</userinput> &prompt.root; <userinput>service automountd start</userinput> &prompt.root; <userinput>service autounmountd start</userinput> &prompt.root; <userinput>service devd start</userinput></screen> <para>Jedes Dateisystem, das automatisch eingehängt werden kann, erscheint als ein Verzeichnis unterhalb von <filename>media</filename>. Das Verzeichnis wird nach dem Dateisystemlabel benannt, bzw. nach dem Gerätenamen, falls kein Label existiert.</para> <para>Das Dateisystem wird transparent beim ersten Zugriff in den Verzeichnisbaum eingehängt und auch nach gewisser Zeit der Inaktivität wieder ausgehängt. Laufwerke können auch manuell ausgehängt werden:</para> <screen>&prompt.root; <userinput>automount -fu</userinput></screen> <para>Diese Methode wird in der Regel bei Speicherkarten und <acronym>USB</acronym>-Sticks verwendet. Sie funktioniert aber mit allen Blockgeräten, einschließlich optischen Laufwerken und <acronym>iSCSI</acronym>-<acronym>LUN</acronym>s.</para> </sect2> <sect2> <title><acronym>USB</acronym>-Massenspeicher</title> <note> <para>Der &man.cfumass.4;-Treiber ist ein <acronym>USB</acronym> Geräte-Modus-Treiber und steht mit &os; 12.0 zur Verfügung.</para> </note> <para>Auf <acronym>USB</acronym>-<acronym>OTG</acronym>-kompatibler Hardware, wie in eingebetteten Systemen, kann der &os; <acronym>USB</acronym>-Stack im Geräte-Modus laufen. Der Geräte-Modus ermöglicht es dem Rechner, verschiedene Arten von <acronym>USB</acronym>-Geräteklassen zu präsentieren, einschließlich serieller Schnittstellen, Netzwerkadapter und Massenspeicher. Ein <acronym>USB</acronym>-Host, beispielsweise ein Laptop oder Desktop-Rechner, kann darauf wie auf ein physikalisches <acronym>USB</acronym>-Gerät zugreifen.</para> <para>Je nach angeschlossener Hardware, ermöglicht das &man.usb.template.4; Kernelmodul es dem <acronym>USB</acronym>-Stack, automatisch zwischen Host- und Geräteseite umzuschalten. Das Anschließen eines <acronym>USB</acronym>-Gerätes an den <acronym>USB</acronym>-<acronym>OTG</acronym>-Port bewirkt, dass &os; in den Geräte-Modus wechselt.</para> <para>Was &os; dem <acronym>USB</acronym>-Host präsentiert, hängt von der sysctl-Variablen <varname>hw.usb.template</varname> ab. Eine Liste der verfügbaren Werte finden Sie in &man.usb.template.4;. Damit der Host die geänderte Konfiguration erkennt, muss entweder das Gerät getrennt und wieder angeschlossen, oder der <acronym>USB</acronym>-Bus neu gescannt werden. Wenn auf dem Host &os; läuft, können Sie &man.usbconfig.8; <command>reset</command> benutzen. Dieser Befehl muss nach dem Laden von <filename>usb_template.ko</filename> erfolgen, falls der <acronym>USB</acronym>-Host bereits am <acronym>USB</acronym>-<acronym>OTG</acronym>-Port angeschlossen war.</para> <para>Die sysctl-Variable <varname>hw.usb.template</varname> ist in der Voreinstellung auf 0 gesetzt, so dass &os; als <acronym>USB</acronym>-Massenspeicher funktioniert. Dazu müssen die beiden Kernelmodule &man.usb.template.4; und &man.cfumass.4; geladen sein. &man.cfumass.4; ist die Schnittstelle zum CTL-Subsystem, die auch für <acronym>iSCSI</acronym>- und Fibre Channel-Targets benutzt wird. Auf der Host-Seite können <acronym>USB</acronym>-Massenspeicher nur auf eine einzelne <acronym>LUN</acronym> (<acronym>LUN</acronym> 0) zugreifen.</para> <para><acronym>USB</acronym>-Massenspeicher benötigen keinen aktiven &man.ctld.8;-Daemon, obwohl er bei Bedarf verwendet werden kann. Dies unterscheidet sich von <acronym>iSCSI</acronym>. So gibt es zwei Möglichkeiten, ein Target zu konfigurieren: &man.ctladm.8; und &man.ctld.8;. Beide erfordern, dass das <filename>cfumass.ko</filename> Kernelmodul geladen ist. Das Modul kann wie folgt geladen werden:</para> <screen>&prompt.root; <userinput>kldload cfumass</userinput></screen> <para>Wenn <filename>cfumass.ko</filename> nicht im Kernel enthalten ist, kann das Modul beim Booten über <filename>/boot/loader.conf</filename> geladen werden:</para> <programlisting>cfumass_load="YES"</programlisting> <para>Eine <acronym>LUN</acronym> kann auch ohne den &man.ctld.8;-Daemon erstellt werden:</para> <screen>&prompt.root; <userinput>ctladm create -b block -o file=/data/target0</userinput></screen> <para>Damit wird dem <acronym>USB</acronym> der Inhalt des Abbilds <filename>/data/target0</filename> als <acronym>LUN</acronym> präsentiert. Die Datei muss vor dem Ausführen des Befehls vorhanden sein. Um die <acronym>LUN</acronym> beim Systemstart zu konfigurieren, fügen Sie den Befehl in <filename>/etc/rc.local</filename> hinzu.</para> <para>&man.ctld.8; kann ebenfalls verwendet werden, um <acronym>LUN</acronym>s zu verwalten. Erstellen Sie <filename>/etc/ctl.conf</filename> und fügen Sie eine Zeile in <filename>/etc/rc.conf</filename> hinzu, um sicherzustellen, dass &man.ctld.8; beim Booten automatisch gestartet wird. Danach starten Sie den Daemon.</para> <para>Dies ist ein Beispiel für eine einfache <filename>/etc/ctl.conf</filename> Konfigurationsdatei. &man.ctl.conf.5; enthält eine ausführliche Beschreibung der einzelnen Optionen.</para> <programlisting>target naa.50015178f369f092 { lun 0 { path /data/target0 size 4G } }</programlisting> <para>Dieses Beispiel erstellt ein Target mit einer einzigen <acronym>LUN</acronym>. <literal>naa.50015178f369f092</literal> ist eine Gerätekennung aus 32 zufälligen, hexadezimalen Ziffern. Die <literal>path</literal>-Zeile definiert den vollständigen Pfad einer Datei oder eines zvols, welche als Backend für die <acronym>LUN</acronym> benutzt wird. Die Konfigurationsdatei muss vor dem Start von &man.ctld.8; existieren. Die zweite Zeile ist optional und gibt die Größe der <acronym>LUN</acronym> an.</para> <para>Fügen Sie folgende Zeile in <filename>/etc/rc.conf</filename> hinzu, um den &man.ctld.8;-Daemon beim Booten zu starten:</para> <programlisting>ctld_enable="YES"</programlisting> <para>Um &man.ctld.8; zu starten, führen Sie dieses Kommando aus:</para> <screen>&prompt.root; <userinput>service ctld start</userinput></screen> <para>Beim Start liest der &man.ctld.8;-Daemon <filename>/etc/ctl.conf</filename> ein. Wenn diese Datei nach dem Start des Daemons bearbeitet wird, können Sie sie erneut einlesen, damit die Änderungen direkt wirksam sind:</para> <screen>&prompt.root; <userinput>service ctld reload</userinput></screen> </sect2> </sect1> <sect1 xml:id="creating-cds"> <info> <title>Erstellen und Verwenden von <acronym>CD</acronym>s</title> <authorgroup> <author> <personname> <firstname>Mike</firstname> <surname>Meyer</surname> </personname> <contrib>Beigesteuert von </contrib> </author> </authorgroup> </info> <indexterm> <primary><acronym>CD-ROM</acronym>s</primary> <secondary>brennen</secondary> </indexterm> <para><acronym>CD</acronym>s besitzen einige Eigenschaften, die sie von konventionellen Laufwerken unterscheiden. Sie wurden so entworfen, dass sie ununterbrochen, ohne Verzögerungen durch Kopfbewegungen zwischen den Spuren, gelesen werden können. <acronym>CD</acronym>s besitzen Spuren, aber damit ist der Teil Daten gemeint, der ununterbrochen gelesen wird, und nicht eine physikalische Eigenschaft der <acronym>CD</acronym>. Das <acronym>ISO</acronym> 9660-Dateisystem wurde entworfen, um mit diesen Unterschieden umzugehen.</para> <indexterm> <primary><acronym>ISO</acronym> 9660</primary> </indexterm> <indexterm> <primary>Dateisysteme</primary> <secondary>ISO 9660</secondary> </indexterm> <indexterm> <primary><acronym>CD</acronym>-Brenner</primary> <secondary><acronym>ATAPI</acronym></secondary> </indexterm> <para>Die &os; Ports-Sammlung bietet einige Werkzeuge zum Brennen und Kopieren von Audio- und Daten-<acronym>CD</acronym>s. Dieses Kapitel beschreibt die Verwendung von mehreren Kommandozeilen-Werkzeugen. Wenn Sie eine graphische Oberfläche zum Brennen von <acronym>CD</acronym>s benutzen, können Sie <package>sysutils/xcdroast</package> oder <package>sysutils/k3b</package> installieren.</para> <sect2 xml:id="atapicam"> <info> <title>Unterstützte Geräte</title> <authorgroup> <author> <personname> <firstname>Marc</firstname> <surname>Fonvielle</surname> </personname> <contrib>Beigetragen von </contrib> </author> </authorgroup> </info> <indexterm> <primary><acronym>CD</acronym>-Brenner</primary> <secondary>ATAPI/CAM Treiber</secondary> </indexterm> <para>Der <filename>GENERIC</filename>-Kernel enthält Unterstützung für <acronym>SCSI</acronym>, <acronym>USB</acronym> und <acronym>ATAPI</acronym> <acronym>CD</acronym> Lesegeräte und Brenner. Wird ein angepasster Kernel erstellt, unterscheiden sich die Optionen für die Kernelkonfigurationsdatei je nach Art des Geräts.</para> <para>Für einen <acronym>SCSI</acronym>-Brenner müssen folgende Optionen vorhanden sein:</para> <programlisting>device scbus # SCSI bus (required for ATA/SCSI) device da # Direct Access (disks) device pass # Passthrough device (direct ATA/SCSI access) device cd # needed for CD and DVD burners</programlisting> <para>Für einen <acronym>USB</acronym>-Brenner müssen folgende Optionen vorhanden sein:</para> <programlisting>device scbus # SCSI bus (required for ATA/SCSI) device da # Direct Access (disks) device pass # Passthrough device (direct ATA/SCSI access) device cd> # needed for CD and DVD burners device uhci # provides USB 1.x support device ohci # provides USB 1.x support device ehci # provides USB 2.0 support device xhci # provides USB 3.0 support device usb # USB Bus (required) device umass # Disks/Mass storage - Requires scbus and da</programlisting> <para>Für einen <acronym>ATAPI</acronym>-Brenner müssen folgende Optionen vorhanden sein:</para> <programlisting>device ata # Legacy ATA/SATA controllers device scbus # SCSI bus (required for ATA/SCSI) device pass # Passthrough device (direct ATA/SCSI access) device cd # needed for CD and DVD burners</programlisting> <note> <para>Unter &os; Versionen kleiner 10.x wird auch diese Option in der Kernelkonfigurationsdatei benötigt, falls der Brenner ein <acronym>ATAPI</acronym>-Gerät ist:</para> <programlisting>device atapicam</programlisting> <para>Alternativ kann folgende Zeile in <filename>/boot/loader.conf</filename> hinzugefügt werden, um den Treiber beim Booten automatisch zu laden:</para> <programlisting>atapicam_load="YES"</programlisting> <para>Hierzu ist ein Neustart des Systems erforderlich, da dieser Treiber nur beim Booten geladen werden kann.</para> </note> <para>Mit <command>dmesg</command> können Sie prüfen, ob das Gerät von &os; erkannt wurde. Unter &os; Versionen kleiner 10.x lautet der Gerätename <filename>acd0</filename> anstelle von <filename>cd0</filename>.</para> <screen>&prompt.user; <userinput>dmesg | grep cd</userinput> cd0 at ahcich1 bus 0 scbus1 target 0 lun 0 cd0: <HL-DT-ST DVDRAM GU70N LT20> Removable CD-ROM SCSI-0 device cd0: Serial Number M3OD3S34152 cd0: 150.000MB/s transfers (SATA 1.x, UDMA6, ATAPI 12bytes, PIO 8192bytes) cd0: Attempt to query device size failed: NOT READY, Medium not present - tray closed</screen> </sect2> <sect2 xml:id="cdrecord"> <title>Eine <acronym>CD</acronym> brennen</title> <para>Unter &os; kann <command>cdrecord</command> zum Brennen von <acronym>CD</acronym>s benutzt werden. Dieses Programm wird aus dem Port oder Paket <package>sysutils/cdrecord</package> installiert.</para> <para>Obwohl <command>cdrecord</command> viele Optionen besitzt, ist die grundlegende Benutzung sehr einfach. Geben Sie den Namen der zu brennenden ISO-Datei an. Wenn das System über mehrere Brenner verfügt, müssen Sie auch den Namen des Gerätes angeben:</para> <screen>&prompt.root; <userinput>cdrecord <replaceable>dev=device</replaceable> <replaceable>imagefile.iso</replaceable></userinput></screen> <para>Benutzen Sie <option>-scanbus</option> um den Gerätenamen des Brenners zu bestimmen. Die Ausgabe könnte wie folgt aussehen:</para> <indexterm> <primary><acronym>CD-ROM</acronym></primary> <secondary>brennen</secondary> </indexterm> <screen>&prompt.root; <userinput>cdrecord -scanbus</userinput> ProDVD-ProBD-Clone 3.00 (amd64-unknown-freebsd10.0) Copyright (C) 1995-2010 Jörg Schilling Using libscg version 'schily-0.9' scsibus0: 0,0,0 0) 'SEAGATE ' 'ST39236LW ' '0004' Disk 0,1,0 1) 'SEAGATE ' 'ST39173W ' '5958' Disk 0,2,0 2) * 0,3,0 3) 'iomega ' 'jaz 1GB ' 'J.86' Removable Disk 0,4,0 4) 'NEC ' 'CD-ROM DRIVE:466' '1.26' Removable CD-ROM 0,5,0 5) * 0,6,0 6) * 0,7,0 7) * scsibus1: 1,0,0 100) * 1,1,0 101) * 1,2,0 102) * 1,3,0 103) * 1,4,0 104) * 1,5,0 105) 'YAMAHA ' 'CRW4260 ' '1.0q' Removable CD-ROM 1,6,0 106) 'ARTEC ' 'AM12S ' '1.06' Scanner 1,7,0 107) *</screen> <para>Benutzen Sie die drei durch Kommas separierten Zahlen, die für den <acronym>CD</acronym>-Brenner angegeben sind, als Argument für <option>dev</option>. Im Beispiel ist das Yamaha-Gerät <literal>1,5,0</literal>, so dass die passende Eingabe <option>dev=1,5,0</option> ist. Einfachere Wege das Argument anzugeben, sowie Informationen über Audiospuren und das Einstellen der Geschwindigkeit, sind in der Manualpage von <command>cdrecord</command> beschrieben.</para> <para>Alternativ können Sie den folgenden Befehl ausführen, um die Geräteadresse des Brenners zu ermitteln:</para> <screen>&prompt.root; <userinput>camcontrol devlist</userinput> <MATSHITA CDRW/DVD UJDA740 1.00> at scbus1 target 0 lun 0 (cd0,pass0)</screen> <para>Verwenden Sie die numerischen Werte für <literal>scbus</literal>, <literal>target</literal> und <literal>lun</literal>. Für dieses Beispiel wäre <literal>1,0,0</literal> als Gerätename zu verwenden.</para> </sect2> <sect2 xml:id="mkisofs"> <title>Daten auf <acronym>ISO</acronym>-Dateisystem schreiben</title> <para>Die Datendateien müssen vorbereitet sein, bevor sie auf eine <acronym>CD</acronym> gebrannt werden. In &os; wird <command>mkisofs</command> vom Paket oder Port <package>sysutils/cdrtools</package> installiert. Dieses Programm kann aus einem &unix; Verzeichnisbaum ein <acronym>ISO</acronym> 9660-Dateisystem erzeugen. Im einfachsten Fall müssen Sie lediglich den Namen der zu erzeugenden <acronym>ISO</acronym>-Datei und den Pfad zu den Dateien angeben, die auf dem <acronym>ISO</acronym> 9660-Dateisystem platziert werden:</para> <screen>&prompt.root; <userinput>mkisofs -o <replaceable>imagefile.iso</replaceable> <replaceable>/path/to/tree</replaceable></userinput></screen> <indexterm> <primary>Dateisysteme</primary> <secondary>ISO 9660</secondary> </indexterm> <para>Bei diesem Kommando werden die Dateinamen auf Namen abgebildet, die den Restriktionen des <acronym>ISO</acronym> 9660-Dateisystem entsprechen. Dateien, die diesem Standard nicht entsprechen bleiben unberücksichtigt.</para> <indexterm> <primary>Dateisysteme</primary> <secondary>Joliet</secondary> </indexterm> <para>Es gibt einige Optionen, um die Beschränkungen dieses Standards zu überwinden. Die unter &unix; Systemen üblichen Rock-Ridge-Erweiterungen werden durch <option>-R</option> aktiviert und <option>-J</option> aktiviert die von µsoft; Systemen benutzten Joliet-Erweiterungen.</para> <para>Für <acronym>CD</acronym>s, die nur auf &os;-Systemen verwendet werden sollen, kann <option>-U</option> genutzt werden, um alle Beschränkungen für Dateinamen aufzuheben. Zusammen mit <option>-R</option> wird ein Abbild des Dateisystems, identisch zu angegebenen &os;-Dateibaum erstellt, selbst wenn dies den <acronym>ISO</acronym> 9660 Standard verletzt.</para> <indexterm> <primary><acronym>CD-ROM</acronym></primary> <secondary>bootbare erstellen</secondary> </indexterm> <para>Die letzte übliche Option ist <option>-b</option>. Sie wird benutzt, um den Ort eines Bootimages einer <quote>El Torito</quote> bootbaren <acronym>CD</acronym> anzugeben. Das Argument zu dieser Option ist der Pfad zu einem Bootimage ausgehend von der Wurzel des Baumes, der auf die <acronym>CD</acronym> geschrieben werden soll. In der Voreinstellung erzeugt <command>mkisofs</command> ein <acronym>ISO</acronym>-Image im <quote>Diskettenemulations</quote>-Modus. Dabei muss das Image genau 1200, 1440 oder 2880 KB groß sein. Einige Bootloader, darunter der auf den &os; Installationsmedien verwendete, kennen keinen Emulationsmodus. Daher sollte in diesen Fällen <option>-no-emul-boot</option> verwendet werden. Wenn <filename>/tmp/myboot</filename> ein bootbares &os;-System enthält, dessen Bootimage sich in <filename>/tmp/myboot/boot/cdboot</filename> befindet, dann würde folgendes Kommando <filename>/tmp/bootable.iso</filename> erstellen:</para> <screen>&prompt.root; <userinput>mkisofs -R -no-emul-boot -b boot/cdboot -o /tmp/bootable.iso /tmp/myboot</userinput></screen> <para>Das resultierende <acronym>ISO</acronym>-Abbild kann als speicherbasiertes Laufwerk eingehängt werden:</para> <screen>&prompt.root; <userinput>mdconfig -a -t vnode -f /tmp/bootable.iso -u 0</userinput> &prompt.root; <userinput>mount -t cd9660 /dev/md0 /mnt</userinput></screen> <para>Jetzt können Sie überprüfen, dass <filename>/mnt</filename> und <filename>/tmp/myboot</filename> identisch sind.</para> <para>Sie können das Verhalten von <command>mkisofs</command> mit einer Vielzahl von Optionen beeinflussen. Details dazu entnehmen Sie bitte &man.mkisofs.8;.</para> <note> <para>Es ist möglich eine Daten-<acronym>CD</acronym> in eine Datei zu kopieren, die einem Image entspricht, das mit <command>mkisofs</command> erstellt wurde. Verwenden Sie dazu <command>dd</command> mit dem Gerätenamen als Eingabedatei und den Namen der <acronym>ISO</acronym> als Ausgabedatei:</para> <screen>&prompt.root; <userinput>dd if=/dev/<replaceable>cd0</replaceable> of=<replaceable>file.iso</replaceable> bs=2048</userinput></screen> <para>Das resultierende Abbild kann auf eine <acronym>CD</acronym> gebrannt werden, wie in <xref linkend="cdrecord"/> beschrieben.</para> </note> </sect2> <sect2 xml:id="mounting-cd"> <title>Einhängen von Daten-<acronym>CD</acronym>s</title> <para>Sobald ein Abbild auf eine <acronym>CD</acronym> gebrannt wurde, kann es durch Angabe des Dateisystemtyp, des <acronym>CD</acronym>-Laufwerks und des Mountpunktes eingehangen werden:</para> <screen>&prompt.root; <userinput>mount -t cd9660 <replaceable>/dev/cd0</replaceable> <replaceable>/mnt</replaceable></userinput></screen> <para>Da <command>mount</command> davon ausgeht, dass ein Dateisystem vom Typ <literal>ufs</literal> ist, würde die Fehlermeldung <errorname>Incorrect super block</errorname> erscheinen, wenn Sie beim Einhängen einer Daten-<acronym>CD</acronym> auf die Angabe <literal>-t cd9660</literal> verzichten.</para> <para>Auf diese Weise können Daten-<acronym>CD</acronym>s von jedem Hersteller verwendet werden. Es kann allerdings zu Problemen mit <acronym>CD</acronym>s kommen, die verschiedene <acronym>ISO</acronym> 9660-Erweiterungen benutzen. So speichern Joliet-<acronym>CD</acronym>s alle Dateinamen unter Verwendung von zwei Byte langen Unicode-Zeichen. Tauchen statt bestimmter Zeichen nur Fragezeichen auf, so muss über die Option <option>-C</option> der benötigte Zeichensatz angegeben werden. Weitere Informationen zu diesem Problem finden Sie in &man.mount.cd9660.8;.</para> <note> <para>Damit der Kernel diese Zeichenkonvertierung (festgelegt durch die Option <option>-C</option>) erkennt, müssen Sie das Kernelmodul <filename>cd9660_iconv.ko</filename> laden. Dazu fügen Sie folgende Zeile in <filename>loader.conf</filename> ein:</para> <programlisting>cd9660_iconv_load="YES"</programlisting> <para>Danach müssen Sie allerdings Ihr System neu starten. Alternativ können Sie das Kernelmodul auch direkt über <command>kldload</command> laden.</para> </note> <para>Manchmal werden Sie die Meldung <errorname>Device not configured</errorname> erhalten, wenn Sie versuchen, eine Daten-<acronym>CD</acronym> einzuhängen. Für gewöhnlich liegt das daran, dass das Laufwerk keine <acronym>CD</acronym> erkannt hat, oder dass das Laufwerk auf dem Bus nicht erkannt wird. Es kann einige Sekunden dauern, bevor das Laufwerk die <acronym>CD</acronym> erkennt. Seien Sie also geduldig.</para> <para>Manchmal wird ein <acronym>SCSI</acronym>-<acronym>CD</acronym> nicht erkannt, weil es keine Zeit hatte, auf das Zurücksetzen des Busses zu antworten. Um dieses Problem zu lösen, fügen Sie die folgende Zeile in die Kernelkonfiguration ein und erstellen Sie einen angepassten Kernel nach den Anweisungen in <xref linkend="kernelconfig-building"/>:</para> <programlisting>options SCSI_DELAY=15000</programlisting> <para>Die Zeile bewirkt, dass nach dem Zurücksetzen des <acronym>SCSI</acronym>-Busses beim Booten 15 Sekunden gewartet wird, um dem <acronym>CD</acronym>-Laufwerk genügend Zeit zu geben, darauf zu antworten.</para> <note> <para>Es ist möglich eine Datei auch direkt auf eine <acronym>CD</acronym> zu brennen, ohne vorher auf ihr ein <acronym>ISO</acronym> 9660-Dateisystem einzurichten. Man sagt auch, Daten werden roh auf die <acronym>CD</acronym> gebrannt. Einige Leute nutzen dies, um Datensicherungen durchzuführen.</para> <para>Eine auf diese Weise gefertigte Daten-<acronym>CD</acronym> kann nicht in das Dateisystem eingehangen werden. Um auf die Daten einer solchen <acronym>CD</acronym> zuzugreifen, müssen die Daten vom rohen Gerät gelesen werden. Beispielsweise würde dieser Befehl eine komprimierte tar-Datei auf dem zweiten <acronym>CD</acronym>-Laufwerk in das aktuelle Verzeichnis extrahieren:</para> <screen>&prompt.root; <userinput>tar xzvf /dev/<replaceable>cd1</replaceable></userinput></screen> <para>Um eine Daten-<acronym>CD</acronym> in das System einzuhängen, müssen die Daten mit <command>mkisofs</command> geschrieben werden.</para> </note> </sect2> <sect2 xml:id="duplicating-audiocds"> <title>Kopieren von Audio-<acronym>CD</acronym>s</title> <para>Um eine Kopie einer Audio-<acronym>CD</acronym> zu erstellen, kopieren Sie die Stücke der <acronym>CD</acronym> in einzelne Dateien und brennen diese Dateien dann auf eine leere <acronym>CD</acronym>.</para> <para><xref linkend="using-cdrecord"/> beschreibt, wie eine Audio-<acronym>CD</acronym> kopiert und gebrannt wird. Wenn die Version älter als &os; 10.0 ist und ein <acronym>ATAPI</acronym>-Gerät verwendet wird, muss zunächst das Modul <option>atapicam</option> nach den Anweisungen in <xref linkend="atapicam"/> geladen werden.</para> <procedure xml:id="using-cdrecord"> <title>Eine Audio-<acronym>CD</acronym> kopieren</title> <step> <para>Der Port oder das Paket <package>sysutils/cdrtools</package> installiert <command>cdda2wav</command>. Mit diesem Kommando können Audiodaten in das aktuelle Verzeichnis extrahiert werden, wobei jede Datei in eine separate <acronym>WAV</acronym>-Datei geschrieben wird:</para> <screen>&prompt.user; <userinput>cdda2wav -vall -B -Owav</userinput></screen> <para>Wenn das System nur über ein <acronym>CD</acronym>-Laufwerk verfügt, muss der Gerätename nicht angegeben werden. Lesen Sie die Manualpage von <command>cdda2wav</command> für Anweisungen, wie ein Gerät spezifiziert wird und weitere verfügbare Optionen für dieses Kommando.</para> </step> <step> <para>Die erzeugten <filename>.wav</filename> Dateien schreiben Sie mit <command>cdrecord</command> auf eine leere <acronym>CD</acronym>:</para> <screen>&prompt.user; <userinput>cdrecord -v dev=<replaceable>2,0</replaceable> -dao -useinfo *.wav</userinput></screen> <para>Das Argument von <option>dev</option> gibt das verwendete Gerät an, das wie in <xref linkend="cdrecord"/> ermittelt werden kann.</para> </step> </procedure> </sect2> </sect1> <sect1 xml:id="creating-dvds"> <info> <title><acronym>DVD</acronym>s benutzen</title> <authorgroup> <author> <personname> <firstname>Marc</firstname> <surname>Fonvieille</surname> </personname> <contrib>Beigetragen von </contrib> </author> </authorgroup> <authorgroup> <author> <personname> <firstname>Andy</firstname> <surname>Polyakov</surname> </personname> <contrib>Mit Beiträgen von </contrib> </author> </authorgroup> </info> <indexterm> <primary><acronym>DVD</acronym></primary> <secondary>brennen</secondary> </indexterm> <para>Nach der <acronym>CD</acronym> ist die <acronym>DVD</acronym> die nächste Generation optischer Speichermedien. Auf einer <acronym>DVD</acronym> können mehr Daten als auf einer <acronym>CD</acronym> gespeichert werden. <acronym>DVD</acronym>s werden als Standardmedium für Videos verwendet.</para> <para>Für beschreibbare <acronym>DVD</acronym>s existieren fünf Medienformate:</para> <itemizedlist> <listitem> <para>DVD-R: Dies war das erste verfügbare Format. Das Format wurde vom <link xlink:href="http://www.dvdforum.com/forum.shtml"> DVD-Forum</link> festgelegt. Die Medien sind nur einmal beschreibbar.</para> </listitem> <listitem> <para><acronym>DVD-RW</acronym>: Dies ist die wiederbeschreibbare Version des DVD-R Standards. Eine <acronym>DVD-RW</acronym> kann ungefähr 1000 Mal beschrieben werden.</para> </listitem> <listitem> <para><acronym>DVD-RAM</acronym>: Dies ist ein wiederbeschreibbares Format, das wie ein Wechsellaufwerk betrachtet werden kann. Allerdings sind die Medien nicht kompatibel zu den meisten <acronym>DVD-ROM</acronym>-Laufwerken und DVD-Video-Spielern, da das <acronym>DVD-RAM-Format</acronym> nur von wenigen Brennern unterstützt wird. Informationen zur Nutzung von <acronym>DVD-RAM</acronym> finden Sie in <xref linkend="creating-dvd-ram"/>.</para> </listitem> <listitem> <para><acronym>DVD+RW</acronym>: Ist ein wiederbeschreibbares Format, das von der <link xlink:href="http://www.dvdrw.com/"> <acronym>DVD+RW</acronym> Alliance</link> festgelegt wurde. Eine <acronym>DVD+RW</acronym> kann ungefähr 1000 Mal beschrieben werden.</para> </listitem> <listitem> <para>DVD+R: Dieses Format ist die nur einmal beschreibbare Variante des <acronym>DVD+RW</acronym> Formats.</para> </listitem> </itemizedlist> <para>Auf einer einfach beschichteten <acronym>DVD</acronym> können 4.700.000.000 Bytes gespeichert werden. Das sind 4,38 GB oder 4485 MB (1 Kilobyte sind 1024 Bytes).</para> <note> <para>Die physischen Medien sind unabhängig von der Anwendung. Ein DVD-Video ist eine spezielle Anordnung von Dateien, die auf irgendein Medium, beispielsweise DVD-R, DVD+R oder <acronym>DVD-RW</acronym> geschrieben werden kann. Bevor Sie ein Medium auswählen, müssen Sie sicherstellen, dass der Brenner und der DVD-Spieler mit dem Medium umgehen können.</para> </note> <sect2> <title>Konfiguration</title> <para>Benutzen Sie &man.growisofs.1;, um <acronym>DVD</acronym>s zu beschreiben. Das Kommando ist Bestandteil von <package>sysutils/dvd+rw-tools</package>, und kann mit allen <acronym>DVD</acronym>-Medien umgehen.</para> <para>Diese Werkzeuge verwenden das <acronym>SCSI</acronym>-Subsystem, um auf die Geräte zuzugreifen. Daher muss <link linkend="atapicam">ATAPI/CAM-Unterstützung</link> geladen, oder statisch in den Kernel kompiliert werden. Sollte der Brenner jedoch die <acronym>USB</acronym>-Schnittstelle nutzen, wird diese Unterstützung nicht benötigt. Weitere Informationen zur Konfiguration von <acronym>USB</acronym>-Geräten finden Sie in <xref linkend="usb-disks"/>.</para> <para>Für <acronym>ATAPI</acronym>-Geräte müssen ebenfalls DMA-Zugriffe aktiviert werden. Dazu wird die folgende Zeile in <filename>/boot/loader.conf</filename> eingefügt:</para> <programlisting>hw.ata.atapi_dma="1"</programlisting> <para>Bevor Sie <application>dvd+rw-tools</application> benutzen, lesen Sie bitte die Hardware-Informationen auf der Seite <link xlink:href="http://fy.chalmers.se/~appro/linux/DVD+RW/hcn.html">Hardware Compatibility Notes</link>.</para> <note> <para>Für eine grafische Oberfläche sollten Sie sich <package>sysutils/k3b</package> ansehen, das eine benutzerfreundliche Schnittstelle zu &man.growisofs.1; und vielen anderen Werkzeugen bietet.</para> </note> </sect2> <sect2> <title>Daten-<acronym>DVD</acronym>s brennen</title> <para>&man.growisofs.1; erstellt mit dem Programm <link linkend="mkisofs">mkisofs</link> das Dateisystem und brennt anschließend die <acronym>DVD</acronym>. Vor dem Brennen braucht daher kein Abbild der Daten erstellt zu werden.</para> <para>Wenn Sie von den Daten im Verzeichnis <filename>/path/to/data</filename> eine DVD+R oder eine DVD-R brennen wollen, benutzen Sie das nachstehende Kommando:</para> <screen>&prompt.root; <userinput>growisofs -dvd-compat -Z <replaceable>/dev/cd0</replaceable> -J -R <replaceable>/path/to/data</replaceable></userinput></screen> <para>In diesem Beispiel wird <option>-J -R</option> an &man.mkisofs.8; durchgereicht und dient zum Erstellen des Dateisystems (hier: ein ISO-9660-Dateisystem mit Joliet- und Rock-Ridge-Erweiterungen). Weiteres entnehmen Sie bitte der Hilfeseite &man.mkisofs.8;.</para> <para>Die Option <option>-Z</option> wird für die erste Aufnahme einer Single- oder Multisession benötigt. Ersetzen Sie <replaceable>/dev/cd0</replaceable> mit dem Gerätenamen des <acronym>DVD</acronym>-Gerätes. Die Nutzung von <option>-dvd-compat</option> schließt das Medium, weitere Daten können danach nicht mehr angehängt werden. Dies sollte auch eine bessere Kompatibilität mit anderen <acronym>DVD-ROM</acronym>-Laufwerken bieten.</para> <para>Um ein vorher erstelltes Abbild der Daten zu brennen, beispielsweise <replaceable>imagefile.iso</replaceable>, verwenden Sie:</para> <screen>&prompt.root; <userinput>growisofs -dvd-compat -Z <replaceable>/dev/cd0</replaceable>=<replaceable>imagefile.iso</replaceable></userinput></screen> <para>Die Schreibgeschwindigkeit hängt von den verwendeten Medium sowie dem verwendeten Gerät ab und sollte automatisch gesetzt werden. Um die Schreibgeschwindigkeit vorzugeben, verwenden Sie <option>-speed=</option>. Beispiele finden Sie in &man.growisofs.1;.</para> <note> <para>Um größere Dateien als 4.38GB zu unterstützen, ist es notwendig ein UDF/ISO-9660 Hybrid-Dateisystem zu erstellen. Dieses Dateisystem muss mit zusätzlichen Parametern <option>-udf -iso-level 3</option> bei &man.mkisofs.8; und allen relevanten Programmen, wie beispielsweise &man.growisofs.1;) erzeugt werden. Dies ist nur notwendig, wenn Sie ein ISO-Image erstellen oder direkt auf eine DVD schreiben wollen. DVDs, die in dieser Weise hergestellt worden sind, müssen als UDF-Dateisystem mit &man.mount.udf.8; eingehangen werden. Sie sind nur auf Betriebssystemen, die UDF unterstützen brauchbar, ansonsten sieht es so aus, als ob sie kaputte Dateien enthalten würden.</para> <para>Um diese Art von ISO-Datei zu erstellen:</para> <screen>&prompt.user; <userinput>mkisofs -R -J -udf -iso-level 3 -o <replaceable>imagefile.iso</replaceable> <replaceable>/path/to/data</replaceable> </userinput></screen> <para>Um Daten direkt auf eine DVD zu brennen, geben Sie den folgenden Befehl ein:</para> <screen>&prompt.root; <userinput>growisofs -dvd-compat -udf -iso-level 3 -Z <replaceable>/dev/cd0</replaceable> -J -R <replaceable>/path/to/data</replaceable> </userinput></screen> <para>Wenn ein ISO-Abbild bereits große Dateien enthält, sind keine weiteren Optionen für &man.growisofs.1; notwendig, um das Abbild auf die DVD zu brennen.</para> <para>Achten Sie darauf, eine aktuelle Version von <package>sysutils/cdrtools</package> zu verwenden, welche &man.mkisofs.8; enthält, da ältere Versionen keinen Support für große Dateien enthalten. Falls die neueste Version nicht funktioniert, installieren Sie <package>sysutils/cdrtools-devel</package> und lesen Sie &man.mkisofs.8;.</para> </note> </sect2> <sect2> <title><acronym>DVD</acronym>-Videos brennen</title> <indexterm> <primary><acronym>DVD</acronym></primary> <secondary>DVD-Video</secondary> </indexterm> <para>Ein DVD-Video ist eine spezielle Anordnung von Dateien, die auf den ISO-9660 und den micro-UDF (M-UDF) Spezifikationen beruht. Da DVD-Video auf eine bestimmte Datei-Hierarchie angewiesen ist, müssen <acronym>DVD</acronym>s mit speziellen Programmen wie <package>multimedia/dvdauthor</package> erstellt werden.</para> <para>Ist bereits ein Abbild des Dateisystems eines DVD-Videos vorhanden, kann es auf die gleiche Weise wie jedes andere Abbild gebrannt werden. Wenn <command>dvdauthor</command> verwendet wurde, um die <acronym>DVD</acronym> zu erstellen und die Resultate in <filename>/path/to/video</filename> liegen, kann das folgende Kommando verwendet werden, um ein DVD-Video zu brennen:</para> <screen>&prompt.root; <userinput>growisofs -Z <replaceable>/dev/cd0</replaceable> -dvd-video <replaceable>/path/to/video</replaceable></userinput></screen> <para><option>-dvd-video</option> wird an &man.mkisofs.8; weitergereicht, um die Datei-Hierarchie für ein DVD-Video zu erstellen. Weiterhin bewirkt diese Option, dass &man.growisofs.1; mit <option>-dvd-compat</option> aufgerufen wird.</para> </sect2> <sect2> <title><acronym>DVD+RW</acronym>-Medien benutzen</title> <indexterm> <primary><acronym>DVD</acronym></primary> <secondary><acronym>DVD+RW</acronym></secondary> </indexterm> <para>Im Gegensatz zu CD-RW-Medien müssen <acronym>DVD+RW</acronym>-Medien erst formatiert werden, bevor sie benutzt werden können. Es wird <emphasis>empfohlen</emphasis> &man.growisofs.1; einzusetzen, da das Programm Medien automatisch formatiert, wenn es erforderlich ist. Es ist jedoch möglich, auch <command>dvd+rw-format</command> zu nutzen, um die <acronym>DVD+RW</acronym> zu formatieren:</para> <screen>&prompt.root; <userinput>dvd+rw-format <replaceable>/dev/cd0</replaceable></userinput></screen> <para>Dieser Vorgang muss nur einmal durchgeführt werden. Denken Sie daran, dass nur neue DVD+RWs formatiert werden müssen. Anschließend können <acronym>DVD+RW</acronym>s, wie gewohnt gebrannt werden.</para> <para>Wenn Sie auf einer <acronym>DVD+RW</acronym> ein neues Dateisystem erstellen wollen, brauchen Sie die <acronym>DVD+RW</acronym> vorher nicht zu löschen. Überschreiben Sie einfach das vorige Dateisystem indem Sie eine neue Session anlegen:</para> <screen>&prompt.root; <userinput>growisofs -Z <replaceable>/dev/cd0</replaceable> -J -R <replaceable>/path/to/newdata</replaceable></userinput></screen> <para>Das <acronym>DVD+RW</acronym>-Format erlaubt es, Daten an eine vorherige Aufnahme anzuhängen. Dazu wird eine neue Session mit der schon bestehenden zusammengeführt. Es wird keine Multi-Session geschrieben, sondern &man.growisofs.1; <emphasis>vergrößert</emphasis> das ISO-9660-Dateisystem auf dem Medium.</para> <para>Das folgende Kommando fügt weitere Daten zu einer vorher erstellten <acronym>DVD+RW</acronym> hinzu:</para> <screen>&prompt.root; <userinput>growisofs -M <replaceable>/dev/cd0</replaceable> -J -R <replaceable>/path/to/nextdata</replaceable></userinput></screen> <para>Wenn Sie eine <acronym>DVD+RW</acronym> erweitern, verwenden Sie dieselben &man.mkisofs.8;-Optionen wie beim Erstellen der <acronym>DVD+RW</acronym>.</para> <note> <para>Verwenden Sie <option>-dvd-compat</option>, um bessere Kompatibilität mit <acronym>DVD-ROM</acronym>-Laufwerken zu gewährleisten. Zu einem <acronym>DVD+RW</acronym>-Medium können Sie mit dieser Option auch weiterhin Daten hinzufügen.</para> </note> <para>Um das Medium zu löschen, verwenden Sie:</para> <screen>&prompt.root; <userinput>growisofs -Z <replaceable>/dev/cd0</replaceable>=<replaceable>/dev/zero</replaceable></userinput></screen> </sect2> <sect2> <title><acronym>DVD-RW</acronym>-Medien benutzen</title> <indexterm> <primary><acronym>DVD</acronym></primary> <secondary><acronym>DVD-RW</acronym></secondary> </indexterm> <para>Eine <acronym>DVD-RW</acronym> kann mit zwei Methoden beschrieben werden: <firstterm>Sequential-Recording</firstterm> oder <firstterm>Restricted-Overwrite</firstterm>. Voreingestellt ist Sequential-Recording.</para> <para>Eine neue <acronym>DVD-RW</acronym> kann direkt beschrieben werden; sie muss nicht vorher formatiert werden. Allerdings muss eine <acronym>DVD-RW</acronym>, die mit Sequential-Recording aufgenommen wurde, zuerst gelöscht werden, bevor eine neue Session aufgenommen werden kann.</para> <para>Der folgende Befehl löscht eine <acronym>DVD-RW</acronym> im Sequential-Recording-Modus:</para> <screen>&prompt.root; <userinput>dvd+rw-format -blank=full <replaceable>/dev/cd0</replaceable></userinput></screen> <note> <para>Das vollständige Löschen mit <option>-blank=full</option> dauert mit einem 1x Medium ungefähr eine Stunde. Wenn die <acronym>DVD-RW</acronym> im Disk-At-Once-Modus (DAO) aufgenommen wurde, kann sie mit <option>-blank</option> schneller gelöscht werden. Um eine <acronym>DVD-RW</acronym> im DAO-Modus zu brennen, benutzen Sie das folgende Kommando:</para> <screen>&prompt.root; <userinput>growisofs -use-the-force-luke=dao -Z <replaceable>/dev/cd0</replaceable>=<replaceable>imagefile.iso</replaceable> </userinput></screen> <para>Die Option <option>-use-the-force-luke=dao</option> sollte nicht erforderlich sein, da &man.growisofs.1; den DAO-Modus automatisch erkennt.</para> <para>Der Restricted-Overwrite-Modus sollte mit jeder <acronym>DVD-RW</acronym> verwendet werden, da er flexibler als der voreingestellte Sequential-Recording-Modus ist.</para> </note> <para>Um Daten auf eine <acronym>DVD-RW</acronym> im Sequential-Recording-Modus zu schreiben, benutzen Sie dasselbe Kommando wie für die anderen <acronym>DVD</acronym>-Formate:</para> <screen>&prompt.root; <userinput>growisofs -Z <replaceable>/dev/cd0</replaceable> -J -R <replaceable>/path/to/data</replaceable></userinput></screen> <para>Um weitere Daten zu einer Aufnahme hinzuzufügen, benutzen Sie <option>-M</option> mit &man.growisofs.1;. Werden die Daten im Sequential-Recording-Modus hinzugefügt, wird eine neue Session erstellt. Das Ergebnis ist ein Multi-Session-Medium.</para> <para>Eine <acronym>DVD-RW</acronym> im Restricted-Overwrite-Modus muss nicht gelöscht werden, um eine neue Session aufzunehmen. Das Medium kann einfach mit <option>-Z</option> überschrieben werden. Mit <option>-M</option> kann das ISO-9660-Dateisystem, wie mit einer <acronym>DVD+RW</acronym>, vergrößert werden. Die <acronym>DVD</acronym> enthält danach eine Session.</para> <para>Benutzen sie das nachstehende Kommando, um den Restricted-Overwrite-Modus einzustellen:</para> <screen>&prompt.root; <userinput>dvd+rw-format <replaceable>/dev/cd0</replaceable></userinput></screen> <para>Das folgende Kommando stellt den Modus wieder auf Sequential-Recording zurück:</para> <screen>&prompt.root; <userinput>dvd+rw-format -blank=full <replaceable>/dev/cd0</replaceable></userinput></screen> </sect2> <sect2> <title>Multi-Session</title> <para>Nur wenige <acronym>DVD-ROM</acronym>-Laufwerke unterstützen Multi-Session-DVDs und lesen meist nur die erste Session. Mehrere Sessions werden von DVD+R, DVD-R und <acronym>DVD-RW</acronym> im Sequential-Recording-Modus unterstützt. Im Modus Restricted-Overwrite gibt nur eine Session.</para> <para>Wenn das Medium noch nicht geschlossen ist, erstellt das nachstehende Kommando eine neue Session auf einer DVD+R, DVD-R oder <acronym>DVD-RW</acronym> im Sequential-Recording-Modus:</para> <screen>&prompt.root; <userinput>growisofs -M <replaceable>/dev/cd0</replaceable> -J -R <replaceable>/path/to/nextdata</replaceable></userinput></screen> <para>Wird dieses Kommando mit <acronym>DVD+RW</acronym>- oder <acronym>DVD-RW</acronym>-Medien im Restricted-Overwrite-Modus benutzt, werden die neuen Daten mit den Daten der bestehenden Session zusammengeführt. Das Medium enthält danach eine Session. Nutzen Sie diese Methode, um neue Daten zu einer bestehenden Session hinzuzufügen.</para> <note> <para>Für den Anfang und das Ende einer Session wird auf dem Medium zusätzlicher Platz verbraucht. Um den Speicherplatz auf dem Medium optimal auszunutzen, sollten Sie daher Sessions mit vielen Daten hinzufügen. Auf ein DVD+R-Medium passen maximal 154 Sessions, 2000 Sessions auf ein DVD-R-Medium und 127 Sessions auf eine DVD+R Double Layer.</para> </note> </sect2> <sect2> <title>Weiterführendes</title> <para><command>dvd+rw-mediainfo <replaceable>/dev/cd0</replaceable></command> zeigt Informationen über eine im Laufwerk liegende <acronym>DVD</acronym> an.</para> <para>Weiteres zu <application>dvd+rw-tools</application> finden Sie in &man.growisofs.1;, auf der <link xlink:href="http://fy.chalmers.se/~appro/linux/DVD+RW/"> dvd+rw-tools Web-Seite</link> und in den Archiven der <link xlink:href="http://lists.debian.org/cdwrite/"> cdwrite-Mailingliste</link>.</para> <note> <para>Wenn Sie einen Problembericht zur Nutzung der <application>dvd+rw-tools</application> erstellen, fügen Sie immer die Ausgabe von <command>dvd+rw-mediainfo</command> hinzu.</para> </note> </sect2> <sect2 xml:id="creating-dvd-ram"> <title><acronym>DVD-RAM</acronym></title> <indexterm> <primary><acronym>DVD</acronym></primary> <secondary><acronym>DVD-RAM</acronym></secondary> </indexterm> <para><acronym>DVD-RAM</acronym>-fähige Brenner nutzten die <acronym>SCSI</acronym>- oder <acronym>ATAPI</acronym>-Schnittstelle. Für <acronym>ATAPI</acronym>-Geräte muss der DMA-Modus aktiviert werden, indem die folgende Zeile in <filename>/boot/loader.conf</filename> hinzugefügt wird:</para> <programlisting>hw.ata.atapi_dma="1"</programlisting> <para>Eine <acronym>DVD-RAM</acronym> kann mit einer Wechselplatte verglichen werden. Wie diese, muss auch eine <acronym>DVD-RAM</acronym> vor dem ersten Einsatz formatiert werden. In diesem Beispiel wird das gesamte Medium mit dem Standard-UFS2-Dateisystem formatiert:</para> <screen>&prompt.root; <userinput>dd if=/dev/zero of=<replaceable>/dev/acd0</replaceable> bs=2k count=1</userinput> &prompt.root; <userinput>bsdlabel -Bw <replaceable>acd0</replaceable></userinput> &prompt.root; <userinput>newfs <replaceable>/dev/acd0</replaceable></userinput></screen> <para>Denken Sie dabei daran, dass Sie gegebenenfalls die Gerätedatei (hier <filename>acd0</filename>) an Ihre Konfiguration anpassen müssen.</para> <para>Nachdem die <acronym>DVD-RAM</acronym> formatiert ist, kann sie wie eine normale Festplatte gemountet werden:</para> <screen>&prompt.root; <userinput>mount <replaceable>/dev/acd0</replaceable> <replaceable>/mnt</replaceable></userinput></screen> <para>Danach kann schreibend und lesend auf das <acronym>DVD-RAM</acronym> Medium zugegriffen werden.</para> </sect2> </sect1> <sect1 xml:id="floppies"> <title>Disketten benutzen</title> <!-- <authorgroup> <author> <personname> <firstname>Julio</firstname> <surname>Merino</surname> </personname> <contrib>Original von </contrib> </author> </authorgroup> <authorgroup> <author> <personname> <firstname>Martin</firstname> <surname>Karlsson</surname> </personname> <contrib>Umgeschrieben von </contrib> </author> </authorgroup> --> <para>Dieser Abschnitt beschreibt die Formatierung von 3,5 Zoll Disketten in &os;.</para> <procedure> <title>Disketten formatieren</title> <para>Bevor eine Diskette benutzt werden kann, muss sie (low-level) formatiert werden, was normalerweise der Hersteller schon gemacht hat. Sie können die Diskette allerdings noch einmal formatieren, um das Medium zu überprüfen. Benutzen Sie &man.fdformat.1;, um Disketten unter &os; zu formatieren. Achten Sie dabei auf Fehlermeldungen, die schlechte Speichermedien anzeigen.</para> <step> <para>Um eine Diskette zu formatieren, legen Sie eine 3,5 Zoll Diskette in das erste Diskettenlaufwerk ein und führen das folgende Kommando aus:</para> <screen>&prompt.root; <userinput>/usr/sbin/fdformat -f 1440 /dev/fd0</userinput></screen> </step> <step> <para>Nach dem Formatieren muss auf der Diskette ein Disklabel erstellt werden, um die Größe und Geometrie der Diskette zu erkennen. Eine Liste der unterstützten Geometrien finden Sie in <filename>/etc/disktab</filename>.</para> <para>Erstellen Sie nun das Label mit &man.bsdlabel.8;:</para> <screen>&prompt.root; <userinput>/sbin/bsdlabel -B -w /dev/fd0 fd1440</userinput></screen> </step> <step> <para>Auf der Diskette kann nun ein Dateisystem erstellt werden (high-level Formatierung). Das Dateisystem der Diskette kann entweder UFS oder FAT sein, wobei FAT für Disketten in der Regel die bessere Wahl ist.</para> <para>Um die Diskette mit FAT zu formatieren, geben Sie folgendes Kommando ein:</para> <screen>&prompt.root; <userinput>/sbin/newfs_msdos /dev/fd0</userinput></screen> </step> </procedure> <para>Die Diskette kann nun benutzt werden. Um die Diskette zu verwenden, kann sie mit &man.mount.msdosfs.8; eingehängt werden. Man kann auch <package>emulators/mtools</package> aus der Ports-Sammlung installieren, um mit der Diskette zu arbeiten.</para> </sect1> <sect1 xml:id="backup-basics"> <title>Datensicherung</title> <!-- <authorgroup> <author> <personname> <firstname>Lowell</firstname> <surname>Gilbert</surname> </personname> <contrib>Beigetragen von </contrib> </author> </authorgroup> --> <para>Die Planung und Umsetzung einer Backup-Strategie ist unerlässlich, um Daten in bestimmten Situationen wiederherstellen zu können, zum Beispiel bei Plattendefekten, versehentlichem Löschen von Dateien, willkürlicher Korrumpierung von Dateien oder der vollständigen Zerstörung des Systems und der Backups, die am gleichen Ort aufbewahrt werden.</para> <para>Die Art und der Zeitplan des Backups kann variieren, abhängig von der Wichtigkeit der Daten, der benötigten Granularität zur Wiederherstellung von Dateien und der Dauer einer akzeptablen Ausfallzeit. Zu den möglichen Backup-Strategien gehören unter anderem:</para> <itemizedlist> <listitem> <para>Die Archivierung des kompletten Systems auf externen Datenträgern. Dieser Ansatz schützt zwar vor allen oben aufgeführten Problemen, ist aber zeitaufwändig und unbequem bei der Wiederherstellung, insbesondere für nicht privilegierte Benutzer.</para> </listitem> <listitem> <para>Dateisystem-Snapshots sind nützlich bei der Wiederherstellung von gelöschten Dateien, bzw. früheren Versionen von Dateien.</para> </listitem> <listitem> <para>Kopien ganzer Dateisysteme oder Festplatten, die mit einem anderen System im Netzwerk mittels <package>net/rsync</package> synchronisiert werden.</para> </listitem> <listitem> <para>Hardware oder Software <acronym>RAID</acronym>, was im Falle von Plattendefekten die Ausfallzeit minimiert oder vermeidet.</para> </listitem> </itemizedlist> <para>Üblicherweise wird eine Mischung aus verschiedenen Strategien verwendet. Es kann zum Beispiel ein Sicherungsplan erstellt und automatisiert werden, um eine wöchentliche, vollständige Systemsicherung, ergänzt mit stündlichen ZFS-Snapshots, zu erstellen. Darüber hinaus könnte man eine manuelle Sicherung einzelner Verzeichnisse oder Dateien machen, bevor diese bearbeitet oder gelöscht werden.</para> <para>Dieser Abschnitt beschreibt einige Programme, die zur Erstellung und Verwaltung von Sicherungen unter &os; verwendet werden können.</para> <sect2> <title>Sicherung von Dateisystemen</title> <indexterm> <primary>Backup-Software</primary> <secondary>dump / restore</secondary> </indexterm> <indexterm> <primary><command>dump</command></primary> </indexterm> <indexterm> <primary><command>restore</command></primary> </indexterm> <para>Die traditionellen &unix;-Programme zum Sichern und Wiederherstellen von Dateisystemen sind &man.dump.8; und &man.restore.8;. Diese Programme arbeiten auf der Block-Ebene der Festplatte, also unterhalb des Abstraktionslevels von Dateien, Links und Verzeichnissen, die die Grundlage des Dateisystemkonzepts bilden. Im Gegensatz zu anderen Backup-Programmen sichert <command>dump</command> ein ganzes Dateisystem und nicht nur einen Teil des Dateisystems, oder einen Verzeichnisbaum, der mehr als ein Dateisystem umfasst. Anstatt Dateien oder Verzeichnisse zu schreiben, schreibt <command>dump</command> die Blöcke, aus denen die Dateien und Verzeichnisse bestehen.</para> <note> <para>Wird <command>dump</command> benutzt, um das Root-Verzeichnis zu sichern, werden <filename>/home</filename>, <filename>/usr</filename> und viele andere Verzeichnisse nicht gesichert, da dies normalerweise Mountpunkte für andere Dateisysteme oder symbolische Links zu diesen Dateisystemen sind.</para> </note> <para>Wenn <command>restore</command> zum Extrahieren von Daten verwendet wird, werden temporäre Dateien standardmäßig in <filename>/tmp</filename> abgelegt. Wenn Sie von einer Platte mit einem kleinen <filename>/tmp</filename>-Verzeichnis zurücksichern, setzen Sie die Umgebungsvariable <envar>TMPDIR</envar> auf ein Verzeichnis mit mehr freiem Speicherplatz, damit die Wiederherstellung gelingt.</para> <para>Beachten Sie bei der Verwendung von <command>dump</command>, dass es einige Eigenarten aus den frühen Tagen der Version 6 von AT&T &unix; (ca. 1975) beibehalten hat. Die Standardparameter gehen davon aus, dass auf einem 9-Spur-Band gesichert wird, und nicht auf ein anderes Medium oder auf Sicherungsbänder mit hoher Dichte. Diese Standardwerte müssen auf der Kommandozeile überschrieben werden.</para> <indexterm> <primary><filename>.rhosts</filename></primary> </indexterm> <para>Es ist möglich, das Dateisystem über das Netzwerk auf einem anderen Rechner zu sichern, oder auf einem Bandlaufwerk eines anderen Rechners. Obwohl die Programme &man.rdump.8; und &man.rrestore.8; für diese Zwecke benutzt werden können, gelten sie als nicht sicher.</para> <para>Verwenden Sie stattdessen <command>dump</command> und <command>restore</command> in einer sichereren Weise über eine <acronym>SSH</acronym>-Verbindung. In diesem Beispiel wird eine vollständige, komprimierte Sicherung von <filename>/usr</filename> erstellt, das anschließend an einen bestimmten Host über eine <acronym>SSH</acronym>-Verbindung gesendet wird.</para> <example> <title><command>dump</command> mit <application>ssh</application> benutzen</title> <screen>&prompt.root; <userinput>/sbin/dump -0uan -f - /usr | gzip -2 | ssh -c blowfish \ targetuser@targetmachine.example.com dd of=/mybigfiles/dump-usr-l0.gz</userinput></screen> </example> <para>In diesem Beispiel wird <envar>RSH</envar> gesetzt, um über eine <acronym>SSH</acronym>-Verbindung eine Sicherung auf ein Bandlaufwerk eines entfernten Systems zu schreiben:</para> <example> <title><command>dump</command> über <application>ssh</application> mit gesetzter <envar>RSH</envar> benutzen</title> <screen>&prompt.root; <userinput>env RSH=/usr/bin/ssh /sbin/dump -0uan -f tatargetuser@targetmachine.example.com:/dev/sa0 /usr</userinput></screen> </example> </sect2> <sect2> <title>Sicherung von Verzeichnissen</title> <indexterm> <primary>Backup-Software</primary> <secondary><command>tar</command></secondary> </indexterm> <para>Einige integrierte Werkzeuge stehen zur Sicherung und Wiederherstellung von bestimmten Dateien und Verzeichnissen bei Bedarf zur Verfügung.</para> <para>Wenn es um die Sicherung von Dateien in einem Verzeichnis geht, ist &man.tar.1; eine gute Wahl. Dieses Werkzeug stammt aus Version 6 von AT&T &unix; und erwartet standardmäßig eine rekursive Sicherung auf ein lokales Band. Es können jedoch Optionen angegeben werden, um den Namen einer Sicherungsdatei zu bestimmen.</para> <indexterm><primary><command>tar</command></primary></indexterm> <para>In diesem Beispiel wird eine komprimierte Sicherung des aktuellen Verzeichnisses nach <filename>/tmp/mybackup.tgz</filename> gespeichert. Achten Sie bei der Sicherungsdatei darauf, dass sie nicht in dem Verzeichnis gespeichert wird, welches gesichert werden soll.</para> <example> <title>Das aktuelle Verzeichnis mit <command>tar</command> sichern</title> <screen>&prompt.root; <userinput>tar czvf <replaceable>/tmp/mybackup.tgz</replaceable> .</userinput></screen> </example> <para>Um eine komplette Sicherung wiederherzustellen, wechseln Sie mit <command>cd</command> in das Verzeichnis, in dem Sie die Daten wiederherstellen möchten und geben Sie den Namen der Sicherungsdatei an. Beachten Sie, dass dabei alle Dateien in dem Verzeichnis überschrieben werden. Im Zweifel sichern Sie besser in einem temporären Verzeichnis, oder geben Sie den Verzeichnisnamen bei der Wiederherstellung an.</para> <example> <title>Wiederherstellung mit <command>tar</command> in das aktuelle Verzeichnis</title> <screen>&prompt.root; <userinput>tar xzvf <replaceable>/tmp/mybackup.tgz</replaceable></userinput></screen> </example> <para>Es gibt dutzende Optionen, die in &man.tar.1; beschrieben werden. Das Programm unterstützt auch die Verwendung von Ausschlußmustern, um bestimmte Dateien von der Sicherung oder Wiederherstellung von Verzeichnissen auszuschließen.</para> <indexterm> <primary>Backup-Software</primary> <secondary><command>cpio</command></secondary> </indexterm> <para>Um bestimmte, aufgelistete Dateien und Verzeichnisse zu sichern, ist &man.cpio.1; eine gute Wahl. Im Gegensatz zu <command>tar</command> weiß <command>cpio</command> nicht wie ein Verzeichnisbaum durchlaufen wird. Daher ist es auf eine Liste von zu sichernden Dateien angewiesen.</para> <para>So kann beispielsweise eine Liste von Dateien mit <command>ls</command> oder <command>find</command> erzeugt werden. Dieses Beispiel erstellt eine rekursive Liste des aktuellen Verzeichnisses, die dann über eine Pipe an <command>cpio</command> übergeben wird, um eine Sicherung namens <filename>/tmp/mybackup.cpio</filename> zu erstellen.</para> <example> <title>Rekursive Sicherung des aktuellen Verzeichnisses mit <command>ls</command> und <command>cpio</command></title> <screen>&prompt.root; <userinput>ls -R | cpio -ovF /tmp/mybackup.cpio</userinput></screen> </example> <indexterm> <primary>Backup-Software</primary> <secondary><command>pax</command></secondary> </indexterm> <indexterm><primary><command>pax</command></primary></indexterm> <indexterm><primary>POSIX</primary></indexterm> <indexterm><primary>IEEE</primary></indexterm> <para>&man.pax.1; ist ein Programm, welches versucht die Funktionen von <command>tar</command> und <command>cpio</command> zu kombinieren. Über die Jahre hinweg sind die verschiedenen Versionen von <command>tar</command> und <command>cpio</command> leicht inkompatibel geworden. Daher hat &posix; <command>pax</command> geschaffen, welches versucht viele der unterschiedlichen <command>cpio</command>- und <command>tar</command>-Formate zu lesen und zu schreiben, außerdem einige neue, eigene Formate.</para> <para>Für die vorangegangenen Beispiele wäre ein äquivalenter Aufruf von <command>pax</command>:</para> <example> <title>Das aktuelle Verzeichnis mit <command>pax</command> sichern</title> <screen>&prompt.root; <userinput>pax -wf <replaceable>/tmp/mybackup.pax</replaceable> .</userinput></screen> </example> </sect2> <sect2 xml:id="backups-tapebackups"> <title>Bandmedien benutzen</title> <indexterm><primary>Bandmedien</primary></indexterm> <para>Obwohl sich Bandmedien mit der Zeit weiterentwickelt haben, verwenden moderne Backup-Systeme in der Regel <foreignphrase>Offsite-Backups</foreignphrase> in Verbindung mit lokalen Wechseldatenträgern. &os; unterstützt alle <acronym>SCSI</acronym>-Bandlaufwerke, wie etwa <acronym>LTO</acronym> und <acronym>DAT</acronym>. Zusätzlich gibt es begrenzte Unterstützung für <acronym>SATA</acronym>- und <acronym>USB</acronym>-Bandlaufwerke.</para> <para>Für <acronym>SCSI</acronym>-Bandlaufwerke nutzt &os; den &man.sa.4; Treiber, der die Schnittstellen <filename>/dev/sa0</filename>, <filename>/dev/nsa0</filename> und <filename>/dev/esa0</filename> bereitstellt. Der Name des physikalischen Geräts ist <filename>/dev/sa0</filename>. Wird <filename>/dev/nsa0</filename> benutzt, dann wird die Backup-Anwendung nach dem Schreibvorgang das Band nicht zurückspulen, was es ermöglicht, mehr als eine Datei auf das Band zu schreiben. Die Verwendung von <filename>/dev/esa0</filename> wirft das Band aus, nachdem das Gerät geschlossen wurde.</para> <para>&os; nutzt <command>mt</command> für die Steuerung der Operationen des Bandlaufwerks, wie die Suche nach Dateien auf einem Band, oder um Kontrollmarkierungen auf ein Band zu schreiben. Beispielsweise können die ersten drei Dateien auf einem Band erhalten bleiben, indem sie übersprungen werden, bevor eine neue Datei auf das Band geschrieben wird</para> <screen>&prompt.root; <userinput>mt -f /dev/nsa0 fsf 3</userinput></screen> <para>Dieses Werkzeug unterstützt viele Operationen. Weitere Einzelheiten finden Sie in &man.mt.1;.</para> <para>Um eine Datei mit <command>tar</command> auf ein Band zu schreiben, geben Sie den Namen des Bandlaufwerks und den Dateinamen an:</para> <screen>&prompt.root; <userinput>tar cvf /dev/sa0 <replaceable>file</replaceable></userinput></screen> <para>Wiederherstellung von Dateien aus dem <command>tar</command>-Archiv von Band in das aktuelle Verzeichnis:</para> <screen>&prompt.root; <userinput>tar xvf /dev/sa0</userinput></screen> <para>Benutzen Sie <command>dump</command>, um ein <acronym>UFS</acronym>-Dateisystem zu sichern. Dieses Beispiel sichert <filename>/usr</filename>, ohne danach das Band zurückzuspulen:</para> <screen>&prompt.root; <userinput>dump -0aL -b64 -f /dev/nsa0 /usr</userinput></screen> <para>Interaktive Wiederherstellung von Dateien aus einer &man.dump.8;-Datei von Band in das aktuelle Verzeichnis:</para> <screen>&prompt.root; <userinput>restore -i -f /dev/nsa0</userinput></screen> </sect2> <sect2 xml:id="backups-programs-amanda"> <title>Backup-Software von Drittanbietern</title> <indexterm> <primary>Backup-Software</primary> </indexterm> <para>Die &os; Ports-Sammlung enthält viele Programme von Drittanbietern, die verwendet werden können um die zeitliche Erstellung von Sicherungen zu planen, zu vereinfachen und bequemer zu machen. Viele dieser Programme basieren auf dem Client-Server-Modell und können benutzt werden, um die Sicherung von einzelnen Systemen oder allen Rechnern in einem Netzwerk zu automatisieren.</para> <para>Zu den bekannten Programmen gehören <application>Amanda</application>, <application>Bacula</application>, <application>rsync</application> und <application>duplicity</application>.</para> </sect2> <sect2> <title>Die Wiederherstellung in einem Notfall</title> <para>Zusätzlich zu den regelmäßigen Sicherungen empfiehlt es sich, die folgenden Schritte im Rahmen eines Notfallplans durchzuführen.</para> <indexterm> <primary><command>bsdlabel</command></primary> </indexterm> <para>Erstellen Sie einen Ausdruck der Ausgabe der folgenden Kommandos:</para> <itemizedlist> <listitem> <para><command>gpart show</command></para> </listitem> <listitem> <para><command>more /etc/fstab</command></para> </listitem> <listitem> <para><command>dmesg</command></para> </listitem> </itemizedlist> <indexterm><primary>Live-CD</primary></indexterm> <para>Bewahren Sie diesen Ausdruck und eine Kopie des Installationsmediums an einem sicheren Ort auf. Im Falle einer Wiederherstellung im Notfall, starten Sie von dem Installationsmedium und wählen Sie <literal>Live CD</literal>, um eine Rettungs-Shell zu starten. Dieser Rettungsmodus kann verwendet werden, um den aktuellen Stand des Systems anzuzeigen, und wenn nötig, Festplatten zu formatieren und Daten aus den Sicherungen wiederherzustellen.</para> <note> <para>Das Installationsmedium für &os;/&arch.i386; &rel2.current;-RELEASE enthält keine Rettungs-Shell. Laden Sie für diese Version ein Abbild der Livefs <acronym>CD</acronym> von <uri xlink:href="ftp://ftp.FreeBSD.org/pub/FreeBSD/releases/&arch.i386;/ISO-IMAGES/&rel2.current;/&os;-&rel2.current;-RELEASE-&arch.i386;-livefs.iso">ftp://ftp.FreeBSD.org/pub/FreeBSD/releases/&arch.i386;/ISO-IMAGES/&rel2.current;/&os;-&rel2.current;-RELEASE-&arch.i386;-livefs.iso</uri>.</para> </note> <para>Als nächstes testen Sie die Rettungs-Shell und die Sicherungen. Dokumentieren Sie diesen Ablauf. Bewahren Sie diese Notizen zusammen mit den Medien, den Ausdrucken und den Sicherungen auf. Diese Notizen können Ihnen im Notfall helfen eine versehentliche Zerstörung der Sicherungen zu verhindern, während Sie unter Stress eine Wiederherstellung durchführen.</para> <para>Als zusätzliche Sicherheitsvorkehrung kann jeweils die letzte Sicherung an einem entfernten Standort aufbewahrt werden. Dieser Standort sollte räumlich von den Computern und Festplatten durch eine erhebliche Entfernung getrennt sein.</para> </sect2> </sect1> <sect1 xml:id="disks-virtual"> <info> <title>Speicherbasierte Laufwerke</title> <authorgroup> <author> <personname> <firstname>Marc</firstname> <surname>Fonvieille</surname> </personname> <contrib>Verbessert und neu strukturiert von </contrib> </author> </authorgroup> </info> <para>Neben physikalischen Laufwerken unterstützt &os; auch speicherbasierte Laufwerke. Eine mögliche Verwendung für ein speicherbasiertes Laufwerk ist der Zugriff auf ein <acronym>ISO</acronym>-Dateisystem, jedoch ohne vorher die Daten auf eine <acronym>CD</acronym> oder <acronym>DVD</acronym> zu brennen und dann das Medium einzuhängen.</para> <para>&os; verwendet den &man.md.4; Treiber um Unterstützung für speicherbasierte Laufwerke bereitzustellen. Dieser Treiber ist bereits im <filename>GENERIC</filename>-Kernel enthalten. Wenn Sie eine angepasste Kernelkonfigurationsdatei verwenden, stellen Sie sicher, dass folgende Zeile enthalten ist:</para> <programlisting>device md</programlisting> <sect2 xml:id="disks-mdconfig"> <title>Ein- und Aushängen von bestehenden Abbildern</title> <indexterm> <primary>Laufwerke</primary> <secondary>speicherbasierte</secondary> </indexterm> <para>Um ein bestehendes Abbild eines Dateisystems einzuhängen, verwenden Sie <command>mdconfig</command> zusammen mit dem Namen der <acronym>ISO</acronym>-Datei und einer freien Gerätenummer. Benutzen Sie dann diese Gerätenummer, um das Abbild in einen existierenden Mountpunkt einzuhängen. Sobald dies erledigt ist, erscheinen die Dateien des Abbildes unterhalb des Mountpunktes. Dieses Beispiel wird <filename>diskimage.iso</filename> an das speicherbasierte Laufwerk <filename>/dev/md0</filename> binden und dann in <filename>/mnt</filename> einhängen:</para> <screen>&prompt.root; <userinput>mdconfig -f <replaceable>diskimage.iso</replaceable> -u <replaceable>0</replaceable></userinput> &prompt.root; <userinput>mount /dev/md<replaceable>0</replaceable> <replaceable>/mnt</replaceable></userinput></screen> <para>Wenn keine Gerätenummer mit <option>-u</option> angegeben ist, wird von &man.md.4; automatisch eine ungenutzte Gerätenummer zugewiesen. Das zugewiesene Gerät wird auf der Standardausgabe ausgegeben (zum Beispiel <filename>md4</filename>). Weitere Informationen zu diesem Kommando und dessen Optionen finden Sie in &man.mdconfig.8;.</para> <indexterm> <primary>Laufwerke</primary> <secondary>speicherbasiertes Laufwerk aushängen</secondary> </indexterm> <para>Wenn ein speicherbasiertes Laufwerk nicht mehr in Gebrauch ist, sollten seine belegten Ressourcen wieder an das System zurückgegeben werden. Hängen Sie zuerst das Dateisystem aus, dann verwenden Sie <command>mdconfig</command>, um die Platte vom System zu trennen und die Ressourcen freizugeben.</para> <screen>&prompt.root; <userinput>umount /mnt</userinput> &prompt.root; <userinput>mdconfig -d -u <replaceable>0</replaceable></userinput></screen> <para>Um festzustellen, ob noch irgendwelche speicherbasierten Laufwerke am System angeschlossen sind, benutzen Sie <command>mdconfig -l</command>.</para> </sect2> <sect2 xml:id="disks-md-freebsd5"> <title>Ein datei- oder speicherbasiertes Laufwerk erzeugen</title> <indexterm> <primary>Laufwerke</primary> <secondary>speicherbasierte</secondary> </indexterm> <para>&os; unterstützt auch speicherbasierte Laufwerke, bei denen der verwendete Speicher entweder einer Festplatte, oder einem Bereich im Arbeitsspeicher zugewiesen wird. Die erste Methode ist gemeinhin als dateibasiertes Dateisystem, die zweite als speicherbasiertes Dateisystem bekannt. Beide Typen können mit <command>mdconfig</command> erzeugt werden.</para> <para>Um ein speicherbasiertes Dateisystem zu erstellen, geben Sie den Typ <literal>swap</literal> sowie die gewünschte Größe des Laufwerks an. Dieses Beispiel erzeugt ein 5 MB großes Laufwerk an der Gerätenummer <literal>1</literal>. Das Laufwerk wird mit dem <acronym>UFS</acronym>-Dateisystem formatiert, bevor es eingehängt wird:</para> <screen>&prompt.root; <userinput>mdconfig -a -t swap -s <replaceable>5</replaceable>m -u <replaceable>1</replaceable></userinput> &prompt.root; <userinput>newfs -U md1</userinput> /dev/md1: 5.0MB (10240 sectors) block size 16384, fragment size 2048 using 4 cylinder groups of 1.27MB, 81 blks, 192 inodes. with soft updates super-block backups (for fsck -b #) at: 160, 2752, 5344, 7936 &prompt.root; <userinput>mount /dev/md<replaceable>1</replaceable> <replaceable>/mnt</replaceable></userinput> &prompt.root; <userinput>df <replaceable>/mnt</replaceable></userinput> Filesystem 1K-blocks Used Avail Capacity Mounted on /dev/md1 4718 4 4338 0% /mnt</screen> <para>Um ein dateibasiertes Dateisystem zu erstellen, muss zunächst ein Stück Speicher auf der Festplatte reserviert werden. Dieses Beispiel erzeugt eine 5 KB große Datei namens <filename>newimage</filename>:</para> <screen>&prompt.root; <userinput>dd if=/dev/zero of=<replaceable>newimage</replaceable> bs=1k count=<replaceable>5</replaceable>k</userinput> 5120+0 records in 5120+0 records out</screen> <para>Als nächstes muss diese Datei an ein speicherbasiertes Laufwerk gebunden, gelabelt und mit dem <acronym>UFS</acronym>-Dateisystem formatiert werden. Danach können Sie das Laufwerk einhängen und die Größe überprüfen:</para> <screen>&prompt.root; <userinput>mdconfig -f <replaceable>newimage</replaceable> -u <replaceable>0</replaceable></userinput> &prompt.root; <userinput>bsdlabel -w md<replaceable>0</replaceable> auto</userinput> &prompt.root; <userinput>newfs md<replaceable>0</replaceable>a</userinput> /dev/md0a: 5.0MB (10224 sectors) block size 16384, fragment size 2048 using 4 cylinder groups of 1.25MB, 80 blks, 192 inodes. super-block backups (for fsck -b #) at: 160, 2720, 5280, 7840 &prompt.root; <userinput>mount /dev/md<replaceable>0</replaceable>a <replaceable>/mnt</replaceable></userinput> &prompt.root; <userinput>df <replaceable>/mnt</replaceable></userinput> Filesystem 1K-blocks Used Avail Capacity Mounted on /dev/md0a 4710 4 4330 0% /mnt</screen> <para>Es benötigt mehrere Befehle, um ein datei- oder speicherbasiertes Dateisystem mit <command>mdconfig</command> zu erstellen. &os; enthält auch <command>mdmfs</command>, das ein speicherbasiertes Laufwerk automatisch konfigurieren, formatieren und einhängen kann. Nachdem beispielsweise <filename>newimage</filename> mit <command>dd</command> erstellt wurde, hätte auch der folgende Befehl benutzt werden können, anstelle der oben verwendeten Kommandos <command>bsdlabel</command>, <command>newfs</command> und <command>mount</command>:</para> <screen>&prompt.root; <userinput>mdmfs -F <replaceable>newimage</replaceable> -s <replaceable>5</replaceable>m md<replaceable>0</replaceable> <replaceable>/mnt</replaceable></userinput></screen> <para>Um hingegen ein speicherbasiertes Laufwerk mit <command>mdmfs</command> zu erstellen, wird dieser Befehl benutzt:</para> <screen>&prompt.root; <userinput>mdmfs -s <replaceable>5</replaceable>m md<replaceable>1</replaceable> <replaceable>/mnt</replaceable></userinput></screen> <para>Wenn die Gerätenummer nicht angegeben wird, wählt <command>mdmfs</command> automatisch ein ungenutztes Gerät aus. Weitere Einzelheiten über <command>mdmfs</command> finden Sie in &man.mdmfs.8;.</para> </sect2> </sect1> <sect1 xml:id="snapshots"> <info> <title>Schnappschüsse von Dateisystemen</title> <authorgroup> <author> <personname> <firstname>Tom</firstname> <surname>Rhodes</surname> </personname> <contrib>Beigetragen von </contrib> </author> </authorgroup> </info> <indexterm> <primary>Schnappschüsse</primary> <secondary>von Dateisystemen</secondary> </indexterm> <para>Zusammen mit <link linkend="soft-updates">Soft Updates</link> bietet &os; eine weitere Funktion: Schnappschüsse von Dateisystemen.</para> <para>UFS-Schnappschüsse sind Dateien, die ein Abbild eines Dateisystems enthalten und müssen auf dem jeweiligen Dateisystem erstellt werden. Pro Dateisystem darf es maximal 20 Schnappschüsse, die im Superblock vermerkt werden, geben. Schnappschüsse bleiben erhalten, wenn das Dateisystem abgehangen, neu eingehangen oder das System neu gestartet wird. Wenn ein Schnappschuss nicht mehr benötigt wird, kann er mit &man.rm.1; gelöscht werden. Es ist egal, in welcher Reihenfolge Schnappschüsse gelöscht werden. Es kann allerdings vorkommen, dass nicht der gesamte Speicherplatz wieder freigegeben wird, da ein anderer Schnappschuss einen Teil der entfernten Blöcke für sich beanspruchen kann.</para> <para>Das unveränderliche <option>Snapshot</option>-Dateiflag wird nach der Erstellung des Snapshots von &man.mksnap.ffs.8; gesetzt. Durch die Verwendung von &man.unlink.1; ist es allerdings möglich, einen Schnappschuss zu löschen.</para> <para>Schnappschüsse werden mit &man.mount.8; erstellt. Das folgende Kommando legt einen Schnappschuss von <filename>/var</filename> in <filename>/var/snapshot/snap</filename> ab:</para> <screen>&prompt.root; <userinput>mount -u -o snapshot /var/snapshot/snap /var</userinput></screen> <para>Alternativ kann der Schnappschuss auch mit &man.mksnap.ffs.8; erstellt werden.</para> <screen>&prompt.root; <userinput>mksnap_ffs /var /var/snapshot/snap</userinput></screen> <para>Um Schnappschüsse auf einem Dateisystem, beispielsweise <filename>/var</filename> zu finden, kann man &man.find.1; verwenden:</para> <screen>&prompt.root; <userinput>find /var -flags snapshot</userinput></screen> <para>Nachdem ein Schnappschuss erstellt wurde, können Sie ihn für verschiedene Zwecke benutzen:</para> <itemizedlist> <listitem> <para>Sie können den Schnappschuss für die Datensicherung benutzen und ihn auf eine <acronym>CD</acronym> oder ein Band schreiben.</para> </listitem> <listitem> <para>Die Integrität des Schnappschusses kann mit &man.fsck.8; geprüft werden. Wenn das Dateisystem zum Zeitpunkt der Erstellung des Schnappschusses in Ordnung war, sollte &man.fsck.8; immer erfolgreich durchlaufen.</para> </listitem> <listitem> <para>Sie können den Schnappschuss mit &man.dump.8; sichern. Sie erhalten dann eine konsistente Sicherung des Dateisystems zu dem Zeitpunkt, der durch den Zeitstempel des Schnappschusses gegeben ist. Der Schalter <option>-L</option> von &man.dump.8; erstellt für die Sicherung einen Schnappschuss und entfernt diesen am Ende der Sicherung wieder.</para> </listitem> <listitem> <para>Sie können einen Schnappschuss in den Verzeichnisbaum einhängen und sich dann den Zustand des Dateisystems zu dem Zeitpunkt ansehen, an dem der Schnappschuss erstellt wurde. Der folgende Befehl hängt den Schnappschuss <filename>/var/snapshot/snap</filename> ein:</para> <screen>&prompt.root; <userinput>mdconfig -a -t vnode -o readonly -f /var/snapshot/snap -u 4</userinput> &prompt.root; <userinput>mount -r /dev/md4 /mnt</userinput></screen> </listitem> </itemizedlist> <para>Der eingefrorene Stand des <filename>/var</filename>-Dateisystems ist nun unterhalb von <filename>/mnt</filename> verfügbar. Mit Ausnahme der früheren Schnappschüsse, die als leere Dateien auftauchen, wird zu Beginn alles so aussehen, wie zum Zeitpunkt der Erstellung des Schnappschusses. Der Schnappschuss kann wie folgt abgehängt werden:</para> <screen>&prompt.root; <userinput>umount /mnt</userinput> &prompt.root; <userinput>mdconfig -d -u 4</userinput></screen> <para>Weitere Informationen über Soft Updates und Schnappschüsse von Dateisystemen sowie technische Artikel finden Sie auf der <link xlink:href="http://www.mckusick.com/"> Webseite von Marshall Kirk McKusick</link>.</para> </sect1> <sect1 xml:id="quotas"> <title>Disk Quotas</title> <indexterm> <primary>Accounting</primary> <secondary>Plattenplatz</secondary> </indexterm> <indexterm><primary>Disk Quotas</primary></indexterm> <para>Disk Quotas erlauben dem Administrator, den Plattenplatz und/oder die Anzahl der Dateien eines Benutzers oder der Mitglieder einer Gruppe, auf Dateisystemebene zu beschränken. Dadurch wird verhindert, dass ein Benutzer oder eine Gruppe von Benutzern den ganzen verfügbaren Plattenplatz belegt.</para> <para>Dieser Abschnitt beschreibt die Konfiguration von Disk Quotas für <acronym>UFS</acronym>-Dateisysteme. Lesen Sie <xref linkend="zfs-zfs-quota"/>, wenn Sie Disk Quotas auf einem <acronym>ZFS</acronym>-Dateisystem einrichten möchten.</para> <sect2> <title>Disk Quotas aktivieren</title> <para>Prüfen Sie zunächst, ob der &os;-Kernel Disk Quotas unterstützt:</para> <screen>&prompt.user; <userinput>sysctl kern.features.ufs_quota</userinput> kern.features.ufs_quota: 1</screen> <para>In diesem Beispiel zeigt die <literal>1</literal> an, das Quotas unterstützt werden. Falls <literal>0</literal> ausgegeben wird, fügen Sie folgende Zeile in die Kernelkonfigurationsdatei ein, und folgen Sie den Anweisungen in <xref linkend="kernelconfig"/> um den Kernel zu aktualisieren:</para> <programlisting>options QUOTA</programlisting> <para>Als nächstes aktivieren Sie Disk Quotas in <filename>/etc/rc.conf</filename>:</para> <programlisting>quota_enable="YES"</programlisting> <indexterm> <primary>Disk Quotas</primary> <secondary>überprüfen</secondary> </indexterm> <para>Normalerweise wird beim Booten die Integrität der Quotas auf allen Dateisystemen mit &man.quotacheck.8; überprüft. Dieses Programm stellt sicher, dass die Quota-Datenbank mit den Daten auf einem Dateisystem übereinstimmt. Dies ist allerdings ein zeitraubender Prozess, der die Zeit, die das System zum Booten braucht, signifikant beeinflusst. Eine Variable in <filename>/etc/rc.config</filename> erlaubt es, diesen Schritt zu überspringen:</para> <programlisting>check_quotas="NO"</programlisting> <para>Zuletzt muss noch <filename>/etc/fstab</filename> bearbeitet werden, um die Plattenquotas auf Dateisystemebene zu aktivieren. Um Quotas pro Benutzer für ein Dateisystem zu aktivieren, geben Sie für dieses Dateisystem <option>userquota</option> im Feld Optionen von <filename>/etc/fstab</filename> an. Zum Beispiel:</para> <programlisting>/dev/da1s2g /home ufs rw,userquota 1 2</programlisting> <para>Um Quotas für Gruppen einzurichten, verwenden Sie <option>groupquota</option>. Um Quotas für Benutzer und Gruppen einzurichten, trennen Sie die Optionen durch Kommata:</para> <programlisting>/dev/da1s2g /home ufs rw,userquota,groupquota 1 2</programlisting> <para>Quota-Dateien werden standardmäßig im Rootverzeichnis des Dateisystems unter <filename>quota.user</filename> und <filename>quota.group</filename> abgelegt. Weitere Informationen finden Sie in &man.fstab.5;. Es wird nicht empfohlen, Quota-Dateien an anderen Stellen zu speichern.</para> <para>Sobald die Konfiguration abgeschlossen ist, starten Sie das System neu. <filename>/etc/rc</filename> wird dann automatisch die richtigen Kommandos aufrufen, um die Quota-Dateien für alle in <filename>/etc/rc.conf</filename> definierten Quotas anzulegen.</para> <para>Normalerweise brauchen die Kommandos &man.quotacheck.8;, &man.quotaon.8; oder &man.quotaoff.8; nicht von Hand aufgerufen werden, obwohl man die entsprechenden Seiten im Manual lesen sollte, um sich mit ihnen vertraut zu machen.</para> </sect2> <sect2> <title>Setzen von Quota-Limits</title> <indexterm> <primary>Disk Quotas</primary> <secondary>Limits</secondary> </indexterm> <para>Stellen Sie sicher, dass Quotas auch tatsächlich aktiviert sind:</para> <screen>&prompt.root; <userinput>quota -v</userinput></screen> <para>Für jedes Dateisystem, auf dem Quotas aktiviert sind, sollte eine Zeile mit der Plattenauslastung und den aktuellen Quota-Limits zu sehen sein.</para> <para>Mit <command>edquota</command> können nun Quota-Limits zugewiesen werden.</para> <para>Mehrere Möglichkeiten stehen zur Verfügung, um Limits für den Plattenplatz, den ein Benutzer oder eine Gruppe verbrauchen kann, oder die Anzahl der Dateien, die angelegt werden dürfen, festzulegen. Die Limits können auf dem Plattenplatz (Block-Quotas), der Anzahl der Dateien (Inode-Quotas) oder einer Kombination von beiden basieren. Jedes Limit wird weiterhin in zwei Kategorien geteilt: Hardlimits und Softlimits.</para> <indexterm><primary>Hardlimit</primary></indexterm> <para>Ein Hardlimit kann nicht überschritten werden. Hat der Benutzer einmal ein Hardlimit erreicht, so kann er auf dem betreffenden Dateisystem keinen weiteren Platz mehr beanspruchen. Hat ein Benutzer beispielsweise ein Hardlimit von 500 Kilobytes auf einem Dateisystem und benutzt davon 490 Kilobyte, so kann er nur noch 10 weitere Kilobytes beanspruchen. Der Versuch, weitere 11 Kilobytes zu beanspruchen, wird fehlschlagen.</para> <indexterm><primary>Softlimit</primary></indexterm> <para>Softlimits können für eine befristete Zeit überschritten werden. Diese Frist beträgt in der Grundeinstellung eine Woche. Hat der Benutzer das Softlimit über die Frist hinaus überschritten, so wird das Softlimit in ein Hardlimit umgewandelt und der Benutzer kann keinen weiteren Platz mehr beanspruchen. Wenn er einmal das Softlimit unterschreitet, wird die Frist wieder zurückgesetzt.</para> <para>Im folgenden Beispiel wird das Quota des Benutzerkonto <systemitem class="username">test</systemitem> bearbeitet. Wenn <command>edquota</command> aufgerufen wird, wird der in <envar>EDITOR</envar> definierte Editor aufgerufen, um die Quota-Limts zu konfigurieren. Der Standard-Editor ist <application>vi</application>.</para> <screen>&prompt.root; <userinput>edquota -u test</userinput> Quotas for user test: /usr: kbytes in use: 65, limits (soft = 50, hard = 75) inodes in use: 7, limits (soft = 50, hard = 60) /usr/var: kbytes in use: 0, limits (soft = 50, hard = 75) inodes in use: 0, limits (soft = 50, hard = 60)</screen> <para>Für jedes Dateisystem, auf dem Quotas aktiv sind, sind zwei Zeilen zu sehen. Eine repräsentiert die Block-Quotas und die andere die Inode-Quotas. Um ein Limit zu modifizieren, ändern Sie einfach den angezeigten Wert. Um beispielsweise das Blocklimit von <filename>/usr</filename> auf ein Softlimit von <literal>500</literal> und ein Hardlimit von <literal>600</literal> zu erhöhen, ändern Sie die Zeile wie folgt:</para> <programlisting>/usr: kbytes in use: 65, limits (soft = 500, hard = 600)</programlisting> <para>Die neuen Limits sind wirksam, sobald der Editor verlassen wird.</para> <para>Manchmal ist es wünschenswert, die Limits für eine Reihe von Benutzern zu setzen. Dazu weisen Sie zunächst einem Benutzer das gewünschte Quota-Limit zu. Anschließend benutzen Sie <option>-p</option>, um das Quota auf einen bestimmten Bereich von Benutzer-IDs (<acronym>UID</acronym>) zu duplizieren. Der folgende Befehl dupliziert die Quota-Limits auf die <acronym>UID</acronym>s <literal>10000</literal> bis <literal>19999</literal>:</para> <screen>&prompt.root; <userinput>edquota -p test 10000-19999</userinput></screen> <para>Weitere Informationen finden Sie in &man.edquota.8;.</para> </sect2> <sect2> <title>Überprüfen von Quota-Limits und Plattennutzung</title> <indexterm> <primary>Disk Quotas</primary> <secondary>überprüfen</secondary> </indexterm> <para>Um die Limits oder die Plattennutzung individueller Benutzer und Gruppen zu überprüfen, kann &man.quota.1; benutzt werden. Ein Benutzer kann nur die eigenen Quotas und die Quotas der Gruppe, der er angehört untersuchen. Nur der Superuser darf sich alle Limits ansehen. Mit &man.repquota.8; erhalten Sie eine Zusammenfassung von allen Limits und der Plattenausnutzung für alle Dateisysteme, auf denen Quotas aktiv sind.</para> <para>In der Ausgabe von &man.quota.1; werden Dateisysteme, auf denen ein Benutzer keinen Platz verbraucht, nicht angezeigt, auch wenn diesem Quotas zugewiesen wurden. Benutzen Sie <option>-v</option> um solche Dateisysteme ebenfalls anzuzeigen. Das folgende Beispiel zeigt die Ausgabe von <command>quota -v</command> für einen Benutzer, der Quota-Limits auf zwei Dateisystemen besitzt:</para> <programlisting>Disk quotas for user test (uid 1002): Filesystem usage quota limit grace files quota limit grace /usr 65* 50 75 5days 7 50 60 /usr/var 0 50 75 0 50 60</programlisting> <indexterm><primary>grace period</primary></indexterm> <para>Im Dateisystem <filename>/usr</filename> liegt der Benutzer momentan 15 Kilobytes über dem Softlimit von 50 Kilobytes und hat noch 5 Tage seiner Frist übrig. Der Stern <literal>*</literal> zeigt an, dass der Benutzer sein Limit überschritten hat.</para> </sect2> <sect2> <title>Quotas über NFS</title> <indexterm><primary>NFS</primary></indexterm> <para>Quotas werden von dem Quota-Subsystem auf dem <acronym>NFS</acronym>-Server erzwungen. Der &man.rpc.rquotad.8; Daemon stellt <command>quota</command> die Quota Informationen auf dem <acronym>NFS</acronym>-Client zur Verfügung, so dass Benutzer auf diesen Systemen ihre Quotas abfragen können.</para> <para>Sie aktivieren <command>rpc.rquotad</command> auf dem <acronym>NFS</acronym>-Server, indem Sie das Zeichen <literal>#</literal> auf folgender Zeile in <filename>/etc/inetd.conf</filename> entfernen:</para> <programlisting>rquotad/1 dgram rpc/udp wait root /usr/libexec/rpc.rquotad rpc.rquotad</programlisting> <para>Anschließend starten Sie <command>inetd</command> neu:</para> <screen>&prompt.root; <userinput>service inetd restart</userinput></screen> </sect2> </sect1> <sect1 xml:id="disks-encrypting"> <info> <title>Partitionen verschlüsseln</title> <authorgroup> <author> <personname> <firstname>Lucky</firstname> <surname>Green</surname> </personname> <contrib>Beigetragen von </contrib> <affiliation> <address> <email>shamrock@cypherpunks.to</email> </address> </affiliation> </author> </authorgroup> </info> <indexterm> <primary>Partitionen</primary> <secondary>verschlüsseln</secondary> </indexterm> <para>&os; bietet ausgezeichnete Möglichkeiten, Daten vor unberechtigten Zugriffen zu schützen. Wenn das Betriebssystem läuft, schützen Zugriffsrechte und vorgeschriebene Zugriffskontrollen (MAC) (siehe <xref linkend="mac"/>) die Daten. Die Zugriffskontrollen des Betriebssystems schützen allerdings nicht vor einem Angreifer, der Zugriff auf den Rechner hat. Der Angreifer kann eine Festplatte in ein anderes System einbauen und dort die Daten analysieren.</para> <para>Die für &os; verfügbaren kryptografischen Subsysteme, <acronym>GEOM</acronym> Based Disk Encryption (<command>gbde</command>) und <command>geli</command> sind in der Lage, Daten auf Dateisystemen auch vor hoch motivierten Angreifern zu schützen, die über erhebliche Mittel verfügen. Dieser Schutz ist unabhängig von der Art und Weise, durch die ein Angreifer Zugang zu einer Festplatte oder zu einem Rechner erlangt hat. Im Gegensatz zu anderen Verschlüsselungsmethoden, bei denen einzelne Dateien verschlüsselt werden, verschlüsseln <application>gbde</application> und <command>geli</command> transparent ganze Dateisysteme. Auf der Festplatte werden dabei keine Daten im Klartext gespeichert.</para> <para>Dieses Kapitel zeigt, wie ein verschlüsseltes Dateisystem unter &os; erstellt wird. Zunächst wird der Ablauf für <application>gbde</application> beschrieben und anschließend das gleiche Beispiel für <application>geli</application>.</para> <sect2> <title>Plattenverschlüsselung mit <application>gbde</application></title> <para>Das Ziel von &man.gbde.4; ist es, einen Angreifer vor eine große Herausforderung zu stellen, um an die Daten einer Festplatte zu gelangen. Falls jedoch der Rechner kompromittiert wurde, während er im Betrieb war und das Speichergerät aktiv verbunden war, oder wenn der Angreifer eine gültige Passphrase kennt, bietet dieses System keinen Schutz für die Daten der Festplatte. Daher ist es wichtig, für die physische Sicherheit zu sorgen, während das System im Betrieb ist. Außerdem muss die Passphrase für den Verschlüsselungsmechanismus geschützt werden.</para> <para>&man.gbde.4; besitzt einige Funktionen um die Daten, die in einem Sektor gespeichert sind, zu schützen. Es benutzt 128-Bit <acronym>AES</acronym> im <acronym>CBC</acronym>-Modus, um die Daten eines Sektors zu verschlüsseln. Jeder Sektor einer Festplatte wird mit einem anderen <acronym>AES</acronym>-Schlüssel verschlüsselt. Weitere Informationen zum kryptographischen Design und wie die Schlüssel für einen Sektor aus der gegebenen Passphrase ermittelt werden, finden Sie in &man.gbde.4;.</para> <para>&os; enthält ein Kernelmodul für <application>gbde</application>, das wie folgt geladen werden kann:</para> <screen>&prompt.root; <userinput>kldload geom_bde</userinput></screen> <para>Wenn Sie einen angepassten Kernel verwenden, stellen Sie sicher, dass folgende Zeile in der Kernelkonfigurationsdatei enthalten ist:</para> <para><literal>options GEOM_BDE</literal></para> <para>Das folgende Beispiel beschreibt, wie eine Partition auf einer neuen Festplatte verschlüsselt wird. Die Partition wird in <filename>/private</filename> eingehangen.</para> <procedure> <title>Eine Partition mit <application>gbde</application> verschlüsseln</title> <step> <title>Installieren der Festplatte</title> <para>Installieren Sie die Festplatte wie in <xref linkend="disks-adding"/> beschrieben. Im Beispiel wird die Partition <filename>/dev/ad4s1c</filename> verwendet. Die Gerätedateien <filename>/dev/ad0s1<replaceable>*</replaceable></filename> sind Standard-Partitionen des &os;-Systems.</para> <screen>&prompt.root; <userinput>ls /dev/ad*</userinput> /dev/ad0 /dev/ad0s1b /dev/ad0s1e /dev/ad4s1 /dev/ad0s1 /dev/ad0s1c /dev/ad0s1f /dev/ad4s1c /dev/ad0s1a /dev/ad0s1d /dev/ad4</screen> </step> <step> <title>Verzeichnis für gbde-Lock-Dateien anlegen</title> <screen>&prompt.root; <userinput>mkdir /etc/gbde</userinput></screen> <para>Die Lock-Dateien sind für den Zugriff von <application>gbde</application> auf verschlüsselte Partitionen notwendig. Ohne die Lock-Dateien können die Daten nur mit erheblichem manuellen Aufwand wieder entschlüsselt werden (dies wird auch von der Software nicht unterstützt). Jede verschlüsselte Partition benötigt eine gesonderte Lock-Datei.</para> </step> <step> <title>Vorbereiten der gbde-Partition</title> <para>Eine von <application>gbde</application> benutzte Partition muss einmalig initialisiert werden, bevor sie benutzt werden kann. Das Programm öffnet eine Vorlage im Standard-Editor, um verschiedene Optionen zu konfigurieren. Setzen Sie <varname>sector_size</varname> auf <literal>2048</literal>, wenn Sie <acronym>UFS</acronym> benutzen:</para> <screen>&prompt.root; <userinput>gbde init /dev/ad4s1c -i -L /etc/gbde/ad4s1c.lock</userinput> <phrase its:translate="no">$FreeBSD: src/sbin/gbde/template.txt,v 1.1.36.1 2009/08/03 08:13:06 kensmith Exp $</phrase> # # Sector size is the smallest unit of data which can be read or written. # Making it too small decreases performance and decreases available space. # Making it too large may prevent filesystems from working. 512 is the # minimum and always safe. For UFS, use the fragment size # sector_size = 2048 [...]</screen> <para>Sobald die Änderungen gespeichert werden, wird der Benutzer zweimal aufgefordert, die zum Schutz der Daten verwendete Passphrase einzugeben. Die Passphrase muss beide Mal gleich eingegeben werden. Die Sicherheit der Daten hängt allein von der Qualität der gewählten Passphrase ab. Die Auswahl einer sicheren und leicht zu merkenden Passphrase wird auf der Webseite <link xlink:href="http://world.std.com/~reinhold/diceware.html"> http://world.std.com/~reinhold/diceware.html</link> beschrieben.</para> <para>Bei der Initialisierung wird eine Lock-Datei für die <application>gbde</application>-Partition erstellt. In diesem Beispiel <filename>/etc/gbde/ad4s1c.lock</filename>. Lock-Dateien müssen die Dateiendung <quote>.lock</quote> aufweisen, damit sie von <filename>/etc/rc.d/gbde</filename>, dem Startskript von <application>gbde</application>, erkannt werden.</para> <caution> <para>Lock-Dateien müssen immer zusammen mit den verschlüsselten Dateisystemen gesichert werden. Ohne die Lock-Datei können Sie allerdings nicht auf die verschlüsselten Daten zugreifen.</para> </caution> </step> <step> <title>Einbinden der verschlüsselten Partition in den Kernel</title> <screen>&prompt.root; <userinput>gbde attach /dev/ad4s1c -l /etc/gbde/ad4s1c.lock</userinput></screen> <para>Dieses Kommando fragt die Passphrase ab, die bei der Initialisierung der verschlüsselten Partition eingegeben wurde. Das neue verschlüsselte Gerät erscheint danach in <filename>/dev</filename> als <filename>/dev/device_name.bde</filename>:</para> <screen>&prompt.root; <userinput>ls /dev/ad*</userinput> /dev/ad0 /dev/ad0s1b /dev/ad0s1e /dev/ad4s1 /dev/ad0s1 /dev/ad0s1c /dev/ad0s1f /dev/ad4s1c /dev/ad0s1a /dev/ad0s1d /dev/ad4 /dev/ad4s1c.bde</screen> </step> <step> <title>Dateisystem auf dem verschlüsselten Gerät anlegen</title> <para>Nachdem die verschlüsselte Partition im Kernel eingebunden ist, kann ein Dateisystem erstellt werden. Dieses Beispiel erstellt ein <acronym>UFS</acronym>-Dateisystem mit aktivierten Soft Updates. Achten Sie darauf, die Partition mit der Erweiterung <filename><replaceable>*</replaceable>.bde</filename> zu benutzen:</para> <screen>&prompt.root; <userinput>newfs -U -O2 /dev/ad4s1c.bde</userinput></screen> </step> <step> <title>Einhängen der verschlüsselten Partition</title> <para>Legen Sie einen Mountpunkt für das verschlüsselte Dateisystem an. Hängen Sie anschließend das Dateisystem ein:</para> <screen>&prompt.root; <userinput>mkdir /private</userinput> &prompt.root; <userinput>mount /dev/ad4s1c.bde /private</userinput></screen> </step> <step> <title>Überprüfen des verschlüsselten Dateisystems</title> <para>Das verschlüsselte Dateisystem sollte jetzt erkannt und benutzt werden können:</para> <screen>&prompt.user; <userinput>df -H</userinput> Filesystem Size Used Avail Capacity Mounted on /dev/ad0s1a 1037M 72M 883M 8% / /devfs 1.0K 1.0K 0B 100% /dev /dev/ad0s1f 8.1G 55K 7.5G 0% /home /dev/ad0s1e 1037M 1.1M 953M 0% /tmp /dev/ad0s1d 6.1G 1.9G 3.7G 35% /usr /dev/ad4s1c.bde 150G 4.1K 138G 0% /private</screen> </step> </procedure> <para>Nach jedem Neustart müssen verschlüsselte Dateisysteme dem Kernel wieder bekannt gemacht werden, auf Fehler überprüft werden und eingehangen werden. Für die dazu nötigen Schritte fügen Sie folgende Zeilen in <filename>/etc/rc.conf</filename> hinzu:</para> <programlisting>gbde_autoattach_all="YES" gbde_devices="<replaceable>ad4s1c</replaceable>" gbde_lockdir="/etc/gbde"</programlisting> <para>Durch diese Argumente muss beim Systemstart auf der Konsole die Passphrase eingegeben werden. Erst nach Eingabe der korrekten Passphrase wird die verschlüsselte Partition automatisch in den Verzeichnisbaum eingehängt. Weitere Bootoptionen von <application>gbde</application> finden Sie in &man.rc.conf.5;.</para> <!-- What about bsdinstall? --> <note> <para><application>sysinstall</application> ist nicht kompatibel mit <application>gbde</application>-verschlüsselten Geräten. Bevor <application>sysinstall</application> gestartet wird, müssen alle <filename>*.bde</filename> Geräte vom Kernel getrennt werden, da sonst der Kernel bei der ersten Suche nach Geräten abstürzt. Um das verschlüsselte Gerät aus dem Beispiel zu trennen, benutzen Sie das folgende Kommando:</para> <screen>&prompt.root; <userinput>gbde detach /dev/<replaceable>ad4s1c</replaceable></userinput></screen> </note> </sect2> <sect2 xml:id="disks-encrypting-geli"> <info> <title>Plattenverschlüsselung mit <command>geli</command></title> <authorgroup> <author> <personname> <firstname>Daniel</firstname> <surname>Gerzo</surname> </personname> <contrib>Beigetragen von </contrib> </author> </authorgroup> </info> <para>Mit <command>geli</command> steht eine alternative kryptografische <acronym>GEOM</acronym>-Klasse zur Verfügung. Dieses Werkzeug unterstützt unterschiedliche Fähigkeiten und verfolgt einen anderen Ansatz für die Verschlüsselung. <application>geli</application> bietet die folgenden Funktionen:</para> <itemizedlist> <listitem> <para>Die Nutzung des &man.crypto.9;-Frameworks. Wenn das System über kryptografische Hardware verfügt, wird diese von <command>geli</command> automatisch verwendet.</para> </listitem> <listitem> <para>Die Unterstützung verschiedener kryptografischer Algorithmen, wie <acronym>AES</acronym>, Blowfish, und <acronym>3DES</acronym>.</para> </listitem> <listitem> <para>Die Möglichkeit, die root-Partition zu verschlüsseln. Um auf die verschlüsselte root-Partition zugreifen zu können, muss beim Systemstart die Passphrase eingegeben werden.</para> </listitem> <listitem> <para>Erlaubt den Einsatz von zwei voneinander unabhängigen Schlüsseln.</para> </listitem> <listitem> <para>Es ist durch einfache Sektor-zu-Sektor-Verschlüsselung sehr schnell.</para> </listitem> <listitem> <para>Die Möglichkeit, Master-Keys zu sichern und wiederherzustellen. Wenn ein Benutzer seinen Schlüssel zerstört, kann er über seinen zuvor gesicherten Schlüssel wieder auf seine Daten zugreifen.</para> </listitem> <listitem> <para><command>geli</command> erlaubt es, Platten mit einem zufälligen Einmal-Schlüssel einzusetzen, was für Swap-Partitionen und temporäre Dateisysteme interessant ist.</para> </listitem> </itemizedlist> <para>Weitere Funktionen und Anwendungsbeispiele finden Sie in &man.geli.8;.</para> <para>Das folgende Beispiel beschreibt, wie eine Schlüsseldatei erzeugt wird, die als Teil des Master-Keys für den Verschlüsselungs-Provider verwendet wird, der unter <filename>/private</filename> in den Verzeichnisbaum eingehängt wird. Die Schlüsseldatei liefert zufällige Daten, die für die Verschlüsselung des Master-Keys benutzt werden. Zusätzlich wird der Master-Key durch eine Passphrase geschützt. Die Sektorgröße des Providers beträgt 4 KB. Das Beispiel beschreibt, wie Sie einen <command>geli</command>-Provider aktivieren, ein vom ihm verwaltetes Dateisystem erzeugen, es mounten, mit ihm arbeiten und wie Sie es schließlich wieder unmounten und den Provider deaktivieren.</para> <procedure> <title>Eine Partition mit <command>geli</command> verschlüsseln</title> <step> <title>Laden der <command>geli</command>-Unterstützung</title> <para>Die Unterstützung für <command>geli</command> wird über ein ladbares Kernelmodul zur Verfügung gestellt. Damit das Modul automatisch beim Booten geladen wird, fügen Sie folgende Zeile in <filename>/boot/loader.conf</filename> ein:</para> <programlisting>geom_eli_load="YES"</programlisting> <para>Um das Modul direkt zu laden:</para> <screen>&prompt.root; <userinput>kldload geom_eli</userinput></screen> <para>Stellen Sie bei einer angepassten Kernelkonfigurationsdatei sicher, dass diese Zeilen enthalten sind:</para> <programlisting>options GEOM_ELI device crypto</programlisting> </step> <step> <title>Erzeugen des Master-Keys</title> <para>Die folgenden Befehle erzeugen einen Master-Key (<filename>/root/da2.key</filename>), der durch eine Passphrase geschützt ist. Die Datenquelle für die Schlüsseldatei ist <filename>/dev/random</filename>. Um eine bessere Leistung zu erzielen beträgt die Sektorgröße des Providers (<filename>/dev/da2.eli</filename>) 4 KB:</para> <screen>&prompt.root; <userinput>dd if=/dev/random of=/root/da2.key bs=64 count=1</userinput> &prompt.root; <userinput>geli init -s 4096 -K /root/da2.key /dev/da2</userinput> Enter new passphrase: Reenter new passphrase:</screen> <para>Es ist nicht zwingend nötig, sowohl eine Passphrase als auch eine Schlüsseldatei zu verwenden. Die einzelnen Methoden können auch unabhängig voneinander eingesetzt werden.</para> <para>Wird für die Schlüsseldatei <quote>-</quote> angegeben, wird dafür die Standardeingabe verwendet. Das folgende Kommando erzeugt beispielsweise drei Schlüsseldateien:</para> <screen>&prompt.root; <userinput>cat keyfile1 keyfile2 keyfile3 | geli init -K - /dev/da2</userinput></screen> </step> <step> <title>Aktivieren des Providers mit dem erzeugten Schlüssel</title> <para>Um den Provider zu aktivieren, geben Sie die Schlüsseldatei, den Namen des Laufwerks und die Passphrase an:</para> <screen>&prompt.root; <userinput>geli attach -k /root/da2.key /dev/da2</userinput> Enter passphrase:</screen> <para>Dadurch wird ein neues Gerät mit der Erweiterung <filename>.eli</filename> angelegt:</para> <screen>&prompt.root; <userinput>ls /dev/da2*</userinput> /dev/da2 /dev/da2.eli</screen> </step> <step> <title>Das neue Dateisystem erzeugen</title> <para>Als nächstes muss das Gerät mit dem <acronym>UFS</acronym>-Dateisystem formatiert und an einen vorhandenen Mountpunkt eingehängt werden:</para> <screen>&prompt.root; <userinput>dd if=/dev/random of=/dev/da2.eli bs=1m</userinput> &prompt.root; <userinput>newfs /dev/da2.eli</userinput> &prompt.root; <userinput>mount /dev/da2.eli <replaceable>/private</replaceable></userinput></screen> <para>Das verschlüsselte Dateisystem sollte jetzt erkannt und benutzt werden können:</para> <screen>&prompt.root; <userinput>df -H</userinput> Filesystem Size Used Avail Capacity Mounted on /dev/ad0s1a 248M 89M 139M 38% / /devfs 1.0K 1.0K 0B 100% /dev /dev/ad0s1f 7.7G 2.3G 4.9G 32% /usr /dev/ad0s1d 989M 1.5M 909M 0% /tmp /dev/ad0s1e 3.9G 1.3G 2.3G 35% /var /dev/da2.eli 150G 4.1K 138G 0% /private</screen> </step> </procedure> <para>Wenn Sie nicht mehr mit dem verschlüsselten Dateisystem arbeiten und die unter <filename>/private</filename> eingehängte Partition daher nicht mehr benötigen, sollten Sie diese unmounten und den <command>geli</command>-Verschlüsselungs-Provider wieder deaktivieren:</para> <screen>&prompt.root; <userinput>umount /private</userinput> &prompt.root; <userinput>geli detach da2.eli</userinput></screen> <para>&os; verfügt über ein <filename>rc.d</filename>-Skript, das dass Einhängen von verschlüsselten Geräten beim Booten deutlich vereinfacht. Für dieses Beispiel, fügen Sie folgende Zeilen in <filename>/etc/rc.conf</filename> hinzu:</para> <programlisting>geli_devices="<replaceable>da2</replaceable>" geli_da2_flags="-p -k /root/<replaceable>da2.key</replaceable>"</programlisting> <para>Dies konfiguriert <filename>/dev/da2</filename> als <command>geli</command>-Provider mit dem Master-Key <filename>/root/da2.key</filename>. Das System wird den Provider automatisch deaktivieren, bevor es heruntergefahren wird. Während des Startvorgangs fordert das Skript die Passphrase an, bevor der Provider aktiviert wird. Vor und nach der Eingabeaufforderung für die Passphrase werden noch weitere Kernelmeldungen angezeigt. Achten Sie sorgfältig auf die Eingabeaufforderung zwischen den anderen Meldungen, falls es zu Problemen beim Startvorgang kommt. Sobald die richtige Passphrase eingegeben wurde, wird der Provider aktiviert. Anschließend werden die Dateisysteme gemäß <filename>/etc/fstab</filename> eingehängt. Lesen Sie <xref linkend="mount-unmount"/> wenn Sie wissen möchten, wie Sie ein Dateisystem konfigurieren, sodass es beim booten automatisch gestartet wird.</para> </sect2> </sect1> <sect1 xml:id="swap-encrypting"> <info> <title>Den Auslagerungsspeicher verschlüsseln</title> <authorgroup> <author> <personname> <firstname>Christian</firstname> <surname>Brueffer</surname> </personname> <contrib>Geschrieben von </contrib> </author> </authorgroup> </info> <indexterm> <primary>Auslagerungsspeicher</primary> <secondary>verschlüsseln</secondary> </indexterm> <para>Wie die Verschlüsselung von Partitionen, wird auch der Auslagerungsspeicher verschlüsselt, um sensible Informationen zu schützen. Stellen Sie sich eine Anwendung vor, die mit Passwörtern umgeht. Solange sich diese Passwörter im Arbeitsspeicher befinden, werden sie nicht auf die Festplatte geschrieben und nach einem Neustart gelöscht. Falls &os; jedoch damit beginnt Speicher auszulagern, um Platz für andere Anwendungen zu schaffen, können die Passwörter unverschlüsselt auf die Festplatte geschrieben werden. Die Verschlüsselung des Auslagerungsspeichers kann in solchen Situationen Abhilfe schaffen.</para> <para>Dieser Abschnitt zeigt die Konfiguration eines verschlüsselten Auslagerungsspeichers mittels &man.gbde.8; oder &man.geli.8;. In den Beispielen repräsentiert <filename>/dev/ada0s1b</filename> die Swap-Partition.</para> <sect2> <title>Konfiguration eines verschlüsselten Auslagerungsspeichers</title> <para>Swap-Partitionen werden standardmäßig nicht verschlüsselt. Sie sollten daher alle sensiblen Daten im Auslagerungsspeicher löschen, bevor Sie fortfahren. Führen Sie folgenden Befehl aus, um die Swap-Partition mit Zufallsdaten zu überschreiben:</para> <screen>&prompt.root; <userinput>dd if=/dev/random of=/dev/<replaceable>ada0s1b</replaceable> bs=1m</userinput></screen> <para>Um den Auslagerungsspeicher mit &man.gbde.8; zu verschlüsseln, fügen Sie in <filename>/etc/fstab</filename> das Suffix <literal>.bde</literal> an den Gerätenamen der Swap-Partition hinzu:</para> <programlisting># Device Mountpoint FStype Options Dump Pass# /dev/ada0s1b.bde none swap sw 0 0</programlisting> <para>Wenn Sie &man.geli.8; benutzen, verwenden Sie stattdessen das Suffix <literal>.eli</literal>, um den Auslagerungsspeicher zu verschlüsseln:</para> <programlisting># Device Mountpoint FStype Options Dump Pass# /dev/ada0s1b.eli none swap sw 0 0</programlisting> <para>In der Voreinstellung verschlüsselt &man.geli.8; mit dem <acronym>AES</acronym>-Algorithmus und einer Schlüssellänge von 128 Bit. Diese Voreinstellungen sind in der Regel ausreichend, können jedoch im Options-Feld in <filename>/etc/fstab</filename> angepasst werden. Mögliche Optionen sind:</para> <variablelist> <varlistentry> <term>aalgo</term> <listitem> <para>Der Algorithmus für die Prüfung der Datenintegrität. Dieser wird benutzt um sicherzustellen, dass die verschlüsselten Daten nicht manipuliert wurden. Eine Liste der unterstützten Algorithmen finden Sie in &man.geli.8;.</para> </listitem> </varlistentry> <varlistentry> <term>ealgo</term> <listitem> <para>Der Verschlüsselungsalgorithmus, der verwendet wird um die Daten zu schützen. Eine Liste der unterstützten Algorithmen finden Sie in &man.geli.8;.</para> </listitem> </varlistentry> <varlistentry> <term>keylen</term> <listitem> <para>Die Länge des Schlüssels für den Verschlüsselungsalgorithmus. In &man.geli.8; können Sie lesen, welche Schlüssellängen von welchem Algorithmus unterstützt werden.</para> </listitem> </varlistentry> <varlistentry> <term>sectorsize</term> <listitem> <para>Die Größe, in der die Datenblöcke aufgeteilt werden, bevor sie verschlüsselt werden. Größere Blöcke erhöhen die Leistung auf Kosten des Speicherverbrauchs. Die empfohlene Größe beträgt 4096 Byte.</para> </listitem> </varlistentry> </variablelist> <para>Dieses Beispiel konfiguriert eine verschlüsselte Swap-Partition mit dem Blowfish-Algorithmus, einer Schlüssellänge von 128 Bit und einer Sektorgröße von 4 KB:</para> <programlisting># Device Mountpoint FStype Options Dump Pass# /dev/ada0s1b.eli none swap sw,ealgo=blowfish,keylen=128,sectorsize=4096 0 0</programlisting> </sect2> <sect2> <title>Überprüfung des verschlüsselten Auslagerungsspeichers</title> <para>Nachdem das System neu gestartet wurde, kann die korrekte Funktion des verschlüsselten Auslagerungsspeichers mit <command>swapinfo</command> geprüft werden.</para> <para>Wenn Sie &man.gbde.8; einsetzen, erhalten Sie eine Meldung ähnlich der folgenden:</para> <screen>&prompt.user; <userinput>swapinfo</userinput> Device 1K-blocks Used Avail Capacity /dev/ada0s1b.bde 542720 0 542720 0%</screen> <para>Wenn Sie &man.geli.8; einsetzen, erhalten Sie hingegen eine Ausgabe ähnlich der folgenden:</para> <screen>&prompt.user; <userinput>swapinfo</userinput> Device 1K-blocks Used Avail Capacity /dev/ada0s1b.eli 542720 0 542720 0%</screen> </sect2> </sect1> <sect1 xml:id="disks-hast"> <info> <title>Highly Available Storage (<acronym>HAST</acronym>)</title> <authorgroup> <author> <personname> <firstname>Daniel</firstname> <surname>Gerzo</surname> </personname> <contrib>Beigetragen von </contrib> </author> </authorgroup> <authorgroup> <author> <personname> <firstname>Freddie</firstname> <surname>Cash</surname> </personname> <contrib>Mit Beiträgen von </contrib> </author> <author> <personname> <firstname>Pawel Jakub</firstname> <surname>Dawidek</surname> </personname> </author> <author> <personname> <firstname>Michael W.</firstname> <surname>Lucas</surname> </personname> </author> <author> <personname> <firstname>Viktor</firstname> <surname>Petersson</surname> </personname> </author> </authorgroup> <authorgroup> <author> <personname> <firstname>Benedict</firstname> <surname>Reuschling</surname> </personname> <contrib>Übersetzt von </contrib> </author> </authorgroup> </info> <indexterm> <primary>HAST</primary> <secondary>high availability</secondary> </indexterm> <para>Hochverfügbarkeit ist eine der Hauptanforderungen von ernsthaften Geschäftsanwendungen und hochverfügbarer Speicher ist eine Schlüsselkomponente in solchen Umgebungen. Highly Available STorage (<acronym>HAST</acronym>) ist ein Framework in &os;, welches die transparente Speicherung der gleichen Daten über mehrere physikalisch getrennte Maschinen ermöglicht, die über ein <acronym>TCP/IP</acronym>-Netzwerk verbunden sind. <acronym>HAST</acronym> kann als ein netzbasiertes RAID1 (Spiegel) verstanden werden und ist dem DRBD®-Speichersystem der GNU/&linux;-Plattform ähnlich. In Kombination mit anderen Hochverfügbarkeitseigenschaften von &os; wie <acronym>CARP</acronym>, ermöglicht es <acronym>HAST</acronym>, hochverfügbare Speichercluster zu bauen, die in der Lage sind, Hardwareausfällen zu widerstehen.</para> <para>Die Hauptmerkmale von <acronym>HAST</acronym> sind:</para> <itemizedlist> <listitem> <para>Es kann zur Maskierung von <acronym>I/O</acronym>-Fehlern auf lokalen Festplatten eingesetzt werden.</para> </listitem> <listitem> <para>Dateisystem-unabhängig, was es erlaubt, jedes von &os; unterstützte Dateisystem zu verwenden.</para> </listitem> <listitem> <para>Effiziente und schnelle Resynchronisation: es werden nur die Blöcke synchronisiert, die während der Ausfallzeit eines Knotens geändert wurden.</para> </listitem> <!-- <listitem> <para>Besitzt mehrere Synchronisationsmodi, um eine schnelle Übergabe an einen anderen Knoten (sog. failover) zu ermöglichen.</para> </listitem> --> <listitem> <para>Es kann in einer bereits bestehenden Umgebung eingesetzt werden, um zusätzliche Redundanz zu erreichen.</para> </listitem> <listitem> <para>Zusammen mit <acronym>CARP</acronym>, <application>Heartbeat</application>, oder anderen Werkzeugen, ist es möglich, ein robustes und dauerhaftes Speichersystem zu bauen.</para> </listitem> </itemizedlist> <para>Nachdem Sie diesen Abschnitt gelesen haben, werden Sie folgendes wissen:</para> <itemizedlist> <listitem> <para>Was <acronym>HAST</acronym> ist, wie es funktioniert und welche Eigenschaften es besitzt.</para> </listitem> <listitem> <para>Wie man <acronym>HAST</acronym> unter &os; aufsetzt und verwendet.</para> </listitem> <listitem> <para>Wie man <acronym>CARP</acronym> und &man.devd.8; kombiniert, um ein robustes Speichersystem zu bauen.</para> </listitem> </itemizedlist> <para>Bevor Sie diesen Abschnitt lesen, sollten Sie:</para> <itemizedlist> <listitem> <para>die Grundlagen von &unix; und &os; verstanden haben (<xref linkend="basics"/>).</para> </listitem> <listitem> <para>wissen, wie man Netzwerkschnittstellen und andere Kernsysteme von &os; konfiguriert (<xref linkend="config-tuning"/>).</para> </listitem> <listitem> <para>ein gutes Verständnis der &os;-Netzwerkfunktionalität besitzen (<xref linkend="network-communication"/>).</para> </listitem> </itemizedlist> <para>Das <acronym>HAST</acronym>-Projekt wurde von der &os; Foundation mit Unterstützung der <link xlink:href="http://www.omc.net/"> OMCnet Internet Service GmbH</link> und <link xlink:href="http://www.transip.nl/">TransIP BV</link> gesponsert.</para> <sect2> <title>HAST im Einsatz</title> <para><acronym>HAST</acronym> bietet eine synchrone Replikation auf Blockebene zwischen zwei Maschinen: einem <literal>primary</literal>, auch bekannt als <literal>master</literal> Knoten, sowie dem <literal>secondary</literal>, oder <literal>slave</literal> Knoten. Diese beiden Maschinen zusammen werden als Cluster bezeichnet.</para> <para>Da <acronym>HAST</acronym> in einer primär-sekundär-Konfiguration funktioniert, ist immer nur ein Knoten des Clusters zu jeder Zeit aktiv. Der primäre Knoten, auch <emphasis>active</emphasis> genannt, ist derjenige, der alle <acronym>I/O</acronym>-Anfragen verarbeitet, die an die <acronym>HAST</acronym>-Schnittstelle gesendet werden. Der sekundäre Knoten wird automatisch vom primären Knoten aus synchronisiert.</para> <para>Die physischen Komponenten des <acronym>HAST</acronym>-Systems sind die lokale Platte am Primärknoten und die entfernte Platte am Sekundärknoten.</para> <para><acronym>HAST</acronym> arbeitet synchron auf Blockebene, was es für Dateisysteme und Anwendungen transparent macht. <acronym>HAST</acronym> stellt gewöhnliche <acronym>GEOM</acronym>-Provider in <filename>/dev/hast/</filename> für die Verwendung durch andere Werkzeuge oder Anwendungen zur Verfügung. Es gibt keinen Unterschied zwischen dem Einsatz von <acronym>HAST</acronym> bereitgestellten Geräten und herkömmlichen Platten oder Partitionen.</para> <para>Jede Schreib-, Lösch- oder Entleerungsoperation wird an die lokale und über <acronym>TCP/IP</acronym> zu der entfernt liegenden Platte gesendet. Jede Leseoperation wird von der lokalen Platte durchgeführt, es sei denn, die lokale Platte ist nicht aktuell oder es tritt ein <acronym>I/O</acronym>-Fehler auf. In solchen Fällen wird die Leseoperation an den Sekundärknoten geschickt.</para> <para><acronym>HAST</acronym> versucht, eine schnelle Fehlerbereinigung zu gewährleisten. Aus diesem Grund ist es wichtig, die Synchronisationszeit nach dem Ausfall eines Knotens zu reduzieren. Um eine schnelle Synchronisation zu ermöglichen, verwaltet <acronym>HAST</acronym> eine Bitmap von unsauberen Bereichen auf der Platte und synchronisiert nur diese während einer regulären Synchronisation (mit Ausnahme der initialen Synchronisation).</para> <para>Es gibt viele Wege, diese Synchronisation zu behandeln. <acronym>HAST</acronym> implementiert mehrere Replikationsarten, um unterschiedliche Methoden der Synchronisation zu realisieren:</para> <itemizedlist> <listitem> <para><emphasis>memsync</emphasis>: Dieser Modus meldet Schreiboperationen als vollständig, wenn die lokale Schreiboperation beendet ist und der entfernt liegende Knoten die Ankunft der Daten bestätigt hat, jedoch bevor die Daten wirklich gespeichert wurden. Die Daten werden auf dem entfernt liegenden Knoten direkt nach dem Senden der Bestätigung gespeichert. Dieser Modus ist dafür gedacht, Latenzen zu verringern und zusätzlich eine gute Verlässlichkeit zu bieten. In der Voreinstellung wird dieser Modus benutzt.</para> </listitem> <listitem> <para><emphasis>fullsync</emphasis>: Dieser Modus meldet Schreiboperationen als vollständig, wenn sowohl die lokale, als auch die entfernte Schreiboperation abgeschlossen wurde. Dies ist der sicherste und zugleich der langsamste Replikationsmodus.</para> </listitem> <listitem> <para><emphasis>async</emphasis>: Dieser Modus meldet Schreiboperationen als vollständig, wenn lokale Schreibvorgänge abgeschlossen wurden. Dies ist der schnellste und gefährlichste Replikationsmodus. Er sollte nur verwendet werden, wenn die Latenz zu einem entfernten Knoten bei einer Replikation zu hoch ist für andere Modi.</para> </listitem> </itemizedlist> </sect2> <sect2> <title>HAST-Konfiguration</title> <para>Das <acronym>HAST</acronym>-Framework besteht aus mehreren Komponenten:</para> <itemizedlist> <listitem> <para>Dem &man.hastd.8;-Daemon, welcher für Datensynchronisation verantwortlich ist. Wenn dieser Daemon gestartet wird, wird automatisch <varname>geom_gate.ko</varname> geladen.</para> </listitem> <listitem> <para>Dem &man.hastctl.8; Management-Werkzeug.</para> </listitem> <listitem> <para>Der Konfigurationsdatei &man.hast.conf.5;. Diese Datei muss vorhanden sein, bevor <application>hastd</application> gestartet wird.</para> </listitem> </itemizedlist> <para>Alternativ lässt sich die <literal>GEOM_GATE</literal>-Unterstützung in den Kernel statisch einbauen, indem folgende Zeile zur Kernelkonfigurationsdatei hinzugefügt wird. Anschließend muss der Kernel, wie in <xref linkend="kernelconfig"/> beschrieben, neu gebaut werden:</para> <programlisting>options GEOM_GATE</programlisting> <para>Das folgende Beispiel beschreibt, wie man zwei Knoten als master-slave / primary-secondary mittels <acronym>HAST</acronym> konfiguriert, um Daten zwischen diesen beiden auszutauschen. Die Knoten werden als <literal>hasta</literal> mit der <acronym>IP</acronym>-Adresse <literal>172.16.0.1</literal> und <literal>hastb</literal> mit der <acronym>IP</acronym>-Adresse <literal>172.16.0.2</literal> bezeichnet. Beide Knoten besitzen eine dedizierte Festplatte <filename>/dev/ad6</filename> mit der gleichen Größe für den <acronym>HAST</acronym>-Betrieb. Der <acronym>HAST</acronym>-Pool, manchmal auch Ressource genannt, oder der <acronym>GEOM</acronym>-Provider in <filename>/dev/hast/</filename> wird als <filename>test</filename> bezeichnet.</para> <para>Die Konfiguration von <acronym>HAST</acronym> wird in <filename>/etc/hast.conf</filename> vorgenommen. Diese Datei sollte auf beiden Knoten gleich sein. Die einfachste Konfiguration ist folgende:</para> <programlisting>resource <replaceable>test</replaceable> { on <replaceable>hasta</replaceable> { local <replaceable>/dev/ad6</replaceable> remote <replaceable>172.16.0.2</replaceable> } on <replaceable>hastb</replaceable> { local <replaceable>/dev/ad6</replaceable> remote <replaceable>172.16.0.1</replaceable> } }</programlisting> <para>Fortgeschrittene Konfigurationsmöglichkeiten finden Sie in &man.hast.conf.5;.</para> <tip> <para>Es ist ebenfalls möglich, den Hostnamen in den <literal>remote</literal>-Anweisungen zu verwenden, falls die Rechner aufgelöst werden können und in <filename>/etc/hosts</filename>, oder im lokalen <acronym>DNS</acronym> definiert sind.</para> </tip> <para>Sobald die Konfiguration auf beiden Rechnern vorhanden ist, kann ein <acronym>HAST</acronym>-Pool erstellt werden. Lassen Sie diese Kommandos auf beiden Knoten ablaufen, um die initialen Metadaten auf die lokale Platte zu schreiben und starten Sie anschließend &man.hastd.8;:</para> <screen>&prompt.root; <userinput>hastctl create <replaceable>test</replaceable></userinput> &prompt.root; <userinput>service hastd onestart</userinput></screen> <note> <para>Es ist <emphasis>nicht</emphasis> möglich, <acronym>GEOM</acronym>-Provider mit einem bereits bestehenden Dateisystem zu verwenden, um beispielsweise einen bestehenden Speicher in einen von <acronym>HAST</acronym> verwalteten Pool zu konvertieren. Dieses Verfahren muss einige Metadaten auf den Provider schreiben und dafür würde nicht genug freier Platz zur Verfügung stehen.</para> </note> <para>Die Rolle eines HAST Knotens, <literal>primary</literal> oder <literal>secondary</literal>, wird vom einem Administrator, oder einer Software wie <application>Heartbeat</application>, mittels &man.hastctl.8; festgelegt. Auf dem primären Knoten <literal>hasta</literal> geben Sie diesen Befehl ein:</para> <screen>&prompt.root; <userinput>hastctl role primary <replaceable>test</replaceable></userinput></screen> <para>Geben Sie folgendes Kommando auf dem sekundären Knoten <literal>hastb</literal> ein:</para> <screen>&prompt.root; <userinput>hastctl role secondary <replaceable>test</replaceable></userinput></screen> <para>Überprüfen Sie das Ergebnis mit <command>hastctl</command> auf beiden Knoten:</para> <screen>&prompt.root; <userinput>hastctl status <replaceable>test</replaceable></userinput></screen> <para>Überprüfen Sie die <literal>status</literal>-Zeile. Wird hier <literal>degraded</literal> angezeigt, dann ist etwas mit der Konfigurationsdatei nicht in Ordnung. Auf jedem Konten sollte <literal>complete</literal> angezeigt werden, was bedeutet, dass die Synchronisation zwischen den beiden Knoten gestartet wurde. Die Synchronisierung ist abgeschlossen, wenn <command>hastctl status</command> meldet, dass die <literal>dirty</literal>-Bereiche 0 Bytes betragen.</para> <para>Der nächste Schritt ist, ein Dateisystem auf dem <acronym>GEOM</acronym>-Provider anzulegen und dieses ins System einzuhängen. Dies muss auf dem <literal>primary</literal>-Knoten durchgeführt werden. Die Erstellung des Dateisystems kann ein paar Minuten dauern, abhängig von der Größe der Festplatte. Dieses Beispiel erstellt ein <acronym>UFS</acronym>-Dateisystem auf <filename>/dev/hast/test</filename>:</para> <screen>&prompt.root; <userinput>newfs -U /dev/hast/<replaceable>test</replaceable></userinput> &prompt.root; <userinput>mkdir /hast/<replaceable>test</replaceable></userinput> &prompt.root; <userinput>mount /dev/hast/<replaceable>test</replaceable> <replaceable>/hast/test</replaceable></userinput></screen> <para>Sobald das <acronym>HAST</acronym>-Framework richtig konfiguriert wurde, besteht der letzte Schritt nun darin, sicherzustellen, dass <acronym>HAST</acronym> während des Systemstarts automatisch gestartet wird. Fügen Sie diese Zeile in <filename>/etc/rc.conf</filename> hinzu:</para> <programlisting>hastd_enable="YES"</programlisting> <sect3> <title>Failover-Konfiguration</title> <para>Das Ziel dieses Beispiels ist, ein robustes Speichersystem zu bauen, welches Fehlern auf einem beliebigen Knoten widerstehen kann. Wenn der <literal>primary</literal>-Knoten ausfällt, ist der <literal>secondary</literal>-Knoten da, um nahtlos einzuspringen, das Dateisystem zu prüfen, einzuhängen und mit der Arbeit fortzufahren, ohne dass auch nur ein einzelnes Bit an Daten verloren geht.</para> <para>Um diese Aufgabe zu bewerkstelligen, wird das <foreignphrase>Common Address Redundancy Protocol</foreignphrase> (<acronym>CARP</acronym>) benutzt, welches ein automatisches Failover auf der <acronym>IP</acronym>-Schicht ermöglicht. <acronym>CARP</acronym> erlaubt es mehreren Rechnern im gleichen Netzsegment, die gleiche <acronym>IP</acronym>-Adresse zu verwenden. Setzen Sie <acronym>CARP</acronym> auf beiden Knoten des Clusters anhand der Dokumentation in <xref linkend="carp"/> auf. In diesem Beispiel hat jeder Knoten seine eigene Management <acronym>IP</acronym>-Adresse und die geteilte <acronym>IP</acronym>-Adresse <replaceable>172.16.0.254</replaceable>. Der primäre <acronym>HAST</acronym>-Knoten des Clusters muss der <acronym>CARP</acronym>-Masterknoten sein.</para> <para>Der <acronym>HAST</acronym>-Pool, welcher im vorherigen Abschnitt erstellt wurde, ist nun bereit für den Export über das Netzwerk auf den anderen Rechner. Dies kann durch den Export über <acronym>NFS</acronym> oder <application>Samba</application> erreicht werden, indem die geteilte <acronym>IP</acronym>-Adresse <replaceable>172.16.0.254</replaceable> verwendet wird. Das einzige ungelöste Problem ist der automatische Failover, sollte der primäre Knoten einmal ausfallen.</para> <para>Falls die <acronym>CARP</acronym>-Schnittstelle aktiviert oder deaktiviert wird, generiert das &os;-Betriebssystem ein &man.devd.8;-Ereignis, was es ermöglicht, Zustandsänderungen auf den <acronym>CARP</acronym>-Schnittstellen zu überwachen. Eine Zustandsänderung auf der <acronym>CARP</acronym>-Schnittstelle ist ein Indiz dafür, dass einer der Knoten gerade ausgefallen oder wieder verfügbar ist. Diese Zustandsänderungen machen es möglich, ein Skript zu starten, welches automatisch den HAST-Failover durchführt.</para> <para>Um Zustandsänderungen auf der <acronym>CARP</acronym>-Schnittstelle abzufangen, müssen diese Zeilen in <filename>/etc/devd.conf</filename> auf jedem Knoten hinzugefügt werden:</para> <programlisting>notify 30 { match "system" "IFNET"; match "subsystem" "carp0"; match "type" "LINK_UP"; action "/usr/local/sbin/carp-hast-switch master"; }; notify 30 { match "system" "IFNET"; match "subsystem" "carp0"; match "type" "LINK_DOWN"; action "/usr/local/sbin/carp-hast-switch slave"; };</programlisting> <note> <para>Wenn auf dem System &os; 10 oder höher eingesetzt wird, ersetzen Sie <filename>carp0</filename> durch den Namen der konfigurierten Schnittstelle für <acronym>CARP</acronym>.</para> </note> <para>Starten Sie &man.devd.8; auf beiden Knoten neu, um die neue Konfiguration wirksam werden zu lassen:</para> <screen>&prompt.root; <userinput>service devd restart</userinput></screen> <para>Wenn die Schnittstelle aktiviert oder deaktiviert wird, erzeugt das System eine Meldung, was es dem &man.devd.8;-Subsystem ermöglicht, ein automatisches Failover-Skript zu starten, <filename>/usr/local/sbin/carp-hast-switch</filename>. Weitere Informationen zu dieser Konfiguration finden Sie in &man.devd.conf.5;.</para> <para>Es folgt ein Beispiel für ein automatisches Failover-Skript:</para> <programlisting>#!/bin/sh # Original script by Freddie Cash <fjwcash@gmail.com> # Modified by Michael W. Lucas <mwlucas@BlackHelicopters.org> # and Viktor Petersson <vpetersson@wireload.net> # The names of the HAST resources, as listed in /etc/hast.conf resources="<replaceable>test</replaceable>" # delay in mounting HAST resource after becoming master # make your best guess delay=3 # logging log="local0.debug" name="carp-hast" # end of user configurable stuff case "$1" in master) logger -p $log -t $name "Switching to primary provider for ${resources}." sleep ${delay} # Wait for any "hastd secondary" processes to stop for disk in ${resources}; do while $( pgrep -lf "hastd: ${disk} \(secondary\)" > /dev/null 2>&1 ); do sleep 1 done # Switch role for each disk hastctl role primary ${disk} if [ $? -ne 0 ]; then logger -p $log -t $name "Unable to change role to primary for resource ${disk}." exit 1 fi done # Wait for the /dev/hast/* devices to appear for disk in ${resources}; do for I in $( jot 60 ); do [ -c "/dev/hast/${disk}" ] && break sleep 0.5 done if [ ! -c "/dev/hast/${disk}" ]; then logger -p $log -t $name "GEOM provider /dev/hast/${disk} did not appear." exit 1 fi done logger -p $log -t $name "Role for HAST resources ${resources} switched to primary." logger -p $log -t $name "Mounting disks." for disk in ${resources}; do mkdir -p /hast/${disk} fsck -p -y -t ufs /dev/hast/${disk} mount /dev/hast/${disk} /hast/${disk} done ;; slave) logger -p $log -t $name "Switching to secondary provider for ${resources}." # Switch roles for the HAST resources for disk in ${resources}; do if ! mount | grep -q "^/dev/hast/${disk} on " then else umount -f /hast/${disk} fi sleep $delay hastctl role secondary ${disk} 2>&1 if [ $? -ne 0 ]; then logger -p $log -t $name "Unable to switch role to secondary for resource ${disk}." exit 1 fi logger -p $log -t $name "Role switched to secondary for resource ${disk}." done ;; esac</programlisting> <para>Im Kern führt das Skript die folgenden Aktionen durch, sobald ein Knoten zum Master wird:</para> <itemizedlist> <listitem> <para>Es ernennt den <acronym>HAST</acronym>-Pool als den primären für einen gegebenen Knoten.</para> </listitem> <listitem> <para>Es prüft das Dateisystem, dass auf dem <acronym>HAST</acronym>-Pool erstellt wurde.</para> </listitem> <listitem> <para>Es hängt den Pool ins System ein.</para> </listitem> </itemizedlist> <para>Wenn ein Knoten zum Sekundären ernannt wird:</para> <itemizedlist> <listitem> <para>Hängt es den <acronym>HAST</acronym>-Pool aus dem Dateisystem aus.</para> </listitem> <listitem> <para>Degradiert es den <acronym>HAST</acronym>-Pool zum sekundären.</para> </listitem> </itemizedlist> <caution> <para>Dieses Skript ist nur ein Beispiel für eine mögliche Lösung. Es behandelt nicht alle möglichen Szenarien, die auftreten können und sollte erweitert bzw. abgeändert werden, so dass z.B. benötigte Dienste gestartet oder gestoppt werden.</para> </caution> <tip> <para>Für dieses Beispiel wurde ein <acronym>UFS</acronym>-Dateisystem verwendet. Um die Zeit für die Wiederherstellung zu verringern, kann ein <acronym>UFS</acronym> mit Journal oder ein <acronym>ZFS</acronym>-Dateisystem benutzt werden.</para> </tip> <para>Weitere detaillierte Informationen mit zusätzlichen Beispielen können unter <link xlink:href="http://wiki.FreeBSD.org/HAST"> http://wiki.FreeBSD.org/HAST</link> abgerufen werden.</para> </sect3> </sect2> <sect2> <title>Fehlerbehebung</title> <para><acronym>HAST</acronym> sollte generell ohne Probleme funktionieren. Jedoch kann es, wie bei jeder anderen Software auch, zu gewissen Zeiten sein, dass sie sich nicht so verhält wie angegeben. Die Quelle dieser Probleme kann unterschiedlich sein, jedoch sollte als Faustregel gewährleistet werden, dass die Zeit für alle Knoten im Cluster synchron läuft.</para> <para>Für die Fehlersuche bei <acronym>HAST</acronym> sollte die Anzahl an Debugging-Meldungen von &man.hastd.8; erhöht werden. Dies kann durch das Starten von <command>hastd</command> mit <literal>-d</literal> erreicht werden. Diese Option kann mehrfach angegeben werden, um die Anzahl an Meldungen weiter zu erhöhen. Sie sollten ebenfalls die Verwendung von <literal>-F</literal> in Erwägung ziehen, was <command>hastd</command> im Vordergrund startet.</para> <sect3 xml:id="disks-hast-sb"> <title>Auflösung des Split-brain-Zustands</title> <para><literal>split-brain</literal> bezeichnet eine Situation, in der beide Knoten des Clusters nicht in der Lage sind, miteinander zu kommunizieren und dadurch beide als primäre Knoten fungieren. Dies ist ein gefährlicher Zustand, weil es beiden Knoten erlaubt ist, Änderungen an den Daten vorzunehmen, die miteinander nicht in Einklang gebracht werden können. Diese Situation muss vom Systemadministrator manuell bereinigt werden.</para> <para>Der Administrator muss entscheiden, welcher Knoten die wichtigeren Änderungen besitzt, oder die Zusammenführung manuell durchführen. Anschließend kann <acronym>HAST</acronym> die volle Synchronisation mit dem Knoten durchführen, der die beschädigten Daten enthält. Um dies zu tun, geben Sie folgende Befehle auf dem Knoten ein, der neu synchronisiert werden muss:</para> <screen>&prompt.root; <userinput>hastctl role init <replaceable>test</replaceable></userinput> &prompt.root; <userinput>hastctl create <replaceable>test</replaceable></userinput> &prompt.root; <userinput>hastctl role secondary <replaceable>test</replaceable></userinput></screen> </sect3> </sect2> </sect1> </chapter>