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