Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen gezeigt.

Link zu dieser Vergleichsansicht

tux:zfs_install [2012/10/13 21:22]
wikisysop [ZFS Support auf Linux Debian installieren]
tux:zfs_install [2012/10/16 12:44] (aktuell)
wikisysop [Mounting ZFS-Pools beim Systemstart]
Zeile 17: Zeile 17:
 # <fc #​008000>​wget <​nowiki>​http://</​nowiki>​github.com/​downloads/​zfsonlinux/​zfs/​zfs-0.6.0-rc11.tar.gz</​fc></​xterm>​ # <fc #​008000>​wget <​nowiki>​http://</​nowiki>​github.com/​downloads/​zfsonlinux/​zfs/​zfs-0.6.0-rc11.tar.gz</​fc></​xterm>​
  
-Als nächstes müssen die notwendigen Pakete zum kompilieren der ZFS-Quellen installiert werden:+Als nächstes müssen die notwendigen Pakete zum kompilieren der SPL-Quellen installiert werden:
  
 <​xterm>#​ <fc #​008000>​aptitude install build-essential gawk alien fakeroot linux-headers-$(uname -r)</​fc></​xterm>​ <​xterm>#​ <fc #​008000>​aptitude install build-essential gawk alien fakeroot linux-headers-$(uname -r)</​fc></​xterm>​
Zeile 31: Zeile 31:
 ~/​spl-0.6.0-rc11#​ <fc #​008000>​make deb</​fc></​xterm>​ ~/​spl-0.6.0-rc11#​ <fc #​008000>​make deb</​fc></​xterm>​
  
-Dadurch werden die >><​fc #​008000>​SPL</​fc><<​ RPMs erzeugt und mit >><​fc #​008000>​Alien<</​fc><​ in >><​fc #​008000>​deb</​fc><<​-Pakete konvertiert. SPL steht für >><​fc #​008000>​Solaris Posix (Porting) Layer</​fc><<​ und beinhaltet die zur Administration benötigten Utilities, Kernel Module und Development Headers. Durch die Solaris Porting Layer Module werden im Linux Kernel einige Solaris Stammfunktionen integriert. ​+Dadurch werden die >><​fc #​008000>​SPL</​fc><<​ RPMs erzeugt und mit >><​fc #​008000>​Alien</​fc>​<< in >><​fc #​008000>​deb</​fc><<​-Pakete konvertiert. SPL steht für >><​fc #​008000>​Solaris Posix (Porting) Layer</​fc><<​ und beinhaltet die zur Administration benötigten Utilities, Kernel Module und Development Headers. Durch die Solaris Porting Layer Module werden im Linux Kernel einige Solaris Stammfunktionen integriert. ​
  
 <​xterm>​~/​spl-0.6.0-rc11#​ <fc #​008000>​ls -l *.deb</​fc>​ <​xterm>​~/​spl-0.6.0-rc11#​ <fc #​008000>​ls -l *.deb</​fc>​
Zeile 74: Zeile 74:
  >><​fc #​008000>​ZFS</​fc><<​ ist nun auf Ihrem System installiert und einsatzbereit.  >><​fc #​008000>​ZFS</​fc><<​ ist nun auf Ihrem System installiert und einsatzbereit.
  
