aboutsummaryrefslogtreecommitdiff
path: root/de_DE.ISO8859-1/books/handbook/zfs
diff options
context:
space:
mode:
authorBenedict Reuschling <bcr@FreeBSD.org>2015-04-05 15:21:54 +0000
committerBenedict Reuschling <bcr@FreeBSD.org>2015-04-05 15:21:54 +0000
commit75bd538a19978cdcd8b7723e991ef3b1493bbafe (patch)
tree5e61ebd66e883268145075e7930819758d3b995e /de_DE.ISO8859-1/books/handbook/zfs
parentb21c86f3447c8c958ec09624904d7072256533ef (diff)
downloaddoc-75bd538a19978cdcd8b7723e991ef3b1493bbafe.tar.gz
doc-75bd538a19978cdcd8b7723e991ef3b1493bbafe.zip
This is a complete re-translation of the current HEAD-revision of the
ZFS chapter. Some ZFS terms were translated into german where appropriate, but most of them (vdev, pool states and such) were left to make it easier to relate to the ZFS outputs of FreeBSD. Obtained from: The FreeBSD German Documentation Project
Notes
Notes: svn path=/head/; revision=46472
Diffstat (limited to 'de_DE.ISO8859-1/books/handbook/zfs')
-rw-r--r--de_DE.ISO8859-1/books/handbook/zfs/chapter.xml4769
1 files changed, 4769 insertions, 0 deletions
diff --git a/de_DE.ISO8859-1/books/handbook/zfs/chapter.xml b/de_DE.ISO8859-1/books/handbook/zfs/chapter.xml
new file mode 100644
index 0000000000..ae54a75bd9
--- /dev/null
+++ b/de_DE.ISO8859-1/books/handbook/zfs/chapter.xml
@@ -0,0 +1,4769 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!--
+ The FreeBSD Documentation Project
+ The FreeBSD German Documentation Project
+
+ $FreeBSD$
+ basiert auf: r45602
+-->
+
+<chapter xmlns="http://docbook.org/ns/docbook"
+ xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0"
+ xml:id="zfs">
+
+ <info>
+ <title>Das Z-Dateisystem (<acronym>ZFS</acronym>)</title>
+
+ <authorgroup>
+ <author>
+ <personname>
+ <firstname>Tom</firstname>
+ <surname>Rhodes</surname>
+ </personname>
+ <contrib>Geschrieben von </contrib>
+ </author>
+ <author>
+ <personname>
+ <firstname>Allan</firstname>
+ <surname>Jude</surname>
+ </personname>
+ <contrib>Geschrieben von </contrib>
+ </author>
+ <author>
+ <personname>
+ <firstname>Benedict</firstname>
+ <surname>Reuschling</surname>
+ </personname>
+ <contrib>Geschrieben von </contrib>
+ </author>
+ <author>
+ <personname>
+ <firstname>Warren</firstname>
+ <surname>Block</surname>
+ </personname>
+ <contrib>Geschrieben von </contrib>
+ </author>
+ </authorgroup>
+ <authorgroup>
+ <author>
+ <personname>
+ <firstname>Benedict</firstname>
+ <surname>Reuschling</surname>
+ </personname>
+ <contrib>Übersetzt von </contrib>
+ </author>
+ </authorgroup>
+ </info>
+
+ <para>Das <emphasis>Z-Dateisystem</emphasis>, oder kurz
+ <acronym>ZFS</acronym>, ist ein fortgeschrittenes Dateisystem, das
+ entwickelt wurde, um viele der grossen Probleme in vorherigen
+ Entwicklungen zu überwinden.</para>
+
+ <para>Ursprünglich von &sun; entworfen, wird die weitere Entwicklung
+ von <acronym>ZFS</acronym> heutzutage als Open Source vom <link
+ xlink:href="http://open-zfs.org">OpenZFS Projekt</link>
+ vorangetrieben.</para>
+
+ <para><acronym>ZFS</acronym> hat drei grosse Entwurfsziele:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>Datenintegrität: Alle Daten enthalten eine Prüfsumme
+ (<link linkend="zfs-term-checksum">checksum</link>) der Daten.
+ Wenn Daten geschrieben werden, wird die Prüfsumme berechnet
+ und zusammen mit den Daten gespeichert. Wenn diese Daten
+ später wieder eingelesen werden, wird diese Prüfsumme erneut
+ berechnet. Falls die Prüfsummen nicht übereinstimmen, wurde
+ ein Datenfehler festgestellt. <acronym>ZFS</acronym> wird
+ versuchen, diesen Fehler automatisch zu korrigieren, falls
+ genug Datenredundanz vorhanden ist.</para>
+ </listitem>
+
+ <listitem>
+ <para>Gepoolter Speicher: physikalische Speichermedien werden zu
+ einem Pool zusammengefasst und der Speicherplatz wird von
+ diesem gemeinsam genutzten Pool allokiert. Der Speicherplatz
+ steht allen Dateisystemen zur Verfügung und kann durch das
+ Hinzufügen von neuen Speichermedien vergrössert werden.</para>
+ </listitem>
+
+ <listitem>
+ <para>Geschwindigkeit: mehrere Zwischenspeichermechanismen
+ sorgen für erhöhte Geschwindigkeit. Der <link
+ linkend="zfs-term-arc">ARC</link> ist ein weiterentwickelter,
+ hauptspeicherbasierter Zwischenspeicher für Leseanfragen. Auf
+ einer zweiten Stufe kann ein plattenbasierter <link
+ linkend="zfs-term-l2arc">L2ARC</link>-Lesezwischenspeicher
+ hinzugefügt werden. Zusätzlich ist auch noch ein
+ plattenbasierter, synchroner Schreibzwischenspeicher
+ verfügbar, der sog. <link
+ linkend="zfs-term-zil">ZIL</link>.</para>
+ </listitem>
+ </itemizedlist>
+
+ <para>Eine vollständige Liste aller Eigenschaften und der
+ dazugehörigen Terminologie ist in <xref linkend="zfs-term"/> zu
+ sehen.</para>
+
+ <sect1 xml:id="zfs-differences">
+ <title>Was <acronym>ZFS</acronym> anders macht</title>
+
+ <para><acronym>ZFS</acronym> ist signifikant unterschiedlich zu
+ allen bisherigen Dateisystemen, weil es mehr als nur ein
+ Dateisystem ist. Durch die Kombination von traditionell
+ getrennten Rollen von Volumenmanager und Dateisystem ist
+ <acronym>ZFS</acronym> mit einzigartigen Vorteilen ausgestattet.
+ Das Dateisystem besitzt jetzt Kentniss von der zugrundeliegenden
+ Struktur der Speichermedien. Traditionelle Dateisysteme konnten
+ nur auf einer einzigen Platte gleichzeitig angelegt werden.
+ Falls es zwei Festplatten gab, mussten auch zwei getrennte
+ Dateisysteme erstellt werden. In einer traditionellen
+ Hardware-<acronym>RAID</acronym>-Konfiguration wurde dieses
+ Problem umgangen, indem dem Betriebssystem nur eine einzige
+ logische Platte angezeigt wurde, die sich aus dem Speicherplatz
+ von der Anzahl an physischen Platten zusammensetzte, auf dem
+ dann das Betriebssystem ein Dateisystem erstellte. Sogar im
+ Fall von Software-<acronym>RAID</acronym>-Lösungen, wie die, die
+ von <acronym>GEOM</acronym> bereitgestellt werden, war das
+ <acronym>UFS</acronym>-Dateisystem der Ansicht, dass es auf nur
+ einem einzigen Gerät angelegt wurde. <acronym>ZFS</acronym>'
+ Kombination eines Volumenmanagers und eines Dateisystems löst
+ dies und erlaubt das Erstellen von vielen Dateisystemen, die
+ sich alle den darunterliegenden Pool aus verfügbarem Speicher
+ teilen. Einer der grössten Vorteile von <acronym>ZFS</acronym>'
+ Kentniss des physikalischen Layouts der Platten ist, dass
+ existierende Dateisysteme automatisch wachsen können, wenn
+ zusätzliche Platten zum Pool hinzugefügt werden. Dieser neue
+ Speicherplatz wird dann allen Dateisystemen zur Verfügung
+ gestellt. <acronym>ZFS</acronym> besitzt ebenfalls eine Menge
+ an unterschiedlichen Eigenschaften, die für jedes Dateisystem
+ angepasst werden könnnen, was viele Vorteile bringt, wenn man
+ unterschiedliche Dateisysteme und Datasets anlegt, anstatt ein
+ einziges, monolitisches Dateisystem zu erzeugen.</para>
+ </sect1>
+
+ <sect1 xml:id="zfs-quickstart">
+ <title>Schnellstartanleitung</title>
+
+ <para>Es existiert ein Startmechanismus, der es &os; erlaubt,
+ <acronym>ZFS</acronym>-Pools während der Systeminitialisierung
+ einzubinden. Um diesen zu aktivieren, fügen Sie diese Zeile
+ in <filename>/etc/rc.conf</filename> ein:</para>
+
+ <programlisting>zfs_enable="YES"</programlisting>
+
+ <para>Starten Sie dann den Dienst:</para>
+
+ <screen>&prompt.root; <userinput>service zfs start</userinput></screen>
+
+ <para>Die Beispiele in diesem Abschnitt gehen von drei
+ <acronym>SCSI</acronym>-Platten mit den Gerätenamen
+ <filename><replaceable>da0</replaceable></filename>,
+ <filename><replaceable>da1</replaceable></filename> und
+ <filename><replaceable>da2</replaceable></filename> aus. Nutzer
+ von <acronym>SATA</acronym>-Hardware sollten stattdessen die
+ Bezeichnung <filename><replaceable>ada</replaceable></filename>
+ als Gerätenamen verwenden.</para>
+
+ <sect2 xml:id="zfs-quickstart-single-disk-pool">
+ <title>Pools mit einer Platte</title>
+
+ <para>Um einen einfachen, nicht-redundanten Pool mit einem
+ einzigen Gerät anzulegen, geben Sie folgendes ein:</para>
+
+ <screen>&prompt.root; <userinput>zpool create <replaceable>example</replaceable> <replaceable>/dev/da0</replaceable></userinput></screen>
+
+ <para>Um den neuen Pool anzuzeigen, prüfen Sie die Ausgabe von
+ <command>df</command>:</para>
+
+ <screen>&prompt.root; <userinput>df</userinput>
+Filesystem 1K-blocks Used Avail Capacity Mounted on
+/dev/ad0s1a 2026030 235230 1628718 13% /
+devfs 1 1 0 100% /dev
+/dev/ad0s1d 54098308 1032846 48737598 2% /usr
+example 17547136 0 17547136 0% /example</screen>
+
+ <para>Diese Ausgabe zeigt, dass der
+ <literal>example</literal>-Pool erstellt und eingehängt wurde.
+ Er ist nun als Dateisystem verfügbar. Dateien können darauf
+ angelegt werden und Anwender können sich den Inhalt
+ ansehen:</para>
+
+ <screen>&prompt.root; <userinput>cd /example</userinput>
+&prompt.root; <userinput>ls</userinput>
+&prompt.root; <userinput>touch testfile</userinput>
+&prompt.root; <userinput>ls -al</userinput>
+total 4
+drwxr-xr-x 2 root wheel 3 Aug 29 23:15 .
+drwxr-xr-x 21 root wheel 512 Aug 29 23:12 ..
+-rw-r--r-- 1 root wheel 0 Aug 29 23:15 testfile</screen>
+
+ <para>Allerdings nutzt dieser Pool noch keine der Vorteile von
+ <acronym>ZFS</acronym>. Um ein Dataset auf diesem Pool mit
+ aktivierter Komprimierung zu erzeugen, geben Sie ein:</para>
+
+ <screen>&prompt.root; <userinput>zfs create example/compressed</userinput>
+&prompt.root; <userinput>zfs set compression=gzip example/compressed</userinput></screen>
+
+ <para>Das <literal>example/compressed</literal>-Dataset ist nun
+ ein komprimiertes <acronym>ZFS</acronym>-Dateisystem.
+ Versuchen Sie, ein paar grosse Dateien auf
+ <filename>/example/compressed</filename> zu kopieren.</para>
+
+ <para>Deaktivieren lässt sich die Komprimierung durch:</para>
+
+ <screen>&prompt.root; <userinput>zfs set compression=off example/compressed</userinput></screen>
+
+ <para>Um ein Dateisystem abzuhängen, verwenden Sie
+ <command>zfs umount</command> und überprüfen Sie dies
+ anschliessend mit <command>df</command>:</para>
+
+ <screen>&prompt.root; <userinput>zfs umount example/compressed</userinput>
+&prompt.root; <userinput>df</userinput>
+Filesystem 1K-blocks Used Avail Capacity Mounted on
+/dev/ad0s1a 2026030 235232 1628716 13% /
+devfs 1 1 0 100% /dev
+/dev/ad0s1d 54098308 1032864 48737580 2% /usr
+example 17547008 0 17547008 0% /example</screen>
+
+ <para>Um das Dateisystem wieder einzubinden und erneut verfügbar
+ zu machen, verwenden Sie <command>zfs mount</command> und
+ prüfen Sie erneut mit <command>df</command>:</para>
+
+ <screen>&prompt.root; <userinput>zfs mount example/compressed</userinput>
+&prompt.root; <userinput>df</userinput>
+Filesystem 1K-blocks Used Avail Capacity Mounted on
+/dev/ad0s1a 2026030 235234 1628714 13% /
+devfs 1 1 0 100% /dev
+/dev/ad0s1d 54098308 1032864 48737580 2% /usr
+example 17547008 0 17547008 0% /example
+example/compressed 17547008 0 17547008 0% /example/compressed</screen>
+
+ <para>Den Pool und die Dateisysteme können Sie auch über die
+ Ausgabe von <command>mount</command> prüfen:</para>
+
+ <screen>&prompt.root; <userinput>mount</userinput>
+/dev/ad0s1a on / (ufs, local)
+devfs on /dev (devfs, local)
+/dev/ad0s1d on /usr (ufs, local, soft-updates)
+example on /example (zfs, local)
+example/compressed on /example/compressed (zfs, local)</screen>
+
+ <para>Nach der Erstellung können <acronym>ZFS</acronym>-Datasets
+ wie jedes undere Dateisystem verwendet werden. Jedoch sind
+ jede Menge undere Besonderheiten verfügbar, die individuell
+ auf Dataset-Basis eingestellt sein können. Im Beispiel unten
+ wird ein neues Dateisystem namens <literal>data</literal>
+ angelegt. Wichtige Dateien werden dort abgespeichert, deshalb
+ wird es so konfiguriert, dass zwei Kopien jedes Datenblocks
+ vorgehalten werden.</para>
+
+ <screen>&prompt.root; <userinput>zfs create example/data</userinput>
+&prompt.root; <userinput>zfs set copies=2 example/data</userinput></screen>
+
+ <para>Es ist jetzt möglich, den Speicherplatzverbrauch der Daten
+ durch die Eingabe von <command>df</command> zu sehen:</para>
+
+ <screen>&prompt.root; <userinput>df</userinput>
+Filesystem 1K-blocks Used Avail Capacity Mounted on
+/dev/ad0s1a 2026030 235234 1628714 13% /
+devfs 1 1 0 100% /dev
+/dev/ad0s1d 54098308 1032864 48737580 2% /usr
+example 17547008 0 17547008 0% /example
+example/compressed 17547008 0 17547008 0% /example/compressed
+example/data 17547008 0 17547008 0% /example/data</screen>
+
+ <para>Sie haben vermutlich bemerkt, dass jedes Dateisystem auf
+ dem Pool die gleiche Menge an verfügbarem Speicherplatz
+ besitzt. Das ist der Grund dafür, dass in diesen Beispielen
+ <command>df</command> verwendet wird, um zu zeigen, dass die
+ Dateisysteme nur die Menge an Speicher verbrauchen, den sie
+ benötigen und alle den gleichen Pool verwenden.
+ <acronym>ZFS</acronym> eliminiert Konzepte wie Volumen und
+ Partitionen und erlaubt es mehreren Dateisystemen den gleichen
+ Pool zu belegen.</para>
+
+ <para>Um das Dateisystem zu zerstören und anschliessend den
+ Pool, da dieser nicht mehr benötigt wird, geben Sie
+ ein:</para>
+
+ <screen>&prompt.root; <userinput>zfs destroy example/compressed</userinput>
+&prompt.root; <userinput>zfs destroy example/data</userinput>
+&prompt.root; <userinput>zpool destroy example</userinput></screen>
+ </sect2>
+
+ <sect2 xml:id="zfs-quickstart-raid-z">
+ <title>RAID-Z</title>
+
+ <para>Platten fallen aus. Eine Methode, um Datenverlust durch
+ Festplattenausfall zu vermeiden, ist die Verwendung von
+ <acronym>RAID</acronym>. <acronym>ZFS</acronym> unterstützt
+ dies in seiner Poolgestaltung. Pools mit
+ <acronym>RAID-Z</acronym> benötigen drei oder mehr Platten,
+ bieten aber auch mehr nutzbaren Speicher als gespiegelte
+ Pools.</para>
+
+ <para>Dieses Beispiel erstellt einen
+ <acronym>RAID-Z</acronym>-Pool, indem es die Platten angibt,
+ die dem Pool hinzugefügt werden sollen:</para>
+
+ <screen>&prompt.root; <userinput>zpool create storage raidz da0 da1 da2</userinput></screen>
+
+ <note>
+ <para>&sun; empfiehlt, dass die Anzahl der Geräte in einer
+ <acronym>RAID</acronym>-Z Konfiguration zwischen drei und
+ neun beträgt. Für Umgebungen, die einen einzelnen Pool
+ enötigen, der aus 10 oder mehr Platten besteht, sollten Sie
+ in Erwägung ziehen, diesen in kleinere
+ <acronym>RAID-Z</acronym>-Gruppen aufzuteilen. Falls nur
+ zwei Platten verfügbar sind und Redundanz benötigt wird,
+ ziehen Sie die Verwendung eines
+ <acronym>ZFS</acronym>-Spiegels (mirror) in Betracht. Lesen
+ Sie dazu &man.zpool.8;, um weitere Details zu
+ erhalten.</para>
+ </note>
+
+ <para>Das vorherige Beispiel erstellte einen ZPool namens
+ <literal>storage</literal>. Dieses Beispiel erzeugt ein neues
+ Dateisystem, genannt <literal>home</literal>, in diesem
+ Pool:</para>
+
+ <screen>&prompt.root; <userinput>zfs create storage/home</userinput></screen>
+
+ <para>Komprimierung und das Vorhalten von mehreren Kopien von
+ Dateien und Verzeichnissen kann aktiviert werden:</para>
+
+ <screen>&prompt.root; <userinput>zfs set copies=2 storage/home</userinput>
+&prompt.root; <userinput>zfs set compression=gzip storage/home</userinput></screen>
+
+ <para>Um dies als das neue Heimatverzeichnis für Anwender zu
+ setzen, kopieren Sie die Benutzerdaten in dieses Verzeichnis
+ und erstellen passende symbolische Verknüpfungen:</para>
+
+ <screen>&prompt.root; <userinput>cp -rp /home/* /storage/home</userinput>
+&prompt.root; <userinput>rm -rf /home /usr/home</userinput>
+&prompt.root; <userinput>ln -s /storage/home /home</userinput>
+&prompt.root; <userinput>ln -s /storage/home /usr/home</userinput></screen>
+
+ <para>Daten von Anwendern werden nun auf dem frisch erstellten
+ <filename>/storage/home</filename> abgelegt. Überprüfen Sie
+ dies durch das Anlegen eines neuen Benutzers und das
+ anschliessende Anmelden als dieser Benutzer.</para>
+
+ <para>Versuchen Sie, einen Dateisystemschnappschuss anzulegen,
+ den Sie später wieder zurückrollen können:</para>
+
+ <screen>&prompt.root; <userinput>zfs snapshot storage/home@08-30-08</userinput></screen>
+
+ <para>Schnappschüsse können nur auf einem Dateisystem angelegt
+ werden, nicht auf einem einzelnen Verzeichnis oder einer
+ Datei.</para>
+
+ <para>Das Zeichen <literal>@</literal> ist der Trenner zwischen
+ dem Dateisystem- oder dem Volumennamen. Wenn ein wichtiges
+ Verzeichnis aus Versehen gelöscht wurde, kann das Dateisystem
+ gesichert und dann zu einem früheren Schnappschuss
+ zurückgerollt werden, in welchem das Verzeichnis noch
+ existiert:</para>
+
+ <screen>&prompt.root; <userinput>zfs rollback storage/home@08-30-08</userinput></screen>
+
+ <para>Um all verfügbaren Schnappschüsse aufzulisten, geben Sie
+ <command>ls</command> im Verzeichnis
+ <filename>.zfs/snapshot</filename> dieses Dateisystems ein.
+ Beispielsweise lässt sich der zuvor angelegte Schnappschuss
+ wie folgt anzeigen:</para>
+
+ <screen>&prompt.root; <userinput>ls /storage/home/.zfs/snapshot</userinput></screen>
+
+ <para>Es ist möglich, ein Skript zu schreiben, um regelmässig
+ Schnappschüsse von Benutzerdaten anzufertigen. Allerdings
+ verbrauchen Schnappschüsse über lange Zeit eine grosse Menge
+ an Speicherplatz. Der zuvor angelegte Schnappschuss kann
+ durch folgendes Kommundo wieder entfernt werden:</para>
+
+ <screen>&prompt.root; <userinput>zfs destroy storage/home@08-30-08</userinput></screen>
+
+ <para>Nach erfolgreichen Tests kann
+ <filename>/storage/home</filename> zum echten
+ <filename>/home</filename>-Verzeichnis werden, mittels:</para>
+
+ <screen>&prompt.root; <userinput>zfs set mountpoint=/home storage/home</userinput></screen>
+
+ <para>Prüfen Sie mit <command>df</command> und
+ <command>mount</command>, um zu bestätigen, dass das System
+ das Dateisystem nun als <filename>/home</filename>
+ verwendet:</para>
+
+ <screen>&prompt.root; <userinput>mount</userinput>
+/dev/ad0s1a on / (ufs, local)
+devfs on /dev (devfs, local)
+/dev/ad0s1d on /usr (ufs, local, soft-updates)
+storage on /storage (zfs, local)
+storage/home on /home (zfs, local)
+&prompt.root; <userinput>df</userinput>
+Filesystem 1K-blocks Used Avail Capacity Mounted on
+/dev/ad0s1a 2026030 235240 1628708 13% /
+devfs 1 1 0 100% /dev
+/dev/ad0s1d 54098308 1032826 48737618 2% /usr
+storage 26320512 0 26320512 0% /storage
+storage/home 26320512 0 26320512 0% /home</screen>
+
+ <para>Damit ist die <acronym>RAID-Z</acronym> Konfiguration
+ abgeschlossen. Tägliche Informationen über den Status der
+ erstellten Dateisysteme können als Teil des nächtlichen
+ &man.periodic.8;-Berichts generiert werden. Fügen Sie dazu
+ die folgende Zeile in die Datei
+ <filename>/etc/periodic.conf</filename> ein:</para>
+
+ <programlisting>daily_status_zfs_enable="YES"</programlisting>
+ </sect2>
+
+ <sect2 xml:id="zfs-quickstart-recovering-raid-z">
+ <title><acronym>RAID-Z</acronym> wiederherstellen</title>
+
+ <para>Jedes Software-<acronym>RAID</acronym> besitzt eine
+ Methode, um den Zustund (<literal>state</literal>) zu
+ überprüfen. Der Status von <acronym>RAID-Z</acronym> Geräten
+ wird mit diesem Befehl angezeigt:</para>
+
+ <screen>&prompt.root; <userinput>zpool status -x</userinput></screen>
+
+ <para>Wenn alle Pools
+ <link linkend="zfs-term-online">Online</link> sind und alles
+ normal ist, zeigt die Meldung folgendes an:</para>
+
+ <screen>all pools are healthy</screen>
+
+ <para>Wenn es ein Problem gibt, womöglich ist eine Platte
+ im Zustund <link linkend="zfs-term-offline">Offline</link>,
+ dann wird der Poolzustund ähnlich wie dieser aussehen:</para>
+
+ <screen> pool: storage
+ state: DEGRADED
+status: One or more devices has been taken offline by the administrator.
+ Sufficient replicas exist for the pool to continue functioning in a
+ degraded state.
+action: Online the device using 'zpool online' or replace the device with
+ 'zpool replace'.
+ scrub: none requested
+config:
+
+ NAME STATE READ WRITE CKSUM
+ storage DEGRADED 0 0 0
+ raidz1 DEGRADED 0 0 0
+ da0 ONLINE 0 0 0
+ da1 OFFLINE 0 0 0
+ da2 ONLINE 0 0 0
+
+errors: No known data errors</screen>
+
+ <para>Dies zeigt an, dass das Gerät zuvor vom Administrator mit
+ diesem Befehl abgeschaltet wurde:</para>
+
+ <screen>&prompt.root; <userinput>zpool offline storage da1</userinput></screen>
+
+ <para>Jetzt kann das System heruntergefahren werden, um
+ <filename>da1</filename> zu ersetzen. Wenn das System wieder
+ eingeschaltet wird, kann die fehlerhafte Platte im Pool
+ ersetzt werden:</para>
+
+ <screen>&prompt.root; <userinput>zpool replace storage da1</userinput></screen>
+
+ <para>Von diesem Punkt an kann der Status erneut geprüft werden.
+ Dieses Mal ohne die Option <option>-x</option>, damit alle
+ Pools angezeigt werden:</para>
+
+ <screen>&prompt.root; <userinput>zpool status storage</userinput>
+ pool: storage
+ state: ONLINE
+ scrub: resilver completed with 0 errors on Sat Aug 30 19:44:11 2008
+config:
+
+ NAME STATE READ WRITE CKSUM
+ storage ONLINE 0 0 0
+ raidz1 ONLINE 0 0 0
+ da0 ONLINE 0 0 0
+ da1 ONLINE 0 0 0
+ da2 ONLINE 0 0 0
+
+errors: No known data errors</screen>
+
+ <para>In diesem Beispiel ist alles normal.</para>
+ </sect2>
+
+ <sect2 xml:id="zfs-quickstart-data-verification">
+ <title>Daten verifizieren</title>
+
+ <para><acronym>ZFS</acronym> verwendet Prüfsummen, um die
+ Integrität der gespeicherten Daten zu gewährleisten. Dies
+ wird automatisch beim Erstellen von Dateisystemen
+ aktiviert.</para>
+
+ <warning>
+ <para>Prüfsummen können deaktiviert werden, dies wird jedoch
+ <emphasis>nicht</emphasis> empfohlen! Prüfsummen
+ verbrauchen nur sehr wenig Speicherplatz und sichern die
+ Integrität der Daten. Viele Eigenschaften vom
+ <acronym>ZFS</acronym> werden nicht richtig funktionieren,
+ wenn Prüfsummen deaktiviert sind. Es gibt keinen merklichen
+ Geschwindigkeitsunterschied durch das Deaktivieren dieser
+ Prüfsummen.</para>
+ </warning>
+
+ <para>Prüfsummenverifikation ist unter der Bezeichnung
+ <emphasis>scrubbing</emphasis> bekannt. Verifizieren Sie die
+ Integrität der Daten des <literal>storage</literal>-Pools mit
+ diesem Befehl:</para>
+
+ <screen>&prompt.root; <userinput>zpool scrub storage</userinput></screen>
+
+ <para>Die Laufzeit einer Überprüfung hängt ab von der Menge an
+ Daten, die gespeichert sind. Grössere Mengen an Daten
+ benötigen proportional mehr Zeit zum überprüfen. Diese
+ Überprüfungen sind sehr <acronym>I/O</acronym>-intensiv und
+ es kann auch nur eine Überprüfung zur gleichen Zeit
+ durchgeführt werden. Nachdem eine Prüfung beendet ist, kann
+ der Status mit dem Unterkommundo <command>status</command>
+ angezeigt werden:</para>
+
+ <screen>&prompt.root; <userinput>zpool status storage</userinput>
+ pool: storage
+ state: ONLINE
+ scrub: scrub completed with 0 errors on Sat Jan 26 19:57:37 2013
+config:
+
+ NAME STATE READ WRITE CKSUM
+ storage ONLINE 0 0 0
+ raidz1 ONLINE 0 0 0
+ da0 ONLINE 0 0 0
+ da1 ONLINE 0 0 0
+ da2 ONLINE 0 0 0
+
+errors: No known data errors</screen>
+
+ <para>Das Datum der letzten Prüfoperation wird angezeigt, um zu
+ verfolgen, wann die nächste Prüfung benötigt wird.
+ Routinemässige Überprüfungen helfen dabei, Daten vor stiller
+ Korrumpierung zu schützen und die Integrität des Pools sicher
+ zu stellen.</para>
+
+ <para>Lesen Sie &man.zfs.8; und &man.zpool.8;, um über
+ weitere <acronym>ZFS</acronym>-Optionen zu erfahren.</para>
+ </sect2>
+ </sect1>
+
+ <sect1 xml:id="zfs-zpool">
+ <title><command>zpool</command> Administration</title>
+
+ <para>Administration von <acronym>ZFS</acronym> ist unterteilt
+ zwischen zwei Hauptkommandos. Das
+ <command>zpool</command>-Wekzeug steuert die Operationen des
+ Pools und kümmert sich um das Hinzufügen, entfernen, ersetzen
+ und verwalten von Platten. Mit dem <link
+ linkend="zfs-zfs"><command>zfs</command></link>-Befehl können
+ Datasets erstellt, zerstört und verwaltet werden, sowohl
+ <link linkend="zfs-term-filesystem">Dateisysteme</link> als
+ auch <link linkend="zfs-term-volume">Volumes</link>.</para>
+
+ <sect2 xml:id="zfs-zpool-create">
+ <title>Pools anlegen und zerstören</title>
+
+ <para>Einen <acronym>ZFS</acronym>-Pool
+ (<emphasis>zpool</emphasis>) anzulegen beinhaltet das Treffen
+ von einer Reihe von Entscheidungen, die relativ dauerhaft
+ sind, weil die Struktur des Pools nachdem er angelegt wurde,
+ nicht mehr geändert werden kann. Die wichtigste Entscheidung
+ ist, welche Arten von vdevs als physische Platten
+ zusammengefasst werden soll. Sehen Sie sich dazu die Liste
+ von <link linkend="zfs-term-vdev">vdev-Arten</link> an, um
+ Details zu möglichen Optionen zu bekommen. Nachdem der Pool
+ angelegt wurde, erlauben die meisten vdev-Arten es nicht mehr,
+ weitere Geräte zu diesem vdev hinzuzufügen. Die Ausnahme sind
+ Spiegel, die das Hinzufügen von weiteren Platten zum vdev
+ gestatten, sowie stripes, die zu Spiegeln umgewandelt werden
+ können, indem man zusätzliche Platten zum vdev anhängt.
+ Obwohl weitere vdevs eingefügt werden können, um einen Pool zu
+ vergrössern, kann das Layout des Pools nach dem Anlegen nicht
+ mehr verändert werden. Stattdessen müssen die Daten
+ gesichert, der Pool zerstört und danach neu erstellt
+ werden.</para>
+
+ <para>Erstellen eines einfachen gespiegelten Pools:</para>
+
+ <screen>&prompt.root; <userinput>zpool create <replaceable>mypool</replaceable> mirror <replaceable>/dev/ada1</replaceable> <replaceable>/dev/ada2</replaceable></userinput>
+&prompt.root; <userinput>zpool status</userinput>
+ pool: mypool
+ state: ONLINE
+ scan: none requested
+config:
+
+ NAME STATE READ WRITE CKSUM
+ mypool ONLINE 0 0 0
+ mirror-0 ONLINE 0 0 0
+ ada1 ONLINE 0 0 0
+ ada2 ONLINE 0 0 0
+
+errors: No known data errors</screen>
+
+ <para>Mehrere vdevs können gleichzeitig angelegt werden. Geben
+ Sie zusätzliche Gruppen von Platten, getrennt durch das
+ vdev-Typ Schlüsselwort, in diesem Beispiel
+ <literal>mirror</literal>, an:</para>
+
+ <screen>&prompt.root; <userinput>zpool create <replaceable>mypool</replaceable> mirror <replaceable>/dev/ada1</replaceable> <replaceable>/dev/ada2</replaceable> mirror <replaceable>/dev/ada3</replaceable> <replaceable>/dev/ada4</replaceable></userinput>
+ pool: mypool
+ state: ONLINE
+ scan: none requested
+config:
+
+ NAME STATE READ WRITE CKSUM
+ mypool ONLINE 0 0 0
+ mirror-0 ONLINE 0 0 0
+ ada1 ONLINE 0 0 0
+ ada2 ONLINE 0 0 0
+ mirror-1 ONLINE 0 0 0
+ ada3 ONLINE 0 0 0
+ ada4 ONLINE 0 0 0
+
+errors: No known data errors</screen>
+
+ <para>Pools lassen sich auch durch die Angabe von Partitionen
+ anstatt von ganzen Platten erzeugen. Durch die Verwendung von
+ <acronym>ZFS</acronym> in einer separaten Partition ist es
+ möglich, dass die gleiche Platte andere Partitionen für andere
+ Zwecke besitzen kann. Dies ist besonders von Interesse, wenn
+ Partitionen mit Bootcode und Dateisysteme, die zum starten
+ benötigt werden, hinzugefügt werden können. Das erlaubt es,
+ von Platten zu booten, die auch Teil eines Pools sind. Es
+ gibt keinen Geschwindigkeitsnachteil unter &os; wenn eine
+ Partition anstatt einer ganzen Platte verwendet wird. Durch
+ den Einsatz von Partitionen kann der Administrator die Platten
+ <emphasis>unter provisionieren</emphasis>, indem weniger als
+ die volle Kapazität Verwendung findet. Wenn in Zukunft ein
+ Ersatzfestplatte mit der gleichen Grösse als die
+ Originalplatte eine kleinere Kapazität aufweist, passt die
+ kleinere Partition immer noch passen und die Ersatzplatte
+ immer noch verwendet werden.</para>
+
+ <para>Erstellen eines <link
+ linkend="zfs-term-vdev-raidz">RAID-Z2</link>-Pools mit
+ Partitionen:</para>
+
+ <screen>&prompt.root; <userinput>zpool create <replaceable>mypool</replaceable> raidz2 <replaceable>/dev/ada0p3</replaceable> <replaceable>/dev/ada1p3</replaceable> <replaceable>/dev/ada2p3</replaceable> <replaceable>/dev/ada3p3</replaceable> <replaceable>/dev/ada4p3</replaceable> <replaceable>/dev/ada5p3</replaceable></userinput>
+&prompt.root; <userinput>zpool status</userinput>
+ pool: mypool
+ state: ONLINE
+ scan: none requested
+config:
+
+ NAME STATE READ WRITE CKSUM
+ mypool ONLINE 0 0 0
+ raidz2-0 ONLINE 0 0 0
+ ada0p3 ONLINE 0 0 0
+ ada1p3 ONLINE 0 0 0
+ ada2p3 ONLINE 0 0 0
+ ada3p3 ONLINE 0 0 0
+ ada4p3 ONLINE 0 0 0
+ ada5p3 ONLINE 0 0 0
+
+errors: No known data errors</screen>
+
+ <para>Ein Pool, der nicht länger benötigt wird, kann zerstört
+ werden, so dass die Platten für einen anderen Einsatzzweck
+ Verwendung finden können. Um einen Pool zu zerstören, müssen
+ zuerst alle Datasets in diesem Pool abgehängt werden. Wenn
+ die Datasets verwendet werden, wird das Abhängen fehlschlagen
+ und der Pool nicht zerstört. Die Zerstörung des Pools kann
+ erzwungen werden durch die Angabe der Option
+ <option>-f</option>, jedoch kann dies undefiniertes Verhalten
+ in den Anwendungen auslösen, die noch offene Dateien auf
+ diesen Datasets hatten.</para>
+ </sect2>
+
+ <sect2 xml:id="zfs-zpool-attach">
+ <title>Hinzufügen und Löschen von Geräten</title>
+
+ <para>Es gibt zwei Fälle für das Hinzufügen von Platten zu einem
+ Pool: einhängen einer Platte zu einem existierenden vdev mit
+ <command>zpool attach</command> oder einbinden von vdevs zum
+ Pool mit <command>zpool add</command>. Nur manche <link
+ linkend="zfs-term-vdev">vdev-Arten</link> gestatten es,
+ Platten zum vdev hinzuzufügen, nachdem diese angelegt
+ wurden.</para>
+
+ <para>Ein Pool mit nur einer einzigen Platte besitzt keine
+ Redundanz. Datenverfälschung kann erkannt, aber nicht
+ repariert werden, weil es keine weiteren Kopien der Daten
+ gibt. Die Eigenschaft <link
+ linkend="zfs-term-copies">copies</link> kann genutzt werden,
+ um einen geringen Fehler wie einen beschädigtem Sektor
+ auszumerzen, enthält aber nicht die gleiche Art von Schutz,
+ die Spiegelung oder <acronym>RAID-Z</acronym> bieten. Wenn
+ man mit einem Pool startet, der nur aus einer einzigen
+ vdev-Platte besteht, kann mit dem Kommando
+ <command>zpool attach</command> eine zustätzliche Platte dem
+ vdev hinzugefügt werden, um einen Spiegel zu erzeugen. Mit
+ <command>zpool attach</command> können auch zusätzliche
+ Platten zu einer Spiegelgruppe eingefügt werden, was die
+ Redundanz und Lesegeschwindigkeit steigert. Wenn die Platten,
+ aus denen der Pool besteht, aus partitioniert sind,
+ replizieren Sie das Layout der ersten Platte auf die Zweite
+ und verwenden dann <command>gpart backup</command>, gefolgt
+ von <command>gpart restore</command>, um diesen Vorgang
+ einfacher zu gestalten.</para>
+
+ <para>Umwandeln eines (stripe) vdevs namens
+ <replaceable>ada0p3</replaceable> mit einer einzelnen Platte
+ zu einem Spiegel durch das Einhängen von
+ <replaceable>ada1p3</replaceable>:</para>
+
+ <screen>&prompt.root; <userinput>zpool status</userinput>
+ pool: mypool
+ state: ONLINE
+ scan: none requested
+config:
+
+ NAME STATE READ WRITE CKSUM
+ mypool ONLINE 0 0 0
+ ada0p3 ONLINE 0 0 0
+
+errors: No known data errors
+&prompt.root; <userinput>zpool attach <replaceable>mypool</replaceable> <replaceable>ada0p3</replaceable> <replaceable>ada1p3</replaceable></userinput>
+Make sure to wait until resilver is done before rebooting.
+
+If you boot from pool 'mypool', you may need to update
+boot code on newly attached disk 'ada1p3'.
+
+Assuming you use GPT partitioning und 'da0' is your new boot disk
+you may use the following command:
+
+ gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 da0
+&prompt.root; <userinput>gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 <replaceable>ada1</replaceable></userinput>
+bootcode written to ada1
+&prompt.root; <userinput>zpool status</userinput>
+ pool: mypool
+ state: ONLINE
+status: One or more devices is currently being resilvered. The pool will
+ continue to function, possibly in a degraded state.
+action: Wait for the resilver to complete.
+ scan: resilver in progress since Fri May 30 08:19:19 2014
+ 527M scanned out of 781M at 47.9M/s, 0h0m to go
+ 527M resilvered, 67.53% done
+config:
+
+ NAME STATE READ WRITE CKSUM
+ mypool ONLINE 0 0 0
+ mirror-0 ONLINE 0 0 0
+ ada0p3 ONLINE 0 0 0
+ ada1p3 ONLINE 0 0 0 (resilvering)
+
+errors: No known data errors
+&prompt.root; <userinput>zpool status</userinput>
+ pool: mypool
+ state: ONLINE
+ scan: resilvered 781M in 0h0m with 0 errors on Fri May 30 08:15:58 2014
+config:
+
+ NAME STATE READ WRITE CKSUM
+ mypool ONLINE 0 0 0
+ mirror-0 ONLINE 0 0 0
+ ada0p3 ONLINE 0 0 0
+ ada1p3 ONLINE 0 0 0
+
+errors: No known data errors</screen>
+
+ <para>Wenn das Hinzufügen von Platten zu einem vdev keine Option
+ wie für <acronym>RAID-Z</acronym> ist, gibt es eine
+ Alternative, nämlich einen anderen vdev zum Pool hinzuzufügen.
+ Zusätzliche vdevs bieten höhere Geschwindigkeit, indem
+ Schreibvorgänge über die vdevs verteilt werden. Jedes vdev
+ ist dafür verantwortlich, seine eigene Redundanz
+ sicherzustellen. Es ist möglich, aber nicht empfohlen,
+ vdev-Arten zu mischen, wie zum Beispiel
+ <literal>mirror</literal> und <literal>RAID-Z</literal>.
+ Durch das Einfügen eines nicht-redundanten vdev zu einem
+ gespiegelten Pool oder einem <acronym>RAID-Z</acronym> vdev
+ riskiert man die Daten des gesamten Pools. Schreibvorgänge
+ werden verteilt, deshalb ist der Ausfall einer
+ nicht-redundanten Platte mit dem Verlust eines Teils von jedem
+ Block verbunden, der auf den Pool geschrieben wird.</para>
+
+ <para>Daten werden über jedes vdev gestriped. Beispielsweise
+ sind zwei Spiegel-vdevs effektiv ein <acronym>RAID</acronym>
+ 10, dass über zwei Sets von Spiegeln die Daten schreibt.
+ Speicherplatz wird so allokiert, dass jedes vdev zur gleichen
+ Zeit vollgeschrieben wird. Es gibt einen
+ Geschwindigkeitsnachteil wenn die vdevs unterschiedliche Menge
+ von freiem Speicher aufweisen, wenn eine
+ unproportionale Menge an Daten auf das weniger volle vdev
+ geschrieben wird.</para>
+
+ <para>Wenn zusätzliche Geräte zu einem Pool, von dem gebootet
+ wird, hinzugefügt werden, muss der Bootcode aktualisiert
+ werden.</para>
+
+ <para>Einbinden einer zweiten Spiegelgruppe
+ (<filename>ada2p3</filename> und <filename>ada3p3</filename>)
+ zu einem bestehenden Spiegel:</para>
+
+ <screen>&prompt.root; <userinput>zpool status</userinput>
+ pool: mypool
+ state: ONLINE
+ scan: resilvered 781M in 0h0m with 0 errors on Fri May 30 08:19:35 2014
+config:
+
+ NAME STATE READ WRITE CKSUM
+ mypool ONLINE 0 0 0
+ mirror-0 ONLINE 0 0 0
+ ada0p3 ONLINE 0 0 0
+ ada1p3 ONLINE 0 0 0
+
+errors: No known data errors
+&prompt.root; <userinput>zpool add <replaceable>mypool</replaceable> mirror <replaceable>ada2p3</replaceable> <replaceable>ada3p3</replaceable></userinput>
+&prompt.root; <userinput>gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 <replaceable>ada2</replaceable></userinput>
+bootcode written to ada2
+&prompt.root; <userinput>gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 <replaceable>ada3</replaceable></userinput>
+bootcode written to ada3
+&prompt.root; <userinput>zpool status</userinput>
+ pool: mypool
+ state: ONLINE
+ scan: scrub repaired 0 in 0h0m with 0 errors on Fri May 30 08:29:51 2014
+config:
+
+ NAME STATE READ WRITE CKSUM
+ mypool ONLINE 0 0 0
+ mirror-0 ONLINE 0 0 0
+ ada0p3 ONLINE 0 0 0
+ ada1p3 ONLINE 0 0 0
+ mirror-1 ONLINE 0 0 0
+ ada2p3 ONLINE 0 0 0
+ ada3p3 ONLINE 0 0 0
+
+errors: No known data errors</screen>
+
+ <para>Momentan können vdevs nicht von einem Pool entfernt und
+ Platten nur von einem Spiegel ausgehängt werden, wenn genug
+ Redundanz übrig bleibt. Wenn auch nur eine Platte in einer
+ Spiegelgruppe bestehen bleibt, hört der Spiegel auf zu
+ existieren und wird zu einem stripe, was den gesamten Pool
+ riskiert, falls diese letzte Platte ausfällt.</para>
+
+ <para>Entfernen einer Platte aus einem Spiegel mit drei
+ Platten:</para>
+
+ <screen>&prompt.root; <userinput>zpool status</userinput>
+ pool: mypool
+ state: ONLINE
+ scan: scrub repaired 0 in 0h0m with 0 errors on Fri May 30 08:29:51 2014
+config:
+
+ NAME STATE READ WRITE CKSUM
+ mypool ONLINE 0 0 0
+ mirror-0 ONLINE 0 0 0
+ ada0p3 ONLINE 0 0 0
+ ada1p3 ONLINE 0 0 0
+ ada2p3 ONLINE 0 0 0
+
+errors: No known data errors
+&prompt.root; <userinput>zpool detach <replaceable>mypool</replaceable> <replaceable>ada2p3</replaceable></userinput>
+&prompt.root; <userinput>zpool status</userinput>
+ pool: mypool
+ state: ONLINE
+ scan: scrub repaired 0 in 0h0m with 0 errors on Fri May 30 08:29:51 2014
+config:
+
+ NAME STATE READ WRITE CKSUM
+ mypool ONLINE 0 0 0
+ mirror-0 ONLINE 0 0 0
+ ada0p3 ONLINE 0 0 0
+ ada1p3 ONLINE 0 0 0
+
+errors: No known data errors</screen>
+ </sect2>
+
+ <sect2 xml:id="zfs-zpool-status">
+ <title>Den Status eines Pools überprüfen</title>
+
+ <para>Der Status eines Pools ist wichtig. Wenn ein Gerät sich
+ abschaltet oder ein Lese-, Schreib- oder Prüfsummenfehler
+ festgestellt wird, wird der dazugehörige Fehlerzähler erhöht.
+ Die <command>status</command>-Ausgabe zeigt die Konfiguration
+ und den Status von jedem Gerät im Pool und den Gesamtstatus
+ des Pools. Aktionen, die durchgeführt werden sollten und
+ Details zum letzten <link
+ linkend="zfs-zpool-scrub"><command>scrub</command></link>
+ werden ebenfalls angezeigt.</para>
+
+ <screen>&prompt.root; <userinput>zpool status</userinput>
+ pool: mypool
+ state: ONLINE
+ scan: scrub repaired 0 in 2h25m with 0 errors on Sat Sep 14 04:25:50 2013
+config:
+
+ NAME STATE READ WRITE CKSUM
+ mypool ONLINE 0 0 0
+ raidz2-0 ONLINE 0 0 0
+ ada0p3 ONLINE 0 0 0
+ ada1p3 ONLINE 0 0 0
+ ada2p3 ONLINE 0 0 0
+ ada3p3 ONLINE 0 0 0
+ ada4p3 ONLINE 0 0 0
+ ada5p3 ONLINE 0 0 0
+
+errors: No known data errors</screen>
+ </sect2>
+
+ <sect2 xml:id="zfs-zpool-clear">
+ <title>Clearing Errors</title>
+
+ <para>Wenn ein Fehler erkannt wurde, werden die Lese-, Schreib-
+ oder Prüfsummenzähler erhöht. Die Fehlermeldung kann
+ beseitigt und der Zähler zurückgesetzt werden mit
+ <command>zpool clear
+ <replaceable>mypool</replaceable></command>. Den
+ Fehlerzustand zurückzusetzen kann wichtig sein, wenn
+ automatisierte Skripte ablaufen, die den Administrator
+ informieren, sobald der Pool Fehler anzeigt. Weitere Fehler
+ werden nicht gemeldet, wenn der alte Fehlerbericht nicht
+ entfernt wurde.</para>
+ </sect2>
+
+ <sect2 xml:id="zfs-zpool-replace">
+ <title>Ein defektes Gerät entfernen</title>
+
+ <para>Es gibt eine Reihe von Situationen, in denen es nötig
+ wird, eine defekte Platte mit einer anderen auszutauschen.
+ Wenn eine funktionierende Platte ersetzt wird, hält der
+ Prozess die alte Platte während des Ersetzungsvorganges noch
+ aktiv. Der Pool wird nie den Zustand <link
+ linkend="zfs-term-degraded">degraded</link> erhalten, was
+ das Risiko eines Datenverlustes minimiert. Alle Daten der
+ alten Platte werden durch das Kommando
+ <command>zpool replace</command> auf die Neue übertragen.
+ Nachdem die Operation abgeschlossen ist, wird die alte Platte
+ vom vdev getrennt. Falls die neue Platte grösser ist als die
+ alte Platte , ist es möglich den Pool zu vergrössern, um den
+ neuen Platz zu nutzen. Lesen Sie dazu <link
+ linkend="zfs-zpool-online">Einen Pool vergrössern</link>.</para>
+
+ <para>Ersetzen eines funktionierenden Geräts in einem
+ Pool:</para>
+
+ <screen>&prompt.root; <userinput>zpool status</userinput>
+ pool: mypool
+ state: ONLINE
+ scan: none requested
+config:
+
+ NAME STATE READ WRITE CKSUM
+ mypool ONLINE 0 0 0
+ mirror-0 ONLINE 0 0 0
+ ada0p3 ONLINE 0 0 0
+ ada1p3 ONLINE 0 0 0
+
+errors: No known data errors
+&prompt.root; <userinput>zpool replace <replaceable>mypool</replaceable> <replaceable>ada1p3</replaceable> <replaceable>ada2p3</replaceable></userinput>
+Make sure to wait until resilver is done before rebooting.
+
+If you boot from pool 'zroot', you may need to update
+boot code on newly attached disk 'ada2p3'.
+
+Assuming you use GPT partitioning und 'da0' is your new boot disk
+you may use the following command:
+
+ gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 da0
+&prompt.root; <userinput>gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 <replaceable>ada2</replaceable></userinput>
+&prompt.root; <userinput>zpool status</userinput>
+ pool: mypool
+ state: ONLINE
+status: One or more devices is currently being resilvered. The pool will
+ continue to function, possibly in a degraded state.
+action: Wait for the resilver to complete.
+ scan: resilver in progress since Mon Jun 2 14:21:35 2014
+ 604M scanned out of 781M at 46.5M/s, 0h0m to go
+ 604M resilvered, 77.39% done
+config:
+
+ NAME STATE READ WRITE CKSUM
+ mypool ONLINE 0 0 0
+ mirror-0 ONLINE 0 0 0
+ ada0p3 ONLINE 0 0 0
+ replacing-1 ONLINE 0 0 0
+ ada1p3 ONLINE 0 0 0
+ ada2p3 ONLINE 0 0 0 (resilvering)
+
+errors: No known data errors
+&prompt.root; <userinput>zpool status</userinput>
+ pool: mypool
+ state: ONLINE
+ scan: resilvered 781M in 0h0m with 0 errors on Mon Jun 2 14:21:52 2014
+config:
+
+ NAME STATE READ WRITE CKSUM
+ mypool ONLINE 0 0 0
+ mirror-0 ONLINE 0 0 0
+ ada0p3 ONLINE 0 0 0
+ ada2p3 ONLINE 0 0 0
+
+errors: No known data errors</screen>
+ </sect2>
+
+ <sect2 xml:id="zfs-zpool-resilver">
+ <title>Behandlung von fehlerhaften Geräten</title>
+
+ <para>Wenn eine Platte in einem Pool ausfällt, wird das vdev zu
+ dem diese Platte gehört, den Zustand <link
+ linkend="zfs-term-degraded">degraded</link> erhalten. Alle
+ Daten sind immer noch verfügbar, jedoch wird die
+ Geschwindigkeit möglicherweise reduziert, weil die fehlenden
+ Daten aus der verfügbaren Redundanz heraus berechnet werden
+ müssen. Um das vdev in einen funktionierenden Zustand zurück
+ zu versetzen, muss das physikalische Gerät ersetzt werden.
+ <acronym>ZFS</acronym> wird dann angewiesen, den <link
+ linkend="zfs-term-resilver">resilver</link>-Vorgang zu
+ beginnen. Daten, die sich auf dem defekten Gerät befanden,
+ werden neu aus der vorhandenen Prüfsumme berechnet und auf das
+ Ersatzgerät geschrieben. Nach Beendigung dieses Prozesses
+ kehrt das vdev zum Status <link
+ linkend="zfs-term-online">online</link> zurück.</para>
+
+ <para>Falls das vdev keine Redundanz besitzt oder wenn mehrere
+ Geräte ausgefallen sind und es nicht genug Redundanz gibt, um
+ zu kompensieren, geht der Pool in den Zustand <link
+ linkend="zfs-term-faulted">faulted</link> über. Wenn eine
+ ausreichende Anzahl von Geräten nicht wieder an den Pool
+ angeschlossen werden können, fällt der Pool aus und die Daten
+ müssen von Sicherungen wieder eingespielt werden.</para>
+
+ <para>Wenn eine defekte Platte ausgewechselt wird, wird der Name
+ dieser defekten Platte mit der <acronym>GUID</acronym> des
+ Geräts ersetzt. Ein neuer Gerätename als Parameter für
+ <command>zpool replace</command> wird nicht benötigt, falls
+ das Ersatzgerät den gleichen Gerätenamen besitzt.</para>
+
+ <para>Ersetzen einer defekten Platte durch
+ <command>zpool replace</command>:</para>
+
+ <screen>&prompt.root; <userinput>zpool status</userinput>
+ pool: mypool
+ state: DEGRADED
+status: One or more devices could not be opened. Sufficient replicas exist for
+ the pool to continue functioning in a degraded state.
+action: Attach the missing device und online it using 'zpool online'.
+ see: http://illumos.org/msg/ZFS-8000-2Q
+ scan: none requested
+config:
+
+ NAME STATE READ WRITE CKSUM
+ mypool DEGRADED 0 0 0
+ mirror-0 DEGRADED 0 0 0
+ ada0p3 ONLINE 0 0 0
+ 316502962686821739 UNAVAIL 0 0 0 was /dev/ada1p3
+
+errors: No known data errors
+&prompt.root; <userinput>zpool replace <replaceable>mypool</replaceable> <replaceable>316502962686821739</replaceable> <replaceable>ada2p3</replaceable></userinput>
+&prompt.root; <userinput>zpool status</userinput>
+ pool: mypool
+ state: DEGRADED
+status: One or more devices is currently being resilvered. The pool will
+ continue to function, possibly in a degraded state.
+action: Wait for the resilver to complete.
+ scan: resilver in progress since Mon Jun 2 14:52:21 2014
+ 641M scanned out of 781M at 49.3M/s, 0h0m to go
+ 640M resilvered, 82.04% done
+config:
+
+ NAME STATE READ WRITE CKSUM
+ mypool DEGRADED 0 0 0
+ mirror-0 DEGRADED 0 0 0
+ ada0p3 ONLINE 0 0 0
+ replacing-1 UNAVAIL 0 0 0
+ 15732067398082357289 UNAVAIL 0 0 0 was /dev/ada1p3/old
+ ada2p3 ONLINE 0 0 0 (resilvering)
+
+errors: No known data errors
+&prompt.root; <userinput>zpool status</userinput>
+ pool: mypool
+ state: ONLINE
+ scan: resilvered 781M in 0h0m with 0 errors on Mon Jun 2 14:52:38 2014
+config:
+
+ NAME STATE READ WRITE CKSUM
+ mypool ONLINE 0 0 0
+ mirror-0 ONLINE 0 0 0
+ ada0p3 ONLINE 0 0 0
+ ada2p3 ONLINE 0 0 0
+
+errors: No known data errors</screen>
+ </sect2>
+
+ <sect2 xml:id="zfs-zpool-scrub">
+ <title>Einen Pool überprüfen</title>
+
+ <para>Es wird empfohlen, dass Pools regelmässig geprüft (<link
+ linkend="zfs-term-scrub">scrubbed</link>) werden,
+ idealerweise mindestens einmal pro Monat. Der
+ <command>scrub</command>-Vorgang ist beansprucht die Platte
+ sehr und reduziert die Geschwindigkeit während er läuft.
+ Vermeiden Sie Zeiten, in denen grosser Bedarf besteht, wenn
+ Sie <command>scrub</command> starten oder benutzen Sie <link
+ linkend="zfs-advanced-tuning-scrub_delay"><varname>vfs.zfs.scrub_delay</varname></link>,
+ um die relative Priorität vom <command>scrub</command>
+ einzustellen, um zu verhindern, dass es mit anderen Aufgaben
+ kollidiert.</para>
+
+ <screen>&prompt.root; <userinput>zpool scrub <replaceable>mypool</replaceable></userinput>
+&prompt.root; <userinput>zpool status</userinput>
+ pool: mypool
+ state: ONLINE
+ scan: scrub in progress since Wed Feb 19 20:52:54 2014
+ 116G scanned out of 8.60T at 649M/s, 3h48m to go
+ 0 repaired, 1.32% done
+config:
+
+ NAME STATE READ WRITE CKSUM
+ mypool ONLINE 0 0 0
+ raidz2-0 ONLINE 0 0 0
+ ada0p3 ONLINE 0 0 0
+ ada1p3 ONLINE 0 0 0
+ ada2p3 ONLINE 0 0 0
+ ada3p3 ONLINE 0 0 0
+ ada4p3 ONLINE 0 0 0
+ ada5p3 ONLINE 0 0 0
+
+errors: No known data errors</screen>
+
+ <para>Falls eine Überrpüfaktion abgebrochen werden muss, geben
+ Sie <command>zpool scrub -s
+ <replaceable>mypool</replaceable></command> ein.</para>
+ </sect2>
+
+ <sect2 xml:id="zfs-zpool-selfheal">
+ <title>Selbstheilung</title>
+
+ <para>Die Prüfsummen, welche zusammen mit den Datenblöcken
+ gespeichert werden, ermöglichen dem Dateisystem, sich
+ <emphasis>selbst zu heilen</emphasis>. Diese Eigenschaft wird
+ automatisch Daten korrigieren, deren Prüfsumme nicht mit der
+ Gespeicherten übereinstimmt, die auf einem anderen Gerät, das
+ Teil des Pools ist, vorhanden ist. Beispielsweise bei
+ einem Spiegel aus zwei Platten, von denen eine anfängt, Fehler
+ zu produzieren und nicht mehr länger Daten speichern kann.
+ Dieser Fall ist sogar noch schlimmer, wenn auf die Daten seit
+ einiger Zeit nicht mehr zugegriffen wurde, zum Beispiel bei
+ einem Langzeit-Archivspeicher. Traditionelle Dateisysteme
+ müssen dann Algorithmen wie &man.fsck.8; ablaufen lassen,
+ welche die Daten überprüfen und reparieren. Diese Kommandos
+ benötigen einige Zeit und in gravierenden Fällen muss ein
+ Administrator manuelle Entscheidungen treffen, welche
+ Reparaturoperation vorgenommen werden soll. Wenn
+ <acronym>ZFS</acronym> einen defekten Datenblock mit einer
+ Prüfsumme erkennt, die nicht übereinstimmt, versucht es die
+ Daten von der gespiegelten Platte zu lesen. Wenn diese Platte
+ die korrekten Daten liefern kann, wird nicht nur dieser
+ Datenblock an die anfordernde Applikation geschickt, sondern
+ auch die falschen Daten auf der Disk reparieren, welche die
+ falsche Prüfsumme erzeugt hat. Dies passiert während des
+ normalen Betriebs des Pools, ohne dass eine
+ Interaktion vom Systemadministrator notwendig wäre.</para>
+
+ <para>Das nächste Beispiel demonstriert dieses Verhalten zur
+ Selbstheilung. Ein gespiegelter Pool mit den beiden Platten
+ <filename>/dev/ada0</filename> und
+ <filename>/dev/ada1</filename> wird angelegt.</para>
+
+ <screen>&prompt.root; <userinput>zpool create <replaceable>healer</replaceable> mirror <replaceable>/dev/ada0</replaceable> <replaceable>/dev/ada1</replaceable></userinput>
+&prompt.root; <userinput>zpool status <replaceable>healer</replaceable></userinput>
+ pool: healer
+ state: ONLINE
+ scan: none requested
+config:
+
+ NAME STATE READ WRITE CKSUM
+ healer ONLINE 0 0 0
+ mirror-0 ONLINE 0 0 0
+ ada0 ONLINE 0 0 0
+ ada1 ONLINE 0 0 0
+
+errors: No known data errors
+&prompt.root; <userinput>zpool list</userinput>
+NAME SIZE ALLOC FREE CAP DEDUP HEALTH ALTROOT
+healer 960M 92.5K 960M 0% 1.00x ONLINE -</screen>
+
+ <para>Ein paar wichtige Daten, die es vor Datenfehlern mittels
+ der Selbstheilungsfunktion zu schützen gilt, werden auf den
+ Pool kopiert. Eine Prüfsumme wird zum späteren Vergleich
+ berechnet.</para>
+
+ <screen>&prompt.root; <userinput>cp /some/important/data /healer</userinput>
+&prompt.root; <userinput>zfs list</userinput>
+NAME SIZE ALLOC FREE CAP DEDUP HEALTH ALTROOT
+healer 960M 67.7M 892M 7% 1.00x ONLINE -
+&prompt.root; <userinput>sha1 /healer > checksum.txt</userinput>
+&prompt.root; <userinput>cat checksum.txt</userinput>
+SHA1 (/healer) = 2753eff56d77d9a536ece6694bf0a82740344d1f</screen>
+
+ <para>Datenfehler werden durch das Schreiben von zufälligen
+ Daten an den Anfang einer Platte des Spiegels simuliert. Um
+ <acronym>ZFS</acronym> daran zu hindern, die Daten so schnell
+ zu reparieren, wie es diese entdeckt, wird der Pool vor der
+ Veränderung exportiert und anschliessend wieder
+ importiert.</para>
+
+ <warning>
+ <para>Dies ist eine gefährliche Operation, die wichtige Daten
+ zerstören kann. Es wird hier nur zu Demonstrationszwecken
+ gezeigt und sollte nicht während des normalen Betriebs des
+ Pools versucht werden. Dieses vorsätzliche
+ Korrumpierungsbeispiel sollte auf gar keinen Fall auf einer
+ Platte mit einem anderen Dateisystem durchgeführt werden.
+ Verwenden Sie keine anderen Gerätenamen als diejenigen, die
+ hier gezeigt werden, die Teil des Pools sind. Stellen Sie
+ sicher, dass die passende Sicherungen angefertigt haben,
+ bevor Sie dieses Kommando ausführen!</para>
+ </warning>
+
+ <screen>&prompt.root; <userinput>zpool export <replaceable>healer</replaceable></userinput>
+&prompt.root; <userinput>dd if=/dev/random of=/dev/ada1 bs=1m count=200</userinput>
+200+0 records in
+200+0 records out
+209715200 bytes transferred in 62.992162 secs (3329227 bytes/sec)
+&prompt.root; <userinput>zpool import healer</userinput></screen>
+
+ <para>Der Status des Pools zeigt an, dass bei einem Gerät ein
+ Fehler aufgetreten ist. Wichtig zu wissen ist, dass
+ Anwendungen, die Daten vom Pool lesen keine ungültigen Daten
+ erhalten haben. <acronym>ZFS</acronym> lieferte Daten vom
+ <filename>ada0</filename>-Gerät mit der korrekten Prüfsumme
+ aus. Das Gerät mit der fehlerhaften Prüfsumme kann sehr
+ einfach gefunden werden, da die Spalte
+ <literal>CKSUM</literal> einen Wert ungleich Null
+ enthält.</para>
+
+ <screen>&prompt.root; <userinput>zpool status <replaceable>healer</replaceable></userinput>
+ pool: healer
+ state: ONLINE
+ status: One or more devices has experienced an unrecoverable error. An
+ attempt was made to correct the error. Applications are unaffected.
+ action: Determine if the device needs to be replaced, und clear the errors
+ using 'zpool clear' or replace the device with 'zpool replace'.
+ see: http://www.sun.com/msg/ZFS-8000-9P
+ scan: none requested
+ config:
+
+ NAME STATE READ WRITE CKSUM
+ healer ONLINE 0 0 0
+ mirror-0 ONLINE 0 0 0
+ ada0 ONLINE 0 0 0
+ ada1 ONLINE 0 0 1
+
+errors: No known data errors</screen>
+
+ <para>Der Fehler wurde erkannt und korrigiert durch die
+ vorhandene Redundanz, welche aus der nicht betroffenen Platte
+ <filename>ada0</filename> des Spiegels gewonnen wurde.
+ Ein Vergleich der Prüfsumme mit dem Original wird zeigen, ob
+ sich der Pool wieder in einem konsistenten Zustand
+ befindet.</para>
+
+ <screen>&prompt.root; <userinput>sha1 /healer >> checksum.txt</userinput>
+&prompt.root; <userinput>cat checksum.txt</userinput>
+SHA1 (/healer) = 2753eff56d77d9a536ece6694bf0a82740344d1f
+SHA1 (/healer) = 2753eff56d77d9a536ece6694bf0a82740344d1f</screen>
+
+ <para>Die beiden Prüfsummen, die vor und nach der vorsätzlichen
+ Korrumpierung der Daten des Pools angelegt wurden, stimmen
+ immer noch überein. Dies zeigt wie <acronym>ZFS</acronym> in
+ der Lage ist, Fehler automatisch zu erkennen und zu
+ korrigieren, wenn die Prüfsummen nicht übereinstimmen.
+ Beachten Sie, dass dies nur möglich ist, wenn genug Redundanz
+ im Pool vorhanden ist. Ein Pool, der nur aus einer einzigen
+ Platte besteht besitzt keine Selbstheilungsfunktion. Dies ist
+ auch der Grund warum Prüfsummen bei <acronym>ZFS</acronym> so
+ wichtig sind und deshalb aus keinem Grund deaktiviert werden
+ sollten. Kein &man.fsck.8; ist nötig, um diese Fehler zu
+ erkennen und zu korrigieren und der Pool war während der
+ gesamten Zeit, in der das Problem bestand, verfügbar. Eine
+ scrub-Aktion ist nun nötig, um die fehlerhaften Daten auf
+ <filename>ada1</filename> zu beheben.</para>
+
+ <screen>&prompt.root; <userinput>zpool scrub <replaceable>healer</replaceable></userinput>
+&prompt.root; <userinput>zpool status <replaceable>healer</replaceable></userinput>
+ pool: healer
+ state: ONLINE
+status: One or more devices has experienced an unrecoverable error. An
+ attempt was made to correct the error. Applications are unaffected.
+action: Determine if the device needs to be replaced, und clear the errors
+ using 'zpool clear' or replace the device with 'zpool replace'.
+ see: http://www.sun.com/msg/ZFS-8000-9P
+ scan: scrub in progress since Mon Dec 10 12:23:30 2012
+ 10.4M scanned out of 67.0M at 267K/s, 0h3m to go
+ 9.63M repaired, 15.56% done
+config:
+
+ NAME STATE READ WRITE CKSUM
+ healer ONLINE 0 0 0
+ mirror-0 ONLINE 0 0 0
+ ada0 ONLINE 0 0 0
+ ada1 ONLINE 0 0 627 (repairing)
+
+errors: No known data errors</screen>
+
+ <para>Durch das scrub werden die Daten von
+ <filename>ada0</filename> gelesen und alle Daten mit einer
+ falschen durch diejenigen mit der richtigen Prüfsumme auf
+ <filename>ada1</filename> ersetzt. Dies wird durch die
+ Ausgabe <literal>(repairing)</literal> des Kommandos
+ <command>zpool status</command> angezeigt. Nachdem die
+ Operation abgeschlossen ist, ändert sich der Poolstatus
+ zu:</para>
+
+ <screen>&prompt.root; <userinput>zpool status <replaceable>healer</replaceable></userinput>
+ pool: healer
+ state: ONLINE
+status: One or more devices has experienced an unrecoverable error. An
+ attempt was made to correct the error. Applications are unaffected.
+action: Determine if the device needs to be replaced, und clear the errors
+ using 'zpool clear' or replace the device with 'zpool replace'.
+ see: http://www.sun.com/msg/ZFS-8000-9P
+ scan: scrub repaired 66.5M in 0h2m with 0 errors on Mon Dec 10 12:26:25 2012
+config:
+
+ NAME STATE READ WRITE CKSUM
+ healer ONLINE 0 0 0
+ mirror-0 ONLINE 0 0 0
+ ada0 ONLINE 0 0 0
+ ada1 ONLINE 0 0 2.72K
+
+errors: No known data errors</screen>
+
+ <para>Nach der scrub-Operation und der anschliessenden
+ Synchronisation der Daten von <filename>ada0</filename> nach
+ <filename>ada1</filename>, kann die Fehlermeldun vom
+ Poolstatus <link linkend="zfs-zpool-clear">bereinigt</link>
+ werden durch die Eingabe von
+ <command>zpool clear</command>.</para>
+
+ <screen>&prompt.root; <userinput>zpool clear <replaceable>healer</replaceable></userinput>
+&prompt.root; <userinput>zpool status <replaceable>healer</replaceable></userinput>
+ pool: healer
+ state: ONLINE
+ scan: scrub repaired 66.5M in 0h2m with 0 errors on Mon Dec 10 12:26:25 2012
+config:
+
+ NAME STATE READ WRITE CKSUM
+ healer ONLINE 0 0 0
+ mirror-0 ONLINE 0 0 0
+ ada0 ONLINE 0 0 0
+ ada1 ONLINE 0 0 0
+
+errors: No known data errors</screen>
+
+ <para>Der Pool ist jetzt wieder in einen voll funktionsfähigen
+ Zustand versetzt worden und alle Fehler wurden
+ beseitigt.</para>
+ </sect2>
+
+ <sect2 xml:id="zfs-zpool-online">
+ <title>Einen Pool vergrössern</title>
+
+ <para>Die verwendbare Grösse eines redundant ausgelegten Pools
+ ist durch die Kapazität des kleinsten Geräts in jedem vdev
+ begrenzt. Das kleinste Gerät kann durch ein grösseres Gerät
+ ersetzt werden. Nachdem eine <link
+ linkend="zfs-zpool-replace">replace</link> oder <link
+ linkend="zfs-term-resilver">resilver</link>-Operation
+ abgeschlossen wurde, kann der Pool anwachsen, um die Kapazität
+ des neuen Geräts zu nutzen. Nehmen wir als Beispiel einen
+ Spiegel mit einer 1&nbsp;TB und einer 2&nbsp;TB Platte. Der
+ verwendbare Plattenplatz beträgt 1&nbsp;TB. Wenn die
+ 1&nbsp;TB Platte mit einer anderen 2&nbsp;TB Platte ersetzt
+ wird, kopiert der resilver-Prozess die existierenden Daten auf
+ die neue Platte. Da beide Geräte nun 2&nbsp;TB Kapazität
+ besitzen, kann auch der verfügbare Plattenplatz auf die Grösse
+ von 2&nbsp;TB anwachsen.</para>
+
+ <para>Die Erweiterung wird durch das Kommando
+ <command>zpool online -e</command> auf jedem Gerät ausgelöst.
+ Nachdem alle Geräte expandiert wurden, wird der Speicher im
+ Pool zur Verfügung gestellt.</para>
+ </sect2>
+
+ <sect2 xml:id="zfs-zpool-import">
+ <title>Importieren und Exportieren von Pools</title>
+
+ <para>Pools werden <emphasis>exportiert</emphasis> bevor diese
+ an ein anderes System angeschlossen werden. Alle Datasets
+ werden abgehängt und jedes Gerät wird als exportiert markiert,
+ ist jedoch immer noch gesperrt, so dass es nicht von anderen
+ Festplattensubsystemen verwendet werden kann. Dadurch können
+ Pools auf anderen Maschinen <emphasis>importiert</emphasis>
+ werden, die <acronym>ZFS</acronym> und sogar andere
+ Hardwarearchitekturen (bis auf ein paar Ausnahmen, siehe
+ &man.zpool.8;) unterstützen. Besitzt ein Dataset offene
+ Dateien, kann <command>zpool export -f</command> den Export
+ des Pools erzwingen. Verwenden Sie dies mit Vorsicht. Die
+ Datasets werden dadurch gewaltsam abgehängt, was bei
+ Anwendungen, die noch offene Dateien auf diesem Dataset
+ hatten, möglicherweise zu unerwartetem Verhalten führen
+ kann.</para>
+
+ <para>Einen nichtverwendeten Pool exportieren:</para>
+
+ <screen>&prompt.root; <userinput>zpool export mypool</userinput></screen>
+
+ <para>Beim Importieren eines Pool werden auch automatisch alle
+ Datasets eingehängt. Dies ist möglicherweise nicht das
+ bevorzugte Verhalten und wird durch
+ <command>zpool import -N</command> verhindert. Durch
+ <command>zpool import -o</command> temporäre Eigenschaften nur
+ für diesen Import gesetzt. Mit dem Befehl
+ <command>zpool import altroot=</command> ist es möglich, einen
+ Pool mit einem anderen Basiseinhängepunkt anstatt der Wurzel
+ des Dateisystems einzubinden. Wenn der Pool zuletzt auf einem
+ anderen System verwendet und nicht korrekt exportiert
+ wurde, muss unter Umständen ein Import erzwungen werden durch
+ <command>zpool import -f</command>. Alle Pools lassen sich
+ durch <command>zpool import -a</command> importieren, die
+ nicht durch ein anderes System momemtan verwendet
+ werden.</para>
+
+ <para>Alle zum Import verfügbaren Pools auflisten:</para>
+
+ <screen>&prompt.root; <userinput>zpool import</userinput>
+ pool: mypool
+ id: 9930174748043525076
+ state: ONLINE
+ action: The pool can be imported using its name or numeric identifier.
+ config:
+
+ mypool ONLINE
+ ada2p3 ONLINE</screen>
+
+ <para>Den Pool mit einem anderen Wurzelverzeichnis
+ importieren:</para>
+
+ <screen>&prompt.root; <userinput>zpool import -o altroot=<replaceable>/mnt</replaceable> <replaceable>mypool</replaceable></userinput>
+&prompt.root; <userinput>zfs list</userinput>
+zfs list
+NAME USED AVAIL REFER MOUNTPOINT
+mypool 110K 47.0G 31K /mnt/mypool</screen>
+ </sect2>
+
+ <sect2 xml:id="zfs-zpool-upgrade">
+ <title>Einen Pool aktualisieren</title>
+
+ <para>Nachdem &os; aktualisiert wurde oder wenn der Poo von
+ einem anderen System, das eine ältere Version von
+ <acronym>ZFS</acronym> einsetzt, lässt sich der Pool manuell
+ auf den aktuellen Stand von <acronym>ZFS</acronym> bringen, um
+ die neuesten Eigenschaften zu unterstützen. Bedenken Sie, ob
+ der Pool jemals wieder von einem älteren System eingebunden
+ werden muss, bevor Sie die Aktualisierung durchführen. Das
+ aktualisieren eines Pools ist ein nicht umkehrbarer Prozess.
+ ältere Pools lassen sich aktualisieren, jedoch lassen sich
+ Pools mit neueren Eigenschaften nicht wieder auf eine ältere
+ Version bringen.</para>
+
+ <para>Aktualisierung eines v28-Pools, um
+ <literal>Feature Flags</literal> zu unterstützen:</para>
+
+ <screen>&prompt.root; <userinput>zpool status</userinput>
+ pool: mypool
+ state: ONLINE
+status: The pool is formatted using a legacy on-disk format. The pool can
+ still be used, but some features are unavailable.
+action: Upgrade the pool using 'zpool upgrade'. Once this is done, the
+ pool will no longer be accessible on software that does not support feat
+ flags.
+ scan: none requested
+config:
+
+ NAME STATE READ WRITE CKSUM
+ mypool ONLINE 0 0 0
+ mirror-0 ONLINE 0 0 0
+ ada0 ONLINE 0 0 0
+ ada1 ONLINE 0 0 0
+
+errors: No known data errors
+&prompt.root; <userinput>zpool upgrade</userinput>
+This system supports ZFS pool feature flags.
+
+The following pools are formatted with legacy version numbers und can
+be upgraded to use feature flags. After being upgraded, these pools
+will no longer be accessible by software that does not support feature
+flags.
+
+VER POOL
+--- ------------
+28 mypool
+
+Use 'zpool upgrade -v' for a list of available legacy versions.
+Every feature flags pool has all supported features enabled.
+&prompt.root; <userinput>zpool upgrade mypool</userinput>
+This system supports ZFS pool feature flags.
+
+Successfully upgraded 'mypool' from version 28 to feature flags.
+Enabled the following features on 'mypool':
+ async_destroy
+ empty_bpobj
+ lz4_compress
+ multi_vdev_crash_dump</screen>
+
+ <para>Die neueren Eigenschaften von <acronym>ZFS</acronym>
+ werden nicht verfügbar sein, bis
+ <command>zpool upgrade</command> abgeschlossen ist.
+ <command>zpool upgrade -v</command> kann verwendet werden, um
+ zu sehen, welche neuen Eigenschaften durch die Aktualisierung
+ bereitgestellt werden, genauso wie diejenigen, die momentan
+ schon verfügbar sind.</para>
+
+ <para>Einen Pool um zusätzliche Feature Flags erweitern:</para>
+
+ <screen>&prompt.root; <userinput>zpool status</userinput>
+ pool: mypool
+ state: ONLINE
+status: Some supported features are not enabled on the pool. The pool can
+ still be used, but some features are unavailable.
+action: Enable all features using 'zpool upgrade'. Once this is done,
+ the pool may no longer be accessible by software that does not support
+ the features. See zpool-features(7) for details.
+ scan: none requested
+config:
+
+ NAME STATE READ WRITE CKSUM
+ mypool ONLINE 0 0 0
+ mirror-0 ONLINE 0 0 0
+ ada0 ONLINE 0 0 0
+ ada1 ONLINE 0 0 0
+
+errors: No known data errors
+&prompt.root; <userinput>zpool upgrade</userinput>
+This system supports ZFS pool feature flags.
+
+All pools are formatted using feature flags.
+
+
+Some supported features are not enabled on the following pools. Once a
+feature is enabled the pool may become incompatible with software
+that does not support the feature. See zpool-features(7) for details.
+
+POOL FEATURE
+---------------
+zstore
+ multi_vdev_crash_dump
+ spacemap_histogram
+ enabled_txg
+ hole_birth
+ extensible_dataset
+ bookmarks
+ filesystem_limits
+&prompt.root; <userinput>zpool upgrade mypool</userinput>
+This system supports ZFS pool feature flags.
+
+Enabled the following features on 'mypool':
+ spacemap_histogram
+ enabled_txg
+ hole_birth
+ extensible_dataset
+ bookmarks
+ filesystem_limits</screen>
+
+ <warning>
+ <para>Der Bootcode muss auf Systemen, die von dem Pool
+ starten, aktualisiert werden, um diese neue Version zu
+ unterstützen. Verwenden Sie
+ <command>gpart bootcode</command> auf der Partition, die den
+ Bootcode enthält. Lesen Sie für weitere Informationen
+ &man.gpart.8;.</para>
+ </warning>
+ </sect2>
+
+ <sect2 xml:id="zfs-zpool-history">
+ <title>Aufgezeichnete Historie des Pools anzeigen</title>
+
+ <para>Befehle, die den Pool in irgendeiner Form verändern,
+ werden aufgezeichnet. Diese Befehle beinhalten das Erstellen
+ von Datasets, verändern von Eigenschaften oder das Ersetzen
+ einer Platte. Diese Historie ist nützlich um
+ nachzuvollziehen, wie ein Pool aufgebaut ist und welcher
+ Benutzer eine bestimmte Aktion wann und wie getätigt hat. Die
+ aufgezeichnete Historie wird nicht in einer Logdatei
+ festgehalten, sondern ist Teil des Pools selbst. Das Kommando
+ zum darstellen dieser Historie lautet passenderweise
+ <command>zpool history</command>:</para>
+
+ <screen>&prompt.root; <userinput>zpool history</userinput>
+History for 'tank':
+2013-02-26.23:02:35 zpool create tank mirror /dev/ada0 /dev/ada1
+2013-02-27.18:50:58 zfs set atime=off tank
+2013-02-27.18:51:09 zfs set checksum=fletcher4 tank
+2013-02-27.18:51:18 zfs create tank/backup</screen>
+
+ <para>Die Ausgabe zeigt <command>zpool</command> und
+ <command>zfs</command>-Befehle, die ausgeführt wurden zusammen
+ mit einem Zeitstempel. Nur Befehle, die den Pool verändern
+ werden aufgezeichnet. Befehle wie
+ <command>zfs list</command> sind dabei nicht enthalten. Wenn
+ kein Name angegeben wird, erscheint die gesamte Historie aller
+ Pools.</para>
+
+ <para>Der Befehl <command>zpool history</command> kann sogar
+ noch mehr Informationen ausgeben, wenn die Optionen
+ <option>-i</option> oder <option>-l</option> angegeben
+ werden. Durch <option>-i</option> zeigt <acronym>ZFS</acronym>
+ vom Benutzer eingegebene, als auch interne Ereignisse
+ an.</para>
+
+ <screen>&prompt.root; <userinput>zpool history -i</userinput>
+History for 'tank':
+2013-02-26.23:02:35 [internal pool create txg:5] pool spa 28; zfs spa 28; zpl 5;uts 9.1-RELEASE 901000 amd64
+2013-02-27.18:50:53 [internal property set txg:50] atime=0 dataset = 21
+2013-02-27.18:50:58 zfs set atime=off tank
+2013-02-27.18:51:04 [internal property set txg:53] checksum=7 dataset = 21
+2013-02-27.18:51:09 zfs set checksum=fletcher4 tank
+2013-02-27.18:51:13 [internal create txg:55] dataset = 39
+2013-02-27.18:51:18 zfs create tank/backup</screen>
+
+ <para>Weitere Details lassen sich durch die Angabe von
+ <option>-l</option> entlocken. Historische Einträge werden in
+ einem langen Format ausgegeben, einschliesslich Informationen
+ wie der Name des Benutzers, welcher das Kommando eingegeben
+ hat und der Hostname, auf dem die Änderung erfolgte.</para>
+
+ <screen>&prompt.root; <userinput>zpool history -l</userinput>
+History for 'tank':
+2013-02-26.23:02:35 zpool create tank mirror /dev/ada0 /dev/ada1 [user 0 (root) on :global]
+2013-02-27.18:50:58 zfs set atime=off tank [user 0 (root) on myzfsbox:global]
+2013-02-27.18:51:09 zfs set checksum=fletcher4 tank [user 0 (root) on myzfsbox:global]
+2013-02-27.18:51:18 zfs create tank/backup [user 0 (root) on myzfsbox:global]</screen>
+
+ <para>Die Ausgabe zeigt, dass der Benutzer <systemitem
+ class="username">root</systemitem> den gespiegelten Pool mit
+ den beiden Platten
+ <filename>/dev/ada0</filename> und
+ <filename>/dev/ada1</filename> angelegt hat. Der Hostname
+ <systemitem class="systemname">myzfsbox</systemitem> wird
+ ebenfalls in den Kommandos angezeigt, nachdem der Pool erzeugt
+ wurde. Die Anzeige des Hostnamens wird wichtig, sobald der
+ Pool von einem System exportiert und auf einem anderen
+ importiert wird. Die Befehle, welche auf dem anderen System
+ verwendet werden, können klar durch den Hostnamen, der bei
+ jedem Kommando mit verzeichnet wird, unterschieden
+ werden.</para>
+
+ <para>Beide Optionen für <command>zpool history</command> lassen
+ sich auch kombinieren, um die meisten Details zur Historie
+ eines Pools auszugeben. Die Pool Historie liefert wertvolle
+ Informationen, wenn Aktionen nachverfolgt werden müssen oder
+ zur Fehlerbeseitigung mehr Informationen gebraucht
+ werden.</para>
+ </sect2>
+
+ <sect2 xml:id="zfs-zpool-iostat">
+ <title>Geschwindigkeitsüberwachung</title>
+
+ <para>Ein eingebautes Überwachungssystem kann
+ <acronym>I/O</acronym>-Statistiken in Echtzeit liefern. Es
+ zeigt die Menge von freiem und belegtem Speicherplatz auf dem
+ Pool an, wieviele Lese- und Schreiboperationen pro Sekunde
+ durchgeführt werden und die aktuell verwendete
+ <acronym>I/O</acronym>-Bandbreite. Standardmässig werden alle
+ Pools in einem System überwacht und angezeigt. Ein Poolname
+ kann angegeben werden, um die Anzeige auf diesen Pool zu
+ beschränken. Ein einfaches Beispiel:</para>
+
+ <screen>&prompt.root; <userinput>zpool iostat</userinput>
+ capacity operations bundwidth
+pool alloc free read write read write
+---------- ----- ----- ----- ----- ----- -----
+data 288G 1.53T 2 11 11.3K 57.1K</screen>
+
+ <para>Um kontinuierlich die <acronym>I/O</acronym>-Aktivität zu
+ überprüfen, kann eine Zahl als letzter Parameter angegeben
+ werden, die ein Intervall in Sekunden angibt, die zwischen den
+ Aktulisierungen vergeben soll. Die nächste Zeile mit
+ Statistikinformationen wird dann nach jedem Intervall
+ ausgegeben. Drücken Sie
+ <keycombo action="simul">
+ <keycap>Ctrl</keycap>
+ <keycap>C</keycap>
+ </keycombo>, um diese kontinuierliche Überwachung zu stoppen.
+ Alternativ lässt sich auch eine zweite Zahl nach dem
+ Intervall auf der Kommandozeile angeben, welche die Obergrenze
+ von Statistikausgaben darstellt, die angezeigt werden
+ sollen.</para>
+
+ <para>Noch mehr Informationen zu
+ <acronym>I/O</acronym>-Statistiken können durch Angabe der
+ Option <option>-v</option> angezeigt werden. Jedes Gerät im
+ Pool wird dann mit einer eigenen Statistikzeile aufgeführt.
+ Dies ist hilfreich um zu sehen, wieviele Lese- und
+ Schreiboperationen von jedem Gerät durchgeführt werden und
+ kann bei der Diagnose eines langsamen Geräts, das den Pool
+ ausbremst, hilfreich sein. Dieses Beispiel zeigt einen
+ gespiegelten Pool mit zwei Geräten:</para>
+
+ <screen>&prompt.root; <userinput>zpool iostat -v </userinput>
+ capacity operations bundwidth
+pool alloc free read write read write
+----------------------- ----- ----- ----- ----- ----- -----
+data 288G 1.53T 2 12 9.23K 61.5K
+ mirror 288G 1.53T 2 12 9.23K 61.5K
+ ada1 - - 0 4 5.61K 61.7K
+ ada2 - - 1 4 5.04K 61.7K
+----------------------- ----- ----- ----- ----- ----- -----</screen>
+ </sect2>
+
+ <sect2 xml:id="zfs-zpool-split">
+ <title>Einen Pool aufteilen</title>
+
+ <para>Ein Pool, der aus einem oder mehreren gespiegelten vdevs
+ besteht, kann in zwei Pools aufgespalten werden. Falls nicht
+ anders angegeben, wird das letzte Mitglied eines Spiegels
+ abgehängt und dazu verwendet, einen neuen Pool mit den
+ gleichen Daten zu erstellen. Die Operation sollte zuerst mit
+ der Option <option>-n</option> versucht werden. Die Details
+ der vorgeschlagenen Option werden dargestellt, ohne die Aktion
+ in Wirklichkeit durchzuführen. Das hilft dabei zu bestätigen,
+ ob die Aktion das tut, was der Benutzer damit vor
+ hatte.</para>
+ </sect2>
+ </sect1>
+
+ <sect1 xml:id="zfs-zfs">
+ <title><command>zfs</command> Administration</title>
+
+ <para>Das <command>zfs</command>-Werkzeug ist dafür
+ verantwortlich, alle <acronym>ZFS</acronym> Datasets innerhalb
+ eines Pools zu erstellen, zerstören und zu verwalten. Der Pool
+ selbst wird durch <link
+ linkend="zfs-zpool"><command>zpool</command></link>
+ verwaltet.</para>
+
+ <sect2 xml:id="zfs-zfs-create">
+ <title>Datasets erstellen und zerstören</title>
+
+ <para>Anders als in traditionellen Festplatten- und
+ Volumenmanagern wird der Plattenplatz in
+ <acronym>ZFS</acronym> <emphasis>not</emphasis>
+ vorher allokiert. Bei traditionellen Dateisystemen gibt es,
+ nachdem der Plattenplatz partitioniert und
+ zugeteilt wurde, keine Möglichkeit, ein zusätzliches
+ Dateisystem hinzuzufügen, ohne eine neue Platte
+ anzuschliessen. Mit
+ <acronym>ZFS</acronym> lassen sich neue Dateisysteme zu jeder
+ Zeit anlegen. Jedes <link
+ linkend="zfs-term-dataset"><emphasis>Dataset</emphasis></link>
+ besitzt Eigenschaften wie Komprimierung, Deduplizierung,
+ Zwischenspeicher (caching), Quotas, genauso wie andere
+ nützliche Einstellungen wie Schreibschutz, Unterscheidung
+ zwischen Gross- und Kleinschreibung, Netzwerkfreigaben und
+ einen Einhängepunkt. Datasets können ineinander verschachtelt
+ werden und Kind-Datasets erben die Eigenschaften ihrer Eltern.
+ Jedes Dataset kann als eine Einheit verwaltet,
+ <link linkend="zfs-zfs-allow">delegiert</link>,
+ <link linkend="zfs-zfs-send">repliziert</link>,
+ <link linkend="zfs-zfs-snapshot">mit Schnappschüssen
+ versehen</link>, <link linkend="zfs-zfs-jail">in Jails
+ gesteckt</link> und zerstört werden. Es gibt viele Vorteile,
+ ein separates Dataset für jede Art von Dateien anzulegen. Der
+ einzige Nachteil einer grossen Menge an Datasets ist, dass
+ manche Befehle wie <command>zfs list</command> langsamer sind
+ und dass das Einhängen von hunderten oder hunderttausenden von
+ Datasets de &os;-Bootvorgang verzögert.</para>
+
+ <para>Erstellen eines neuen Datasets und aktivieren von <link
+ linkend="zfs-term-compression-lz4">LZ4
+ Komprimierung</link>:</para>
+
+ <screen>&prompt.root; <userinput>zfs list</userinput>
+NAME USED AVAIL REFER MOUNTPOINT
+mypool 781M 93.2G 144K none
+mypool/ROOT 777M 93.2G 144K none
+mypool/ROOT/default 777M 93.2G 777M /
+mypool/tmp 176K 93.2G 176K /tmp
+mypool/usr 616K 93.2G 144K /usr
+mypool/usr/home 184K 93.2G 184K /usr/home
+mypool/usr/ports 144K 93.2G 144K /usr/ports
+mypool/usr/src 144K 93.2G 144K /usr/src
+mypool/var 1.20M 93.2G 608K /var
+mypool/var/crash 148K 93.2G 148K /var/crash
+mypool/var/log 178K 93.2G 178K /var/log
+mypool/var/mail 144K 93.2G 144K /var/mail
+mypool/var/tmp 152K 93.2G 152K /var/tmp
+&prompt.root; <userinput>zfs create -o compress=lz4 <replaceable>mypool/usr/mydataset</replaceable></userinput>
+&prompt.root; <userinput>zfs list</userinput>
+NAME USED AVAIL REFER MOUNTPOINT
+mypool 781M 93.2G 144K none
+mypool/ROOT 777M 93.2G 144K none
+mypool/ROOT/default 777M 93.2G 777M /
+mypool/tmp 176K 93.2G 176K /tmp
+mypool/usr 704K 93.2G 144K /usr
+mypool/usr/home 184K 93.2G 184K /usr/home
+mypool/usr/mydataset 87.5K 93.2G 87.5K /usr/mydataset
+mypool/usr/ports 144K 93.2G 144K /usr/ports
+mypool/usr/src 144K 93.2G 144K /usr/src
+mypool/var 1.20M 93.2G 610K /var
+mypool/var/crash 148K 93.2G 148K /var/crash
+mypool/var/log 178K 93.2G 178K /var/log
+mypool/var/mail 144K 93.2G 144K /var/mail
+mypool/var/tmp 152K 93.2G 152K /var/tmp</screen>
+
+ <para>Ein Dataset zu zerstören ist viel schneller, als alle
+ Dateien zu löschen, die sich in dem Dataset befindet, da es
+ keinen Scan aller Dateien und aktualisieren der dazugehörigen
+ Metadaten erfordert.</para>
+
+ <para>Zerstören des zuvor angelegten Datasets:</para>
+
+ <screen>&prompt.root; <userinput>zfs list</userinput>
+NAME USED AVAIL REFER MOUNTPOINT
+mypool 880M 93.1G 144K none
+mypool/ROOT 777M 93.1G 144K none
+mypool/ROOT/default 777M 93.1G 777M /
+mypool/tmp 176K 93.1G 176K /tmp
+mypool/usr 101M 93.1G 144K /usr
+mypool/usr/home 184K 93.1G 184K /usr/home
+mypool/usr/mydataset 100M 93.1G 100M /usr/mydataset
+mypool/usr/ports 144K 93.1G 144K /usr/ports
+mypool/usr/src 144K 93.1G 144K /usr/src
+mypool/var 1.20M 93.1G 610K /var
+mypool/var/crash 148K 93.1G 148K /var/crash
+mypool/var/log 178K 93.1G 178K /var/log
+mypool/var/mail 144K 93.1G 144K /var/mail
+mypool/var/tmp 152K 93.1G 152K /var/tmp
+&prompt.root; <userinput>zfs destroy <replaceable>mypool/usr/mydataset</replaceable></userinput>
+&prompt.root; <userinput>zfs list</userinput>
+NAME USED AVAIL REFER MOUNTPOINT
+mypool 781M 93.2G 144K none
+mypool/ROOT 777M 93.2G 144K none
+mypool/ROOT/default 777M 93.2G 777M /
+mypool/tmp 176K 93.2G 176K /tmp
+mypool/usr 616K 93.2G 144K /usr
+mypool/usr/home 184K 93.2G 184K /usr/home
+mypool/usr/ports 144K 93.2G 144K /usr/ports
+mypool/usr/src 144K 93.2G 144K /usr/src
+mypool/var 1.21M 93.2G 612K /var
+mypool/var/crash 148K 93.2G 148K /var/crash
+mypool/var/log 178K 93.2G 178K /var/log
+mypool/var/mail 144K 93.2G 144K /var/mail
+mypool/var/tmp 152K 93.2G 152K /var/tmp</screen>
+
+ <para>In modernen Versionen von <acronym>ZFS</acronym> ist
+ <command>zfs destroy</command> asynchron und der freie
+ Speicherplatz kann erst nach ein paar Minuten im Pool
+ auftauchen. Verwenden Sie <command>zpool get freeing
+ <replaceable>poolname</replaceable></command>, um die
+ Eigenschaft <literal>freeing</literal> aufzulisten, die
+ angibt, bei wievielen Datasets die Blöcke im Hintergrund
+ freigegeben werden. Sollte es Kind-Datasets geben,
+ <link linkend="zfs-term-snapshot">Schnappschüsse</link> oder
+ andere Datasets, dann lässt sich der Elternknoten nicht
+ zerstören. Um ein Dataset und all seine Kinder zu zerstören,
+ verwenden Sie die Option <option>-r</option>, um das Dataset
+ und all seine Kinder rekursiv zu entfernen. Benutzen Sie die
+ Option <option>-n</option> und <option>-v</option>, um
+ Datasets und Snapshots anzuzeigen, die durch diese Aktion
+ zerstört werden würden, dies jedoch nur zu simulieren und
+ nicht wirklich durchzuführen. Speicherplatz, der dadurch
+ freigegeben würde, wird ebenfalls angezeigt.</para>
+ </sect2>
+
+ <sect2 xml:id="zfs-zfs-volume">
+ <title>Volumes erstellen und zerstören</title>
+
+ <para>Ein Volume ist ein spezieller Typ von Dataset. Anstatt
+ dass es als Dateisystem eingehängt wird, stellt es ein
+ Block-Gerät unter
+ <filename>/dev/zvol/<replaceable>poolname</replaceable>/<replaceable>dataset</replaceable></filename>
+ dar. Dies erlaubt es, das Volume für andere Dateisysteme zu
+ verwenden, die Festplatten einer virtuellen Maschine
+ bereitzustellen oder über Protokolle wie
+ <acronym>iSCSI</acronym> oder <acronym>HAST</acronym>
+ exportiert zu werden.</para>
+
+ <para>Ein Volume kann mit einem beliebigen Dateisystem
+ formatiert werden oder auch ohne ein Dateisystem als reiner
+ Datenspeicher zu dienen. Für den Benutzer erscheint ein
+ Volume als eine gewöhnliche Platte. Indem gewöhnliche
+ Dateisysteme auf diesen <emphasis>zvols</emphasis> angelegt
+ werden, ist es möglich, diese mit Eigenschaften auszustatten,
+ welche diese normalerweise nicht besitzen. Beispielsweise
+ wird durch Verwendung der Komprimierungseigenschaft auf einem
+ 250&nbsp;MB Volume das Erstellen eines komprimierten
+ <acronym>FAT</acronym> Dateisystems möglich.</para>
+
+ <screen>&prompt.root; <userinput>zfs create -V 250m -o compression=on tank/fat32</userinput>
+&prompt.root; <userinput>zfs list tank</userinput>
+NAME USED AVAIL REFER MOUNTPOINT
+tank 258M 670M 31K /tank
+&prompt.root; <userinput>newfs_msdos -F32 /dev/zvol/tank/fat32</userinput>
+&prompt.root; <userinput>mount -t msdosfs /dev/zvol/tank/fat32 /mnt</userinput>
+&prompt.root; <userinput>df -h /mnt | grep fat32</userinput>
+Filesystem Size Used Avail Capacity Mounted on
+/dev/zvol/tank/fat32 249M 24k 249M 0% /mnt
+&prompt.root; <userinput>mount | grep fat32</userinput>
+/dev/zvol/tank/fat32 on /mnt (msdosfs, local)</screen>
+
+ <para>Ein Volume zu zerstören ist sehr ähnlich wie ein
+ herkömmliches Dataset zu entfernen. Die Operation wird
+ beinahe sofort durchgeführt, jedoch kann es mehrere Minuten
+ dauern, bis der freie Speicherplatz im Hintergrund wieder
+ freigegeben ist.</para>
+ </sect2>
+
+ <sect2 xml:id="zfs-zfs-rename">
+ <title>Umbenennen eines Datasets</title>
+
+ <para>Der Name eines Datasets lässt sich durch
+ <command>zfs rename</command> ändern. Das Eltern-Dataset kann
+ ebenfalls mit diesem Kommando umbenannt werden. Ein Dataset
+ unter einem anderen Elternteil umzubenennen wird den Wert
+ dieser Eigenschaft verändern, die vom Elternteil vererbt
+ wurden. Wird ein Dataset umbenannt, wird es abgehängt und
+ dann erneut unter der neuen Stelle eingehängt (welche vom
+ neuen Elternteil geerbt wird). Dieses Verhalten kann durch
+ die Option <option>-u</option> verhindert werden.</para>
+
+ <para>Ein Dataset umbenennen und unter einem anderes
+ Elterndataset verschieben:</para>
+
+ <screen>&prompt.root; <userinput>zfs list</userinput>
+NAME USED AVAIL REFER MOUNTPOINT
+mypool 780M 93.2G 144K none
+mypool/ROOT 777M 93.2G 144K none
+mypool/ROOT/default 777M 93.2G 777M /
+mypool/tmp 176K 93.2G 176K /tmp
+mypool/usr 704K 93.2G 144K /usr
+mypool/usr/home 184K 93.2G 184K /usr/home
+mypool/usr/mydataset 87.5K 93.2G 87.5K /usr/mydataset
+mypool/usr/ports 144K 93.2G 144K /usr/ports
+mypool/usr/src 144K 93.2G 144K /usr/src
+mypool/var 1.21M 93.2G 614K /var
+mypool/var/crash 148K 93.2G 148K /var/crash
+mypool/var/log 178K 93.2G 178K /var/log
+mypool/var/mail 144K 93.2G 144K /var/mail
+mypool/var/tmp 152K 93.2G 152K /var/tmp
+&prompt.root; <userinput>zfs rename <replaceable>mypool/usr/mydataset</replaceable> <replaceable>mypool/var/newname</replaceable></userinput>
+&prompt.root; <userinput>zfs list</userinput>
+NAME USED AVAIL REFER MOUNTPOINT
+mypool 780M 93.2G 144K none
+mypool/ROOT 777M 93.2G 144K none
+mypool/ROOT/default 777M 93.2G 777M /
+mypool/tmp 176K 93.2G 176K /tmp
+mypool/usr 616K 93.2G 144K /usr
+mypool/usr/home 184K 93.2G 184K /usr/home
+mypool/usr/ports 144K 93.2G 144K /usr/ports
+mypool/usr/src 144K 93.2G 144K /usr/src
+mypool/var 1.29M 93.2G 614K /var
+mypool/var/crash 148K 93.2G 148K /var/crash
+mypool/var/log 178K 93.2G 178K /var/log
+mypool/var/mail 144K 93.2G 144K /var/mail
+mypool/var/newname 87.5K 93.2G 87.5K /var/newname
+mypool/var/tmp 152K 93.2G 152K /var/tmp</screen>
+
+ <para>Schnappschüsse können auf diese Weise ebenfalls umbenannt
+ werden. Aufgrund der Art von Schnappschüssen können diese
+ nicht unter einem anderen Elterndataset eingehängt werden. Um
+ einen rekursiven Schnappschuss umzubenennen, geben Sie die
+ Option <option>-r</option> an, um alle Schnappschüsse mit dem
+ gleichen Namen im Kind-Dataset ebenfalls umzubenennen.</para>
+
+ <screen>&prompt.root; <userinput>zfs list -t snapshot</userinput>
+NAME USED AVAIL REFER MOUNTPOINT
+mypool/var/newname@first_snapshot 0 - 87.5K -
+&prompt.root; <userinput>zfs rename <replaceable>mypool/var/newname@first_snapshot</replaceable> <replaceable>new_snapshot_name</replaceable></userinput>
+&prompt.root; <userinput>zfs list -t snapshot</userinput>
+NAME USED AVAIL REFER MOUNTPOINT
+mypool/var/newname@new_snapshot_name 0 - 87.5K -</screen>
+ </sect2>
+
+ <sect2 xml:id="zfs-zfs-set">
+ <title>Festlegen von Dataset-Eigenschaften</title>
+
+ <para>Jedes <acronym>ZFS</acronym>-Dataset besitzt eine Menge
+ von Eigenschaften, die sein Verhalten beeinflussen. Die
+ meisten Eigenschaften werden automatisch vom Eltern-Dataset
+ vererbt, können jedoch lokal überschrieben werden. Sie legen
+ eine Eigenschaft durch <command>zfs set
+ <replaceable>property</replaceable>=<replaceable>value</replaceable>
+ <replaceable>dataset</replaceable></command> fest. Die
+ meisten Eigenschaften haben eine begrenzte Menge von gültigen
+ Werten. <command>zfs get</command> stellt diese dar und zeigt
+ jede mögliche Eigenschaft und gültige Werte an. Die meisten
+ Eigenschaften können wieder auf ihren Ausgangswert
+ zurückgesetzt werden über
+ <command>zfs inherit</command>.</para>
+
+ <para>Benutzerdefinierte Eigenschaften lassen sich ebenfalls
+ setzen. Diese werden Teil der Konfiguration des Datasets und
+ können dazu verwendet werden, zusätzliche Informationen über
+ das Dataset oder seine Bestandteile zu speichern. Um diese
+ benutzerdefinierten Eigenschaften von den
+ <acronym>ZFS</acronym>-eigenen zu unterscheiden, wird ein
+ Doppelpunkt (<literal>:</literal>) verwendet, um einen eigenen
+ Namensraum für diese Eigenschaft zu erstellen.</para>
+
+ <screen>&prompt.root; <userinput>zfs set <replaceable>custom</replaceable>:<replaceable>costcenter</replaceable>=<replaceable>1234</replaceable> <replaceable>tank</replaceable></userinput>
+&prompt.root; <userinput>zfs get <replaceable>custom</replaceable>:<replaceable>costcenter</replaceable> <replaceable>tank</replaceable></userinput>
+NAME PROPERTY VALUE SOURCE
+tank custom:costcenter 1234 local</screen>
+
+ <para>Um eine selbstdefinierte Eigenschaft umzubenennen,
+ verwenden Sie <command>zfs inherit</command> mit der Option
+ <option>-r</option>. Wenn die benutzerdefinierte Eigenschaft
+ nicht in einem der Eltern-Datasets definiert ist, wird diese
+ komplett entfernt (obwohl diese Änderungen natürlich in der
+ Historie des Pools noch aufgezeichnet sind).</para>
+
+ <screen>&prompt.root; <userinput>zfs inherit -r <replaceable>custom</replaceable>:<replaceable>costcenter</replaceable> <replaceable>tank</replaceable></userinput>
+&prompt.root; <userinput>zfs get <replaceable>custom</replaceable>:<replaceable>costcenter</replaceable> <replaceable>tank</replaceable></userinput>
+NAME PROPERTY VALUE SOURCE
+tank custom:costcenter - -
+&prompt.root; <userinput>zfs get all <replaceable>tank</replaceable> | grep <replaceable>custom</replaceable>:<replaceable>costcenter</replaceable></userinput>
+&prompt.root;</screen>
+ </sect2>
+
+ <sect2 xml:id="zfs-zfs-snapshot">
+ <title>Verwalten von Schnappschüssen</title>
+
+ <para><link linkend="zfs-term-snapshot">Schnappschüsse</link>
+ sind eine der mächtigen Eigenschaften von
+ <acronym>ZFS</acronym>. Ein Schnappschuss bietet einen
+ nur-Lese Zustand eines Datasets zu einem bestimmten Zeitpunkt.
+ Mit Kopieren-beim-Schreiben (Copy-On-Write
+ <acronym>COW</acronym>), können Schnappschüsse schnell
+ erstellt werden durch das Aufheben der älteren Version der
+ Daten auf der Platte. Falls kein Snapshot existiert, wird der
+ Speicherplatz wieder für zukünfitge Verwendung freigegeben
+ wenn Daten geschrieben oder gelöscht werden. Schnappschüsse
+ sparen Speicherplatz, indem diese nur die Unterschiede
+ zwischen dem momentanen Dataset und der vorherigen Version
+ aufzeichnen. Schnappschüsse sind nur auf ganzen Datasets
+ erlaubt, nicht auf individuellen Dateien oder Verzeichnissen.
+ Wenn ein Schnappschuss eines Datasets erstellt wird, wird
+ alles was darin enthalten ist, dupliziert. Das beinhaltet
+ Dateisystemeigenschaften, Dateien, Verzeichnisse, Rechte und
+ so weiter. Schnappschüsse benötigen keinen zusätzlichen
+ Speicherplatz wenn diese erstmals angelegt werden, nur wenn
+ Blöcke, die diese referenzieren, geändert werden. Rekursive
+ Schnappschüsse, die mit der Option <option>-r</option>
+ erstellt, erzeugen einen mit dem gleichen Namen des Datasets
+ und all seinen Kindern, was eine konsistente Momentaufnahme
+ aller Dateisysteme darstellt. Dies kann wichtig sein, wenn
+ eine Anwendung Dateien auf mehreren Datasets ablegt, die
+ miteinander in Verbindung stehen oder voneinander abhängig
+ sind. Ohne Schnappschüsse würde ein Backup Kopien dieser
+ Dateien zu unterschiedlichen Zeitpunkten enthalten.</para>
+
+ <para>Schnappschüsse in <acronym>ZFS</acronym> bieten eine
+ Vielzahl von Eigenschaften, die selbst in anderen
+ Dateisystemen mit Schnappschussfunktion nicht vorhanden sind.
+ Ein typisches Beispiel zur Verwendung von Schnappschüssen ist,
+ den momentanen Stand des Dateisystems zu sichern,
+ wenn eine riskante Aktion wie das Installieren von Softwre
+ oder eine Systemaktualisierung durchgeführt wird. Wenn diese
+ Aktion fehlschlägt, so kann der Schnappschuss zurückgerollt
+ werden und das System befindet sich wieder in dem gleichen
+ Zustand, wie zu dem, als der Schnappschuss erstellt wurde.
+ Wenn die Aktualisierung jedoch erfolgreich war, kann der
+ Schnappschuss gelöscht werden, um Speicherplatz frei zu geben.
+ Ohne Schnappschüsse, wird durch ein fehlgeschlagenes Update
+ eine Wiederherstellung der Sicherung fällig, was oft mühsam
+ und zeitaufwändig ist, ausserdem ist währenddessen das System
+ nicht verwendbar. Schnappschüsse lassen sich schnell
+ und mit wenig bis gar keiner Ausfallzeit zurückrollen, selbst
+ wenn das System im normalen Betrieb läuft. Die Zeitersparnis
+ ist enorm, wenn mehrere Terabyte grosse Speichersysteme
+ eingesetzt werden und viel Zeit für das Kopieren der Daten vom
+ Sicherungssystem benötigt wird. Schnappschüsse sind jedoch
+ keine Ersatz für eine Vollsicherung des Pools, können jedoch
+ als eine schnelle und einfache Sicherungsmethode verwendet
+ werden, um eine Kopie eines Datasets zu einem bestimmten
+ Zeitpunkt zu sichern.</para>
+
+ <sect3 xml:id="zfs-zfs-snapshot-creation">
+ <title>Schnappschüsse erstellen</title>
+
+ <para>Schnappschüsse werden durch das Kommando
+ <command>zfs snapshot
+ <replaceable>dataset</replaceable>@<replaceable>snapshotname</replaceable></command>
+ angelegt. Durch Angabe der Option <option>-r</option>
+ werden Schnappschüsse rekursive angelegt, mit dem gleichen
+ Namen auf allen Datasets.</para>
+
+ <para>Einen rekursiven Schnappschuss des gesamten Pools
+ erzeugen:</para>
+
+ <screen>&prompt.root; <userinput>zfs list -t all</userinput>
+NAME USED AVAIL REFER MOUNTPOINT
+mypool 780M 93.2G 144K none
+mypool/ROOT 777M 93.2G 144K none
+mypool/ROOT/default 777M 93.2G 777M /
+mypool/tmp 176K 93.2G 176K /tmp
+mypool/usr 616K 93.2G 144K /usr
+mypool/usr/home 184K 93.2G 184K /usr/home
+mypool/usr/ports 144K 93.2G 144K /usr/ports
+mypool/usr/src 144K 93.2G 144K /usr/src
+mypool/var 1.29M 93.2G 616K /var
+mypool/var/crash 148K 93.2G 148K /var/crash
+mypool/var/log 178K 93.2G 178K /var/log
+mypool/var/mail 144K 93.2G 144K /var/mail
+mypool/var/newname 87.5K 93.2G 87.5K /var/newname
+mypool/var/newname@new_snapshot_name 0 - 87.5K -
+mypool/var/tmp 152K 93.2G 152K /var/tmp
+&prompt.root; <userinput>zfs snapshot -r <replaceable>mypool@my_recursive_snapshot</replaceable></userinput>
+&prompt.root; <userinput>zfs list -t snapshot</userinput>
+NAME USED AVAIL REFER MOUNTPOINT
+mypool@my_recursive_snapshot 0 - 144K -
+mypool/ROOT@my_recursive_snapshot 0 - 144K -
+mypool/ROOT/default@my_recursive_snapshot 0 - 777M -
+mypool/tmp@my_recursive_snapshot 0 - 176K -
+mypool/usr@my_recursive_snapshot 0 - 144K -
+mypool/usr/home@my_recursive_snapshot 0 - 184K -
+mypool/usr/ports@my_recursive_snapshot 0 - 144K -
+mypool/usr/src@my_recursive_snapshot 0 - 144K -
+mypool/var@my_recursive_snapshot 0 - 616K -
+mypool/var/crash@my_recursive_snapshot 0 - 148K -
+mypool/var/log@my_recursive_snapshot 0 - 178K -
+mypool/var/mail@my_recursive_snapshot 0 - 144K -
+mypool/var/newname@new_snapshot_name 0 - 87.5K -
+mypool/var/newname@my_recursive_snapshot 0 - 87.5K -
+mypool/var/tmp@my_recursive_snapshot 0 - 152K -</screen>
+
+ <para>Schnappschüsse werden nicht durch einen
+ <command>zfs list</command>-Befehl angezeigt. Um
+ Schnappschüsse mit aufzulisten, muss
+ <option>-t snapshot</option> an das Kommando
+ <command>zfs list</command> angehängt werden. Durch
+ <option>-t all</option> werden sowohl Dateisysteme als auch
+ Schnappschüsse nebeneinander angezeigt.</para>
+
+ <para>Schnappschüsse werden nicht direkt eingehängt, deshalb
+ wird auch kein Pfad in der Spalte
+ <literal>MOUNTPOINT</literal> angezeigt. Ebenso wird kein
+ freier Speicherplatz in der Spalte <literal>AVAIL</literal>
+ aufgelistet, da Schnappschüsse nicht mehr geschrieben werden
+ können, nachdem diese angelegt wurden. Vergleichen Sie den
+ Schnappschuss mit dem ursprünglichen Dataset von dem es
+ abstammt:</para>
+
+ <screen>&prompt.root; <userinput>zfs list -rt all <replaceable>mypool/usr/home</replaceable></userinput>
+NAME USED AVAIL REFER MOUNTPOINT
+mypool/usr/home 184K 93.2G 184K /usr/home
+mypool/usr/home@my_recursive_snapshot 0 - 184K -</screen>
+
+ <para>Durch das Darstellen des Datasets und des
+ Schnappschusses nebeneinander zeigt deutlich, wie
+ Schnappschüsse in <link linkend="zfs-term-cow">COW</link>
+ Manier funktionieren. Sie zeichnen nur die Änderungen
+ (<emphasis>delta</emphasis>) auf, die währenddessen
+ enstanden sind und nicht noch einmal den gesamten Inhalt des
+ Dateisystems. Das bedeutet, dass Schnappschüsse nur wenig
+ Speicherplatz benötigen, wenn nur kleine Änderungen
+ vorgenommen werden. Der Speicherverbrauch kann sogar noch
+ deutlicher gemacht werden, wenn eine Datei auf das Dataset
+ kopiert wird und anschliessend ein zweiter Schnappschuss
+ angelegt wird:</para>
+
+ <screen>&prompt.root; <userinput>cp <replaceable>/etc/passwd</replaceable> <replaceable>/var/tmp</replaceable></userinput>
+&prompt.root; zfs snapshot <replaceable>mypool/var/tmp</replaceable>@<replaceable>after_cp</replaceable>
+&prompt.root; <userinput>zfs list -rt all <replaceable>mypool/var/tmp</replaceable></userinput>
+NAME USED AVAIL REFER MOUNTPOINT
+mypool/var/tmp 206K 93.2G 118K /var/tmp
+mypool/var/tmp@my_recursive_snapshot 88K - 152K -
+mypool/var/tmp@after_cp 0 - 118K -</screen>
+
+ <para>Der zweite Schnappschuss enthält nur die Änderungen am
+ Dataset, die nach der Kopieraktion gemacht wurden. Dies
+ bedeutet enorme Einsparungen von Speicherplatz. Beachten
+ Sie, dass sich die Grösse des Schnappschusses
+ <replaceable>mypool/var/tmp@my_recursive_snapshot</replaceable>
+ in der Spalte <literal>USED</literal> ebenfalls
+ geändert hat, um die Änderungen von sich selbst und dem
+ Schnappschuss, der im Anschluss angelegt wurde,
+ anzuzeigen.</para>
+ </sect3>
+
+ <sect3 xml:id="zfs-zfs-snapshot-diff">
+ <title>Schnappschüsse vergleichen</title>
+
+ <para>ZFS enthält ein eingebautes Kommando, um die
+ Unterschiede zwischen zwei Schnappschüssen miteinander zu
+ vergleichen. Das ist hilfreich, wenn viele Schnappschüsse
+ über längere Zeit angelegt wurden und der Benutzer sehen
+ will, wie sich das Dateisystem über diesen Zeitraum
+ verändert hat. Beispielsweise kann
+ <command>zfs diff</command> den letzten Schnappschuss
+ finden, der noch eine Datei enthält, die aus Versehen
+ gelöscht wurde. Wenn dies für die letzten beiden
+ Schnappschüsse aus dem vorherigen Abschnitt durchgeführt
+ wird, ergibt sich folgende Ausgabe:</para>
+
+ <screen>&prompt.root; <userinput>zfs list -rt all <replaceable>mypool/var/tmp</replaceable></userinput>
+NAME USED AVAIL REFER MOUNTPOINT
+mypool/var/tmp 206K 93.2G 118K /var/tmp
+mypool/var/tmp@my_recursive_snapshot 88K - 152K -
+mypool/var/tmp@after_cp 0 - 118K -
+&prompt.root; <userinput>zfs diff <replaceable>mypool/var/tmp@my_recursive_snapshot</replaceable></userinput>
+M /var/tmp/
++ /var/tmp/passwd</screen>
+
+ <para>Das Kommando zeigt alle Änderungen zwischen dem
+ angegebenen Schnappschuss (in diesem Fall
+ <literal><replaceable>mypool/var/tmp@my_recursive_snapshot</replaceable></literal>)
+ und dem momentan aktuellen Dateisystem. Die erste Spalte
+ zeigt die Art der Änderung an:</para>
+
+ <informaltable pgwide="1">
+ <tgroup cols="2">
+ <tbody valign="top">
+ <row>
+ <entry>+</entry>
+ <entry>Das Verzeichnis oder die Datei wurde
+ hinzugefügt.</entry>
+ </row>
+
+ <row>
+ <entry>-</entry>
+ <entry>Das Verzeichnis oder die Datei wurde
+ gelöscht.</entry>
+ </row>
+
+ <row>
+ <entry>M</entry>
+ <entry>Das Verzeichnis oder die Datei wurde
+ geändert.</entry>
+ </row>
+
+ <row>
+ <entry>R</entry>
+ <entry>Das Verzeichnis oder die Datei wurde
+ umbenannt.</entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </informaltable>
+
+ <para>Vergleicht man die Ausgabe mit der Tabelle, wird klar,
+ dass <filename><replaceable>passwd</replaceable></filename>
+ hinzugefügt wurde, nachdem der Schnappschuss
+ <literal><replaceable>mypool/var/tmp@my_recursive_snapshot</replaceable></literal>
+ erstellt wurde. Das resultierte ebenfalls in einer Änderung
+ am darüberliegenden Verzeichnis, das unter
+ <literal><replaceable>/var/tmp</replaceable></literal>
+ eingehängt ist.</para>
+
+ <para>Zwei Schnappschüsse zu vergleichen ist hilfreich, wenn
+ die Replikationseigenschaft von <acronym>ZFS</acronym>
+ verwendet wird, um ein Dataset auf einen anderen Host zu
+ Sicherungszwecken übertragen.</para>
+
+ <para>Zwei Schnappschüsse durch die Angabe des kompletten
+ Namens des Datasets und dem Namen des Schnappschusses beider
+ Datasets vergleichen:</para>
+
+ <screen>&prompt.root; <userinput>cp /var/tmp/passwd /var/tmp/passwd.copy</userinput>
+&prompt.root; <userinput>zfs snapshot <replaceable>mypool/var/tmp@diff_snapshot</replaceable></userinput>
+&prompt.root; <userinput>zfs diff <replaceable>mypool/var/tmp@my_recursive_snapshot</replaceable> <replaceable>mypool/var/tmp@diff_snapshot</replaceable></userinput>
+M /var/tmp/
++ /var/tmp/passwd
++ /var/tmp/passwd.copy
+&prompt.root; <userinput>zfs diff <replaceable>mypool/var/tmp@my_recursive_snapshot</replaceable> <replaceable>mypool/var/tmp@after_cp</replaceable></userinput>
+M /var/tmp/
++ /var/tmp/passwd</screen>
+
+ <para>Ein Administrator, der für die Sicherung zuständig ist,
+ kann zwei Schnappschüsse miteinander vergleichen, die vom
+ sendenen Host empfangen wurden, um festzustellen, welche
+ Änderungen am Dataset vorgenommen wurden. Lesen Sie dazu den
+ Abschnitt <link linkend="zfs-zfs-send">Replication</link>
+ um weitere Informationen zu erhalten.</para>
+ </sect3>
+
+ <sect3 xml:id="zfs-zfs-snapshot-rollback">
+ <title>Schnappschüsse zurückrollen</title>
+
+ <para>Wenn zumindest ein Schnappschuss vorhanden ist, kann
+ dieser zu einem beliebigen Zeitpunkt zurückgerollt werden.
+ In den meisten Fällen passiert dies, wenn der aktuelle
+ Zustand des Datasets nicht mehr benötigt wurd und eine
+ ältere Version bevorzugt wird. Szenarien wie lokale
+ Entwicklungstests, die fehlgeschlagen sind, defekte
+ Systemaktualisierungen, welche die Funktionalität des
+ Gesamtsystems einschränken oder die Anforderung,
+ versehentlich gelöschte Dateien oder Verzeichnisse
+ wiederherzustellen, sind allgegenwärtig. Glücklicherweise
+ ist das zurückrollen eines Schnappschusses so leicht wie die
+ Eingabe von
+ <command>zfs rollback
+ <replaceable>snapshotname</replaceable></command>.
+ Abhängig davon, wie viele Änderungen betroffen sind, wird
+ diese Operation innerhalb einer gewissen Zeit abgeschlossen
+ sein. Während dieser Zeit bleibt das Dataset in einem
+ konsistenten Zustand, sehr ähnlich den ACID-Prinzipien, die
+ eine Datenbank beim Zurückrollen entspricht. Während all
+ dies passiert, ist das Dataset immer noch aktiv und
+ erreichbar ohne dass eine Ausfallzeit nötig wäre. Sobald
+ der Schnappschuss zurückgerollt wurde, besitzt das Dataset
+ den gleichen Zustand, den es besass, als der Schnappschuss
+ angelegt wurde. Alle anderen Daten in diesem Dataset, die
+ nicht Teil des Schnappschusses sind, werden verworfen.
+ Einen Schnappschuss des aktuellen Zustandes des Datasets vor
+ dem Zurückrollen anzulegen ist eine gute Idee, wenn
+ hinterher noch Daten benötigt werden. Auf diese Weise kann
+ der Benutzer vor und zurück zwischen den Schnappschüssen
+ springen, ohne wertvolle Daten zu verlieren.</para>
+
+ <para>Im ersten Beispiel wird en Schnappschuss aufgrund eines
+ unvorsichtigen <command>rm</command>-Befehls zurückgerollt,
+ der zuviele Daten gelöscht hat, als vorgesehen.</para>
+
+ <screen>&prompt.root; <userinput>zfs list -rt all <replaceable>mypool/var/tmp</replaceable></userinput>
+NAME USED AVAIL REFER MOUNTPOINT
+mypool/var/tmp 262K 93.2G 120K /var/tmp
+mypool/var/tmp@my_recursive_snapshot 88K - 152K -
+mypool/var/tmp@after_cp 53.5K - 118K -
+mypool/var/tmp@diff_snapshot 0 - 120K -
+&prompt.user; <userinput>ls /var/tmp</userinput>
+passwd passwd.copy
+&prompt.user; <userinput>rm /var/tmp/passwd*</userinput>
+&prompt.user; <userinput>ls /var/tmp</userinput>
+vi.recover
+&prompt.user;</screen>
+
+ <para>Zu diesem Zeitpunkt bemerkt der Benutzer, dass zuviele
+ Dateien gelöscht wurden und möchte diese zurück haben.
+ <acronym>ZFS</acronym> bietet eine einfache Möglichkeit,
+ diese durch zurückrollen zurück zu bekommen, allerdings nur,
+ wenn Schnappschüsse von wichtigen Daten regelmässig angelegt
+ werden. Um die Dateien zurückzuerhalten und vom letzten
+ Schnappschuss wieder zu beginnen, geben Sie ein:</para>
+
+ <screen>&prompt.root; <userinput>zfs rollback <replaceable>mypool/var/tmp@diff_snapshot</replaceable></userinput>
+&prompt.user; <userinput>ls /var/tmp</userinput>
+passwd passwd.copy vi.recover</screen>
+
+ <para>Die Operation zum Zurückrollen versetzt das Dataset in
+ den Zustand des letzten Schnappschusses zurück. Es ist
+ ebenfalls möglich, zu einem Schnappschuss zurückzurollen,
+ der viel früher angelegt wurde und es noch Schnappschüsse
+ nach diesem gibt. Wenn Sie dies versuchen, gibt
+ <acronym>ZFS</acronym> die folgende Warnung aus:</para>
+
+ <screen>&prompt.root; <userinput>zfs list -rt snapshot <replaceable>mypool/var/tmp</replaceable></userinput>
+AME USED AVAIL REFER MOUNTPOINT
+mypool/var/tmp@my_recursive_snapshot 88K - 152K -
+mypool/var/tmp@after_cp 53.5K - 118K -
+mypool/var/tmp@diff_snapshot 0 - 120K -
+&prompt.root; <userinput>zfs rollback <replaceable>mypool/var/tmp@my_recursive_snapshot</replaceable></userinput>
+cannot rollback to 'mypool/var/tmp@my_recursive_snapshot': more recent snapshots exist
+use '-r' to force deletion of the following snapshots:
+mypool/var/tmp@after_cp
+mypool/var/tmp@diff_snapshot</screen>
+
+ <para>Diese Warnung bedeutet, dass noch Schnappschüsse
+ zwischen dem momentanen Stand des Datasets und dem
+ Schnappschuss, zu dem der Benutzer zurückrollen möchte,
+ existieren. Um das Zurückrollen durchzuführen, müssen die
+ Schnappschüsse gelöscht werden. <acronym>ZFS</acronym> kann
+ nicht alle Änderungen zwischen verschiedenen Zuständen
+ eines Datasets verfolgen, da Schnappschüsse zur gelesen
+ werden können. <acronym>ZFS</acronym> wird nicht die
+ betroffenen Schnappschüsse löschen, es sei denn, der
+ Benutzer verwendet die Option <option>-r</option>, um
+ anzugeben, dass dies die gewünschte Aktion ist. Falls dies
+ der Fall ist und die Konsequenzen alle dazwischenliegenden
+ Schnappschüsse zu verlieren verstanden wurden, kann der
+ Befehl abgesetzt werden:</para>
+
+ <screen>&prompt.root; <userinput>zfs rollback -r <replaceable>mypool/var/tmp@my_recursive_snapshot</replaceable></userinput>
+&prompt.root; <userinput>zfs list -rt snapshot <replaceable>mypool/var/tmp</replaceable></userinput>
+NAME USED AVAIL REFER MOUNTPOINT
+mypool/var/tmp@my_recursive_snapshot 8K - 152K -
+&prompt.user; <userinput>ls /var/tmp</userinput>
+vi.recover</screen>
+
+ <para>Die Ausgabe von <command>zfs list -t snapshot</command>
+ bestätigt, dass die dazwischenliegenden Schnappschüsse als
+ Ergebnis von <command>zfs rollback -r</command> entfernt
+ wurden.</para>
+ </sect3>
+
+ <sect3 xml:id="zfs-zfs-snapshot-snapdir">
+ <title>Individuelle Dateien aus Schnappschüssen
+ wiederherstellen</title>
+
+ <para>Schnappschüsse sind unter einem versteckten Verzeichnis
+ unter dem Eltern-Dataset eingehängt:
+ <filename>.zfs/snapshots/<replaceable>snapshotname</replaceable></filename>.
+ Standardmässig werden diese Verzeichnisse nicht von einem
+ gewöhnlichen <command>ls -a</command> angezeigt. Obwohl
+ diese Verzeichnisse nicht angezeigt werden, sind diese
+ trotzdem vorhanden und der Zugriff darauf erfolgt wie auf
+ jedes andere Verzeichnis. Die Eigenschaft
+ <literal>snapdir</literal> steuert, ob diese Verzeichnisse
+ beim Auflisten eines Verzeichnisses angezeigt werden oder
+ nicht. Das Einstellen der Eigenschaft auf den Wert
+ <literal>visible</literal> erlaubt es, diese in der Ausgabe
+ von <command>ls</command> und anderen Kommandos, die
+ mit Verzeichnisinhalten umgehen können, anzuzeigen.</para>
+
+ <screen>&prompt.root; <userinput>zfs get snapdir <replaceable>mypool/var/tmp</replaceable></userinput>
+NAME PROPERTY VALUE SOURCE
+mypool/var/tmp snapdir hidden default
+&prompt.user; <userinput>ls -a /var/tmp</userinput>
+. .. passwd vi.recover
+&prompt.root; <userinput>zfs set snapdir=visible <replaceable>mypool/var/tmp</replaceable></userinput>
+&prompt.user; <userinput>ls -a /var/tmp</userinput>
+. .. .zfs passwd vi.recover</screen>
+
+ <para>Einzelne Dateien lassen sich einfach auf einen
+ vorherigen Stand wiederherstellen, indem diese aus dem
+ Schnappschuss zurück in das Eltern-Dataset kopiert werden.
+ Die Verzeichnisstruktur unterhalb von
+ <filename>.zfs/snapshot</filename> enthält ein Verzeichnis,
+ das exakt wie der Schnappschuss benannt ist, der zuvor
+ angelegt wurde, um es einfacher zu machen, diese zu
+ identifizieren. Im nächsten Beispiel wird angenommen, dass
+ eine Datei aus dem versteckten
+ <filename>.zfs</filename> Verzeichnis durch kopieren aus dem
+ Schnappschuss, der die letzte Version dieser Datei enthielt,
+ wiederhergestellt wird:</para>
+
+ <screen>&prompt.root; <userinput>rm /var/tmp/passwd</userinput>
+&prompt.user; <userinput>ls -a /var/tmp</userinput>
+. .. .zfs vi.recover
+&prompt.root; <userinput>ls /var/tmp/.zfs/snapshot</userinput>
+after_cp my_recursive_snapshot
+&prompt.root; <userinput>ls /var/tmp/.zfs/snapshot/<replaceable>after_cp</replaceable></userinput>
+passwd vi.recover
+&prompt.root; <userinput>cp /var/tmp/.zfs/snapshot/<replaceable>after_cp/passwd</replaceable> <replaceable>/var/tmp</replaceable></userinput></screen>
+
+ <para>Als <command>ls .zfs/snapshot</command> ausgeführt
+ wurde, war die <literal>snapdir</literal>-Eigenschaft
+ möglicherweise nicht auf hidden gesetzt, trotzdem ist es
+ immer noch möglich, den Inhalt dieses Verzeichnisses
+ aufzulisten. Es liegt am Administrator zu entscheiden, ob
+ diese Verzeichnisse angezeigt werden soll. Es ist möglich,
+ diese für bestimmte Datasets anzuzeigen und für andere zu
+ verstecken. Das Kopieren von Dateien oder Verzeichnissen
+ aus diesem versteckten <filename>.zfs/snapshot</filename>
+ Verzeichnis ist einfach genug. Jedoch führt der umgekehrte
+ Weg zu einem Fehler:</para>
+
+ <screen>&prompt.root; <userinput>cp <replaceable>/etc/rc.conf</replaceable> /var/tmp/.zfs/snapshot/<replaceable>after_cp/</replaceable></userinput>
+cp: /var/tmp/.zfs/snapshot/after_cp/rc.conf: Read-only file system</screen>
+
+ <para>Der Fehler erinnert den Benutzer daran, dass
+ Schnappschüsse nur gelesen aber nicht mehr geändert werden
+ können, nachdem diese angelegt wurden. Es können keine
+ Dateien in diese Schnappschuss-Verzeichnisse kopiert oder
+ daraus gelöscht werden, da dies sonst den Zustand des
+ Datasets verändern würde, den sie repräsentieren.</para>
+
+ <para>Schnappschüsse verbrauchen Speicherplatz basierend auf
+ der Menge an Änderungen, die am Eltern-Dataset durchgeführt
+ wurden, seit der Zeit als der Schnappschuss erstellt wurde.
+ Die Eigenschaft <literal>written</literal> eines
+ Schnappschusses verfolgt, wieviel Speicherplatz vom
+ Schnappschuss belegt wird.</para>
+
+ <para>Schnappschüsse werden zerstört und der belegte Platz
+ wieder freigegeben durch den Befehl
+ <command>zfs destroy
+ <replaceable>dataset</replaceable>@<replaceable>snapshot</replaceable></command>.
+ Durch hinzufügen von <option>-r</option> werden alle
+ Schnappschüsse rekursiv gelöscht, die den gleichen Namen wie
+ das Eltern-Dataset besitzen. Mit der Option
+ <option>-n -v</option> wird eine Liste von Schnappschüssen,
+ die gelöscht werden würden, zusammen mit einer geschätzten
+ Menge an zurückgewonnenem Speicherplatz angezeigt, ohne die
+ eigentliche Zerstöroperation wirklich durchzuführen.</para>
+ </sect3>
+ </sect2>
+
+ <sect2 xml:id="zfs-zfs-clones">
+ <title>Klone verwalten</title>
+
+ <para>Ein Klon ist eine Kopie eines Schnappschusses, der mehr
+ wie ein reguläres Dataset behandelt wird. Im Gegensatz zu
+ Schnappschüssen kann man von einem Klon nicht nur lesen, er
+ ist eingehängt und kann seine eigenen Eigenschaften haben.
+ Sobald ein Klon mittels <command>zfs clone</command> erstellt
+ wurde, lässt sich der zugrundeliegende Schnappschuss nicht
+ mehr zerstören. Die Eltern-/Kindbeziehung zwischen dem Klon
+ und dem Schnappschuss kann über
+ <command>zfs promote</command> aufgelöst werden. Nachdem ein
+ Klon auf diese Weise befördert wurde, wird der Schnappschuss
+ zum Kind des Klons, anstatt des ursprünglichen Datasets. Dies
+ wird die Art und Weise, wie der Speicherplatz berechnet wird,
+ verändern, jedoch nicht den bereits belegten Speicher
+ anpassen. Der Klon kann an einem beliebigen Punkt innerhalb
+ der <acronym>ZFS</acronym>-Dateisystemhierarchie eingehängt
+ werden, nur nicht unterhalb der ursprünglichen Stelle des
+ Schnappschusses.</para>
+
+ <para>Um diese Klon-Funktionalität zu demonstrieren, wird dieses
+ Beispiel-Dataset verwendet:</para>
+
+ <screen>&prompt.root; <userinput>zfs list -rt all <replaceable>camino/home/joe</replaceable></userinput>
+NAME USED AVAIL REFER MOUNTPOINT
+camino/home/joe 108K 1.3G 87K /usr/home/joe
+camino/home/joe@plans 21K - 85.5K -
+camino/home/joe@backup 0K - 87K -</screen>
+
+ <para>Ein typischer Einsatzzweck für Klone ist das
+ experimentieren mit einem bestimmten Dataset, während der
+ Schnappschuss beibehalten wird für den Fall, dass etwas
+ schiefgeht. Da Schnappschüsse nicht verändert werden können,
+ wird ein Lese-/Schreibklon des Schnappschusses angelegt.
+ Nachdem das gewünschte Ergebnis im Klon erreicht wurde, kann
+ der Klon zu einem Dataset ernannt und das alte Dateisystem
+ entfernt werden. Streng genommen ist das nicht nötig, da der
+ Klon und das Dataset ohne Probleme miteinander koexistieren
+ können.</para>
+
+ <screen>&prompt.root; <userinput>zfs clone <replaceable>camino/home/joe</replaceable>@<replaceable>backup</replaceable> <replaceable>camino/home/joenew</replaceable></userinput>
+&prompt.root; <userinput>ls /usr/home/joe*</userinput>
+/usr/home/joe:
+backup.txz plans.txt
+
+/usr/home/joenew:
+backup.txz plans.txt
+&prompt.root; <userinput>df -h /usr/home</userinput>
+Filesystem Size Used Avail Capacity Mounted on
+usr/home/joe 1.3G 31k 1.3G 0% /usr/home/joe
+usr/home/joenew 1.3G 31k 1.3G 0% /usr/home/joenew</screen>
+
+ <para>Nachdem ein Klon erstellt wurde, stellt er eine exakte
+ Kopie des Datasets zu dem Zeitpunkt dar, als der Schnappschuss
+ angelegt wurde. Der Klon kann nun unabhängig vom
+ ursprünglichen Dataset geändert werden. Die einzige
+ Verbindung zwischen den beiden ist der Schnappschuss.
+ <acronym>ZFS</acronym> zeichnet diese Verbindung in der
+ Eigenschaft namens <literal>origin</literal> auf. Sobald die
+ Abhängigkeit zwischen dem Schnappschuss und dem Klon durch das
+ Befördern des Klons mittels <command>zfs promote</command>
+ entfernt wurde, wird auch die
+ <literal>origin</literal>-Eigenschaft des Klons entfernt, da
+ es sich nun um ein eigenständiges Dataset handelt. Dieses
+ Beispiel demonstriert dies:</para>
+
+ <screen>&prompt.root; <userinput>zfs get origin <replaceable>camino/home/joenew</replaceable></userinput>
+NAME PROPERTY VALUE SOURCE
+camino/home/joenew origin camino/home/joe@backup -
+&prompt.root; <userinput>zfs promote <replaceable>camino/home/joenew</replaceable></userinput>
+&prompt.root; <userinput>zfs get origin <replaceable>camino/home/joenew</replaceable></userinput>
+NAME PROPERTY VALUE SOURCE
+camino/home/joenew origin - -</screen>
+
+ <para>Nachdem ein paar Änderungen, wie beispielsweise das
+ Kopieren von <filename>loader.conf</filename> auf den
+ beförderten Klon vorgenommen wurden, wird das alte Verzeichnis
+ in diesem Fall überflüssig. Stattdessen kann der beförderte
+ Klon diesen ersetzen. Dies kann durch zwei
+ aufeinanderfolgende Befehl geschehen: <command>zfs
+ destroy</command> auf dem alten Dataset und <command>zfs
+ rename</command> auf dem Klon, um diesen genauso wie das
+ alte Dataset zu benennen (es kann auch einen ganz anderen
+ Namen erhalten).</para>
+
+ <screen>&prompt.root; <userinput>cp <replaceable>/boot/defaults/loader.conf</replaceable> <replaceable>/usr/home/joenew</replaceable></userinput>
+&prompt.root; <userinput>zfs destroy -f <replaceable>camino/home/joe</replaceable></userinput>
+&prompt.root; <userinput>zfs rename <replaceable>camino/home/joenew</replaceable> <replaceable>camino/home/joe</replaceable></userinput>
+&prompt.root; <userinput>ls /usr/home/joe</userinput>
+backup.txz loader.conf plans.txt
+&prompt.root; <userinput>df -h <replaceable>/usr/home</replaceable></userinput>
+Filesystem Size Used Avail Capacity Mounted on
+usr/home/joe 1.3G 128k 1.3G 0% /usr/home/joe</screen>
+
+ <para>Der geklonte Schnappschuss wird jetzt wie ein
+ gewöhnliches Dataset behandelt. Es enthält alle Daten aus dem
+ ursprünglichen Schnappschuss inklusive der Dateien, die
+ anschliessend hinzugefügt wurden, wie
+ <filename>loader.conf</filename>. Klone können in
+ unterschiedlichen Szenarien eingesetzt werden, um nützliche
+ Eigenschaften für ZFS-Anwender zur Verfügung zu stellen.
+ Zum Beispiel können Jails als Schnappschüsse bereitgestellt
+ werden, die verschiedene Arten von installierten Anwendungen
+ anbieten. Anwender können diese Schnappschüsse klonen und
+ ihre eigenen Anwendungen nach belieben hinzufügen. Sobald
+ sie mit den Änderungen zufrieden sind, können die Klone zu
+ vollständigen Datasets ernannt werden und dem Anwender zur
+ Verfügung gestellt werden, als würde es sich um echte
+ Datasets handeln. Das spart Zeit und Administrationsaufwand,
+ wenn diese Jails auf diese Weise zur Verfügung gestellt
+ werden.</para>
+ </sect2>
+
+ <sect2 xml:id="zfs-zfs-send">
+ <title>Replikation</title>
+
+ <para>Daten auf einem einzigen Pool an einem Platz
+ aufzubewahren, setzt diese dem Risiko aus, gestohlen oder
+ Opfer von Naturgewalten zu werden, sowie menschlichem
+ Versagen auszusetzen. Regelmässige Sicherungen des gesamten
+ Pools ist daher unerlässlich. <acronym>ZFS</acronym> bietet
+ eine Reihe von eingebauten Serialisierungsfunktionen an, die
+ in der Lage ist, eine Repräsentation der Daten als Datenstrom
+ auf die Standardausgabe zu schreiben. Mit dieser Methode ist
+ es nicht nur möglich, die Daten auf einen anderen Pool zu
+ schicken, der an das lokale System angeschlossen ist, sondern
+ ihn auch über ein Netzwerk an ein anderes System zu senden.
+ Schnappschüsse stellen dafür die Replikationsbasis bereit
+ (lesen Sie dazu den Abschnitt zu <link
+ linkend="zfs-zfs-snapshot"><acronym>ZFS</acronym>
+ snapshots</link>). Die Befehle, die für die Replikation
+ verwendet werden, sind <command>zfs send</command> und
+ <command>zfs receive</command>.</para>
+
+ <para>Diese Beispiele demonstrieren die Replikation von
+ <acronym>ZFS</acronym> anhand dieser beiden Pools:</para>
+
+ <screen>&prompt.root; <userinput>zpool list</userinput>
+NAME SIZE ALLOC FREE CAP DEDUP HEALTH ALTROOT
+backup 960M 77K 896M 0% 1.00x ONLINE -
+mypool 984M 43.7M 940M 4% 1.00x ONLINE -</screen>
+
+ <para>Der Pool namens <replaceable>mypool</replaceable> ist der
+ primäre Pool, auf den regelmässig Daten geschrieben und auch
+ wieder gelesen werden. Ein zweiter Pool, genannt
+ <replaceable>backup</replaceable> wird verwendet, um als
+ Reserve zu dienen im Falle, dass der primäre Pool nicht zur
+ Verfügung steht. Beachten Sie, dass diese Ausfallsicherung
+ nicht automatisch von <acronym>ZFS</acronym> durchgeführt
+ wird, sondern manuell von einem Systemadministrator bei Bedarf
+ eingerichtet werden muss. Ein Schnappschuss wird verwendet,
+ um einen konsistenten Zustand des Dateisystems, das repliziert
+ werden soll, zu erzeugen. Sobald ein Schnappschuss von
+ <replaceable>mypool</replaceable> angelegt wurde, kann er auf
+ den <replaceable>backup</replaceable>-Pool abgelegt werden.
+ Nur Schnappschüsse lassen sich auf diese Weise replizieren.
+ Änderungen, die seit dem letzten Schnappschuss entstanden
+ sind, werden nicht mit repliziert.</para>
+
+ <screen>&prompt.root; <userinput>zfs snapshot <replaceable>mypool</replaceable>@<replaceable>backup1</replaceable></userinput>
+&prompt.root; <userinput>zfs list -t snapshot</userinput>
+NAME USED AVAIL REFER MOUNTPOINT
+mypool@backup1 0 - 43.6M -</screen>
+
+ <para>Da nun ein Schnappschuss existiert, kann mit
+ <command>zfs send</command> ein Datenstrom, der den Inhalt des
+ Schnappschusses repräsentiert, erstellt werden. Dieser
+ Datenstrom kann als Datei gespeichert oder von einem
+ anderen Pool empfangen werden. Der Datenstrom wird auf die
+ Standardausgabe geschrieben, muss jedoch in eine Datei oder
+ in eine Pipe umgeleitet werden, sonst wird ein Fehler
+ produziert:</para>
+
+ <screen>&prompt.root; <userinput>zfs send <replaceable>mypool</replaceable>@<replaceable>backup1</replaceable></userinput>
+Error: Stream can not be written to a terminal.
+You must redirect standard output.</screen>
+
+ <para>Um ein Dataset mit <command>zfs send</command> zu
+ replizieren, leiten Sie dieses in eine Datei auf dem
+ eingehängten Backup-Pool um. Stellen Sie sicher, dass der
+ Pool genug freien Speicherplatz besitzt, um die Grösse des
+ gesendeten Schnappschusses aufzunehmen. Das beinhaltet alle
+ Daten im Schnappschuss, nicht nur die Änderungen zum
+ vorherigen Schnappschuss.</para>
+
+ <screen>&prompt.root; <userinput>zfs send <replaceable>mypool</replaceable>@<replaceable>backup1</replaceable> > <replaceable>/backup/backup1</replaceable></userinput>
+&prompt.root; <userinput>zpool list</userinput>
+NAME SIZE ALLOC FREE CAP DEDUP HEALTH ALTROOT
+backup 960M 63.7M 896M 6% 1.00x ONLINE -
+mypool 984M 43.7M 940M 4% 1.00x ONLINE -</screen>
+
+ <para>Das Kommando <command>zfs send</command> transferierte
+ alle Daten im <replaceable>backup1</replaceable>-Schnappschuss
+ auf den Pool namens <replaceable>backup</replaceable>.
+ Erstellen und senden eines Schnappschusses kann automatisch
+ von &man.cron.8; durchgeführt werden.</para>
+
+ <para>Anstatt die Sicherungen als Archivdateien zu speichern,
+ kann <acronym>ZFS</acronym> diese auch als aktives Dateisystem
+ empfangen, was es erlaubt, direkt auf die gesicherten Daten
+ zuzugreifen. Um an die eigentlichen Daten in diesem Strom zu
+ gelangen, wird <command>zfs receive</command> benutzt, um den
+ Strom wieder in Dateien und Verzeichnisse umzuwandeln. Das
+ Beispiel unten kombiniert <command>zfs send</command> und
+ <command>zfs receive</command> durch eine Pipe, um die Daten
+ von einem Pool auf den anderen zu kopieren. Die Daten können
+ direkt auf dem empfangenden Pool verwendet werden, nachdem der
+ Transfer abgeschlossen ist. Ein Dataset kann nur auf ein
+ leeres Dataset repliziert werden.</para>
+
+ <screen>&prompt.root; <userinput>zfs snapshot <replaceable>mypool</replaceable>@<replaceable>replica1</replaceable></userinput>
+&prompt.root; <userinput>zfs send -v <replaceable>mypool</replaceable>@<replaceable>replica1</replaceable> | zfs receive <replaceable>backup/mypool</replaceable></userinput>
+send from @ to mypool@replica1 estimated size is 50.1M
+total estimated size is 50.1M
+TIME SENT SNAPSHOT
+
+&prompt.root; <userinput>zpool list</userinput>
+NAME SIZE ALLOC FREE CAP DEDUP HEALTH ALTROOT
+backup 960M 63.7M 896M 6% 1.00x ONLINE -
+mypool 984M 43.7M 940M 4% 1.00x ONLINE -</screen>
+
+ <sect3 xml:id="zfs-send-incremental">
+ <title>Inkrementelle Sicherungen</title>
+
+ <para>Die Unterschiede zwischen zwei Schnappschüssen kann
+ <command>zfs send</command> ebenfalls erkennen und nur diese
+ übertragen. Dies spart Speicherplatz und Übertragungszeit.
+ Beispielsweise:</para>
+
+ <screen>&prompt.root; <userinput>zfs snapshot <replaceable>mypool</replaceable>@<replaceable>replica2</replaceable></userinput>
+&prompt.root; <userinput>zfs list -t snapshot</userinput>
+NAME USED AVAIL REFER MOUNTPOINT
+mypool@replica1 5.72M - 43.6M -
+mypool@replica2 0 - 44.1M -
+&prompt.root; <userinput>zpool list</userinput>
+NAME SIZE ALLOC FREE CAP DEDUP HEALTH ALTROOT
+backup 960M 61.7M 898M 6% 1.00x ONLINE -
+mypool 960M 50.2M 910M 5% 1.00x ONLINE -</screen>
+
+ <para>Ein zweiter Schnappschuss genannt
+ <replaceable>replica2</replaceable> wurde angelegt. Dieser
+ zweite Schnappschuss enthält nur die Änderungen, die
+ zwischen dem jetzigen Stand des Dateisystems und dem
+ vorherigen Schnappschuss,
+ <replaceable>replica1</replaceable>, vorgenommen wurden.
+ Durch <command>zfs send -i</command> und die Angabe des
+ Schnappschusspaares wird ein inkrementeller
+ Replikationsstrom erzeugt, welcher nur die Daten enthält,
+ die sich geändert haben. Das kann nur erfolgreich sein,
+ wenn der initiale Schnappschuss bereits auf der
+ Empfängerseite vorhanden ist.</para>
+
+ <screen>&prompt.root; <userinput>zfs send -v -i <replaceable>mypool</replaceable>@<replaceable>replica1</replaceable> <replaceable>mypool</replaceable>@<replaceable>replica2</replaceable> | zfs receive <replaceable>/backup/mypool</replaceable></userinput>
+send from @replica1 to mypool@replica2 estimated size is 5.02M
+total estimated size is 5.02M
+TIME SENT SNAPSHOT
+
+&prompt.root; <userinput>zpool list</userinput>
+NAME SIZE ALLOC FREE CAP DEDUP HEALTH ALTROOT
+backup 960M 80.8M 879M 8% 1.00x ONLINE -
+mypool 960M 50.2M 910M 5% 1.00x ONLINE -
+
+&prompt.root; <userinput>zfs list</userinput>
+NAME USED AVAIL REFER MOUNTPOINT
+backup 55.4M 240G 152K /backup
+backup/mypool 55.3M 240G 55.2M /backup/mypool
+mypool 55.6M 11.6G 55.0M /mypool
+
+&prompt.root; <userinput>zfs list -t snapshot</userinput>
+NAME USED AVAIL REFER MOUNTPOINT
+backup/mypool@replica1 104K - 50.2M -
+backup/mypool@replica2 0 - 55.2M -
+mypool@replica1 29.9K - 50.0M -
+mypool@replica2 0 - 55.0M -</screen>
+
+ <para>Der inkrementelle Datenstrom wurde erfolgreich
+ übertragen. Nur die Daten, die verändert wurden, sind
+ übertragen worden, anstatt das komplette
+ <replaceable>replica1</replaceable>. Nur die Unterschiede
+ wurden gesendet, was weniger Zeit und Speicherplatz in
+ Anspruch genommen hat, statt jedesmal den gesamten Pool zu
+ kopieren. Das ist hilfreich wenn langsame Netzwerke oder
+ Kosten für die übertragene Menge Bytes in Erwägung gezogen
+ werden müssen.</para>
+
+ <para>Ein neues Dateisystem,
+ <replaceable>backup/mypool</replaceable>, ist mit allen
+ Dateien und Daten vom Pool
+ <replaceable>mypool</replaceable> verfügbar. Wenn die
+ Option <option>-P</option> angegeben wird, werden die
+ Eigenschaften des Datasets kopiert, einschliesslich der
+ Komprimierungseinstellungen, Quotas und Einhängpunkte.
+ Wird die Option <option>-R</option> verwendet, so werden
+ alle Kind-Datasets des angegebenen Datasets kopiert,
+ zusammen mit ihren Eigenschaften. Senden und Empfangen kann
+ automatisiert werden, so dass regelmässig Sicherungen auf
+ dem zweiten Pool angelegt werden.</para>
+ </sect3>
+
+ <sect3 xml:id="zfs-send-ssh">
+ <title>Verschlüsselte Sicherungen über
+ <application>SSH</application> senden</title>
+
+ <para>Datenströme über das Netzwerk zu schicken ist eine gute
+ Methode, um Sicherungen ausserhalb des Systems anzulegen.
+ Jedoch ist dies auch mit einem Nachteil verbunden. Daten,
+ die über die Leitung verschickt werden, sind nicht
+ verschlüsselt, was es jedem erlaubt, die Daten abzufangen
+ und die Ströme wieder zurück in Daten umzuwandeln, ohne dass
+ der sendende Benutzer davon etwas merkt. Dies ist eine
+ unerwünschte Situation, besonders wenn die Datenströme über
+ das Internet auf ein entferntes System gesendet werden.
+ <application>SSH</application> kann benutzt werden, um
+ durch Verschlüsselung geschützte Daten über eine
+ Netzwerkverbindung zu übertragen. Da <acronym>ZFS</acronym>
+ nur die Anforderung hat, dass der Strom von der
+ Standardausgaben umgeleitet wird, ist es relativ einfach,
+ diesen durch <application>SSH</application> zu leiten. Um
+ den Inhalt des Dateisystems während der Übertragung und auf
+ dem entfernten System weiterhin verschlüsselt zu lassen,
+ denken Sie über den Einsatz von <link
+ xlink:href="http://wiki.freebsd.org/PEFS">PEFS</link>
+ nach.</para>
+
+ <para>Ein paar Einstellungen udn Sicherheitsvorkehrungen
+ müssen zuvor abgeschlossen sein. Es werden hier nur die
+ nötigen Schritte für die <command>zfs send</command>-Aktion
+ gezeigt. Weiterführende Informationen zu
+ <application>SSH</application>, gibt es im Kapitel
+ <xref linkend="openssh"/>.</para>
+
+ <para>Die folgende Konfiguration wird benötigt:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>Passwortloser <application>SSH</application>-Zugang
+ zwischen dem sendenden und dem empfangenden Host durch
+ den Einsatz von
+ <application>SSH</application>-Schlüsseln.</para>
+ </listitem>
+
+ <listitem>
+ <para>Normalerweise werden die Privilegien des <systemitem
+ class="username">root</systemitem>-Benutzers
+ gebraucht, um Strom zu senden und zu empfangen. Das
+ beinhaltet das Anmelden auf dem empfangenden System als
+ <systemitem class="username">root</systemitem>.
+ Allerdings ist das Anmelden als <systemitem
+ class="username">root</systemitem> aus
+ Sicherheitsgründen standardmässig deaktiviert. Mit
+ <link linkend="zfs-zfs-allow">ZFS Delegation</link>
+ lassen sich nicht-<systemitem
+ class="username">root</systemitem>-Benutzer auf jedem
+ System einrichten, welche die nötigen Rechte besitzen,
+ um die Sende- und Empfangsoperation
+ durchzuführen.</para>
+ </listitem>
+
+ <listitem>
+ <para>Auf dem sendenden System:</para>
+
+ <screen>&prompt.root; <command>zfs allow -u someuser send,snapshot <replaceable>mypool</replaceable></command></screen>
+ </listitem>
+
+ <listitem>
+ <para>Um den Pool einzuhängen, muss der unpriviligierte
+ Benutzer das Verzeichnis besitzen und gewöhnliche
+ Benutzern muss die Erlaubnis gegeben werden, das
+ Dateisystem einzuhängen. Auf dem empfangenden System
+ nehmen Sie dazu die folgenden Einstellungen vor:</para>
+
+ <screen>&prompt.root; sysctl vfs.usermount=1
+vfs.usermount: 0 -> 1
+&prompt.root; echo vfs.usermount=1 >> /etc/sysctl.conf
+&prompt.root; <userinput>zfs create <replaceable>recvpool/backup</replaceable></userinput>
+&prompt.root; <userinput>zfs allow -u <replaceable>someuser</replaceable> create,mount,receive <replaceable>recvpool/backup</replaceable></userinput>
+&prompt.root; chown <replaceable>someuser</replaceable> <replaceable>/recvpool/backup</replaceable></screen>
+ </listitem>
+ </itemizedlist>
+
+ <para>Der unpriviligierte Benutzer hat jetzt die Fähigkeit,
+ Datasets zu empfangen und einzuhängen und das
+ <replaceable>home</replaceable>-Dataset auf das entfernte
+ System zu replizieren:</para>
+
+ <screen>&prompt.user; <userinput>zfs snapshot -r <replaceable>mypool/home</replaceable>@<replaceable>monday</replaceable></userinput>
+&prompt.user; <userinput>zfs send -R <replaceable>mypool/home</replaceable>@<replaceable>monday</replaceable> | ssh <replaceable>someuser@backuphost</replaceable> zfs recv -dvu <replaceable>recvpool/backup</replaceable></userinput></screen>
+
+ <para>Ein rekursiver Schnappschuss namens
+ <replaceable>monday</replaceable> wird aus dem Dataset
+ <replaceable>home</replaceable> erstellt, dass auf dem Pool
+ <replaceable>mypool</replaceable> liegt. Es wird dann mit
+ <command>zfs send -R</command> gesendet, um das Dataset,
+ alle seine Kinder, Schnappschüsse, Klone und Einstellungen
+ in den Strom mit aufzunehmen. Die Ausgabe wird an das
+ wartende System <replaceable>backuphost</replaceable>
+ mittels <command>zfs receive</command> durch
+ <application>SSH</application> umgeleitet. Die Verwendung
+ des Fully Qulified Domänennamens oder der IP-Adresse wird
+ empfohlen. Die empfangende Maschine schreibt die Daten auf
+ das <replaceable>backup</replaceable>-Dataset im
+ <replaceable>recvpool</replaceable>-Pool. Hinzufügen der
+ Option <option>-d</option> zu <command>zfs recv</command>
+ überschreibt den Namen des Pools auf der empfangenden Seite
+ mit dem Namen des Schnappschusses. Durch Angabe von
+ <option>-u</option> wird das Dateisystem nicht auf der
+ Empfängerseite eingehängt. Wenn <option>-v</option>
+ enthalten ist, werden mehr Details zum Transfer angezeigt
+ werden, einschliesslich der vergangenen Zeit und der Menge
+ an übertragenen Daten.</para>
+ </sect3>
+ </sect2>
+
+ <sect2 xml:id="zfs-zfs-quota">
+ <title>Dataset-, Benutzer- und Gruppenquotas</title>
+
+ <para><link linkend="zfs-term-quota">Dataset-Quotas</link>
+ werden eingesetzt, um den Speicherplatz einzuschränken, den
+ ein bestimmtes Dataset verbrauchen kann. <link
+ linkend="zfs-term-refquota">Referenz-Quotas</link>
+ funktionieren auf eine ähnliche Weise, jedoch wird dabei der
+ Speicherplatz des Datasets selbst gezählt, wobei
+ Schnappschüsse und Kind-Datasets dabei ausgenommen sind.
+ Ähnlich dazu werden <link
+ linkend="zfs-term-userquota">Benutzer</link>- und <link
+ linkend="zfs-term-groupquota">Gruppen</link>-Quotas
+ dazu verwendet, um Benutzer oder Gruppen daran zu hindern, den
+ gesamten Speicherplatz im Pool oder auf dem Dataset zu
+ verbrauchen.</para>
+
+ <para>Um eine 10&nbsp;GB grösse Quota auf dem Dataset
+ <filename>storage/home/bob</filename> zu erzwingen, verwenden
+ Sie folgenden Befehl:</para>
+
+ <screen>&prompt.root; <userinput>zfs set quota=10G storage/home/bob</userinput></screen>
+
+ <para>Um eine Referenzquota von 10&nbsp;GB für
+ <filename>storage/home/bob</filename> festzulegen, geben Sie
+ ein:</para>
+
+ <screen>&prompt.root; <userinput>zfs set refquota=10G storage/home/bob</userinput></screen>
+
+ <para>Um eine Quota für <filename>storage/home/bob</filename>
+ wieder zu entfernen:</para>
+
+ <screen>&prompt.root; <userinput>zfs set quota=none storage/home/bob</userinput></screen>
+
+ <para>Das generelle Format ist
+ <literal>userquota@<replaceable>user</replaceable>=<replaceable>size</replaceable></literal>
+ und der Name des Benutzers muss in einem der folgenden Formate
+ vorliegen:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para><acronym>POSIX</acronym>-kompatibler Name wie
+ <replaceable>joe</replaceable>.</para>
+ </listitem>
+
+ <listitem>
+ <para><acronym>POSIX</acronym>-numerische ID wie
+ <replaceable>789</replaceable>.</para>
+ </listitem>
+
+ <listitem>
+ <para><acronym>SID</acronym>-Name wie
+ <replaceable>joe.bloggs@example.com</replaceable>.</para>
+ </listitem>
+
+ <listitem>
+ <para><acronym>SID</acronym>-numerische ID wie
+ <replaceable>S-1-123-456-789</replaceable>.</para>
+ </listitem>
+ </itemizedlist>
+
+ <para>Um beispielsweise eine Benutzerquota von 50&nbsp;GB für
+ den Benutzer names <replaceable>joe</replaceable> zu
+ erzwingen:</para>
+
+ <screen>&prompt.root; <userinput>zfs set userquota@joe=50G</userinput></screen>
+
+ <para>Um jegliche Quota zu entfernen:</para>
+
+ <screen>&prompt.root; <userinput>zfs set userquota@joe=none</userinput></screen>
+
+ <note>
+ <para>Benutzerquota-Eigenschaften werden nicht von
+ <command>zfs get all</command> dargestellt.
+ Nicht-<systemitem
+ class="username">root</systemitem>-Benutzer können nur ihre
+ eigenen Quotas sehen, ausser ihnen wurde das
+ <literal>userquota</literal>-Privileg zugeteilt. Benutzer
+ mit diesem Privileg sind in der Lage, jedermanns Quota zu
+ sehen und zu verändern.</para>
+ </note>
+
+ <para>Das generelle Format zum Festlegen einer Gruppenquota
+ lautet:
+ <literal>groupquota@<replaceable>group</replaceable>=<replaceable>size</replaceable></literal>.</para>
+
+ <para>Um eine Quota für die Gruppe
+ <replaceable>firstgroup</replaceable> von 50&nbsp;GB zu
+ setzen, geben Sie ein:</para>
+
+ <screen>&prompt.root; <userinput>zfs set groupquota@firstgroup=50G</userinput></screen>
+
+ <para>Um eine Quota für die Gruppe
+ <replaceable>firstgroup</replaceable>zu setzen oder
+ sicherzustellen, dass diese nicht gesetzt ist, verwenden Sie
+ stattdessen:</para>
+
+ <screen>&prompt.root; <userinput>zfs set groupquota@firstgroup=none</userinput></screen>
+
+ <para>Genau wie mit der Gruppenquota-Eigenschaft, werden
+ nicht-<systemitem class="username">root</systemitem>-Benutzer
+ nur die Quotas sehen, die den Gruppen zugeordnet ist, in denen
+ Sie Mitglied sind. Allerdings ist <systemitem
+ class="username">root</systemitem> oder ein Benutzer mit dem
+ <literal>groupquota</literal>-Privileg in der Lage, die Quotas
+ aller Gruppen zu sehen und festzusetzen.</para>
+
+ <para>Um die Menge an Speicherplatz zusammen mit der Quota
+ anzuzeigen, die von jedem Benutzer auf dem Dateisystem oder
+ Schnappschuss verbraucht wird, verwenden Sie
+ <command>zfs userspace</command>. Für Gruppeninformationen,
+ nutzen Sie <command>zfs groupspace</command>. Für weitere
+ Informationen zu unterstützten Optionen oder wie sich nur
+ bestimmte Optionen anzeigen lassen, lesen Sie
+ &man.zfs.1;.</para>
+
+ <para>Benutzer mit ausreichenden Rechten sowie <systemitem
+ class="username">root</systemitem> können die Quota für
+ <filename>storage/home/bob</filename> anzeigen:</para>
+
+ <screen>&prompt.root; <userinput>zfs get quota storage/home/bob</userinput></screen>
+ </sect2>
+
+ <sect2 xml:id="zfs-zfs-reservation">
+ <title>Reservierungen</title>
+
+ <para><link linkend="zfs-term-reservation">Reservierungen</link>
+ garantieren ein Minimum an Speicherplatz, der immer auf dem
+ Dataset verfügbar sein wird. Der reservierte Platz wird nicht
+ für andere Datasets zur Verfügung stehen. Diese Eigenschaft
+ kann besonders nützlich sein, um zu gewährleisten, dass freier
+ Speicherplatz für ein wichtiges Dataset oder für Logdateien
+ bereit steht.</para>
+
+ <para>Das generelle Format der
+ <literal>reservation</literal>-Eigenschaft ist
+ <literal>reservation=<replaceable>size</replaceable></literal>.
+ Um also eine Reservierung von 10&nbsp;GB auf
+ <filename>storage/home/bob</filename> festzulegen, geben Sie
+ Folgendes ein:</para>
+
+ <screen>&prompt.root; <userinput>zfs set reservation=10G storage/home/bob</userinput></screen>
+
+ <para>Um die Reservierung zu beseitigen:</para>
+
+ <screen>&prompt.root; <userinput>zfs set reservation=none storage/home/bob</userinput></screen>
+
+ <para>Das gleiche Prinzip kann auf die
+ <literal>refreservation</literal>-Eigenschaft angewendet
+ werden, um eine <link
+ linkend="zfs-term-refreservation">Referenzreservierung</link>
+ mit dem generellen Format
+ <literal>refreservation=<replaceable>size</replaceable></literal>
+ festzulegen.</para>
+
+ <para>Dieser Befehl zeigt die Reservierungen oder
+ Referenzreservierungen an, die auf
+ <filename>storage/home/bob</filename> existieren:</para>
+
+ <screen>&prompt.root; <userinput>zfs get reservation storage/home/bob</userinput>
+&prompt.root; <userinput>zfs get refreservation storage/home/bob</userinput></screen>
+ </sect2>
+
+ <sect2 xml:id="zfs-zfs-compression">
+ <title>Komprimierung</title>
+
+ <para><acronym>ZFS</acronym> bietet transparente Komprimierung.
+ Datenkomprimierung auf Blockebene während diese gerade
+ geschrieben werden, spart nicht nur Plattenplatz ein, sondern
+ kann auch den Durchsatz der Platte steigern. Falls Daten zu
+ 25% komprimiert sind, jedoch die komprimierten Daten im
+ gleichen Tempo wie ihre unkomprimierte Version, resultiert das
+ in einer effektiven Schreibgeschwindigkeit von 125%.
+ Komprimierung kann auch eine Alternative zu <link
+ linkend="zfs-zfs-deduplication">Deduplizierung</link>
+ darstellen, da es viel weniger zusätzlichen Hauptspeicher
+ benötigt.</para>
+
+ <para><acronym>ZFS</acronym> bietet mehrere verschiedene
+ Kompressionsalgorithmen an, jede mit unterschiedlichen
+ Kompromissen. Mit der Einführung von
+ <acronym>LZ4</acronym>-Komprimierung in <acronym>ZFS</acronym>
+ v5000, ist es möglich, Komprimierung für den gesamten Pool zu
+ aktivieren, ohne die grossen Geschwindigkeitseinbussen der
+ anderen Algorithmen. Der grösste Vorteil von
+ <acronym>LZ4</acronym> ist die Eigenschaft <emphasis>früher
+ Abbruch</emphasis>. Wenn <acronym>LZ4</acronym> nicht
+ mindestens 12,5% Komprimierung im ersten Teil der Daten
+ erreicht, wird der Block unkomprimiert geschrieben, um die
+ Verschwendung von CPU-Zyklen zu vermeiden, weil die Daten
+ entweder bereits komprimiert sind oder sich nicht komprimieren
+ lassen. Für Details zu den verschiedenen verfügbaren
+ Komprimierungsalgorithmen in <acronym>ZFS</acronym>, lesen Sie
+ den Eintrag <link
+ linkend="zfs-term-compression">Komprimierung</link> im
+ Abschnitt Terminologie</para>
+
+ <para>Der Administrator kann die Effektivität der Komprimierung
+ über eine Reihe von Dataset-Eigenschaften überwachen.</para>
+
+ <screen>&prompt.root; <userinput>zfs get used,compressratio,compression,logicalused <replaceable>mypool/compressed_dataset</replaceable></userinput>
+NAME PROPERTY VALUE SOURCE
+mypool/compressed_dataset used 449G -
+mypool/compressed_dataset compressratio 1.11x -
+mypool/compressed_dataset compression lz4 local
+mypool/compressed_dataset logicalused 496G -</screen>
+
+ <para>Dieses Dataset verwendet gerade 449&nbsp;GB Plattenplatz
+ (used-Eigenschaft. Ohne Komprimierung würde es stattdessen
+ 496&nbsp;GB Plattenplatz belegen
+ (<literal>logicalused</literal>). Das ergibt eine
+ Kompressionsrate von 1,11:1.</para>
+
+ <para>Komprimierung kann einen unerwarteten Nebeneffekt haben,
+ wenn diese mit <link
+ linkend="zfs-term-userquota">Benutzerquotas</link>
+ kombiniert wird. Benutzerquotas beschränken, wieviel
+ Speicherplatz ein Benutzer auf einem Dataset verbrauchen kann.
+ Jedoch basieren die Berechnungen darauf, wieviel Speicherplatz
+ <emphasis>nach der Komprimierung</emphasis> belegt ist. Wenn
+ also ein Benutzer eine Quota von10&nbsp;GB besitzt und
+ 10&nbsp;GB von komprimierbaren Daten schreibt, wird dieser
+ immer noch in der Lage sein, zusätzliche Daten zu speichern.
+ Wenn später eine Datei aktualisiert wird, beispielsweise eine
+ Datenbank, mit mehr oder weniger komprimierbaren Daten, wird
+ sich die Menge an verfügbarem Speicherplatz ändern. Das
+ kann in einer merkwürdigen Situation resultieren, in welcher
+ der Benutzer nicht die eigentliche Menge an Daten (die
+ Eigenschaft <literal>logicalused</literal>) überschreitet,
+ jedoch die Änderung in der Komprimierung dazu führt, dass das
+ Quota-Limit erreicht ist.</para>
+
+ <para>Kompression kann ein ebenso unerwartet mit Sicherungen
+ interagiereni. Quotas werden oft verwenden, um einzuschränken,
+ wieviele Daten gespeichert werden können um sicherzustellen,
+ dass ausreichend Speicherplatz für die Sicherung vorhanden
+ ist. Wenn jedoch Quotas Komprimierung nicht berücksichtigen,
+ werden womöglich mehr Daten geschrieben als in der
+ unkomprimierten Sicherung Platz ist.</para>
+ </sect2>
+
+ <sect2 xml:id="zfs-zfs-deduplication">
+ <title>Deduplizierung</title>
+
+ <para>Wenn aktiviert, verwendet <link
+ linkend="zfs-term-deduplication">Deduplizierung</link> die
+ Prüfsumme jedes Blocks, um Duplikate dieses Blocks zu
+ ermitteln. Sollte ein neuer Block ein Duplikat eines
+ existierenden Blocks sein, dann schreibt
+ <acronym>ZFS</acronym> eine zusätzliche Referenz auf die
+ existierenden Daten anstatt des kompletten duplizierten
+ Blocks. Gewaltige Speicherplatzeinsparungen sind möglich wenn
+ die Daten viele Duplikate von Dateien oder wiederholte
+ Informationen enthalten. Seien Sie gewarnt: Deduplizierung
+ benötigt eine extrem grosse Menge an Hauptspeicher und die
+ meistens Einsparungen können stattdessen durch das Aktivieren
+ von Komprimierung erreicht werden.</para>
+
+ <para>Um Deduplizierung zu aktivieren, setzen Sie die
+ <literal>dedup</literal>-Eigenschaft auf dem Zielpool:</para>
+
+ <screen>&prompt.root; <userinput>zfs set dedup=on <replaceable>pool</replaceable></userinput></screen>
+
+ <para>Nur neu auf den Pool geschriebene Daten werden
+ dedupliziert. Daten, die bereits auf den Pool geschrieben
+ wurden, werden nicht durch das Aktivieren dieser Option
+ dedupliziert. Ein Pool mit einer gerade aktivierten
+ Deduplizierung wird wie in diesem Beispiel aussehen:</para>
+
+ <screen>&prompt.root; <userinput>zpool list</userinput>
+NAME SIZE ALLOC FREE CAP DEDUP HEALTH ALTROOT
+pool 2.84G 2.19M 2.83G 0% 1.00x ONLINE -</screen>
+
+ <para>Die Spalte <literal>DEDUP</literal> zeigt das aktuelle
+ Verhältnis der Deduplizierung für diesen Pool an. Ein Wert
+ von <literal>1.00x</literal> zeigt an, dass die Daten noch
+ nicht dedupliziert wurden. Im nächsten Beispiel wird die
+ Ports-Sammlung dreimal in verschiedene Verzeichnisse auf dem
+ deduplizierten Pool kopiert.</para>
+
+ <screen>&prompt.root; <userinput>zpool list</userinput>
+for d in dir1 dir2 dir3; do
+for> mkdir $d &amp;&amp; cp -R /usr/ports $d &amp;
+for> done</screen>
+
+ <para>Redundante Daten werden erkannt und dedupliziert:</para>
+
+ <screen>&prompt.root; <userinput>zpool list</userinput>
+NAME SIZE ALLOC FREE CAP DEDUP HEALTH ALTROOT
+pool 2.84G 20.9M 2.82G 0% 3.00x ONLINE -</screen>
+
+ <para>Die <literal>DEDUP</literal>-Spalte zeigt einen Faktor von
+ <literal>3.00x</literal>. Mehrere Kopien der Ports-Sammlung
+ wurden erkannt und dedupliziert, was nur ein Drittel des
+ Speicherplatzes benötigt. Das Potential für Einsparungen beim
+ Speicherplatz ist enorm, wird jedoch damit erkauft, dass
+ genügend Speicher zur Verfügung stehen muss, um die
+ deduplizierten Blöcke zu verwalten.</para>
+
+ <para>Deduplizierung ist nicht immer gewinnbringend, besonders
+ die Daten auf dem Pool nicht redundant sind.
+ <acronym>ZFS</acronym> kann potentielle
+ Speicherplatzeinsparungen durch Deduplizierung auf einem Pool
+ simulieren:</para>
+
+ <screen>&prompt.root; <userinput>zdb -S <replaceable>pool</replaceable></userinput>
+Simulated DDT histogram:
+
+bucket allocated referenced
+______ ______________________________ ______________________________
+refcnt blocks LSIZE PSIZE DSIZE blocks LSIZE PSIZE DSIZE
+------ ------ ----- ----- ----- ------ ----- ----- -----
+ 1 2.58M 289G 264G 264G 2.58M 289G 264G 264G
+ 2 206K 12.6G 10.4G 10.4G 430K 26.4G 21.6G 21.6G
+ 4 37.6K 692M 276M 276M 170K 3.04G 1.26G 1.26G
+ 8 2.18K 45.2M 19.4M 19.4M 20.0K 425M 176M 176M
+ 16 174 2.83M 1.20M 1.20M 3.33K 48.4M 20.4M 20.4M
+ 32 40 2.17M 222K 222K 1.70K 97.2M 9.91M 9.91M
+ 64 9 56K 10.5K 10.5K 865 4.96M 948K 948K
+ 128 2 9.50K 2K 2K 419 2.11M 438K 438K
+ 256 5 61.5K 12K 12K 1.90K 23.0M 4.47M 4.47M
+ 1K 2 1K 1K 1K 2.98K 1.49M 1.49M 1.49M
+ Total 2.82M 303G 275G 275G 3.20M 319G 287G 287G
+
+dedup = 1.05, compress = 1.11, copies = 1.00, dedup * compress / copies = 1.16</screen>
+
+ <para>Nachdem <command>zdb -S</command> die Analyse des Pool
+ abgeschlossen hat. zeigt es die Speicherplatzeinsparungen, die
+ durch aktivierte Deduplizierung erreichbar sind, an. In
+ diesem Fall ist <literal>1.16</literal> ein sehr schlechter
+ Faktor, der grösstenteils von Einsparungen durch Komprimierung
+ beeinflusst wird. Aktivierung von Deduplizierung auf diesem
+ Pool würde also keine signifikante Menge an Speicherplatz
+ einsparen und ist daher nicht die Menge an Speicher wert, die
+ nötig sind, um zu deduplizieren. Über die Formel
+ <emphasis>ratio = dedup * compress / copies</emphasis> kann
+ ein Systemadministrator die Speicherplatzbelegung planen und
+ entscheiden, ob es sich lohnt, den zusätzlichen Hauptspeicher
+ für die Deduplizierung anhand des späteren Workloads
+ aufzuwenden. Wenn sich die Daten verhältnismässig gut
+ komprimieren lassen, sind die Speicherplatzeinsparungen sehr
+ gut. Es wird empfohlen, in dieser Situation zuerst die
+ Komprimierung zu aktivieren, da diese auch erhöhte
+ Geschwindigkeit mit sich bringt. Aktivieren Sie
+ Deduplizierung nur in solchen Fällen, bei denen die
+ Einsparungen beträchtlich sind und genug Hauptspeicher zur
+ Verfügung steht, um die <link
+ linkend="zfs-term-deduplication"><acronym>DDT</acronym></link>
+ aufzunehmen.</para>
+ </sect2>
+
+ <sect2 xml:id="zfs-zfs-jail">
+ <title><acronym>ZFS</acronym> und Jails</title>
+
+ <para>Um ein <acronym>ZFS</acronym>-Dataset einem
+ <link linkend="jails">Jail</link> zuzuweisen, wird der Befehl
+ <command>zfs jail</command> und die dazugehörige Eigenschaft
+ <literal>jailed</literal> verwendet. Durch Angabe von
+ <command>zfs jail <replaceable>jailid</replaceable></command>
+ wird ein Dataset dem spezifizierten Jail zugewiesen und kann
+ mit <command>zfs unjail</command> wieder abgehängt werden.
+ Damit das Dataset innerhalb der Jail kontrolliert werden kann,
+ muss die Eigenschaft <literal>jailed</literal> gesetzt sein.
+ Sobald ein Dataset sich im Jail befindet, kann es nicht mehr
+ länger auf dem Hostsystem eingehängt werden, da es
+ Einhängpunkte aufweisen könnte, welche die Sicherheit des
+ Systems gefärden.</para>
+ </sect2>
+ </sect1>
+
+ <sect1 xml:id="zfs-zfs-allow">
+ <title>Delegierbare Administration</title>
+
+ <para>Ein umfassendes System zur Berechtigungsübertragung erlaubt
+ unpriviligierten Benutzern,
+ <acronym>ZFS</acronym>-Administrationsaufgaben durchzuführen.
+ Beispielsweise, wenn jedes Heimatverzeichnis eines Benutzers ein
+ Dataset ist, können Benutzer das Recht darin erhalten,
+ Schnappschüsse zu erstellen und zu zerstören. Einem Benutzer
+ für die Sicherung kann die Erlaubnis eingeräumt werden, die
+ Replikationseigenschaft zu verwenden. Einem Skript zum Sammeln
+ von Speicherplatzverbrauch kann die Berechtigung gegeben werden,
+ nur auf die Verbrauchsdaten aller Benutzer zuzugreifen. Es ist
+ sogar möglich, die Möglichkeit zum Delegieren zu delegieren.
+ Die Berechtigung zur Delegation ist für jedes Unterkommando und
+ die meisten Eigenschaften möglich.</para>
+
+ <sect2 xml:id="zfs-zfs-allow-create">
+ <title>Delegieren, ein Dataset zu erstellen</title>
+
+ <para><command>zfs allow
+ <replaceable>someuser</replaceable> create
+ <replaceable>mydataset</replaceable></command> gibt dem
+ angegebenen Benutzer die Berechtigung, Kind-Datasets unter dem
+ ausgewählten Elterndataset anzulegen. Es gibt einen Haken:
+ ein neues Dataset anzulegen beinhaltet, dass es eingehängt
+ wird. Dies bedeutet, dass &os;s
+ <literal>vfs.usermount</literal> &man.sysctl.8; auf
+ <literal>1</literal> gesetzt wird, um nicht-root Benutzern zu
+ erlauben, Dateisysteme einzubinden. Es gibt eine weitere
+ Einschränkung um Missbrauch zu verhindern:
+ nicht-<systemitem class="username">root</systemitem>
+ Benutzer müssen Besitzer des Einhängpunktes sein, an dem das
+ Dateisystem eingebunden werden soll.</para>
+ </sect2>
+
+ <sect2 xml:id="zfs-zfs-allow-allow">
+ <title>Delegationsberechtigung delegieren</title>
+
+ <para><command>zfs allow
+ <replaceable>someuser</replaceable> allow
+ <replaceable>mydataset</replaceable></command> gibt dem
+ angegebenen Benutzer die Fähigkeit, jede Berechtigung, die er
+ selbst auf dem Dataset oder dessen Kindern besitzt, an andere
+ Benutzer weiterzugeben. Wenn ein Benutzer die
+ <literal>snapshot</literal>- und die
+ <literal>allow</literal>-Berechtigung besitzt, kann dieser
+ dann die <literal>snapshot</literal>-Berechtigung an andere
+ Benutzer delegieren.</para>
+ </sect2>
+ </sect1>
+
+ <sect1 xml:id="zfs-advanced">
+ <title>Themen für Fortgeschrittene</title>
+
+ <sect2 xml:id="zfs-advanced-tuning">
+ <title>Anpassungen</title>
+
+ <para>Eine Reihe von Anpassungen können vorgenommen werden, um
+ <acronym>ZFS</acronym> unter verschiedenen Belastungen während
+ des Betriebs bestmöglich einzustellen.</para>
+
+ <itemizedlist>
+ <listitem>
+ <para
+ xml:id="zfs-advanced-tuning-arc_max"><emphasis><varname>vfs.zfs.arc_max</varname></emphasis>
+ - Maximale Grösse des <link
+ linkend="zfs-term-arc"><acronym>ARC</acronym></link>.
+ Die Voreinstellung ist der gesamte <acronym>RAM</acronym>
+ weniger 1&nbsp;GB oder die Hälfte vom
+ <acronym>RAM</acronym>, je nachdem, was mehr ist.
+ Allerdings sollte ein niedriger Wert verwendet werden,
+ wenn das System weitere Dienste oder Prozesse laudfen
+ lässt, welche Hauptspeicher benötigen. Dieser Wert kann
+ nur zur Bootzeit eingestellt werden und wird in
+ <filename>/boot/loader.conf</filename> festgelegt.</para>
+ </listitem>
+
+ <listitem>
+ <para
+ xml:id="zfs-advanced-tuning-arc_meta_limit"><emphasis><varname>vfs.zfs.arc_meta_limit</varname></emphasis>
+ - Schränkt die Menge des <link
+ linkend="zfs-term-arc"><acronym>ARC</acronym></link>
+ ein, welche für die Speicherung von Metadaten verwendet
+ wird. Die Voreinstellun ist ein Viertel von
+ <varname>vfs.zfs.arc_max</varname>. Diesen Wert zu
+ erhöhen steigert die Geschwindigkeit, wenn die Arbeitslast
+ Operationen auf einer grossen Menge an Dateien und
+ Verzeichnissen oder häufigen Metadatenoperationen
+ beinhaltet. Jedoch bedeutet dies auch weniger Dateidaten,
+ die in den <link
+ linkend="zfs-term-arc"><acronym>ARC</acronym></link>
+ passen. Dieser Wert kann nur zur Bootzeit angepasst
+ werden und wird in <filename>/boot/loader.conf</filename>
+ gesetzt.</para>
+ </listitem>
+
+ <listitem>
+ <para
+ xml:id="zfs-advanced-tuning-arc_min"><emphasis><varname>vfs.zfs.arc_min</varname></emphasis>
+ - Minimale Grösse des <link
+ linkend="zfs-term-arc"><acronym>ARC</acronym></link>.
+ Der Standard beträgt die Hälfte von
+ <varname>vfs.zfs.arc_meta_limit</varname>. Passen Sie
+ diesen Wert an, um zu verhindern, dass andere Anwendungen
+ den gesamten <link
+ linkend="zfs-term-arc"><acronym>ARC</acronym></link>
+ verdrängen. Dieser Wert kann nur zur Bootzeit geändert
+ und muss in <filename>/boot/loader.conf</filename>
+ festgelegt werden.</para>
+ </listitem>
+
+ <listitem>
+ <para
+ xml:id="zfs-advanced-tuning-vdev-cache-size"><emphasis><varname>vfs.zfs.vdev.cache.size</varname></emphasis>
+ - Eine vorallokierte Menge von Speicher, die als Cache für
+ jedes Gerät im Pool reserviert wird. Die Gesamtgrösse von
+ verwendetem Speicher ist dieser Wert multipliziert mit der
+ Anzahl an Geräten. Nur zur Bootzeit kann dieser Wert
+ angepasst werden und wird in
+ <filename>/boot/loader.conf</filename> eingestellt.</para>
+ </listitem>
+
+ <listitem>
+ <para
+ xml:id="zfs-advanced-tuning-min-auto-ashift"><emphasis><varname>vfs.zfs.min_auto_ashift</varname></emphasis>
+ - Minimaler <varname>ashift</varname>-Wert (Sektorgrösse),
+ welche zur Erstellungszeit des Pools automatisch verwendet
+ wird. Der Wert ist ein Vielfaches zur Basis Zwei. Der
+ Standardwert von <literal>9</literal> repräsentiert
+ <literal>2^9 = 512</literal>, eine Sektorgrösse von 512
+ Bytes. Um <emphasis>write amplification</emphasis> zu
+ vermeiden und die bestmögliche Geschwindigkeit zu
+ erhalten, setzen Sie diesen Wert auf die grösste
+ Sektorgrösse, die bei einem Gerät im Pool vorhanden
+ ist.</para>
+
+ <para>Viele Geräte besitzen 4&nbsp;KB grosse Sektoren. Die
+ Verwendung der Voreinstellung <literal>9</literal> bei
+ <varname>ashift</varname> mit diesen Geräten resultiert in
+ einer write amplification auf diesen Geräten. Daten,
+ welche in einem einzelnen 4&nbsp;KB Schreibvorgang Platz
+ finden würden, müssen stattdessen in acht 512-byte
+ Schreibvorgänge aufgeteilt werden. <acronym>ZFS</acronym>
+ versucht, die allen Geräten zugrundeliegende Sektorgrösse
+ während der Poolerstellung zu lesen, jedoch melden viele
+ Geräte mit 4&nbsp;KB Sektoren, dass ihre Sektoren aus
+ Kompatibilitätsgründen 512 Bytes betragen. Durch das
+ Setzen von <varname>vfs.zfs.min_auto_ashift</varname> auf
+ <literal>12</literal> (<literal>2^12 = 4096</literal>)
+ bevor der Pool erstellt wird, zwingt
+ <acronym>ZFS</acronym> dazu, für diese Geräte 4&nbsp;KB
+ Blöcke für bessere Geschwindigkeit zu nutzen.</para>
+
+ <para>Erzwingen von 4&nbsp;KB Blöcken ist ebenfalls
+ hilfreich auf Pools bei denen Plattenaufrüstungen geplant
+ sind. Zukünftige Platten werden wahrscheinlich
+ 4&nbsp;KB grosse Sektoren und der Wert von
+ <varname>ashift</varname> lässt sich nach dem Erstellen
+ des Pools nicht mehr ändern.</para>
+
+ <para>In besonderen Fällen ist die kleinere Blockgrösse von
+ 512-Bye vorzuziehen. Weniger Daten werden bei kleinen,
+ zufälligen Leseoperationen übertragen, was besonders bei
+ 512-Byte grossen Platten für Datenbanken oder Plattenplatz
+ für virtuelle Maschinen der Fall ist. Dies kann bessere
+ Geschwindigkeit bringen, ganz besonders wenn eine kleinere
+ <acronym>ZFS</acronym> record size verwendet wird.</para>
+ </listitem>
+
+ <listitem>
+ <para
+ xml:id="zfs-advanced-tuning-prefetch_disable"><emphasis><varname>vfs.zfs.prefetch_disable</varname></emphasis>
+ - Prefetch deaktivieren. Ein Wert von <literal>0</literal>
+ bedeutet aktiviert und <literal>1</literal> heisst
+ deaktiviert. Die Voreinstellung ist <literal>0</literal>,
+ ausser, das System besitzt weniger als
+ 4&nbsp;GB <acronym>RAM</acronym>. Prefetch funktioniert
+ durch das Lesen von grösseren Blöcken in den <link
+ linkend="zfs-term-arc"><acronym>ARC</acronym></link> als
+ angefordert wurden, in der Hoffnung, dass diese Daten
+ ebenfalls bald benötigt werden. Wenn die I/O-Last viele
+ grosse Mengen von zufälligen Leseoperationen beinhaltet,
+ ist das Deaktivieren von prefetch eine
+ Geschwindigkeitssteigerung durch die Reduzierung von
+ unnötigen Leseoperationen. Dieser Wert kann zu jeder Zeit
+ über &man.sysctl.8; angepasst werden.</para>
+ </listitem>
+
+ <listitem>
+ <para
+ xml:id="zfs-advanced-tuning-vdev-trim_on_init"><emphasis><varname>vfs.zfs.vdev.trim_on_init</varname></emphasis>
+ - Steuert, ob neue Geräte, die dem Pool hinzugefügt
+ werden, das <literal>TRIM</literal>-Kommando ausführen
+ sollen. Das beinhaltet die beste Geschwindigkeit und
+ Langlebigkeit für <acronym>SSD</acronym>s, benötigt jedoch
+ zusätzliche Zeit. Wenn das Gerät bereits sicher gelöscht
+ wurde, kann durch deaktivieren dieser Option das
+ Hinzufügen neuer Geräte schneller geschehen. Über
+ &man.sysctl.8; lässt sich dieser Wert jederzeit
+ einstellen.</para>
+ </listitem>
+
+ <listitem>
+ <para
+ xml:id="zfs-advanced-tuning-write_to_degraded"><emphasis><varname>vfs.zfs.write_to_degraded</varname></emphasis>
+ - Steuert, ob neue Daten auf ein vdev geschrieben werden,
+ welches sich im Zustand <link
+ linkend="zfs-term-degraded">DEGRADED</link> befindet.
+ Standardmässig ist dieser Wert <literal>0</literal>, was
+ Schreibvorgänge zu jeglichem darüberliegenden vdev
+ verhindert, das sich in diesem Zustand befindet. Der
+ Administrator kann durch das Erlauben von Schreibvorgängen
+ auf diese Art von vdevs verhindern, dass die Menge an
+ freiem Speicherplatz über die vdevs nicht mehr
+ ausbalanciert ist, was die Lese- und
+ Schreibgeschwindigkeit verringert. Anpassen lässt sich
+ dieser Wert über &man.sysctl.8;.</para>
+ </listitem>
+
+ <listitem>
+ <para
+ xml:id="zfs-advanced-tuning-vdev-max_pending"><emphasis><varname>vfs.zfs.vdev.max_pending</varname></emphasis>
+ - Begrenzt die Menge von ausstehenden I/O-Anfragen pro
+ Gerät. Ein grösserer Wert wird die Gerätewarteschlange
+ für Befehle gefüllt lassen und möglicherweise besseren
+ Durchsatz erzeugen. Ein niedrigerer Wert reduziert die
+ Latenz. Jederzeit kann dieser Wert über &man.sysctl.8;
+ angepasst werden.</para>
+ </listitem>
+
+ <listitem>
+ <para
+ xml:id="zfs-advanced-tuning-top_maxinflight"><emphasis><varname>vfs.zfs.top_maxinflight</varname></emphasis>
+ - Maximale Anzahl von ausstehenden I/Os pro
+ darüberliegendem <link
+ linkend="zfs-term-vdev">vdev</link>. Begrenzt die Tiefe
+ Kommandowarteschlange, um hohe Latenzen zu vermeiden. Das
+ Limit ist pro darüberliegendem vdev, was bedeutet, dass
+ das Limit für jeden <link
+ linkend="zfs-term-vdev-mirror">mirror</link>, <link
+ linkend="zfs-term-vdev-raidz">RAID-Z</link>, oder anderes
+ vdev unabhängig gilt. Mit &man.sysctl.8; kann dieser Wert
+ jederzeit angepasst werden.</para>
+ </listitem>
+
+ <listitem>
+ <para
+ xml:id="zfs-advanced-tuning-l2arc_write_max"><emphasis><varname>vfs.zfs.l2arc_write_max</varname></emphasis>
+ - Begrenzt die Menge an Daten, die pro Sekunde in den <link
+ linkend="zfs-term-l2arc"><acronym>L2ARC</acronym></link>
+ geschrieben wird. Durch diese Einstellung lässt sich die
+ Lebensdauer von <acronym>SSD</acronym>s erhöhen, indem die
+ Menge an Daten beschränkt wird, die auf das Gerät
+ geschrieben wird. Dieser Wert ist über &man.sysctl.8; zu
+ einem beliebigen Zeitpunkt änderbar.</para>
+ </listitem>
+
+ <listitem>
+ <para
+ xml:id="zfs-advanced-tuning-l2arc_write_boost"><emphasis><varname>vfs.zfs.l2arc_write_boost</varname></emphasis>
+ - Der Wert dieser Einstellung wird zu <link
+ linkend="zfs-advanced-tuning-l2arc_write_max"><varname>vfs.zfs.l2arc_write_max</varname></link>
+ addiert und erhöht die Schreibgeschwindigkeit auf die
+ <acronym>SSD</acronym> bis der erste Block aus dem <link
+ linkend="zfs-term-l2arc"><acronym>L2ARC</acronym></link>
+ verdrängt wurde. Diese <quote>Turbo Warmup Phase</quote>
+ wurde etwickelt, um den Geschwindigkeitsverlust eines
+ leeren <link
+ linkend="zfs-term-l2arc"><acronym>L2ARC</acronym></link>
+ nach einem Neustart zu reduzieren. Jederzeit kann dieser
+ Wert mit &man.sysctl.8; geändert werden.</para>
+ </listitem>
+
+ <listitem>
+ <para
+ xml:id="zfs-advanced-tuning-scrub_delay"><emphasis><varname>vfs.zfs.scrub_delay</varname></emphasis>
+ - Anzahl von Ticks an Verzögerung zwischen jedem I/O
+ während eines <link
+ linkend="zfs-term-scrub"><command>scrub</command></link>.
+ Um zu gewährleisten, dass ein <command>scrub</command>
+ nicht mit die normalen Vorgänge eines Pools
+ beeinträchtigt. Wenn währenddessen andere
+ <acronym>I/O</acronym>s durchgeführt werden, wird der
+ <command>scrub</command> zwischen jedem Befehl verzögert.
+ Dieser Wert regelt die Gesamtmenge von
+ <acronym>IOPS</acronym> (I/Os Per Second), die von
+ <command>scrub</command> generiert werden. Die
+ Granularität der Einstellung ist bestimmt durch den Wert
+ von <varname>kern.hz</varname>, welcher standardmässig auf
+ auf 1000 Ticks pro Sekunde eingestellt ist. Diese
+ Einstellung kann geändert werden, was in einer
+ unterschiedlich effektiven Limitierung der
+ <acronym>IOPS</acronym> resultiert. Der Standardwert ist
+ <literal>4</literal>, was ein Limit von
+ 1000&nbsp;ticks/sec / 4 =
+ 250&nbsp;<acronym>IOPS</acronym> ergibt. Ein Wert von
+ <replaceable>20</replaceable> würde ein Limit von
+ 1000&nbsp;ticks/sec / 20 =
+ 50&nbsp;<acronym>IOPS</acronym> ergeben. Die
+ <command>scrub</command>-Geschwindigkeit ist nur begrenzt,
+ wenn es kürzlich Aktivität auf dem Pool gab, wie der Wert
+ von <link
+ linkend="zfs-advanced-tuning-scan_idle"><varname>vfs.zfs.scan_idle</varname></link>
+ verrät. Zu einem beliebigen Zeitpunkt kann über
+ &man.sysctl.8; eine Änderung an diesem Wert
+ erfolgen.</para>
+ </listitem>
+
+ <listitem>
+ <para
+ xml:id="zfs-advanced-tuning-resilver_delay"><emphasis><varname>vfs.zfs.resilver_delay</varname></emphasis>
+ - Anzahl an Millisekunden Verzögerung, die zwischen jedem
+ I/O während eines <link
+ linkend="zfs-term-resilver">resilver</link> eingefügt
+ wird. Um zu versichern, dass ein resilver nicht die
+ normalen Vorgänge auf dem Pool stört, wird dieser zwischen
+ jedem Kommando verzögert, wenn andere I/Os auf dem Pool
+ passieren. Dieser Wert steuert das Limit der
+ Gesamt-<acronym>IOPS</acronym> (I/Os Pro Sekunde), die vom
+ resilver erzeugt werden. Die Granularität der Einstellung
+ wird durch den Wert von <varname>kern.hz</varname>
+ bestimmt, welcher standardmässig 1000 Ticks pro Sekunde
+ beträgt. Diese Einstellung lässt sich ändern, was in
+ einem unterschiedlich effizienten
+ <acronym>IOPS</acronym>-Limit resultiert. Die
+ Voreinstellung ist 2, was ein Limit von
+ 1000&nbsp;ticks/sec / 2 =
+ 500&nbsp;<acronym>IOPS</acronym> beträgt. Einen Pool
+ wieder in den Zustand <link
+ linkend="zfs-term-online">Online</link> zu versetzen ist
+ möglicherweise wichtiger wenn eine andere Platte den Pool
+ in den <link
+ linkend="zfs-term-faulted">Fault</link>-Zustand versetzt,
+ was Datenverlust zur Folge hat. Ein Wert von 0 wird der
+ resilver-Operation die gleiche Priorität wie anderen
+ Operationen geben, was den Heilungsprozess beschleunigt.
+ Die Geschwindigkeit des resilver wird nur begrenzt, wenn
+ es kürzlich andere Aktivitäten auf dem Pool gab, wie von
+ <link
+ linkend="zfs-advanced-tuning-scan_idle"><varname>vfs.zfs.scan_idle</varname></link>
+ festgestellt wird. Dieser Wert kann zu jeder Zeit über.
+ &man.sysctl.8; eingestellt werden.</para>
+ </listitem>
+
+ <listitem>
+ <para
+ xml:id="zfs-advanced-tuning-scan_idle"><emphasis><varname>vfs.zfs.scan_idle</varname></emphasis>
+ - Anzahl an Millisekunden seit der letzten Operation bevor
+ der Pool als im Leerlauf befindlich deklariert wird. Wenn
+ sich der Pool im Leerlauf befindet, wird die Begrenzung
+ für <link
+ linkend="zfs-term-scrub"><command>scrub</command></link>
+ und
+ <link linkend="zfs-term-resilver">resilver</link>
+ deaktiviert. Dieser Wert kann mittels &man.sysctl.8;
+ jederzeit angepasst werden.</para>
+ </listitem>
+
+ <listitem>
+ <para
+ xml:id="zfs-advanced-tuning-txg-timeout"><emphasis><varname>vfs.zfs.txg.timeout</varname></emphasis>
+ - Maximale Anzahl von Sekunden zwischen
+ <link linkend="zfs-term-txg">Transaktionsgruppen</link>
+ (transaction group). Die momentane Transaktionsgruppe
+ wird auf den Pool geschrieben und eine frische
+ Transaktionsgruppe begonnen, wenn diese Menge an Zeit seit
+ der vorherigen Transaktionsgruppe abgelaufen ist. Eine
+ Transaktionsgruppe kann verfrüht ausgelöst werden, wenn
+ genug Daten geschrieben werden. Der Standardwert beträgt
+ 5 Sekunden. Ein grösserer Wert kann die
+ Lesegeschwindigkeit durch verzögern von asynchronen
+ Schreibvorgängen verbessern, allerdings kann dies
+ ungleiche Geschwindigkeiten hervorrufen, wenn eine
+ Transaktionsgruppe geschrieben wird. Dieser Wert kann zu
+ einem beliebigen Zeitpunkt mit &man.sysctl.8; geändert
+ werden.</para>
+ </listitem>
+ </itemizedlist>
+ </sect2>
+
+<!-- These sections will be added in the future
+ <sect2 xml:id="zfs-advanced-booting">
+ <title>Booting Root on <acronym>ZFS</acronym> </title>
+
+ <para></para>
+ </sect2>
+
+ <sect2 xml:id="zfs-advanced-beadm">
+ <title><acronym>ZFS</acronym> Boot Environments</title>
+
+ <para></para>
+ </sect2>
+
+ <sect2 xml:id="zfs-advanced-troubleshoot">
+ <title>Troubleshooting</title>
+
+ <para></para>
+ </sect2>
+-->
+
+ <sect2 xml:id="zfs-advanced-i386">
+ <title><acronym>ZFS</acronym> auf i386</title>
+
+ <para>Manche der Eigenschaften, die von <acronym>ZFS</acronym>
+ bereitgestellt werden, sind speicherintensiv und benötigen
+ Anpassungen für die maximale Effizienz auf Systemen mit
+ begrenztem <acronym>RAM</acronym>.</para>
+
+ <sect3>
+ <title>Hauptspeicher</title>
+
+ <para>Als absolutes Minimum sollte der gesamte verfügbare
+ Hauptspeicher mindestens ein Gigabyte betragen. Die
+ vorgeschlagene Menge an <acronym>RAM</acronym> ist bedingt
+ durch die Poolgrösse und welche Eigenschaften von
+ <acronym>ZFS</acronym> verwendet werden. Eine Faustregel
+ besagt, dass 1&nbsp;GB RAM für jedes 1&nbsp;TB Storage
+ vorgesehen werden sollte. Wenn Deduplizierung zum Einsatz
+ kommt, besagt die Regel, dass 5&nbsp;GB RAM pro TB an
+ Speicher, der dedupliziert werden soll, bereitgestellt sein
+ muss. Obwohl manche Anwender <acronym>ZFS</acronym> mit
+ weniger <acronym>RAM</acronym> einsetzen, stürzen Systeme
+ häufiger wegen unzureichendem Hauptspeicher ab. Weitere
+ Anpassungen sind unter Umständen nötig für Systeme mit
+ weniger als die vorgeschlagene Menge an RAM.</para>
+ </sect3>
+
+ <sect3>
+ <title>Kernel-Konfiguration</title>
+
+ <para>Wegen des begrenzten Addressraumes der &i386;-Plattform
+ müssen <acronym>ZFS</acronym>-Anwendern auf der
+ &i386;-Architekture diese Option der
+ Kernelkonfigurationsdatei hinzufügen, den Kernel erneut
+ bauen und das System neu starten:</para>
+
+ <programlisting>options KVA_PAGES=512</programlisting>
+
+ <para>Dies erweitert den Addressraum des Kernels, was es
+ erlaubt, die Einstellung <varname>vm.kvm_size</varname>
+ hinter die momentan vorgegebene Grenze von 1&nbsp;GB
+ oder das Limit von 2&nbsp;GB für
+ <acronym>PAE</acronym> zu bringen. Um den passenden Wert
+ für diese Option zu finden, teilen Sie den gewünschten
+ Addressraum in Megabyte durch vier. In diesem Beispiel
+ beträgt sie <literal>512</literal> für 2&nbsp;GB.</para>
+ </sect3>
+
+ <sect3>
+ <title>Loader-Anpassungen</title>
+
+ <para>Der <filename>kmem</filename>-Addressraum kann auf allen
+ &os;-Architekturen erhöht werden. Auf einem Testsystem mit
+ 1&nbsp;GB physischen Speichers wurden mit diesen Optionen in
+ <filename>/boot/loader.conf</filename> und einem
+ anschliessenden Systemneustart Erfolge erzielt:</para>
+
+ <programlisting>vm.kmem_size="330M"
+vm.kmem_size_max="330M"
+vfs.zfs.arc_max="40M"
+vfs.zfs.vdev.cache.size="5M"</programlisting>
+
+ <para>Für eine detailliertere Liste an Empfehlungen für
+ <acronym>ZFS</acronym>-bezogene Einstellungen, lesen Sie <link
+ xlink:href="http://wiki.freebsd.org/ZFSTuningGuide"></link>.</para>
+ </sect3>
+ </sect2>
+ </sect1>
+
+ <sect1 xml:id="zfs-links">
+ <title>Zusätzliche Informationen</title>
+
+ <itemizedlist>
+ <listitem>
+ <para><link xlink:href="https://wiki.freebsd.org/ZFS">FreeBSD
+ Wiki - <acronym>ZFS</acronym></link></para>
+ </listitem>
+
+ <listitem>
+ <para><link
+ xlink:href="https://wiki.freebsd.org/ZFSTuningGuide">FreeBSD
+ Wiki - <acronym>ZFS</acronym> Tuning</link></para>
+ </listitem>
+
+ <listitem>
+ <para><link
+ xlink:href="http://wiki.illumos.org/display/illumos/ZFS">Illumos
+ Wiki - <acronym>ZFS</acronym></link></para>
+ </listitem>
+
+ <listitem>
+ <para><link
+ xlink:href="http://docs.oracle.com/cd/E19253-01/819-5461/index.html">Oracle
+ Solaris <acronym>ZFS</acronym> Administration
+ Guide</link></para>
+ </listitem>
+
+ <listitem>
+ <para><link
+ xlink:href="http://www.solarisinternals.com/wiki/index.php/ZFS_Evil_Tuning_Guide"><acronym>ZFS</acronym>
+ Evil Tuning Guide</link></para>
+ </listitem>
+
+ <listitem>
+ <para><link
+ xlink:href="http://www.solarisinternals.com/wiki/index.php/ZFS_Best_Practices_Guide"><acronym>ZFS</acronym>
+ Best Practices Guide</link></para>
+ </listitem>
+
+ <listitem>
+ <para><link
+ xlink:href="https://calomel.org/zfs_raid_speed_capacity.html">Calomel
+ Blog - <acronym>ZFS</acronym> Raidz Performance, Capacity
+ und Integrity</link></para>
+ </listitem>
+ </itemizedlist>
+ </sect1>
+
+ <sect1 xml:id="zfs-term">
+ <title><acronym>ZFS</acronym>-Eigenschaften und
+ Terminologie</title>
+
+ <para><acronym>ZFS</acronym> ist ein fundamental anderes
+ Dateisystem aufgrund der Tatsache, dass es mehr als ein
+ Dateisystem ist. <acronym>ZFS</acronym> kombiniert die Rolle
+ eines Dateisystems mit dem Volumemanager, was es ermöglicht,
+ zusätzliche Speichermedien zu einem laufenden System
+ hinzuzufügen und diesen neuen Speicher sofort auf allen auf dem
+ Pool existierenden Dateisystemen zur Verfügung zu haben. Durch
+ die Kombination von traditionell getrennten Rollen ist
+ <acronym>ZFS</acronym> in der Lage, Einschränkungen, die zuvor
+ <acronym>RAID</acronym>-Gruppen daran gehindert hatten, zu
+ wachsen. Jedes Gerät auf höchster Ebene in einem Pool wird ein
+ <emphasis>vdev</emphasis> genannt, was eine einfache Platte oder
+ eine <acronym>RAID</acronym>-Transformation wie ein Spiegel oder
+ <acronym>RAID-Z</acronym>-Verbund sein kann.
+ <acronym>ZFS</acronym>-Dateisysteme
+ (<emphasis>datasets</emphasis> genannt), haben jeweils Zugriff
+ auf den gesamten freien Speicherplatz des gesamten Pools. Wenn
+ Blöcke aus diesem Pool allokiert werden, verringert sich auch
+ der freie Speicherplatz für jedes Dateisystem. Dieser Ansatz
+ verhindert die allgegenwärtige Falle von umfangreichen
+ Partitionen, bei denen freier Speicherplatz über alle
+ Partitionen hinweg fragmentiert wird.</para>
+
+ <informaltable pgwide="1">
+ <tgroup cols="2">
+ <tbody valign="top">
+ <row>
+ <entry xml:id="zfs-term-zpool">zpool</entry>
+
+ <entry>Ein Speicher-<emphasis>Pool</emphasis> ist der
+ grundlegendste Baustein von <acronym>ZFS</acronym>. Ein
+ Pool besteht aus einem oder mehreren vdevs, was die
+ zugrundeliegenden Geräte repräsentiert, welche die Daten
+ speichern. Ein Pool wird dann verwendet, um ein oder
+ mehrere Dateisysteme (Datasets) oder Blockgeräte
+ (Volumes) zu erstellen. Diese Datasets und Volumes
+ teilen sich den im Pool verfügbaren freien
+ Speicherplatz. Jeder Pool wird eindeutig identifiziert
+ durch einen Namen und eine <acronym>GUID</acronym>. Die
+ verfügbaren Eigenschaften werden durch die
+ <acronym>ZFS</acronym>-Versionsnummer des Pool
+ bestimmt.
+
+ <note>
+ <para>&os;&nbsp;9.0 und 9.1 enthalten Unterstützung
+ für <acronym>ZFS</acronym> Version 28. Spätere
+ Versionen setzen <acronym>ZFS</acronym> Version 5000
+ mit Feature Flags ein. Das neue Feature Flag System
+ erlaubt eine grössere Kompatibilität mit anderen
+ Implemtierungen von <acronym>ZFS</acronym>.</para>
+ </note>
+ </entry>
+ </row>
+
+ <row>
+ <entry xml:id="zfs-term-vdev">vdev&nbsp;Arten</entry>
+
+ <entry>Ein Pool besteht aus einem oder mehreren vdevs, die
+ selbst eine einfache Platte oder im Fall von
+ <acronym>RAID</acronym> eine Gruppe von Platten
+ darstellt. Wenn mehrere vdevs eingesetzt werden,
+ verteilt <acronym>ZFS</acronym> die Daten über die
+ vdevs, um die Geschwindigkeit zu steigern und den
+ verfügbaren Platz zu maximieren.
+
+ <itemizedlist>
+ <listitem>
+ <para
+ xml:id="zfs-term-vdev-disk"><emphasis>Festplatte</emphasis>
+ - Der einfachste Typ von vdev ist ein
+ Standard-Blockgerät. Dies kann die komplette
+ Platte (wie
+ <filename><replaceable>/dev/ada0</replaceable></filename>
+ oder
+ <filename><replaceable>/dev/da0</replaceable></filename>)
+ oder auch eine Partition
+ (<filename><replaceable>/dev/ada0p3</replaceable></filename>)
+ sein.
+ Auf &os; gibt es keine Geschwindigkeitseinbussen
+ bei der Verwendung einer Partition anstatt einer
+ kompletten Platte. Dies unterscheidet sich von
+ den Empfehlungen, welche in der Solaris
+ Dokumentation gegeben werden.</para>
+ </listitem>
+
+ <listitem>
+ <para
+ xml:id="zfs-term-vdev-file"><emphasis>File</emphasis>
+ - Zusätzlich zu Festplatten können
+ <acronym>ZFS</acronym>-Pools aus regulären Dateien
+ aufgebaut sein, was bespnders hilfreich ist, um zu
+ testen und zu experimentieren. Verwenden Sie den
+ kompletten Pfad zu der Datei als Gerätepfad im
+ Befehl zpool create. Alle vdevs müssen mindestens
+ 128&nbsp;MB gross sein.</para>
+ </listitem>
+
+ <listitem>
+ <para
+ xml:id="zfs-term-vdev-mirror"><emphasis>Mirror</emphasis>
+ - Wenn ein Spiegel erstellt wird, verwenden Sie
+ das Schlüsselwort <literal>mirror</literal>,
+ gefolgt von der Liste an Mitgliedsgeräten für den
+ Spiegel. Ein Spiegel besteht aus zwei oder mehr
+ Geräten und sämtliche Daten werden auf alle
+ Geräte, die Mitglied des Spiegels sind,
+ geschrieben. Ein Spiegel-vdev wird nur soviele
+ Daten speichern, wie das kleinste Gerät im Verbund aufnehmen
+ kann. Ein Spiegel-vdev kann den Verlust von allen
+ Mitgliedsgeräten bis auf eines verkraften, ohne
+ irgendwelche Daten zu verlieren.</para>
+
+ <note>
+ <para>Ein reguläre einzelne vdev-Platte kann
+ jederzeit zu einem Spiegel-vdev über das
+ Kommando <command>zpool <link
+ linkend="zfs-zpool-attach">attach</link></command>
+ aktualisiert werden.</para>
+ </note>
+ </listitem>
+
+ <listitem>
+ <para
+ xml:id="zfs-term-vdev-raidz"><emphasis><acronym>RAID-Z</acronym></emphasis>
+ - <acronym>ZFS</acronym> implementiert
+ <acronym>RAID-Z</acronym>, eine Varianten des
+ <acronym>RAID-5</acronym>-Standards, der bessere
+ Verteilung der Parität bietet und das
+ <quote><acronym>RAID-5</acronym> write
+ hole</quote> eliminiert, bei dem die Daten und
+ Parität nach einem unerwarteten Neustart
+ inkonsistent werden können.
+ <acronym>ZFS</acronym> unterstützt drei Stufen von
+ <acronym>RAID-Z</acronym>, die unterschiedliche
+ Arten von Redundanz im Austausch gegen niedrigere
+ Stufen von verwendbarem Speicher.
+ Diese Typen werden <acronym>RAID-Z1</acronym>
+ bis <acronym>RAID-Z3</acronym> genannt, basierend
+ auf der Anzahl der Paritätsgeräte im Verbund und
+ der Anzahl an Platten, die ausfallen können,
+ während der Pool immer noch normal
+ funktioniert.</para>
+
+ <para>In einer
+ <acronym>RAID-Z1</acronym>-Konfiguration mit
+ vier Platten, bei der jede 1&nbsp;TB besitzt,
+ beträgt der verwendbare Plattenplatz 3&nbsp;TB und
+ der Pool wird immer noch im Modus degraded
+ weiterlaufen, wenn eine Platte davon ausfällt.
+ Wenn eine zusätzliche Platte ausfällt, bevor die
+ defekte Platte ersetzt wird, können alle Daten im
+ Pool verloren gehen.</para>
+
+ <para>Eine Konfiguration von acht Platten zu je
+ 1&nbsp;TB als <acronym>RAID-Z3</acronym> wird
+ 5&nbsp;TB verwendbaren Speicher bieten und in der
+ Lage sein, weiterhin zu funktionieren, wenn drei
+ Platten ausgefallen sind. &sun; empfiehlt nicht
+ mehr als neun Platten in einem einzelnen vdev.
+ Wenn die Konfiguration mehr Platten aufweist, wird
+ empfohlen, diese in getrennten vdevs aufzuteilen,
+ so dass die Daten des Pools zwischen diesen
+ aufgeteilt werden.</para>
+
+ <para>Eine Konfiguration von zwei
+ <acronym>RAID-Z2</acronym>-vdevs, bestehend aus
+ jeweils 8 Platten würde etwa einem
+ <acronym>RAID-60</acronym>-Verbund entsprechen.
+ Der Speicherplatz einer
+ <acronym>RAID-Z</acronym>-Gruppe ist ungefähr die
+ Grösse der kleinsten Platte multipliziert mit der
+ Anzahl von nicht-Paritätsplatten. Vier 1&nbsp;TB
+ Platten in einem <acronym>RAID-Z1</acronym>
+ besitzt eine effektive Grösse von ungefähr
+ 3&nbsp;TB und ein Verbund von acht
+ 1&nbsp;TB-Platten als <acronym>RAID-Z3</acronym>
+ enthält 5&nbsp;TB verfügbarer Plattenplatz.</para>
+ </listitem>
+
+ <listitem>
+ <para
+ xml:id="zfs-term-vdev-spare"><emphasis>Spare</emphasis>
+ - <acronym>ZFS</acronym> besitzt einen speziellen
+ Pseudo-vdev Typ, um einen Überblick über die
+ verfügbaren hot spares zu behalten. Beachten Sie,
+ dass hot spares nicht automatisch eingesetzt
+ werden. Diese müssen manuell konfiguriert werden,
+ um ein ausgefallenes Gerät über <command>zfs
+ replace</command> zu ersetzen.</para>
+ </listitem>
+
+ <listitem>
+ <para
+ xml:id="zfs-term-vdev-log"><emphasis>Log</emphasis>
+ - <acronym>ZFS</acronym> Log-Geräte, auch
+ bezeichnet als ein <acronym>ZFS</acronym> Intent
+ Log (<link
+ linkend="zfs-term-zil"><acronym>ZIL</acronym></link>)
+ verschieben das Intent Log von den regulären
+ Geräten im Pool auf ein dediziertes Gerät,
+ typischerweise eine <acronym>SSD</acronym>. Ein
+ dediziertes Log-Gerät zu besitzen kann die
+ Geschwindigkeit von Anwendungen mit einer grossen
+ Anzahl von synchronen Schreibvorgängen, besonders
+ Datenbanken, signifikant steigern. Log-Geräte
+ können gespiegelt werden, jedoch wird
+ <acronym>RAID-Z</acronym> nicht unterstützt.
+ Werden mehrere Log-Geräte verwendet, so werden
+ Schreibvorgänge gleichmässig unter diesen
+ aufgeteilt.</para>
+ </listitem>
+
+ <listitem>
+ <para
+ xml:id="zfs-term-vdev-cache"><emphasis>Cache</emphasis>
+ - Ein Cache-vdev einem Pool hinzuzufügen, erhöht
+ den Speicher des <link
+ linkend="zfs-term-l2arc"><acronym>L2ARC</acronym></link>
+ Caches. Cache-Geräte lassen sich nicht spiegeln.
+ Da ein Cache-Gerät nur zusätzliche Kopien von
+ existierenden Daten speichert, gibt es kein
+ Risiko, Daten zu verlieren.</para>
+ </listitem>
+ </itemizedlist></entry>
+ </row>
+
+ <row>
+ <entry xml:id="zfs-term-txg">Transaktionsgruppe
+ (Transaction Group, <acronym>TXG</acronym>)</entry>
+
+ <entry>Transaktionsgruppen sind die Art und Weise, wie
+ geänderte Blöcke zusammen gruppiert und letztendlich auf
+ den Pool geschrieben werden. Transaktionsgruppen sind
+ die atomare Einheit, welche <acronym>ZFS</acronym>
+ verwendet, um Konsistenz zu gewährleisten. Jeder
+ Transaktionsgruppe wird eine einzigartige, fortlaufende
+ 64-Bit Identifikationsnummer zugewiesen. Es kann bis zu
+ drei aktive Transaktionsgruppen gleichzeitig geben,
+ wobei sich jede davon in einem der folgenden drei
+ Zustände befinden kann:
+
+ <itemizedlist>
+ <listitem>
+ <para><emphasis>Open (Offen)</emphasis> - Wenn eine neue
+ Transaktionsgruppe erstellt wird, befindet diese
+ sich im Zustand offen und akzeptiert neue
+ Schreibvorgänge. Es ist immer eine
+ Transaktionsgruppe in diesem Zustand, jedoch kann
+ die Transaktionsgruppe neue Schreibvorgänge
+ ablehnen, wenn diese ein Limit erreicht hat.
+ Sobald eine offene Transaktionsgruppe an das Limit
+ stösst oder das <link
+ linkend="zfs-advanced-tuning-txg-timeout"><varname>vfs.zfs.txg.timeout</varname></link>
+ wurde erreicht, geht die Transaktionsgruppe in den
+ nächsten Zustand über.</para>
+ </listitem>
+
+ <listitem>
+ <para><emphasis>Quiescing (Stilllegen)</emphasis> -
+ Ein kurzer Zustand, der es noch ausstehenden
+ Operationen erlaubt, zum Abschluss zu kommen,
+ währenddessen das Erstellen einer neuen
+ Transaktionsgruppe jedoch nicht blockiert wird.
+ Sobald alle Transaktionen in der Gruppe
+ abgeschlossen sind, geht die Transaktionsgruppen
+ in den letzten Zustand über.</para>
+ </listitem>
+
+ <listitem>
+ <para><emphasis>Syncing (Sychronisieren)</emphasis>
+ - Alle Daten in der Transaktionsgruppe werden auf
+ das Speichermedium geschrieben. Dieser Prozess
+ wird wiederum andere Daten wie Metadaten und space
+ maps verändern, die ebenfalls auf das
+ Speichermedium geschrieben werden müssen. Der
+ Prozess des Synchronisierens beinhaltet mehrere
+ Durchläufe. Der erste Prozess, welches der
+ grösste, gefolgt von den Metadaten, ist,
+ beinhaltet alle geänderten Datenblöcke und kann
+ mehrere Durchläufe benötigen, um zum Ende zu
+ gelangen. Da das Allokieren von Speicher für die
+ Datenblöcke neue Metadaten generiert, kann der
+ Synchronisationsprozess nicht beendet werden, bis
+ ein Durchlauf fertig ist, der keinen zusätzlichen
+ Speicher allokiert. Der Synchronisierungszustand
+ ist der Zustand, in dem auch
+ <emphasis>synctasks</emphasis> abgeschlosse
+ werden. Synctasks sind administrative
+ Operationen, wie das Erstellen oder zerstören von
+ Schnappschüssen und Datasets, welche den Überblock
+ verändern, wenn sie abgeschlossen sind. Sobald
+ der Synchronisationszustand abgeschlossen ist,
+ geht die Transaktionsgruppe aus dem
+ Stilllegungszustand über in den
+ Synchronisationszustand.</para>
+ </listitem>
+ </itemizedlist>
+
+ Alle administrativen Funktionen, wie <link
+ linkend="zfs-term-snapshot"><command>Schnappschüsse</command></link>
+ werden als Teil einer Transaktionsgruppe geschrieben.
+ Wenn ein synctask erstellt ist, wird dieser der momentan
+ geöffneten Transaktionsgruppe hinzugefügt und diese
+ Gruppe wird so schnell wie möglich in den
+ Synchronisationszustand versetzt, um die Latenz von
+ administrativen Befehlen zu reduzieren.</entry>
+ </row>
+
+ <row>
+ <entry xml:id="zfs-term-arc">Adaptive Replacement
+ Cache (<acronym>ARC</acronym>)</entry>
+
+ <entry><acronym>ZFS</acronym> verwendet einen Adaptive
+ Replacement Cache (<acronym>ARC</acronym>), anstatt
+ eines traditionellen Least Recently Used
+ (<acronym>LRU</acronym>) Caches. Ein
+ <acronym>LRU</acronym>-Cache ist eine einfache Liste von
+ Elementen im Cache, sortiert nach der letzten Verwendung
+ jedes Elements in der Liste. Neue Elemente werden an
+ den Anfang der Liste eingefügt. Wenn der Cache voll
+ ist, werden Elemente vom Ende der Liste verdrängt, um
+ Platz für aktivere Objekte zu schaffen. Ein
+ <acronym>ARC</acronym> besteht aus vier Listen:
+ derjenigen der Most Recently Used
+ (<acronym>MRU</acronym>) und Most Frequently Used
+ (<acronym>MFU</acronym>) Objekte, plus einer sogenannten
+ ghost list für jede von beiden. Diese Ghost Lists
+ verfolgen die kürzlich verdrängten Objekte, um zu
+ verhindern, dass diese erneut in den Cache aufgenommen
+ werden. Dies erhöht die Trefferrate (hit ratio) des
+ Caches, indem verhindert wird, dass Elemente, die in der
+ Vergangenheit nur ab und zu benutzt wurden, wieder im
+ Cache landen. Ein weiterer Vorteil der Verwendung
+ sowohl einer <acronym>MRU</acronym> und einer
+ <acronym>MFU</acronym> ist, dass das Scannen eines
+ gesamten Dateisystems normalerweise alle Daten aus einem
+ <acronym>MRU</acronym>- oder
+ <acronym>LRU</acronym>-Cache verdrängt, um dem gerade
+ frisch zugegriffenem Inhalt den Vorzug zu geben. Mit
+ <acronym>ZFS</acronym> gibt es also eine
+ <acronym>MFU</acronym>, die nur die am häufigsten
+ verwendeten Elemente beinhaltet und der Cache von am
+ meisten zugegriffenen Blöcken bleibt erhalten.</entry>
+ </row>
+
+ <row>
+ <entry
+ xml:id="zfs-term-l2arc"><acronym>L2ARC</acronym></entry>
+
+ <entry><acronym>L2ARC</acronym> ist die zweite Stufe des
+ Caching-Systems von <acronym>ZFS</acronym>. Der
+ Haupt-<acronym>ARC</acronym> wird im
+ <acronym>RAM</acronym> abgelegt. Da die Menge an
+ verfügbarem <acronym>RAM</acronym> meist begrenzt ist,
+ kann <acronym>ZFS</acronym> auch <link
+ linkend="zfs-term-vdev-cache">cache vdevs</link>
+ verwenden. Solid State Disks (<acronym>SSD</acronym>s)
+ werden oft als diese Cache-Geräte eingesetzt, aufgrund
+ ihrer höheren Geschwindigkeit und niedrigeren Latenz im
+ Vergleich zu traditionellen drehenden Speichermedien wie
+ Festplatten. Der Einsatz des <acronym>L2ARC</acronym>
+ ist optional, jedoch wird durch die Verwendung eine
+ signifikante Geschwindigkeitssteigerung bei
+ Lesevorgängen bei Dateien erzielt, welche auf der
+ <acronym>SSD</acronym> zwischengespeichert sind, anstatt
+ von der regulären Platte gelesen werden zu müssen.
+ <acronym>L2ARC</acronym> kann ebenfalls die <link
+ linkend="zfs-term-deduplication">Deduplizierung</link>
+ beschleunigen, da eine <acronym>DDT</acronym>, welche
+ nicht in den <acronym>RAM</acronym> passt, jedoch in den
+ <acronym>L2ARC</acronym> wesentlich schneller sein wird
+ als eine <acronym>DDT</acronym>, die von der Platte
+ gelesen werden muss. Die Häufigkeit, in der Daten zum
+ Cache-Gerät hinzugefügt werden, ist begrenzt, um zu
+ verhindern, dass eine <acronym>SSD</acronym> frühzeitig
+ durch zu viele Schreibvorgänge aufgebraucht ist. Bis
+ der Cache voll ist (also der erste Block verdrängt
+ wurde, um Platz zu schaffen), wird das Schreiben auf den
+ <acronym>L2ARC</acronym> begrenzt auf die Summe der
+ Schreibbegrenzung und das Bootlimit, sowie hinterher auf
+ das Schreiblimit. Ein paar &man.sysctl.8;-Werte steuert
+ diese Limits. <link
+ linkend="zfs-advanced-tuning-l2arc_write_max"><varname>vfs.zfs.l2arc_write_max</varname></link>
+ steuert, wie viele Bytes in den Cache pro Sekunde
+ geschrieben werden, während <link
+ linkend="zfs-advanced-tuning-l2arc_write_boost"><varname>vfs.zfs.l2arc_write_boost</varname></link>
+ zu diesem Limit während der <quote>Turbo Warmup
+ Phase</quote> hinzuaddiert wird (Write Boost).</entry>
+ </row>
+
+ <row>
+ <entry
+ xml:id="zfs-term-zil"><acronym>ZIL</acronym></entry>
+
+ <entry><acronym>ZIL</acronym> beschleunigt synchrone
+ Transaktionen durch die Verwendung von Speichermedien
+ wie <acronym>SSD</acronym>s, welche schneller sind als
+ diejenigen, welche Teil des Speicherpools sind. Wenn
+ eine Anwendung einen synchronen Schreibvorgang anfordert
+ (eine Garantie, dass die Daten sicher auf den Platten
+ gespeichert wurden anstatt nur zwischengespeichert zu
+ sein, um später geschrieben zu werden), werden die Daten
+ auf den schnelleren <acronym>ZIL</acronym>-Speicher
+ geschrieben und dann später auf die regulären
+ Festplatten. Dies reduziert die Latenz sehr und
+ verbessert die Geschwindigkeit. Nur synchrone Vorgänge
+ wie die von Datenbanken werden durch den Einsatz eines
+ <acronym>ZIL</acronym> profitieren. Reguläre,
+ asynchrone Schreibvorgänge wie das Kopieren von Dateien
+ wird den <acronym>ZIL</acronym> überhaupt nicht
+ verwenden.</entry>
+ </row>
+
+ <row>
+ <entry xml:id="zfs-term-cow">Copy-On-Write</entry>
+
+ <entry>Im Gegensatz zu traditionellen Dateisystemen werden
+ beim Überschreiben von Daten bei <acronym>ZFS</acronym>
+ die neuen Daten an einen anderen Block geschrieben,
+ anstatt die alten Daten an der gleichen Stelle zu
+ überschreiben. Nur wenn dieser Schreibvorgang beendet
+ wurde, werden die Metadaten aktualisiert, um auf die
+ neue Position zu verweisen. Im Falle eines kurzen
+ Schreibvorgangs (ein Systemabsturz oder Spannungsverlust
+ während eine Datei geschrieben wird) sind die gesamten
+ Inhalte der Originaldatei noch vorhanden und der
+ unvollständige Schreibvorgang wird verworfen. Das
+ bedeutet auch, dass <acronym>ZFS</acronym> nach einem
+ unvorhergesehenen Ausfall keinen &man.fsck.8;
+ benötigt.</entry>
+ </row>
+
+ <row>
+ <entry xml:id="zfs-term-dataset">Dataset</entry>
+
+ <entry><emphasis>Dataset</emphasis> ist der generische
+ Begriff für ein <acronym>ZFS</acronym>-Dateisystem,
+ Volume, Schnappschüsse oder Klone. Jedes Dataset
+ besitzt einen eindeutigen Namen in der Form
+ <replaceable>poolname/path@snapshot</replaceable> Die
+ Wurzel des Pools ist technisch gesehen auch ein Dataset.
+ Kind-Datasets werden hierarchisch wie Verzeichnisse
+ benannt. Beispielsweise ist
+ <replaceable>mypool/home</replaceable> das
+ Heimatdataset, ein Kind von
+ <replaceable>mypool</replaceable> und erbt die
+ Eigenschaften von diesem. Dies kann sogar noch
+ erweitert werden durch das Erstellen von
+ <replaceable>mypool/home/user</replaceable>. Dieses
+ Enkelkind-Dataset wird alle Eigenschaften von den Eltern
+ und Grosseltern erben. Eigenschaften auf einem Kind
+ können die geerbten Standardwerte der Eltern und
+ Grosseltern ändern und überschreiben. Die Verwaltung
+ von Datasets und dessen Kindern lässt sich
+ <link linkend="zfs-zfs-allow">delegieren</link>.</entry>
+ </row>
+
+ <row>
+ <entry xml:id="zfs-term-filesystem">Dateisystem</entry>
+
+ <entry>Ein <acronym>ZFS</acronym>-Dataset wird meistens
+ als ein Dateisystem verwendet. Wie jedes andere
+ Dateisystem kann auch ein
+ <acronym>ZFS</acronym>-Dateisystem irgendwo in der
+ Verzeichnishierarchie eingehängt werden und enthält
+ seine eigenen Dateien und Verzeichnisse mit
+ Berechtigungen, Flags und anderen Metadaten.</entry>
+ </row>
+
+ <row>
+ <entry xml:id="zfs-term-volume">Volume</entry>
+
+ <entry>Zusätzlich zu regulären Dateisystem-Datasets, kann
+ <acronym>ZFS</acronym> auch Volumes erstellen, die
+ Blockgeräte sind. Volumes besitzen viele der gleichen
+ Eigenschaften, inklusive copy-on-write, Schnappschüsse,
+ Klone und Prüfsummen. Volumes sind nützlich, um andere
+ Dateisystemformate auf <acronym>ZFS</acronym>
+ aufzusetzen, so wie <acronym>UFS</acronym>
+ Virtualisierung, oder das Exportieren von
+ <acronym>iSCSI</acronym>-Abschnitten.</entry>
+ </row>
+
+ <row>
+ <entry xml:id="zfs-term-snapshot">Snapshot
+ (Schnappschuss)</entry>
+
+ <entry>Das <link
+ linkend="zfs-term-cow">copy-on-write</link>
+ (<acronym>COW</acronym>)-Entwicklung von
+ <acronym>ZFS</acronym> erlaubt das Erstellen von beinahe
+ sofortigen, konsistenten Schnappschüssen mit beliebigen
+ Namen. Nachdem ein Schnappschuss von einem Dataset
+ angelegt oder ein rekursiver Schnappschuss eines
+ Elterndatasets, welcher alle Kinddatasets enthält,
+ erstellt wurde, werden neue Daten auf neue Blöcke
+ geschrieben, jedoch die alten Blöcke nicht wieder als
+ freier Speicher zurückgewonnen. Der Schnappschuss
+ enthält die Originalversion des Dateisystems und das
+ aktive Dateisystem besitzt alle Änderungen, die seit dem
+ Schnappschuss erstellt wurden. Kein zusätzlicher Platz
+ wird benötigt. Werden neue Daten auf das aktive
+ Dateisystem geschrieben, werden neue Blöcke allokiert,
+ um diese Daten zu speichern. Die scheinbare Grösse des
+ Schnappschusses wird wachsen, da die Blöcke nicht mehr
+ länger im aktiven Dateisystem, sondern nur noch im
+ Schnappschuss Verwendung finden. Diese Schnappschüsse
+ können nur lesend eingehängt werden, um vorherige
+ Versionen von Dateien wiederherzustellen. Ein <link
+ linkend="zfs-zfs-snapshot">rollback</link> eines
+ aktiven Dateisystems auf einen bestimmten Schnappschuss
+ ist ebenfalls möglich, was alle Änderungen, die seit dem
+ Anlegen des Schnappschusses vorgenommen wurden, wieder
+ Rückgängig macht. Jeder Block im Pool besitzt einen
+ Referenzzähler, der verfolgt, wieviele Schnappschüsse,
+ Klone, Datasets oder Volumes diesen Block nutzen. Wenn
+ Dateien und Schnappschüsse gelöscht werden, verringert
+ dies auch den Referenzzähler. Wenn ein Block nicht mehr
+ länger referenziert wird, kann er als freier Speicher
+ wieder genutzt werden. Schnappschüsse können auch mit
+ <link linkend="zfs-zfs-snapshot">hold</link> markiert
+ werden. Wenn versucht wird, einen solchen Schnappschuss
+ zu zerstören, wird stattdessen ein
+ <literal>EBUSY</literal>-Fehler ausgegeben. Jeder
+ Schnappschuss kann mehrere holds besitzen, jeder mit
+ einem eindeutigen Namen. Das Kommando <link
+ linkend="zfs-zfs-snapshot">release</link> entfernt
+ diese, damit der Schnappschuss gelöscht werden kann.
+ Schnappschüsse lassen sich auf Volumes ebenfalls
+ anlegen, allerdings können diese nur geklont oder
+ zurückgerollt werden, nicht jedoch unabhängig
+ eingehängt.</entry>
+ </row>
+
+ <row>
+ <entry xml:id="zfs-term-clone">Clone (Klone)</entry>
+
+ <entry>Schnappschüsse können auch geklont werden. Ein
+ Klon stellt eine veränderbare Version eines
+ Schnappschusses dar, was es ermöglicht, das Dateisystem
+ als neues Dataset aufzuspalten. Genau wie bei einem
+ Schnappschuss verbraucht ein Klon keinen zusätzlichen
+ Platz. Wenn neue Daten auf einen Klon geschrieben und
+ neue Blöcke allokiert werden, wächst auch die Grösse des
+ Klons. Wenn Blöcke im geklonten Dateisystem oder Volume
+ überschrieben werden, verringert sich auch der
+ Referenzzähler im vorherigen Block. Der Schnappschuss,
+ auf dem der Klon basiert kann nicht gelöscht werden,
+ weil der Klon darauf eine Abhängigkeit besitzt. Der
+ Schnappschuss stellt den Elternteil dar und der Klon das
+ Kind. Klone lassen sich <emphasis>promoted</emphasis>
+ (befördern), was die Abhängigkeit auflöst und den Klon
+ zum Elternteil macht und den vorherigen Elternteil das
+ Kind. Diese Operation benötigt keinen zusätzlichen
+ Plattenplatz. Da die Menge an verwendetem Speicher vom
+ Elternteil und dem Kind vertauscht wird, betrifft dies
+ eventuell vorhandene Quotas und Reservierungen.</entry>
+ </row>
+
+ <row>
+ <entry xml:id="zfs-term-checksum">Checksum (Prüfsumme)</entry>
+
+ <entry>Jeder Block, der allokiert wird erhält auch eine
+ Prüfsumme. Der verwendete Prüfsummenalgorithmus ist
+ eine Eigenschaft jedes Datasets, siehe dazu <link
+ linkend="zfs-zfs-set"><command>set</command></link>.
+ Die Prüfsumme jedes Blocks wird transparent validiert
+ wenn er gelesen wird, was es <acronym>ZFS</acronym>
+ ermöglicht, stille Verfälschung zu entdecken. Wenn die
+ gelesenen Daten nicht mit der erwarteten Prüfsumme
+ übereinstimmen, wird <acronym>ZFS</acronym> versuchen,
+ die Daten aus jeglicher verfügbarer Redundanz (wie
+ Spiegel oder <acronym>RAID-Z</acronym>) zu
+ rekonstruieren. Eine Überprüfung aller Prüfsummen kann
+ durch das Kommando <link
+ linkend="zfs-term-scrub"><command>scrub</command></link>
+ ausgelöst werden.
+ Prüfsummenalgorithmen sind:
+
+ <itemizedlist>
+ <listitem>
+ <para><literal>fletcher2</literal></para>
+ </listitem>
+
+ <listitem>
+ <para><literal>fletcher4</literal></para>
+ </listitem>
+
+ <listitem>
+ <para><literal>sha256</literal></para>
+ </listitem>
+ </itemizedlist>
+
+ Die <literal>fletcher</literal>-Algorithmen sind
+ schneller, aber dafür ist <literal>sha256</literal> ein
+ starker kryptographischer Hash und besitzt eine viel
+ niedrigere Chance auf Kollisionen zu stossen mit dem
+ Nachteil geringerer Geschwindigkeit. Prüfsummen können
+ deaktiviert werden, dies wird aber nicht
+ empfohlen.</entry>
+ </row>
+
+ <row>
+ <entry xml:id="zfs-term-compression">Compression</entry>
+
+ <entry>Jedes Dataset besitzt eine compression-Eigenschaft,
+ die standardmässig ausgeschaltet ist. Diese Eigenschaft
+ kann auf eine Reihe von Kompressionsalgorithmen
+ eingestellt werden. Dadurch werden alle neuen Daten,
+ die auf das Dataset geschrieben werden, komprimiert.
+ Neben einer Reduzierung von verbrauchtem Speicher wird
+ oft der Lese- und Schreibdurchsatz erhöht, weil weniger
+ Blöcke gelesen oder geschrieben werden müssen.
+
+ <itemizedlist>
+ <listitem xml:id="zfs-term-compression-lz4">
+ <para><emphasis><acronym>LZ4</acronym></emphasis> -
+ Wurde in der <acronym>ZFS</acronym> Poolversion
+ 5000 (feature flags) hiinzugefügt und
+ <acronym>LZ4</acronym> ist jetzt der empfohlene
+ Kompressionsalgorithmus. <acronym>LZ4</acronym>
+ komprimiert ungefähr 50% schneller als
+ <acronym>LZJB</acronym>, wenn er auf
+ komprimierbaren Daten angewendet wird und ist über
+ dreimal schneller, wenn unkomprimierbare Daten
+ vorliegen. <acronym>LZ4</acronym> entkomprimiert
+ auch ungefähr 80% schneller als
+ <acronym>LZJB</acronym>. Auf modernen
+ <acronym>CPU</acronym>s, kann
+ <acronym>LZ4</acronym> oft über 500&nbsp;MB/s
+ komprimieren und entkomprimiert (pro einzelnem
+ CPU-Kern) bei über 1.5&nbsp;GB/s.</para>
+
+ <note>
+ <para><acronym>LZ4</acronym>-Komprimierung ist nur
+ verfügbar nach &os;&nbsp;9.2.</para>
+ </note>
+ </listitem>
+
+ <listitem xml:id="zfs-term-compression-lzjb">
+ <para><emphasis><acronym>LZJB</acronym></emphasis> -
+ Der Standardkompressionsalgorithmus wurde von
+ Jeff Bonwick, einem der ursprünglichen Entwickler
+ von <acronym>ZFS</acronym>, entworfen.
+ <acronym>LZJB</acronym> bietet gute Komprimierung
+ mit weniger <acronym>CPU</acronym>-Überhang im
+ Vergleich zu <acronym>GZIP</acronym>. In der
+ Zukunft wird der Standardkompressionsalgorithmus
+ wahrscheinlich auf <acronym>LZ4</acronym>
+ gewechselt.</para>
+ </listitem>
+
+ <listitem xml:id="zfs-term-compression-gzip">
+ <para><emphasis><acronym>GZIP</acronym></emphasis> -
+ Ein populärer Stromkompressionsalgorithmus ist
+ auch in <acronym>ZFS</acronym> verfügbar. Einer
+ der Hauptvorteile von der Verwendung von
+ <acronym>GZIP</acronym> ist seine konfigurierbare
+ Komprimierungsstufe. Wenn die Eigenschaft
+ <literal>compress</literal> gesetzt wird, kann der
+ Administrator die Stufe der Komprimierung wählen,
+ die von <literal>gzip1</literal>, der kleinsten
+ Komprimierungsstufe, bis zu
+ <literal>gzip9</literal>, der höchsten
+ Komprimierungsstufe, reicht. Dies erlaubt es dem
+ Administrator zu steuern, wieviel
+ <acronym>CPU</acronym>-Zeit für eingesparten
+ Plattenplatz eingetauscht werde soll.</para>
+ </listitem>
+
+ <listitem xml:id="zfs-term-compression-zle">
+ <para><emphasis><acronym>ZLE</acronym></emphasis> -
+ Zero Length Encoding ist ein besonderer
+ Kompressionsalgorithmus, welcher nur fortlaufende
+ Aneinanderreihungen von Nullen komprimiert.
+ Dieser Komprimierungsalgorithmus ist nur sinnvoll,
+ wenn das Dataset viele grosse Blöcke von Nullen
+ aufweist.</para>
+ </listitem>
+ </itemizedlist></entry>
+ </row>
+
+ <row>
+ <entry
+ xml:id="zfs-term-copies">Copies</entry>
+
+ <entry>Wenn die Eigenschaft <literal>copies</literal> auf
+ einen Wert grösser als 1 gesetzt wird, weist das
+ <acronym>ZFS</acronym> an, mehrere Kopien eines Blocks
+ im <link linkend="zfs-term-filesystem">Dateisystem</link>
+ oder
+ <link linkend="zfs-term-volume">Volume</link> anzulegen.
+ Diese Eigenschaft auf einem wichtigen Dataset
+ einzustellen sorgt für zusätzliche Redundanz, aus der
+ ein Block wiederhergestellt werden kann, der nicht mehr
+ mit seiner Prüfsumme übereinstimmt. In Pools ohne
+ Redundanz ist die copies-Eigenschaft die einzige Form
+ von Redundanz. Die Eigenschaft kann einen einzelnen
+ schlechten Sektor oder andere Formen von kleineren
+ Verfälschungen wiederherstellen, schützt jedoch nicht
+ den Pool vom Verlust einer gesamten Platte.</entry>
+ </row>
+
+ <row>
+ <entry
+ xml:id="zfs-term-deduplication">Deduplizierung</entry>
+
+ <entry>Prüfsummen ermöglichen es, Duplikate von Blöcken zu
+ erkennen, wenn diese geschrieben werden. Mit
+ Deduplizierung erhöht sich der Referenzzähler eines
+ existierenden, identischen Blocks, was Speicherplatz
+ einspart. Um Blockduplikate zu erkennen, wird im
+ Speicher eine Deduplizierungstabelle
+ (<acronym>DDT</acronym>) geführt. Die Tabelle enthält
+ eine Liste von eindeutigen Prüfsummen, die Position
+ dieser Blöcke und einen Referenzzähler. Werden neue
+ Daten geschrieben, wird die Prüfsumme berechnet und mit
+ der Liste verglichen. Wird eine Übereinstimmung
+ gefunden, wird der existierende Block verwendet. Der
+ <acronym>SHA256</acronym>-Prüfsummenalgorithmus wird mit
+ Deduplizierung benutzt, um einen sicheren
+ kryptographischen Hash zu bieten. Deduplizierung lässt
+ sich konfigurieren. Wenn <literal>dedup</literal> auf
+ <literal>on</literal> steht, wird angenommen, dass eine
+ übereinstimmende Prüfsumme bedeutet, dass die Daten
+ identisch sind. Steht <literal>dedup</literal> auf
+ <literal>verify</literal>, werden die Daten in den
+ beiden Blöcken Byte für Byte geprüft, um
+ sicherzustellen, dass diese wirklich identisch sind.
+ Wenn die Daten nicht identisch sind, wird die Kollision
+ im Hash vermerkt und die beiden Blöcke separat
+ gespeichert. Da die <acronym>DDT</acronym> den Hash
+ jedes einzigartigen Blocks speichern muss, benötigt sie
+ eine grosse Menge an Speicher. Eine generelle
+ Faustregel besagt, dass 5-6&nbsp;GB RAM pro 1&nbsp;TB
+ deduplizierter Daten benötigt werden. In Situationen,
+ in denen es nicht praktikabel ist, genug
+ <acronym>RAM</acronym> vorzuhalten, um die gesamte
+ <acronym>DDT</acronym> im Speicher zu belassen, wird die
+ Geschwindigkeit stark darunter leiden, da die
+ <acronym>DDT</acronym> von der Platte gelesen werden
+ muss, bevor jeder neue Block geschrieben wird.
+ Deduplizierung kann den <acronym>L2ARC</acronym> nutzen,
+ um die <acronym>DDT</acronym> zu speichern, was einen
+ guten Mittelweg zwischen schnellem Systemspeicher und
+ langsameren Platten darstellt. Bedenken Sie, dass durch
+ die Verwendung von Komprimierung meistens genauso grosse
+ Platzersparnis möglich ist, ohne den zusätzlichen
+ Hauptspeicherplatzbedarf.</entry>
+ </row>
+
+ <row>
+ <entry xml:id="zfs-term-scrub">Scrub (Bereinigung)</entry>
+
+ <entry>Anstat einer Konsistenzprüfung wie &man.fsck.8;
+ verwendet <acronym>ZFS</acronym>
+ <command>scrub</command>. <command>scrub</command>
+ liest alle Datenblöcke, die auf dem Pool gespeichert
+ sind und prüft deren Prüfsumme gegen die als richtig
+ in den Metadaten gespeicherte Prüfsumme. Eine
+ periodische Prüfung aller im Pool gespeicherten Daten
+ versichert, dass verfälschte Blöcke rekonstruiert werden
+ können, bevor dies nötig ist. Ein Scrub wird nicht nach
+ einem unsauberen Herunterfahren benötigt, wird jedoch
+ einmal alle drei Monate angeraten. Die Prüfsumme von
+ jedem Block wird verifiziert, wenn Blöcke während des
+ normalen Betriebs gelesen werden, jedoch stellt ein
+ Scrub sicher, dass sogar weniger häufig verwendete
+ Blöcke auf stille Verfälschungen hin untersucht werden.
+ Datenintegrität wird dadurch erhöht, besonders wenn es
+ sich um Archivspeichersituationen handelt. Die relative
+ Priorität des <command>scrub</command> lässt sich mit
+ <link
+ linkend="zfs-advanced-tuning-scrub_delay"><varname>vfs.zfs.scrub_delay</varname></link>
+ anpassen, um zu verhindern, dass der scrub die
+ Geschwindigkeit von anderen Anfragen auf dem Pool
+ beeinträchtigt.</entry>
+ </row>
+
+ <row>
+ <entry xml:id="zfs-term-quota">Dataset Quotas</entry>
+
+ <entry><acronym>ZFS</acronym> bietet sehr schnelle und
+ akkurate Dataset-, Benutzer- und
+ Gruppenspeicherplatzbuchhaltung, zusätzlich zu Quotas
+ und Speicherplatzreservierungen. Dies gibt dem
+ Administrator feingranulare Kontrolle darüber, wie
+ Speicherplatz allokiert und die Reservierung für
+ kritische Dateisysteme vorgenommen wird
+
+ <para><acronym>ZFS</acronym> unterstützt verschiedene
+ Arten von Quotas: die Dataset-Quota, die <link
+ linkend="zfs-term-refquota">Referenzquota
+ (<acronym>refquota</acronym>)</link>, die <link
+ linkend="zfs-term-userquota">Benutzerquota</link> und
+ die <link
+ linkend="zfs-term-groupquota">Gruppenquota</link>
+ sind verfügbar.</para>
+
+ <para>Quotas beschränken die Menge an Speicherplatz,
+ welche ein Dataset, seine Kinder, einschliesslich
+ Schnappschüsse des Datasets, deren Kinder und die
+ Schnappschüsse von diesen Datasets, verbrauchen
+ können.</para>
+
+ <note>
+ <para>Quotas können nicht auf Volumes gesetzt werden,
+ da die Eigenschaft <literal>volsize</literal> als
+ eine implizite Quota agiert.</para>
+ </note></entry>
+ </row>
+
+ <row>
+ <entry xml:id="zfs-term-refquota">Referenzquota</entry>
+
+ <entry>Eine Referenzquota beschränkt die Menge an
+ Speicherplatz, die ein Dataset verbrauchen kann durch
+ das Erzwingen einer harten Grenze. Jedoch beinhaltet
+ diese harte Grenze nur Speicherplatz, die das Dataset
+ referenziert und beinhaltet nicht den Speicher, der von
+ Kindern, wie Dateisystemen oder Schnappschüssen,
+ verbraucht wird.</entry>
+ </row>
+
+ <row>
+ <entry xml:id="zfs-term-userquota">Benutzerquota</entry>
+
+ <entry>Benutzerquotas sind hilfreich, um die Menge an
+ Speicherplatz, die ein bestimmter Benutzer verbrauchen
+ kann, einzuschränken.</entry>
+ </row>
+
+ <row>
+ <entry xml:id="zfs-term-groupquota">Gruppenquota</entry>
+
+ <entry>Die Gruppenquota beschränkt die Menge an
+ Speicherplatz, die eine bestimmte Gruppe verbrauchen
+ darf.</entry>
+ </row>
+
+ <row>
+ <entry
+ xml:id="zfs-term-reservation">Dataset-Reservierung</entry>
+
+ <entry>Die Eigenschaft <literal>reservation</literal>
+ ermöglicht es, ein Minimum an Speicherplatz für ein
+ bestimmtes Dataset und dessen Kinder zu garantieren.
+ Wenn eine Reservierung von 10&nbsp;GB auf
+ <filename>storage/home/bob</filename> gesetzt ist und
+ ein anderes Dataset versucht, allen freien Speicherplatz
+ zu verwenden, bleiben zumindest noch 10&nbsp;GB an
+ Speicher reserviert. Wenn von
+ <filename>storage/home/bob</filename> ein Schnappschuss
+ angelegt wird, wird dieser von der Reservierung
+ abgezogen und zählt damit dagegen.
+ Die Eigenschaft <link
+ linkend="zfs-term-refreservation"><literal>refreservation</literal></link>
+ funktioniert auf ähnliche Weise, jedoch
+ <emphasis>exkludiert</emphasis> diese Kinder wie
+ Schnappschüsse.
+
+ <para>Reservierungen jeder Art sind in vielen
+ Situationen nützlich, so wie bei der Planung un dem
+ Testen der richtigen Speicherplatzallokation in einem
+ neuen System oder durch die Zusicherung, dass genug
+ Speicherplatz auf Dateisystemen für Audio-Logs oder
+ Systemwiederherstellungsprozeduren und Dateien
+ verfügbar ist.</para>
+ </entry>
+ </row>
+
+ <row>
+ <entry
+ xml:id="zfs-term-refreservation">Referenzreservierung</entry>
+
+ <entry>Die Eigenschaft <literal>refreservation</literal>
+ ermöglicht es, ein Minimum an Speicherplatz für die
+ Verwendung eines bestimmten Datasets zu garantieren,
+ <emphasis>exklusiv</emphasis> dessen Kinder. Das
+ bedeutet, dass wenn eine 10&nbsp;GB-Reservierung auf
+ <filename>storage/home/bob</filename> vorhanden ist und
+ ein anderes Dataset versucht, alle freien Speicherplatz
+ aufzubrauchen, sind zumindest noch
+ 10&nbsp;GB Speicher reserviert. Im Gegensatz zu einer
+ regulären <link
+ linkend="zfs-term-reservation">Reservierung</link> wird
+ der Speicher von Schnappschüssen und Kinddataset nicht
+ gegen die Reservierung gezählt. Beispielsweise, wenn
+ ein Schnappschuss von
+ <filename>storage/home/bob</filename> angelegt wird,
+ muss genug Plattenplatz ausserhalb der Menge an
+ <literal>refreservation</literal> vorhanden sein, damit
+ die Operation erfolgreich durchgeführt wird. Kinder des
+ Hauptdatasets werden nicht in die Menge an
+ <literal>refreservation</literal> gezählt und dringen
+ auf diese Weise auch nicht in den gesetzten Speicher
+ ein.</entry>
+ </row>
+
+ <row>
+ <entry xml:id="zfs-term-resilver">Resilver</entry>
+
+ <entry>Wenn eine Platte ausfällt und ersetzt wird, muss
+ die neue Platte mit den Daten gefüllt werden, die
+ verloren gegangen sind. Der Prozess der Verwendung der
+ Paritätsinformationen, welche über die übrigen Platten
+ verteilt sind, um die fehlenden Daten zu berechnen und
+ auf die neue Platte zu übertragen, wird
+ <emphasis>resilvering</emphasis> genannt.</entry>
+ </row>
+
+ <row>
+ <entry xml:id="zfs-term-online">Online</entry>
+
+ <entry>Ein Pool oder vdev im Zustand
+ <literal>Online</literal> besitzt alle verbundenen
+ Mitgliedsgeräte und ist voll funktionsfähig.
+ Individuelle Geräte im Zustand
+ <literal>Online</literal> funktionieren normal.</entry>
+ </row>
+
+ <row>
+ <entry xml:id="zfs-term-offline">Offline</entry>
+
+ <entry>Individuelle Geräte lassen sich vom Administrator
+ in den Zustand <literal>Offline</literal> versetzen,
+ wenn es ausreichend Redundanz gibt, um zu verhindern,
+ dass der Pool oder das vdev in den Zustand
+ <link linkend="zfs-term-faulted">Faulted</link> versetzt
+ wird. Ein Administrator kann eine Platte vor einem
+ Austausch offline nehmen oder um es leichter zu machen,
+ diese zu identifizieren.</entry>
+ </row>
+
+ <row>
+ <entry xml:id="zfs-term-degraded">Degraded</entry>
+
+ <entry>Ein Pool oder vdev im Zustand
+ <literal>Degraded</literal> hat eine oder mehrere
+ Platten, welche getrennt wurden oder ausgefallen sind.
+ Der Pool kann immer noch verwendet werden, doch wenn
+ noch weitere Geräte ausfallen, kann der Pool nicht
+ wiederhergestellt werden. Die fehlenden Geräte
+ anzuschliessen oder die defekten Platten zu ersetzen
+ wird den Pool wieder in den Zustand
+ <link linkend="zfs-term-online">Online</link> versetzen,
+ nachdem die angeschlossenen oder neuen Geräte den
+ <link
+ linkend="zfs-term-resilver">Resilver</link>-Prozess
+ abgeschlossen haben.</entry>
+ </row>
+
+ <row>
+ <entry xml:id="zfs-term-faulted">Faulted</entry>
+
+ <entry>Ein Pool oder vdev im Zustand
+ <literal>Faulted</literal> funktioniert nicht länger.
+ Die Daten darauf sind nicht mehr länger verfügbar. Ein
+ Pool oder vdev geht in den Zustand
+ <literal>Faulted</literal> über, wenn die Anzahl der
+ fehlenden oder defekten Geräte die Redundanzstufe im
+ vdev überschreiten. Wenn fehlende Geräte angeschlossen
+ werden, geht der Pool wieder in den Zustand <link
+ linkend="zfs-term-online">Online</link>. Wenn es nicht
+ genügend Redundanz gibt, um die Anzahl an defekten
+ Platten zu kompensieren, sind die Inhalte des Pools
+ verloren und müssen von der Sicherung wiederhergestellt
+ werden.</entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </informaltable>
+ </sect1>
+</chapter>