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