ZFS auf Linux/ Initiale Konfiguration

Initiale Konfiguration Bearbeiten

Da ZFS in Form eines Kernel-Moduls implementiert wurde, muss dieses vor der Verwendung geladen sein. Sollte dies nicht automatisch geschehen, kann es mit dem Kommando modprobe zfs nachträglich geladen werden. Um ZFS verwenden zu können, muss anschließend ein zpool angelegt werden. Dies erfolgt unter Verwendung des gleichnamigen Tools und ist mit folgendem Befehl möglich:

user> zpool create -m  <MOUNTPOINT>  -o ashift=12 <POOLNAME> <DEVICES>

Dabei müssen mindestens der Name des Pools, der zu verwendende Mountpoint sowie die gewünschten vdevs angegebenen werden. Darüber hinaus können nach dem Parameter -o von der Standardkonfiguration abweichende Optionen für den zpool gesetzt werden. Eine häufig genutzte Option ist ashift. Dabei handelt es sich um die für die vdevs zu verwendende physische Blockgröße. Der Wert wird als Exponent zur Basis 2 angegeben und ist besonders bei Festplatten relevant, die intern andere Sektorgrößen nutzen, als sie aus Kompatibilitätsgründen an das Betriebssystem melden. Ein Sektor bezeichnet bei Festplatten die kleinste Organisationseinheit, die gelesen bzw. geschrieben werden kann. Der Wert 12 entspricht der mittlerweile standardmäßig eingesetzten Sektorgröße von 4 KiB.

Während der zuvor erläuterte Befehl die vdevs zu einem Pool ohne Redundanzen oder Paritätsinformationen verknüpfen würde, können durch Angabe bestimmter Schlüsselwörter einzelne vdevs beispielsweise gespiegelt bzw. zu einem RAID-Z verbunden werden:


Schlüsselwort Bedeutung
raidz1 Software-RAID mit einem vdev für Paritäten
raidz2 Software-RAID mit zwei vdev für Paritäten
raidz3 Software-RAID mit drei vdev für Paritäten
mirror Spiegelung mehrerer vdevs
cache Verwendung von vdevs zum Caching
log Auslagerung des Intent Logs auf angegebene vdevs
spare Ersatz-vdev bei Plattenausfall (raidz oder mirror)

Diese zwei Befehle würden entsprechende Pools erzeugen:

# Anlegen eines zpools bestehend aus einem Mirror (gespiegelte vdevs)
user> zpool create -m <MOUNTPOINT> -o ashift=12 <POOLNAME> mirror <DEVICES>

# Anlegen eines zpools bestehend aus einem RAID-Z2
user> zpool create -m <MOUNTPOINT> -o ashift=12 <POOLNAME> raidz2 <DEVICES>


Innerhalb eines solchen Pools können anschließend Datasets angelegt werden. Diese sind ebenfalls in einer Art Vererbungshierarchie organisiert. Im Gegensatz zum Pool werden sie mit dem Tool zfs angelegt:

user> zfs create <POOLNAME>/<DATASETNAME>/[<DATASETNAME>]

Sollen ACLs verwendet werden, muss unbedingt folgendes Attribut gesetzt werden. Andernfalls wird ZFS sehr langsam und es gibt Probleme beim Löschen von Dateien:

user> zfs set xattr=sa <POOLNAME>/<DATASETNAME>/[<DATASETNAME>]


Optimale Konfiguration für einen Server mit 44 Festplatten Bearbeiten

zpool create -m /ZFS -o ashift=12 pool1 raidz2 /dev/sdaa /dev/sdab /dev/sdac /dev/sdad /dev/sdae /dev/sdaf /dev/sdag /dev/sdah raidz2 /dev/sdai /dev/sdaj /dev/sdak /dev/sdal /dev/sdam /dev/sdan /dev/sdao /dev/sdap raidz2 /dev/sdaq /dev/sdar /dev/sdas /dev/sdb /dev/sdc /dev/sdd /dev/sde /dev/sdf raidz2 /dev/sdg /dev/sdh /dev/sdi /dev/sdj /dev/sdk /dev/sdl /dev/sdm /dev/sdn raidz2 /dev/sdo /dev/sdp /dev/sdq /dev/sdr /dev/sds /dev/sdt /dev/sdu /dev/sdv
zfs set xattr=sa pool1