-**Verwandte Artikel:** +====ZFS Pool einrichten==== 
-[[:tux:zfs_setup|-> ZFS Storage einrichten ​und verwalten ​(Linux Debian)]]+ 
 +Um sich einen Überblick über den Funktionsumfang von >><​fc #​008000>​ZFS</​fc><<​ und deren Möglichkeiten zu machen, sollten Sie einen ersten Blick in die Manpage von von >><​fc #​008000>​ZFS</​fc><<​ werfen (>><​fc #​008000>​man zfs</​fc><<​). IdR kommt ein ZFS-Administrator mit ein paar wenigen Kommandos aus, neben dem schon angesprochenen Kommando >><​fc #​008000>​zfs</​fc><<​ gibt es noch >><​fc #​008000>​zpool</​fc><<​ und >><​fc #​008000>​ztest</​fc><<​. 
 + 
 +Um nun einen ZFS-Pool mit dem Namen >><​fc #​008000>​tank</​fc><<​ aus der ersten der beiden zusätzlichen Platten (>><​fc #​008000>/​dev/​sdb</​fc><<​) hinzuzufügen,​ reicht zB bereits folgendes Kommando: 
 + 
 +<​xterm>#​ <fc #​008000>​zpool create -f tank /​dev/​sdb</​fc></​xterm>​ 
 + 
 +Der Terminus >><​fc #​008000>​tank</​fc><<​ wird in allen Tutorials die ich gelesen und Podcast die ich gehört habe für die Benennung des ZFS-Pools verwendet. Ich möchte mich dem nicht widersetzen aber im Prinzip ist der Name frei wählbar.  
 + 
 +Der ZFS-Pool ist nun bereits schon einsatzfähig,​ ein formatieren oder dergleichen ist nicht notwendig. Sie können sich den Status Ihres ersten ZFS-Pools nun mit folgenden Kommando anschauen:​ 
 + 
 +<​xterm>#​ <fc #​008000>​zpool list</​fc>​ 
 +NAME   ​SIZE ​ ALLOC   ​FREE ​   CAP  DEDUP  HEALTH ​ ALTROOT 
 +tank  1,98G  91,5K  1,98G     ​0% ​ 1.00x  ONLINE ​ -</​xterm>​ 
 + 
 +Das >><​fc #​008000>​zpool create</​fc><<​ Kommando erstellt auch einen Mountpoint im Root-Verzeichnis >><​fc #​008000>/​tank</​fc><<​ und hängt den neuen Pool auch gleich dort ein: 
 + 
 +<​xterm>#​ <fc #​008000>​mount</​fc>​ 
 +/dev/sda1 on / type ext3 (rw,​errors=remount-ro) 
 +tmpfs on /​lib/​init/​rw type tmpfs (rw,​nosuid,​mode=0755) 
 +proc on /proc type proc (rw,​noexec,​nosuid,​nodev) 
 +sysfs on /sys type sysfs (rw,​noexec,​nosuid,​nodev) 
 +udev on /dev type tmpfs (rw,​mode=0755) 
 +tmpfs on /dev/shm type tmpfs (rw,​nosuid,​nodev) 
 +devpts on /dev/pts type devpts (rw,​noexec,​nosuid,​gid=5,​mode=620) 
 +/dev/sda9 on /home type ext3 (rw) 
 +/dev/sda8 on /tmp type ext3 (rw) 
 +/dev/sda5 on /usr type ext3 (rw) 
 +/dev/sda6 on /var type ext3 (rw) 
 +**<fc #​800000>​tank on /tank type zfs (rw,​xattr)</​fc>​**</​xterm>​ 
 + 
 +Der ZFS-Pool >>​tank<<​ ist somit schon bereits einsatzbereit. 
 + 
 +It's just that simple ;-) 
 + 
 +==== Mounting ZFS-Pools beim Systemstart ==== 
 +Nach einem Neustart wird der eben angelegte ZFS-Pool allerdings nicht automatisch ins System eingehängt. An dieser Stelle musste ich mich erst eine zeitlang am Kopf kratzen und dem Problem auf die Schliche kommen. Einen Eintrag in der >><​fc #​008000>/​etc/​fstab</​fc><<​((http://​de.wikipedia.org/​wiki/​Fstab)) sucht man erst einmal vergeblich und ich habe der Versuchung widerstanden einfach einen passenden Eintrag anzulegen. Das ist zwar möglich aber nicht unter normalen Umständen, dazu aber später mehr in diesem Abschnitt. 
 +=== Mount via Init-Skript === 
 +ZFS-Pools werden idR mit dem Kommando >><​fc #​008000>​zfs mount -a</​fc><<​ ins System eingehängt. Die Option >><​fc #​008000>​-a</​fc><<​ behandelt dabei alle verfügbaren ZFS-Pools, man könnte die Auswahl der einzuhängenden ZFS-Pools auch mit der Angabe des Pools einschränken;​ zB >><​fc #​008000>​zfs mount tank</​fc><<​. Das Kommando >><​fc #​008000>​zfs mount -a</​fc><<​ sollte eigentlich durch das init-Skript >><​fc #​008000>/​etc/​init.d/​zfs</​fc><<​ beim Systemstart ausgeführt werden - sollte - wird es aber nicht. Ich habe es nach einem Systemstart dann von Hand ausgeführt,​ um ein eventuelles Problem mit dem init-Skript auszuschließen. Durch das Ausführen wurde der ZFS-Pool auch gemountet, dass Skript scheint demnach in Ordnung. 
 + 
 +Ein schneller Blick in die einzelnen Runlevel (>><​fc #​008000>/​etc/​rc1.d</​fc><<​ und >><​fc #​008000>/​etc/​rc2.d</​fc><<​)((http://​de.wikipedia.org/​wiki/​Runlevel))((http://​www.debian-administration.org/​articles/​212)) offenbarte jedoch, dass dort die einzelnen Sym-Links zum Init-Skript fehlten. Also kurzerhand >><​fc #​008000>​insserv</​fc><<​((http://​www.unix.com/​man-page/​Linux/​8/​insserv/​)) beauftragt, diese anzulegen und siehe da, jetzt wurden die ZFS-Pools auch beim Systemstart gemountet:​ 
 + 
 +<​xterm>#​ <fc #​008000>​insserv zfs</​fc></​xterm>​  
 + 
 +Jetzt ist die Ausführung der Init-Skripte unter Debian aber nicht wirklich zuverlässig,​ was die Reihenfolge der Ausführung angeht und gerade bei einem Dateisystem könnte es uU früher oder später vorkommen, dass ein anderes Init-Skript von diesem Dateisystem abhängig ist. Es ist demnach sinnvoll ZFS als lokales Dateisystem zu behandeln. Debian sieht in den Init-Skripten dafür bestimmte Boot-Facilities((http://​wiki.debian.org/​LSBInitScripts)) vor. Eines der wichtigsten überhaupt ist das Boot-Facility >><​fc #​008000>​$local_fs</​fc><<​. Um ZFS nun der Gruppe von >><​fc #​008000>​$local_fs</​fc><<​ hinzuzufügen,​ legen Sie die Datei >><​fc #​008000>/​etc/​insserv.conf.d/​zfs</​fc><<​ mit folgenden Inahlt an: 
 + 
 +<box green round|/**etc/​insserv.conf-d/​zfs**>​$local_fs zfs</​box>​ 
 + 
 +und führen das Kommando >><​fc #​008000>​insserv</​fc><<​ aus: 
 + 
 +<​xterm>#​ <fc #​008000>​insserv</​fc></​xterm>​ 
 + 
 +<​note>​**Auszug aus der Manpage von insserv:** insserv ​ scans  for  System ​ Facilities ​ in  the  configuration ​ file  /​etc/​insserv.conf ​ and  each  file  in  the  directory /​etc/​insserv.conf.d/​. ​ Each line which begins with $ and a following name defines a system facility accordingly to the  Linux Standard Base Specification (LSB), All names followed by such a system facility will declare the required dependencies of the facility.</​note>​ 
 + 
 +**Note:** Der Name der Datei, wie auch der Zuordnung zu >>​$local_fs<<​ innerhalb der Datei muss dabei dem >><​fc #​008000>​Provides</​fc><<​-Tag des Init-Skripts entsprechen,​ welches ZFS startet: 
 + 
 +<box green round|**/​etc/​init.d/​zfs**>#​!/​bin/​bash 
 +
 +# zfs           This script will mount/​umount the zfs filesystems. 
 +
 +# chkconfig: ​   2345 01 99 
 +# description: ​ This script will mount/​umount the zfs filesystems during 
 +#               ​system boot/​shutdown. ​ Configuration of which filesystems 
 +#               ​should be mounted is handled by the zfs '​mountpoint'​ and 
 +#               '​canmount'​ properties. ​ See the zfs(8) man page for details. 
 +#               It is also responsible for all userspace zfs services. 
 +
 +### BEGIN INIT INFO 
 +# <fc #​800000>​**Provides:​ zfs**</​fc>​ 
 +# Required-Start: $local_fs 
 +# Required-Stop:​ $local_fs 
 +# Default-Start: ​    2 3 4 5 
 +# Default-Stop: ​     0 1 6 
 +# Should-Stop:​ 
 +# Short-Description:​ Mount/​umount the zfs filesystems 
 +# Description:​ ZFS is an advanced filesystem designed to simplify managing 
 +#              and protecting your data.  This service mounts the ZFS 
 +#              filesystems and starts all related zfs services. 
 +### END INIT INFO</​box> 
 + 
 +Wenn nun ein Service vom lokalen Dateisystem (>><​fc #​008000>​$local_fs</​fc><<​) abhängt, hängt er automatisch auch von ZFS ab. Dieser Schritt ist nicht zwingend notwendig aber durchaus zu empfehlen. 
 + 
 +=== Mount via /etc/fstab === 
 + 
 +Die Datei >><​fc #​008000>/​etc/​fstab</​fc><<​((http://​de.wikipedia.org/​wiki/​Fstab)) ist die zentrale Konfigurationsdatei in unixoiden Betriebssystemen,​ wo im Prinzip alle Dateisysteme ​und Partitionen mit bestimmten Mountoptionen eingetragen werden. Diese Datei wird beim Systemstart durch das >><​fc #​008000>​mount</​fc><<​-Kommando ausgewertet,​ welches dann die konfigurierten Partitionen automatisch ins System einhängt oder anders ausgedrückt >><​fc #​008000>​mountet</​fc><<​. "Im Prinzip"​ deshalb, weil zB ZFS auch die oben bereits vorgestellte Methode über ein Init-Skript anbietet. 
 + 
 +Aber ZFS kann auch über die Datei >><​fc #​008000>/​etc/​fstab</​fc><<​ seine Pools ins System einhängen lassen. Dafür müssen aber die Mountpoints der ZFS-Pools vorbereitet und die Datei >><​fc #​008000>​etc/​fstab</​fc><<​ von Hand angepasst werden. Ein Mountpoint kann in ZFS auf >><​fc #​008000>​legacy</​fc><<​((http://​docs.oracle.com/​cd/​E19082-01/​817-2271/​gbaln/​index.html)) gesetzt werden. Damit wird dieser Mountpoint vom Kommando >><​fc #​008000>​zfs mount</​fc><<​ ignoriert und übergibt den Systemkommandos >><​fc #​008000>​mount</​fc><<​ bzw >><​fc #​008000>​unmount</​fc><<​ die Kontrolle. 
 + 
 +Legen wir nun einen >><​fc #​008000>​legacy</​fc><<​-Mountpoint und weiteren ZFS-Pool mit dem Namen >><​fc #​008000>​pool</​fc><<​ für die dritte Festplatte im System an: 
 + 
 +<​xterm>#​ <fc #​008000>​zpool create -f pool /​dev/​sdc</​fc></​xterm>​ 
 + 
 +Wenn Sie jetzt das System neu starten, wird dieser ZFS-Pool noch durch das Init-Skript bzw. durch das Kommando >><​fc #​008000>​zfs mount -a</​fc><<​ gemountet. Wir setzen aber den Mountpoint des ZFS-Pool >><​fc #​008000>​pool</​fc><<​ auf >><​fc #​008000>​legacy</​fc><<:​ 
 + 
 +<​xterm>#​ <fc #​008000>​zfs set mountpoint=legacy pool</​fc></​xterm>​ 
 + 
 +Wenn Sie jetzt Ihr System neu starten, werden Sie feststellen,​ dass zwar der Pool >><​fc #​008000>​tank</​fc><<​ schon gemountet ist aber der Pool >><​fc #​008000>​pool</​fc><<​ jedoch nicht. Auch der durch das >><​fc #​008000>​zfs create</​fc><<​ Kommando anglegte Mountpoint >><​fc #​008000>/​pool</​fc><<​ wurde wieder entfernt. Diesen müssen wir für die weitere Vorgehensweise selbst anlegen: 
 + 
 +<​xterm>#​ <fc #​008000>​mkdir /​pool</​fc></​xterm>​ 
 + 
 +Danach kann der ZFS-Pool >><​fc #​008000>​pool</​fc><<​ bereits durch das Systemkommando >><​fc #​008000>​mount</​fc><<​ ins Dateisystem eingehängt werden: 
 + 
 +<​xterm>#​ <fc #​008000>​mount -t zfs pool /​pool</​fc></​xterm>​ 
 + 
 +Um das Mounten bereits beim Systemstart durchzuführen,​ müssen wir der Datei >><​fc #​008000>/​etc/​fstab</​fc><<​ einen entsprechenden Eintrag hinzufügen:​ 
 + 
 +<box round green|**/​etc/​fstab**>​pool ​           /pool     ​zfs ​    ​defaults ​       0       ​0</​box>​ 
 + 
 +Jetzt wird auch dieser Pool bereits beim Systemstart in das Dateisystem eingehängt. 
 + 
 +Die Debian ​Syntax der Datei >><​fc #​008000>/​etc/​fstab</​fc><<​ entnehmen Sie bitte dem Artikel in ((http://​wiki.debian.org/​fstab)). Erwähnenswert ist die deaktivierte Pass-Option (die letzte Null in der >><​fc #​008000>/​etc/​fstab</​fc><<​). Hier wird die Priorität eingestellt,​ in welcher das >><​fc #​008000>​fsck</​fc><<​-Utility das Dateisystem in einem Wartungszyklus überprüft. ZFS unterstützt >><​fc #​008000>​fsck</​fc><<​((http://​de.wikipedia.org/​wiki/​Fsck)) allerdings nicht. Daher die Null an dieser Stelle, was diese Option deaktiviert. ZFS bringt an dieser Stelle eigene Methoden zur Gewährleistung der Dateisystem-Integrität mit.
  
  --- //pronto 2012/10/13 12:35//  --- //pronto 2012/10/13 12:35//
-{{keywords>​linux debian zfs zfsonlinux spl install filesystem}}+ 
 +**Verwandte Artikel:​** 
 + 
 +[[:​tux:​zfs_simple_pool|->​ ZFS Simple Pool erweitern]] 
 +[[:​tux:​zfs_mirror|->​ ZFS Mirror Pool einrichten]] 
 + 
 + 
 +{{keywords>​linux debian zfs zfsonlinux spl install filesystem ​zpool create mount automount boot /etc/fstab init skript $local_fs insserv mountpoint start reboot systemstart}}
tux/zfs_install.1350156146.txt.gz (17590 views) · Zuletzt geändert: 2012/10/13 21:22 von wikisysop
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0