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

     $FreeBSD$
     basiert auf: r51567
-->

<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 gro�en 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 gro�e 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��ert 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 Kenntnis 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>'s
      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��ten Vorteile von <acronym>ZFS</acronym>'s
      Kenntnis 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�nnen, was viele Vorteile bringt, wenn man
      unterschiedliche Dateisysteme und Datasets anlegt, anstatt ein
      einziges, monolithisches 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 gro�e 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
	anschlie�end 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 andere Dateisystem verwendet werden.  Jedoch sind
	jede Menge andere 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 und anschlie�end den Pool zu
	zerst�ren, wenn 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
	  ben�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
	anschlie�ende 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��ig
	Schnappsch�sse von Benutzerdaten anzufertigen.  Allerdings
	verbrauchen Schnappsch�sse �ber lange Zeit eine gro�e Menge
	an Speicherplatz.  Der zuvor angelegte Schnappschuss kann
	durch folgendes Kommando 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 <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 Zustand (<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 Zustand <link linkend="zfs-term-offline">Offline</link>,
	dann wird der Poolzustand �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��ere 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 Unterkommando <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>-Werkzeug 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��ern, 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 eine
	Ersatzfestplatte mit der gleichen Gr��e als die
	Originalplatte eine kleinere Kapazit�t aufweist, passt die
	kleinere Partition immer noch und die Ersatzplatte kann 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, partitioniert sind,
	replizieren Sie das Layout der ersten Platte auf die Zweite.
	Verwenden Sie dazu <command>gpart backup</command> und
	<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 empfehlenswert,
	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>Fehler beseitigen</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 mit
	<command>zpool clear
	  <replaceable>mypool</replaceable></command> zur�ckgesetzt
	werden.  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 funktionierendes Ger�t ersetzen</title>

      <para>Es gibt eine Reihe von Situationen, in denen es n�tig
	ist, eine 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��ern, um den
	neuen Platz zu nutzen.  Lesen Sie dazu <link
	  linkend="zfs-zpool-online">Einen Pool vergr��ern</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
	dies zu kompensieren, geht der Pool in den Zustand <link
	linkend="zfs-term-faulted">faulted</link> �ber.  Wenn keine
	ausreichende Anzahl von Ger�ten wieder an den Pool
	angeschlossen wird, 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��ig 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 gro�er 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 anschlie�end 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 Fehlermeldung vom
	Poolstatus durch die Eingabe von
	<command>zpool clear</command>
	<link linkend="zfs-zpool-clear">bereinigt</link> werden.</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 einem 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��e 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��eres 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��e
	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, die momentan
	nicht durch ein anderes System verwendet werden, lassen sich
	mit <command>zpool import -a</command> importieren.</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 Pool 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, einschlie�lich 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��ig 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
	Aktualisierungen vergehen 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>nicht</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
	anzuschlie�en.  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 Gro�- 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 gro�en 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 den &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 fungieren.  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 anderen
	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 �ber <command>zfs inherit</command>
	wieder auf ihren Ausgangswert zur�ckgesetzt werden.</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>

      <sect3 xml:id="zfs-zfs-set-share">
	<title>Festlegen und Abfragen von
	  Eigenschaften f�r Freigaben</title>

	<para>Zwei h�ufig verwendete und n�tzliche
	  Dataset-Eigenschaften sind die Freigabeoptionen von
	  <acronym>NFS</acronym> und <acronym>SMB</acronym>.  Diese
	  Optionen legen fest, ob und wie
	  <acronym>ZFS</acronym>-Datasets im Netzwerk freigegeben
	  werden.  Derzeit unterst�tzt &os; nur Freigaben von Datasets
	  �ber <acronym>NFS</acronym>.  Um den Status einer Freigabe
	  zu erhalten, geben Sie folgendes ein:</para>

	<screen>&prompt.root; <userinput>zfs get sharenfs <replaceable>mypool/usr/home</replaceable></userinput>
NAME              PROPERTY   VALUE   SOURCE
mypool/usr/home   sharenfs   on      local
&prompt.root; <userinput>zfs get sharesmb <replaceable>mypool/usr/home</replaceable></userinput>
NAME              PROPERTY   VALUE   SOURCE
mypool/usr/home   sharesmb   off     local</screen>

	<para>Um ein Dataset freizugeben, geben Sie ein:</para>

	<screen>&prompt.root; <userinput>zfs set sharenfs=on <replaceable>mypool/usr/home</replaceable></userinput></screen>

	<para>Es ist auch m�glich, weitere Optionen f�r die
	  Verwendung von Datasets �ber <acronym>NFS</acronym>
	  zu definieren, wie etwa <option>-alldirs</option>,
	  <option>-maproot</option> und <option>-network</option>.
	  Um zus�tzliche Optionen auf ein durch
	  <acronym>NFS</acronym> freigegebenes Dataset festzulegen,
	  geben Sie ein:</para>

	<screen>&prompt.root; <userinput>zfs set sharenfs="-alldirs,maproot=<replaceable>root</replaceable>,-network=<replaceable>192.168.1.0/24</replaceable>" <replaceable>mypool/usr/home</replaceable></userinput></screen>
      </sect3>
    </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�nftige 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 Software
	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, au�erdem 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 gro�e 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
	  entstanden 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 anschlie�end ein zweiter Schnappschuss
	  angelegt wird:</para>

	<screen>&prompt.root; <userinput>cp <replaceable>/etc/passwd</replaceable> <replaceable>/var/tmp</replaceable></userinput>
&prompt.root; <userinput>zfs snapshot <replaceable>mypool/var/tmp</replaceable>@<replaceable>after_cp</replaceable></userinput>
&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��e 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
	  sendenden 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 wird 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 besa�, 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 ein Schnappschuss aufgrund eines
	  unvorsichtigen <command>rm</command>-Befehls zur�ckgerollt,
	  der mehr 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.root; <userinput>ls /var/tmp</userinput>
passwd          passwd.copy     vi.recover
&prompt.root; <userinput>rm /var/tmp/passwd*</userinput>
&prompt.root; <userinput>ls /var/tmp</userinput>
vi.recover
&prompt.root;</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��ig 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.root; <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 nur 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.root; <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��ig 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.root; <userinput>ls -a /var/tmp</userinput>
.               ..              passwd          vi.recover
&prompt.root; <userinput>zfs set snapdir=visible <replaceable>mypool/var/tmp</replaceable></userinput>
&prompt.root; <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.root; <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
	anschlie�end 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��ige 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��ig 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��e 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, einschlie�lich der
	  Komprimierungseinstellungen, Quotas und Einh�ngepunkte.
	  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��ig Sicherungen auf
	  dem zweiten Pool angelegt werden.</para>
      </sect3>

      <sect3 xml:id="zfs-send-ssh">
	<title>Sicherungen verschl�sselt �ber
	  <application>SSH</application> senden</title>

	<para>Datenstr�me �ber das Netzwerk zu schicken ist eine gute
	  Methode, um Sicherungen au�erhalb 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
	  Standardausgabe 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="https://wiki.freebsd.org/PEFS">PEFS</link>
	  nach.</para>

	<para>Ein paar Einstellungen und 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��ig 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; <userinput>zfs allow -u someuser send,snapshot <replaceable>mypool</replaceable></userinput></screen>
	  </listitem>

	  <listitem>
	    <para>Um den Pool einzuh�ngen, muss der unprivilegierte
	      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; <userinput>sysctl vfs.usermount=1</userinput>
vfs.usermount: 0 -> 1
&prompt.root; <userinput>sysrc -f /boot/sysctl.conf vfs.usermount=1</userinput>
&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; <userinput>chown <replaceable>someuser</replaceable> <replaceable>/recvpool/backup</replaceable></userinput></screen>
	  </listitem>
	</itemizedlist>

	<para>Der unprivilegierte 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, einschlie�lich 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 ein 10&nbsp;GB gro�es 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 ein 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 das 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 ein 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 Quotas 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 ein 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 das Quota f�r
	<filename>storage/home/bob</filename> anzeigen lassen:</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 gro�en Geschwindigkeitseinbu�en der
	anderen Algorithmen.  Der gr��te 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 ebenso unerwartet mit Sicherungen
	interagieren.  Quotas werden oft verwendet, 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 gro�e 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>for d in dir1 dir2 dir3; do</userinput>
> <userinput>mkdir $d &amp;&amp; cp -R /usr/ports $d &amp;</userinput>
> <userinput>done</userinput></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
	wenn 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��tenteils 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��ig 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�ngepunkte aufweisen k�nnte, welche die Sicherheit des
	Systems gef�hrden.</para>
    </sect2>
  </sect1>

  <sect1 xml:id="zfs-zfs-allow">
    <title>Delegierbare Administration</title>

    <para>Ein umfassendes System zur Berechtigungs�bertragung erlaubt
	unprivilegierten 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�ngepunktes 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��e 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 laufen
	    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 Voreinstellung ist ein Viertel von
	    <varname>vfs.zfs.arc_max</varname>.  Diesen Wert zu
	    erh�hen steigert die Geschwindigkeit, wenn die Arbeitslast
	    Operationen auf einer gro�en 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��e 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��e 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��e),
	    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��e von 512
	    Bytes.  Um <emphasis>write amplification</emphasis> zu
	    vermeiden und die bestm�gliche Geschwindigkeit zu
	    erhalten, setzen Sie diesen Wert auf die gr��te
	    Sektorgr��e, die bei einem Ger�t im Pool vorhanden
	    ist.</para>

	  <para>Viele Ger�te besitzen 4&nbsp;KB gro�e 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��e
	    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 gro�e 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��e von
	    512-Byte vorzuziehen.  Weniger Daten werden bei kleinen,
	    zuf�lligen Leseoperationen �bertragen, was besonders bei
	    512-Byte gro�en 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> hei�t
	    deaktiviert.  Die Voreinstellung ist <literal>0</literal>,
	    au�er, 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
	    gro�e 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-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��erer 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 entwickelt, 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��ig 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��ig 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��erer 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��e 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;-Architektur 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
	  anschlie�enden 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="https://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="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-pool">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 Speicherplatz.
	      Jeder Pool wird eindeutig durch einen Namen und eine
	      <acronym>GUID</acronym> identifiziert.  Die verf�gbaren
	      Eigenschaften werden durch die
	      <acronym>ZFS</acronym>-Versionsnummer des Pools
	      bestimmt.
	    </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 Geschwindigkeitseinbu�en
		    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 besonders hilfreich ist, um zu
		    testen und zu experimentieren.  Verwenden Sie den
		    kompletten Pfad zu der Datei als Ger�tepfad im
		    Befehl <command>zpool create</command>.  Alle
		    vdevs m�ssen mindestens 128&nbsp;MB gro�
		    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��e 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��e 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 gro�en
		    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��ig 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��t 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��te, 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> abgeschlossen
		    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 Gro�eltern erben.  Eigenschaften auf einem Kind
	      k�nnen die geerbten Standardwerte der Eltern und
	      Gro�eltern �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��e 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��e 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 sto�en 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��ig 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) hinzugef�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>
		</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 gro�e 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 gro�e 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 gro�e
	      Platzersparnis m�glich ist, ohne den zus�tzlichen
	      Hauptspeicherplatzbedarf.</entry>
	  </row>

	  <row>
	    <entry xml:id="zfs-term-scrub">Scrub (Bereinigung)</entry>

	    <entry>Anstatt 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, einschlie�lich
		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>Ein 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 und 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 au�erhalb 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
	      anzuschlie�en 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>