Es existiert ein Startmechanismus, der es FreeBSD erlaubt,
ZFS-Pools während der Systeminitialisierung
einzubinden. Um diesen zu aktivieren, fügen Sie diese Zeile
in /etc/rc.conf
ein:
zfs_enable="YES"
Starten Sie dann den Dienst:
#
service zfs start
Die Beispiele in diesem Abschnitt gehen von drei
SCSI-Platten mit den Gerätenamen
,
da0
und
da1
aus. Nutzer
von SATA-Hardware sollten stattdessen die
Bezeichnung da2
als Gerätenamen verwenden.ada
Um einen einfachen, nicht-redundanten Pool mit einem einzigen Gerät anzulegen, geben Sie folgendes ein:
#
zpool create
example
/dev/da0
Um den neuen Pool anzuzeigen, prüfen Sie die Ausgabe von
df
:
#
df
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
Diese Ausgabe zeigt, dass der
example
-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:
#
cd /example
#
ls
#
touch testfile
#
ls -al
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
Allerdings nutzt dieser Pool noch keine der Vorteile von ZFS. Um ein Dataset auf diesem Pool mit aktivierter Komprimierung zu erzeugen, geben Sie ein:
#
zfs create example/compressed
#
zfs set compression=gzip example/compressed
Das example/compressed
-Dataset ist nun
ein komprimiertes ZFS-Dateisystem.
Versuchen Sie, ein paar große Dateien auf
/example/compressed
zu kopieren.
Deaktivieren lässt sich die Komprimierung durch:
#
zfs set compression=off example/compressed
Um ein Dateisystem abzuhängen, verwenden Sie
zfs umount
und überprüfen Sie dies
anschließend mit df
:
#
zfs umount example/compressed
#
df
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
Um das Dateisystem wieder einzubinden und erneut verfügbar
zu machen, verwenden Sie zfs mount
und
prüfen Sie erneut mit df
:
#
zfs mount example/compressed
#
df
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
Den Pool und die Dateisysteme können Sie auch über die
Ausgabe von mount
prüfen:
#
mount
/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)
Nach der Erstellung können ZFS-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 data
angelegt. Wichtige Dateien werden dort abgespeichert, deshalb
wird es so konfiguriert, dass zwei Kopien jedes Datenblocks
vorgehalten werden.
#
zfs create example/data
#
zfs set copies=2 example/data
Es ist jetzt möglich, den Speicherplatzverbrauch der Daten
durch die Eingabe von df
zu sehen:
#
df
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
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
df
verwendet wird, um zu zeigen, dass die
Dateisysteme nur die Menge an Speicher verbrauchen, den sie
benötigen und alle den gleichen Pool verwenden.
ZFS eliminiert Konzepte wie Volumen und
Partitionen und erlaubt es mehreren Dateisystemen den gleichen
Pool zu belegen.
Um das Dateisystem und anschließend den Pool zu zerstören, wenn dieser nicht mehr benötigt wird, geben Sie ein:
#
zfs destroy example/compressed
#
zfs destroy example/data
#
zpool destroy example
Platten fallen aus. Eine Methode, um Datenverlust durch Festplattenausfall zu vermeiden, ist die Verwendung von RAID. ZFS unterstützt dies in seiner Poolgestaltung. Pools mit RAID-Z benötigen drei oder mehr Platten, bieten aber auch mehr nutzbaren Speicher als gespiegelte Pools.
Dieses Beispiel erstellt einen RAID-Z-Pool, indem es die Platten angibt, die dem Pool hinzugefügt werden sollen:
#
zpool create storage raidz da0 da1 da2
Sun™ empfiehlt, dass die Anzahl der Geräte in einer RAID-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 RAID-Z-Gruppen aufzuteilen. Falls nur zwei Platten verfügbar sind und Redundanz benötigt wird, ziehen Sie die Verwendung eines ZFS-Spiegels (mirror) in Betracht. Lesen Sie dazu zpool(8), um weitere Details zu erhalten.
Das vorherige Beispiel erstellte einen ZPool namens
storage
. Dieses Beispiel erzeugt ein neues
Dateisystem, genannt home
, in diesem
Pool:
#
zfs create storage/home
Komprimierung und das Vorhalten von mehreren Kopien von Dateien und Verzeichnissen kann aktiviert werden:
#
zfs set copies=2 storage/home
#
zfs set compression=gzip storage/home
Um dies als das neue Heimatverzeichnis für Anwender zu setzen, kopieren Sie die Benutzerdaten in dieses Verzeichnis und erstellen passende symbolische Verknüpfungen:
#
cp -rp /home/* /storage/home
#
rm -rf /home /usr/home
#
ln -s /storage/home /home
#
ln -s /storage/home /usr/home
Daten von Anwendern werden nun auf dem frisch erstellten
/storage/home
abgelegt. Überprüfen Sie
dies durch das Anlegen eines neuen Benutzers und das
anschließende Anmelden als dieser Benutzer.
Versuchen Sie, einen Dateisystemschnappschuss anzulegen, den Sie später wieder zurückrollen können:
#
zfs snapshot storage/home@08-30-08
Schnappschüsse können nur auf einem Dateisystem angelegt werden, nicht auf einem einzelnen Verzeichnis oder einer Datei.
Das Zeichen @
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:
#
zfs rollback storage/home@08-30-08
Um all verfügbaren Schnappschüsse aufzulisten, geben Sie
ls
im Verzeichnis
.zfs/snapshot
dieses Dateisystems ein.
Beispielsweise lässt sich der zuvor angelegte Schnappschuss
wie folgt anzeigen:
#
ls /storage/home/.zfs/snapshot
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:
#
zfs destroy storage/home@08-30-08
Nach erfolgreichen Tests kann
/storage/home
zum echten
/home
-Verzeichnis werden, mittels:
#
zfs set mountpoint=/home storage/home
Prüfen Sie mit df
und
mount
, um zu bestätigen, dass das System
das Dateisystem nun als /home
verwendet:
#
mount
/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)#
df
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
Damit ist die RAID-Z Konfiguration
abgeschlossen. Tägliche Informationen über den Status der
erstellten Dateisysteme können als Teil des nächtlichen
periodic(8)-Berichts generiert werden. Fügen Sie dazu
die folgende Zeile in /etc/periodic.conf
ein:
daily_status_zfs_enable="YES"
Jedes Software-RAID besitzt eine
Methode, um den Zustand (state
) zu
überprüfen. Der Status von RAID-Z Geräten
wird mit diesem Befehl angezeigt:
#
zpool status -x
Wenn alle Pools Online sind und alles normal ist, zeigt die Meldung folgendes an:
all pools are healthy
Wenn es ein Problem gibt, womöglich ist eine Platte im Zustand Offline, dann wird der Poolzustand ähnlich wie dieser aussehen:
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
Dies zeigt an, dass das Gerät zuvor vom Administrator mit diesem Befehl abgeschaltet wurde:
#
zpool offline storage da1
Jetzt kann das System heruntergefahren werden, um
da1
zu ersetzen. Wenn das System wieder
eingeschaltet wird, kann die fehlerhafte Platte im Pool
ersetzt werden:
#
zpool replace storage da1
Von diesem Punkt an kann der Status erneut geprüft werden.
Dieses Mal ohne die Option -x
, damit alle
Pools angezeigt werden:
#
zpool status storage
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
In diesem Beispiel ist alles normal.
ZFS verwendet Prüfsummen, um die Integrität der gespeicherten Daten zu gewährleisten. Dies wird automatisch beim Erstellen von Dateisystemen aktiviert.
Prüfsummen können deaktiviert werden, dies wird jedoch nicht empfohlen! Prüfsummen verbrauchen nur sehr wenig Speicherplatz und sichern die Integrität der Daten. Viele Eigenschaften vom ZFS werden nicht richtig funktionieren, wenn Prüfsummen deaktiviert sind. Es gibt keinen merklichen Geschwindigkeitsunterschied durch das Deaktivieren dieser Prüfsummen.
Prüfsummenverifikation ist unter der Bezeichnung
scrubbing bekannt. Verifizieren Sie die
Integrität der Daten des storage
-Pools mit
diesem Befehl:
#
zpool scrub storage
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 I/O-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 status
angezeigt werden:
#
zpool status storage
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
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.
Lesen Sie zfs(8) und zpool(8), um über weitere ZFS-Optionen zu erfahren.
Wenn Sie Fragen zu FreeBSD haben, schicken Sie eine E-Mail an
<de-bsd-questions@de.FreeBSD.org>.
Wenn Sie Fragen zu dieser Dokumentation haben, schicken Sie eine E-Mail an
<de-bsd-translators@de.FreeBSD.org>.