Login
Newsletter
Werbung

Do, 18. Februar 2010, 19:00

ZFS unter Linux

Die Befehle zpool und zfs

Zum Kennenlernen folgt hier eine kurze Liste, was man mit den neuen Befehlen zpool und zfs erreichen kann.

Um die bestehenden Pools aufzulisten, benutzt man den Befehl zpool list. Um einen Pool mit dem Namen tank anzulegen, wobei die gewünschte Festplatte /dev/sdb ist, nutzt man den Befehl zpool create tank /dev/sdb. Einen Pool löscht man ganz einfach mit (Achtung: ALLE Daten werden gelöscht!) zpool destroy tank.

So legt man einen gespiegelten Pool (RAID-1, mit zwei Festplatten) an: zpool create tank mirror /dev/sdb /dev/sdc. Um die Integrität des Pools tank zu prüfen, gibt es folgenden Befehl: zpool scrub tank. Mit dem Befehl zpool get all tank gibt man alle Informationen des Pools tank aus. Der Befehl zpool status gibt Informationen über den Aufbau aller Pools aus.

Wenn man eine neue Festplatte hinzufügen will, gibt es folgenden Befehl: zpool add tank /dev/sdd. Zum Entfernen der Festplatte /dev/sdd aus dem Pool tank hilft der Befehl zpool remove tank /dev/sdd. Eine defekte Festplatte kann man so gegen eine neue austauschen (defekt: sdb, neu: sdd): zpool replace tank /dev/sdb /dev/sdd.

Es ist auch möglich, einen Pool von einem Server zu einem anderen zu wechseln. Dies können auch unterschiedliche Architekturen sein, wie z.B. von einem SPARC-System mit dem Betriebssystem Solaris zu einem AMD64- oder Intel-System (Linux). Hierzu wird auf dem SPARC-Server der Befehl zpool export tank eingegeben, um den Pool tank zu exportieren. Die Festplatten können ausgebaut und an den neuen Server angeschlossen werden. Auf dem AMD64/Intel-Server muss der Pool dann wieder importiert werden: zpool import tank. Jetzt steht das Dateisystem auf dem anderen System zur Verfügung und ist fertig umgezogen.

Um ein Dateisystem anzulegen (tank ist der Name des Pools, files der Name des Dateisystems) reicht der Befehl zfs create tank/files. Wenn ein Einhängepunkt (Mountpoint) gesetzt werden soll, geht dies mit zfs set mountpoint=/home/linus/storage tank/files. /home/linus/storage ist das Ziel im Verzeichnisbaum. Standardmäßig wird der Pool im Root-Verzeichnis (automatisch) angelegt. Mit der Option des Einhängepunktes kann man dies ändern.

Es können auch weitere Dateisysteme unterhalb von tank/files angelegt werden:

zfs create tank/files/linus
zfs create tank/files/martin
zfs create tank/files/frank
zfs create tank/files/jan

Das ZFS-Dateisystem vererbt seinen nachkommenden Dateisystemen seine Eigenschaften. Das heißt, es muss beispielsweise nur tank/files (z.B. unter /storage) eingehängt werden, um auch tank/files/linus unter /storage/linus zu erhalten. Die Dateisysteme werden nach dem Erstellen bzw. nach dem Importieren automatisch eingehängt. Der Pfad ist standardmäßig /<Dateisystemname>, sofern kein Einhängepunkt festgelegt wurde (s. o.).

Um alle Informationen des Pools tank ausgeben, gibt es den Befehl zfs get all tank. Um alle Informationen eines Unterdateisystems - z.B. tank/files - auszugeben, geht man analog dazu vor: zfs get all tank/files.

Zum Komprimieren eines Dateisystems dient der Befehl zfs set compression=on tank/files. Auch Quotas (Begrenzung des Speicherplatzes) sind möglich. Um z.B. eine Begrenzung von 15 GB für linus einzurichten, reicht der Befehl zfs set quota=15g tank/files/linus.

Anstatt den Platz zu begrenzen, kann man auch Speicherplatz reservieren. Zum Beispiel 10 GB für den Bereich frank: zfs set reservation=10g tank/files/frank

Beispiele aus dem Alltag

Um die ganze Prozedur etwas zu veranschaulichen, gibt es hier zwei Beispielszenarien. Das erste Szenario ist eine Datensammlung, die nicht sonderlich ausfallsicher sein muss, sondern nur viel Speicherplatz zur Verfügung stellen soll. Das zweite Szenario soll ein sicheres RAID sein. Hier soll eine defekte Festplatte getauscht werden.

Szenario 1: Die Datensammlung

Um den Pool tank zu erstellen, gibt man folgenden Befehl ein:

zpool create tank /dev/sdb

Das war es schon! Wenn das Dateisystem voll sein sollte, kann man es einfach mit der nächsten Festplatte erweitern:

zpool add tank /dev/sdc

Jetzt kann man den Status anzeigen lassen und sehen, dass das Dateisystem tank aus zwei Festplatten (sdb und sdc) besteht:

# zpool status tank
  pool: tank
 state: ONLINE
 scrub: none requested
config:

NAME    STATE   READ WRITE CKSUM
 tank   ONLINE     0     0     0
 sdb    ONLINE     0     0     0
 sdc    ONLINE     0     0     0

errors: No known data errors

Szenario 2: Das sichere RAID

Die Daten sollen auf einem RAID-5 (siehe unten) Platz finden. Hierzu wird ein Pool mit vier Festplatten erstellt:

zpool create tank raidz1 /dev/sdb /dev/sdc /dev/sdd /dev/sde

Alternativ kann man auch gleich noch eine weitere Festplatte als Ersatz (Spare-Harddisk) mitgeben:

zpool create tank raidz1 /dev/sdb /dev/sdc /dev/sdd /dev/sde spare /dev/sdf

Das Ergebnis kann man sich genau wie im ersten Beispiel auflisten lassen:

# zpool status tank
  pool: tank
 state: ONLINE
 scrub: none requested
config:

NAME       STATE   READ WRITE CKSUM
 tank      ONLINE     0     0     0
   raidz1  ONLINE     0     0     0
     sdb   ONLINE     0     0     0
     sdc   ONLINE     0     0     0
     sdd   ONLINE     0     0     0
     sde   ONLINE     0     0     0
 spares
   sdf       AVAIL

errors: No known data errors

Sollte keine spare-Festplatte vorhanden sein, die automatisch eine Defekte ersetzt, kann man den Wechsel manuell durchführen (defekte HDD: sdb, neue HDD: sdg):

zpool replace tank /dev/sdb /dev/sdg

Pro-Linux
Pro-Linux @Facebook
Neue Nachrichten
Werbung