[[:tux|{{ :linux.png?40|}}]]
=====ZFS Pool einrichten und verwalten (Linux Debian)=====
Das ZFS zeichnet sich durch seine Flexibilität, Robustheit, Sicherheit hinsichtlich der Datenintegrität und durch seine leichte Handhabung aus. Nachdem Sie den [[:tux:zfs_install|ZFS-Support]] auf Ihrem System installiert haben, können Sie als erstes einen ZFS-Pool erstellen. Ich habe mir dafür in meinem Linux Debian zwei weitere Festplatten ins System gehängt. Da ich hier zum Testen das gesamte Testsystem virtualisiert habe, bin ich sehr flexibel was das Hinzufügen weiterer Hardwarekomponenten angeht und auch was deren Größe betrifft. Deshalb werden Ihnen im weiteren Verlauf dieses Tutorials die Festplattengrößen von ca. 2GB vielleicht etwas seltsam vorkommen aber zum Testen reicht es allemal.
# fdisk -l
Disk /dev/sda: 8589 MB, 8589934592 bytes
255 heads, 63 sectors/track, 1044 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000af5b0
Device Boot Start End Blocks Id System
/dev/sda1 * 1 43 340992 83 Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2 43 1045 8044545 5 Extended
/dev/sda5 43 407 2925568 83 Linux
/dev/sda6 408 586 1434624 83 Linux
/dev/sda7 586 645 473088 82 Linux swap / Solaris
/dev/sda8 645 676 246784 83 Linux
/dev/sda9 676 1045 2960384 83 Linux
**Disk /dev/sdb: 2147 MB, 2147483648 bytes**
255 heads, 63 sectors/track, 261 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
Disk /dev/sdb doesn't contain a valid partition table
**Disk /dev/sdc: 2147 MB, 2147483648 bytes**
255 heads, 63 sectors/track, 261 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
Disk /dev/sdc doesn't contain a valid partition table
====ZFS Pool einrichten====
Um sich einen Überblick über den Funktionsumfang von >>ZFS<< und deren Möglichkeiten zu machen, sollten Sie einen ersten Blick in die Manpage von von >>ZFS<< werfen (>>man zfs<<). IdR kommt ein ZFS-Administrator mit ein paar wenigen Kommandos aus, neben dem schon angesprochenen Kommando >>zfs<< gibt es noch >>zpool<< und >>ztest<<.
Um nun einen ZFS-Pool mit dem Namen >>tank<< aus der ersten der beiden zusätzlichen Platten (>>/dev/sdb<<) hinzuzufügen, reicht zB bereits folgendes Kommando:
# zpool create -f tank /dev/sdb
Der Terminus >>tank<< 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:
# zpool list
NAME SIZE ALLOC FREE CAP DEDUP HEALTH ALTROOT
tank 1,98G 91,5K 1,98G 0% 1.00x ONLINE -
Das >>zpool create<< Kommando erstellt auch einen Mountpoint im Root-Verzeichnis >>/tank<< und hängt den neuen Pool auch gleich dort ein:
# mount
/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)
**tank on /tank type zfs (rw,xattr)**
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 >>/etc/fstab<<((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 >>zfs mount -a<< ins System eingehängt. Die Option >>-a<< 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 >>zfs mount tank<<. Das Kommando >>zfs mount -a<< sollte eigentlich durch das init-Skript >>/etc/init.d/zfs<< 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 (>>/etc/rc1.d<< und >>/etc/rc2.d<<)((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 >>insserv<<((http://www.unix.com/man-page/Linux/8/insserv/)) beauftragt, diese anzulegen und siehe da, jetzt wurden die ZFS-Pools auch beim Systemstart gemountet:
# insserv zfs
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 >>$local_fs<<. Um ZFS nun der Gruppe von >>$local_fs<< hinzuzufügen, legen Sie die Datei >>/etc/insserv.conf.d/zfs<< mit folgenden Inahlt an:
$local_fs zfs
und führen das Kommando >>insserv<< aus:
# insserv
**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:** Der Name der Datei, wie auch der Zuordnung zu >>$local_fs<< innerhalb der Datei muss dabei dem >>Provides<<-Tag des Init-Skripts entsprechen, welches ZFS startet:
#!/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
# **Provides: zfs**
# 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
Wenn nun ein Service vom lokalen Dateisystem (>>$local_fs<<) 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 >>/etc/fstab<<((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 >>mount<<-Kommando ausgewertet, welches dann die konfigurierten Partitionen automatisch ins System einhängt oder anders ausgedrückt >>mountet<<. "Im Prinzip" deshalb, weil zB ZFS auch die oben bereits vorgestellte Methode über ein Init-Skript anbietet.
Aber ZFS kann auch über die Datei >>/etc/fstab<< seine Pools ins System einhängen lassen. Dafür müssen aber die Mountpoints der ZFS-Pools vorbereitet und die Datei >>etc/fstab<< von Hand angepasst werden. Ein Mountpoint kann in ZFS auf >>legacy<<((http://docs.oracle.com/cd/E19082-01/817-2271/gbaln/index.html)) gesetzt werden. Damit wird dieser Mountpoint vom Kommando >>zfs mount<< ignoriert und übergibt den Systemkommandos >>mount<< bzw >>unmount<< die Kontrolle.
Legen wir nun einen >>legacy<<-Mountpoint und weiteren ZFS-Pool mit dem Namen >>pool<< für die dritte Festplatte im System an:
# zpool create -f pool /dev/sdc
Wenn Sie jetzt das System neu starten, wird dieser ZFS-Pool noch durch das Init-Skript bzw. durch das Kommando >>zfs mount -a<< gemountet. Wir setzen aber den Mountpoint des ZFS-Pool >>pool<< auf >>legacy<<:
# zfs set mountpoint=legacy pool
Wenn Sie jetzt Ihr System neu starten, werden Sie feststellen, dass zwar der Pool >>tank<< schon gemountet ist aber der Pool >>pool<< jedoch nicht. Auch der durch das >>zfs create<< Kommando anglegte Mountpoint >>/pool<< wurde wieder entfernt. Diesen müssen wir für die weitere Vorgehensweise selbst anlegen:
# mkdir /pool
Danach kann der ZFS-Pool >>pool<< bereits durch das Systemkommando >>mount<< ins Dateisystem eingehängt werden:
# mount -t zfs pool /pool
Um das Mounten bereits beim Systemstart durchzuführen, müssen wir der Datei >>/etc/fstab<< einen entsprechenden Eintrag hinzufügen:
pool /pool zfs defaults 0 0
Jetzt wird auch dieser Pool bereits beim Systemstart in das Dateisystem eingehängt.
Die Debian Syntax der Datei >>/etc/fstab<< entnehmen Sie bitte dem Artikel in ((http://wiki.debian.org/fstab)). Erwähnenswert ist die deaktivierte Pass-Option (die letzte Null in der >>/etc/fstab<<). Hier wird die Priorität eingestellt, in welcher das >>fsck<<-Utility das Dateisystem in einem Wartungszyklus überprüft. ZFS unterstützt >>fsck<<((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.
**Verwandte Artikel:**
[[:tux:zfs_install|-> ZFS Support auf Linux Debian installieren]]
[[:tux:zfs_simple_pool|-> ZFS Simple Pool erweitern]]
[[:tux:zfs_mirror|-> ZFS Mirror Pool einrichten]]
--- //pronto 2012/10/14 11:51//
{{keywords>linux zpool create zfs mount automount boot /etc/fstab init skript $local_fs insserv mountpoint start reboot systemstart}}