Hallo! Wir kennen alle das Problem. Datensicherheit auf unseren Computern. Mit Datensicherheit meine ich
in diesem Fall nicht den Schutz von unerlaubten Zugriff Dritter. Vielmehr möchte ich Euch einen kleinen
Einblick in die Praxiserfahrung der letzten Wochen geben. Sicherlich wird dieses Thema nicht alle Forums-
mitglieder ansprechen weil sie ggf. die technische Grundlagen nicht besitzen oder diesen Aufwand nicht
betreiben wollen oder können. Wer unter uns keine NAS-basierten Storage-Systeme für den Heimbereich im
Einsatz hat und sich nicht davor scheut ein Stück PC-Hardware mit einem Unix-ähnlichen Betriebssystem
zu betreiben für diejenigen könnte das folgende Thema eventuell interessant sein.
Ich persönlich betreibe seit ca. 15+ Jahren meinen Home-Server unter dem FreeBSD-Betriebssystem. Wer von
FreeBSD noch nichts gehört hat oder meint er hätte noch keinen Kontakt damit gehabt der wird sich vielleicht
wundern auf welchen Platformen sich dieses unter anderem Namen befindet (z.B. MacOS, JunOS etc.)
FreeBSD arbeitet von Haus aus mit vfs. vfs ist ein sog. "file system layer" und ermöglicht dem Kernel
diverse Dateisysteme (Filesystems) einzubinden. Dieses Feature gibt es natürlich auch bei Linux-Betriebssystemen.
Bei Linux kommt in der Regel ein ext2/3/4-Dateisystem in einer Partition oder einem sogenannten
Logical Volume Manager (LVM) zum Einsatz. Das aber nur zur kurzen Einführung. Primär geht es mir um
die Vermittlung meiner Erfahrungen mit dem ZFS-Dateisystem ("The Z file system"). ZFS wurde von Sun Microsystems
entwickelt und wurde primär unter Sun Solaris zum Einsatz gebracht. ZFS ist Transaktionsorientiertes Dateisystem
was ohne Journalisierung arbeitet. In diesem Fall wird bei einem Schreibvorgang ein modifizierter Datenblock zusätzlich
in das Dateisystem geschrieben und dann nach erfolgreicher Arbeit der "alte" Datenblock erst gelöscht. So kann
es in der Praxis nie zu inkonsistenten Daten kommen. Wer Details über ZFS erfahren möchte darf gern Google bemühen.
Also! Meine Aufgabe war es einen Fileserver aufzubauen, dem ich meinen gesamten Bilderbestand in der Größe von
1000 GByte in Form von 74348 Bilddateien (NEF/TIF/JPEG) anvertrauen wollte. Warum nun ZFS? Die Frage beantworte
ich gern im Laufe dieses Threads. Ich möchte erst einmal ein paar Beispiele zeigen wie ZFS im Betrieb ausschaut.
Es gibt ein paar mächtige Befehle die auch ein Non-Root-User ausführen kann um sich eine Lage über das Datei-
systems zu verschaffen. Im folgenden Beispiel soll mir ZFS zeigen was es kennt. Bei ZFS wird i.d.R. nur mit
Dateisystemen gearbeitet. Partitionen (gibt es aber) werden hier nicht benötigt.
ZFS nun zeig mir mal wie mein Dateisystem aussieht:
Wie man oben sehen kann besteht mein Speicherpool ("raid1p1") aus vier 2TB Festplatten. Jeweils zwei Festplatten
sind in einem Spiegel (Mirror aka RAID1) zusammengefasst. Es gibt den Plattenpool "mirror-0" und "mirror-1". Die
Festplatten unter FreeBSD werden je nach Controller mit entsprechenden Namen versehen. In diesem Fall sind es
die Festplatten ada1, ada2, ada3 und ada4. Die Plattenspiegel war für mich die erste Wahl. ZFS kann natürlich
auch diverse RAID-Level. Die muss ich als Administrator aber eigentlich nicht kennen. ZFS nimmt sich die Platten
und schaut welchen sinnvollen RAIDZ-Level es dafür einrichtet. Soll mir Recht sein. Wozu gibt es Computer?!
Leider verbrauchen Spiegel immer viel Kapazität. Bei zwei 2TB Festplatten bleiben mir Netto ca. 1.8TB übrig.
Bei ZFS spielt sich aber alles in einem oder mehreren Pools ab. Jetzt kann ich mit einem einfachen Befehl weitere
Platten zu meinem Speicherpool hinzufügen. Dazu gebe ich ein: "zpool add raid1p1 mirror ada3 ada4". Was ist
passiert? ZFS hat die beiden Festplatten ada3 und ada4 zum Pool "raid1p1" hinzugefügt. Und das bedeutet was?
ZFS wieviel Platz habe ich den nun???
Wie man nun sieht hat ZFS einfach meinen gespiegelt Pool um einen weiteren Spiegel erweitert und es sind
nun Netto 3.62TB für Daten verfügbar. Ist das auch alles gut?
ZFS nun sag mir mal wie Du Dich "fühlst" ?
Naja! Jetzt haben wir einen Speicherpool. Schön! Und nun? Mit "zfs list" zeige ich Euch mal das aktuelle
Dateisystem was ich im Einsatz habe. Die vielen Unterstriche in den Namen habe ich für diesen Artikel
eingefügt. Im Original stehen dort Unix-Usernamen. ZFS zeigt mir nun eine Liste von Pfaden. Auf der
linken Seite der Pool mit seinen Töchtern und ganz Rechts der sog. Mountpoint. ZFS benötigt keinen /etc/fstab
und Filesysteme müssen nicht gemounted werden. ZFS macht das alles selbst (auch nach dem Boot). ZFS ist
unter FreeBSD als vollwertige Kernel-Implementierung gegeben und damit sehr schnell. Es braucht allerdings
mindestens 4 GB RAM um "vernünftigt" arbeiten zu können. Im normalen Betrieb habe ich eine Speicherauslastung
von 10-12 GB (ohne Software). Unter Linux (bedingt durch die Lizenz) ist es nur als langsamere FUSE-Implementierug
vorhanden (bzw. wird in Distributionen so ausgeliefert). Das aber nur als kurze Anmerkung.
Werden wir mal ein wenig praktischer. Ich habe für Euch eine 500 GB USB-Festplatte an den Server angeschlossen.
Mit "dd if=/dev/zero of=/dev/da0" habe ich die ersten Sektoren ausgenullt. Erstellen wir mal einfach mal einen
weiteren Speicherpool mit dem Namen "usbdisk" im System und schauen uns das ganze an:
Wir haben nun einen Pool "usbdisk" mit 464GB Nettokapazität erzeugt. Prüfen wir das mal!
OK. ZFS hat sofort den Pool in das System eingehängt und wir können Daten abspeichern.
Ein kleiner Test! Und wie wir sehen gibt es nun zwei leere Dateien mit den Namen "Hallo" und "NF-F".
Ich mußte keine Formattierung oder dergleichen durchführen. Geht einfach!
Im Folgenden möchte ich mein Dateisystem aber besser strukturieren. Ich lege daher ein neues Dateisystem
im Speicherpool "usbdisk" von ZFS an. Dateisystem? Sieht doch aus wie ein normales Directory?!
Warum ist "NikonFotografieForum" jetzt ein weiteres Dateisystem? Das zeigt uns gleich ein paar
Abfragen und Einstellungen in ZFS. Stellen wir uns vor ich möchte "usbdisk/NikonFotografieForum" als
"fForum" nutzen. Dann gebe ich folgendes ein:
Im laufenden Betrieb kann ich die Dateisystem einfach umhängen. Nun habe ich neben /home etc. auch
ein /forum. Komisch! Warum habe alle Dateisysteme (/usbdisk und /forum) die selbe Größe (456G) ?
Das liegt daran, daß diese im selben Pool liegen. Finde ich das gut? Nein! Weil ich möchte maximal
10GB darin ablegen können. Andererseits soll aber auch garantiert werden, daß ich mindestens 5GB auch
wirklich nutzen kann. Weil wenn ich in "/usbdisk" Daten speichere geht das vom Pool ab und alle weiteren
Dateisysteme werden verringert. Aber wir sind hier ja bei ZFS. Also ...
Wir sehen nun das "/forum" maximal 10GB Daten aufnehmen kann und auch noch ~10GB frei hat. Stimmt das?
OK! Wir prüfen das einfach mal:
In der letzten Zeile sehen wir unsere Reservierung. Egal was passiert das ZFS garantiert nun für "/forum"
eine Mindestkapazität von 5GB. Ups! Ich wollte doch eigentlich 6GB Reservierung haben und nur maximal 8GB.
Kein Problem ...
Ihr seht man kann ganz einfach im laufenden Betrieb die Resourcenverteilung verändern. Ich speichere aber
häufig auch Texte im Dateisystem. Text kann man doch gut "zusammenfassen" (Komprimierung). ZFS bietet mir
dafür eine Online-Komprimierung an.
ZFS bitte komprimiere alles was ich in das Dateisystem kopiere ...
Jetzt kopiere ich mal ein paar Texte in das Dateisystem. Ich nutze dazu einfach den Befehl
"man zfs >> /forum/zfs-manual.txt" (mehrfach) und dann sieht das so aus:
Wie man oben sieht wurde eine Datei mit dem Namen "zfs-manual.txt" angelegt. Diese ist 434128 Bytes groß.
Belegt werden aber nur 275k (inkl. Verwaltungsdaten) in "/forum". ZFS scheint komprimiert zu haben und
das ohne Zeitverzögerung. Mit dem "zfs get ..." Befehl sehe ich nun einen Faktor 2.04x für die Komprimierung.
Mir gefällt dieser transparente Mechanismus. Speicherplatz sparen und Sicherheit in einer Lösung.
Und das ist natürlich nicht alles was das Dateisystem kann. Ich erzeuge in festen Intervalen in meinem
mir wichtigen Dateisystem-Strukturen eine sog. Snapshot. Snapshots ist eine Funktionalität die meistens
nur Volume Manager beherrschen. Also ext2/3/4, ufs etc. haben dieses Feature in der Regel nicht. Was bedeutet das?
Das Dateisystem ZFS merkt sich alle Änderungen ab dem Zeitpunkt wo ich den Snapshot setze. Der Befehl
lautet wie folgt:
In diesem Beispiel wird ein Snapshot mit dem Label "frozen" im Pool "usbdisk" und dem Dateisystem
"NikonFotografieForum" angelegt. Das @-Symbol leitet den Namen des Snapshots ein. Mit dem Befehl ...
... kann ich mir die aktuellen Snapshots anschauen und sehe wieviel Änderungen dort vorhanden sind.
Über einen Snapshot kann ich jederzeit ein Backup anfertigen ohne inkonsistente Daten zu haben. Ich gehe
sogar ein Schritt weiter. Ich lösche versehentlich meine Datei "zfs-manual.txt":
Die Datei ist weg. Stellt euch vor das wäre das bestes Foto in 2012 gewesen. Weg! Nun kommt der Snapshot
zum tragen. Wir zaubern ...
Die Daten sind wieder da. Und zwar in dem selben Zustand wie sie zum Zeitpunkt des Snapshots vorgelegen haben. Soo! Das war es erst einmal. Sicherlich kein Thema für alle aber es soll ja auch nur ein Erfahrungsbericht sein. Ich greife via SAMBA im Netzwerk mit meinen Windows XP/7-Clients auf den Server zu. Im Gigabit-Netz erreiche ich ca. 70 Mbyte/s im Schreib-/Lesezugriff. Ergänzungen / Korrekturen natürlich gern willkommen.
- Fortsetzung folgt sofern Interesse besteht -
in diesem Fall nicht den Schutz von unerlaubten Zugriff Dritter. Vielmehr möchte ich Euch einen kleinen
Einblick in die Praxiserfahrung der letzten Wochen geben. Sicherlich wird dieses Thema nicht alle Forums-
mitglieder ansprechen weil sie ggf. die technische Grundlagen nicht besitzen oder diesen Aufwand nicht
betreiben wollen oder können. Wer unter uns keine NAS-basierten Storage-Systeme für den Heimbereich im
Einsatz hat und sich nicht davor scheut ein Stück PC-Hardware mit einem Unix-ähnlichen Betriebssystem
zu betreiben für diejenigen könnte das folgende Thema eventuell interessant sein.
Ich persönlich betreibe seit ca. 15+ Jahren meinen Home-Server unter dem FreeBSD-Betriebssystem. Wer von
FreeBSD noch nichts gehört hat oder meint er hätte noch keinen Kontakt damit gehabt der wird sich vielleicht
wundern auf welchen Platformen sich dieses unter anderem Namen befindet (z.B. MacOS, JunOS etc.)
FreeBSD arbeitet von Haus aus mit vfs. vfs ist ein sog. "file system layer" und ermöglicht dem Kernel
diverse Dateisysteme (Filesystems) einzubinden. Dieses Feature gibt es natürlich auch bei Linux-Betriebssystemen.
Bei Linux kommt in der Regel ein ext2/3/4-Dateisystem in einer Partition oder einem sogenannten
Logical Volume Manager (LVM) zum Einsatz. Das aber nur zur kurzen Einführung. Primär geht es mir um
die Vermittlung meiner Erfahrungen mit dem ZFS-Dateisystem ("The Z file system"). ZFS wurde von Sun Microsystems
entwickelt und wurde primär unter Sun Solaris zum Einsatz gebracht. ZFS ist Transaktionsorientiertes Dateisystem
was ohne Journalisierung arbeitet. In diesem Fall wird bei einem Schreibvorgang ein modifizierter Datenblock zusätzlich
in das Dateisystem geschrieben und dann nach erfolgreicher Arbeit der "alte" Datenblock erst gelöscht. So kann
es in der Praxis nie zu inkonsistenten Daten kommen. Wer Details über ZFS erfahren möchte darf gern Google bemühen.
Also! Meine Aufgabe war es einen Fileserver aufzubauen, dem ich meinen gesamten Bilderbestand in der Größe von
1000 GByte in Form von 74348 Bilddateien (NEF/TIF/JPEG) anvertrauen wollte. Warum nun ZFS? Die Frage beantworte
ich gern im Laufe dieses Threads. Ich möchte erst einmal ein paar Beispiele zeigen wie ZFS im Betrieb ausschaut.
Es gibt ein paar mächtige Befehle die auch ein Non-Root-User ausführen kann um sich eine Lage über das Datei-
systems zu verschaffen. Im folgenden Beispiel soll mir ZFS zeigen was es kennt. Bei ZFS wird i.d.R. nur mit
Dateisystemen gearbeitet. Partitionen (gibt es aber) werden hier nicht benötigt.
ZFS nun zeig mir mal wie mein Dateisystem aussieht:
Code:
# zpool status
pool: raid1p1
state: ONLINE
scan: scrub repaired 0 in 4h46m with 0 errors on Sat Feb 2 07:56:07 2013
config:
NAME STATE READ WRITE CKSUM
raid1p1 ONLINE 0 0 0
mirror-0 ONLINE 0 0 0
ada1 ONLINE 0 0 0
ada2 ONLINE 0 0 0
mirror-1 ONLINE 0 0 0
ada3 ONLINE 0 0 0
ada4 ONLINE 0 0 0
errors: No known data errors
Wie man oben sehen kann besteht mein Speicherpool ("raid1p1") aus vier 2TB Festplatten. Jeweils zwei Festplatten
sind in einem Spiegel (Mirror aka RAID1) zusammengefasst. Es gibt den Plattenpool "mirror-0" und "mirror-1". Die
Festplatten unter FreeBSD werden je nach Controller mit entsprechenden Namen versehen. In diesem Fall sind es
die Festplatten ada1, ada2, ada3 und ada4. Die Plattenspiegel war für mich die erste Wahl. ZFS kann natürlich
auch diverse RAID-Level. Die muss ich als Administrator aber eigentlich nicht kennen. ZFS nimmt sich die Platten
und schaut welchen sinnvollen RAIDZ-Level es dafür einrichtet. Soll mir Recht sein. Wozu gibt es Computer?!
Leider verbrauchen Spiegel immer viel Kapazität. Bei zwei 2TB Festplatten bleiben mir Netto ca. 1.8TB übrig.
Bei ZFS spielt sich aber alles in einem oder mehreren Pools ab. Jetzt kann ich mit einem einfachen Befehl weitere
Platten zu meinem Speicherpool hinzufügen. Dazu gebe ich ein: "zpool add raid1p1 mirror ada3 ada4". Was ist
passiert? ZFS hat die beiden Festplatten ada3 und ada4 zum Pool "raid1p1" hinzugefügt. Und das bedeutet was?
ZFS wieviel Platz habe ich den nun???
Code:
# zpool list
NAME SIZE ALLOC FREE CAP DEDUP HEALTH ALTROOT
raid1p1 3.62T 1.28T 2.35T 35% 1.00x ONLINE -
Wie man nun sieht hat ZFS einfach meinen gespiegelt Pool um einen weiteren Spiegel erweitert und es sind
nun Netto 3.62TB für Daten verfügbar. Ist das auch alles gut?
ZFS nun sag mir mal wie Du Dich "fühlst" ?
Code:
# zpool status -x
all pools are healthy
Naja! Jetzt haben wir einen Speicherpool. Schön! Und nun? Mit "zfs list" zeige ich Euch mal das aktuelle
Dateisystem was ich im Einsatz habe. Die vielen Unterstriche in den Namen habe ich für diesen Artikel
eingefügt. Im Original stehen dort Unix-Usernamen. ZFS zeigt mir nun eine Liste von Pfaden. Auf der
linken Seite der Pool mit seinen Töchtern und ganz Rechts der sog. Mountpoint. ZFS benötigt keinen /etc/fstab
und Filesysteme müssen nicht gemounted werden. ZFS macht das alles selbst (auch nach dem Boot). ZFS ist
unter FreeBSD als vollwertige Kernel-Implementierung gegeben und damit sehr schnell. Es braucht allerdings
mindestens 4 GB RAM um "vernünftigt" arbeiten zu können. Im normalen Betrieb habe ich eine Speicherauslastung
von 10-12 GB (ohne Software). Unter Linux (bedingt durch die Lizenz) ist es nur als langsamere FUSE-Implementierug
vorhanden (bzw. wird in Distributionen so ausgeliefert). Das aber nur als kurze Anmerkung.
Code:
# zfs list
NAME USED AVAIL REFER MOUNTPOINT
raid1p1 2.36T 1.21T 31K /raid1p1
raid1p1/development 47.2M 4.95G 47.2M /development
raid1p1/home 2.16T 1.21T 50.5K /home
raid1p1/home/a_____r 145G 15.2G 140G /home/a_____r
raid1p1/home/a_____r/mail 155M 4.85G 154M /home/a_____r/mail
raid1p1/home/a__________r 186K 500M 186K /home/a__________r
raid1p1/home/c______t 38.5K 500M 38.5K /home/c_____t
raid1p1/home/c___e 36K 500G 36K /home/c___e
raid1p1/home/d________t 40.5K 500M 40.5K /home/d_______t
raid1p1/home/j______r 186M 838M 186M /home/j______r
raid1p1/home/m______ 1.06T 959G 1.06T /home/m______
raid1p1/home/m______/mail 1.54G 3.46G 1.54G /home/m______/mail
raid1p1/home/nanog 31.2M 469M 31.2M /home/nanog
raid1p1/home/netop 40K 500M 40K /home/netop
raid1p1/home/n_____ 2.17M 498M 2.17M /home/n______
raid1p1/home/o___ 110M 390M 110M /home/o____
raid1p1/home/s______r 20.5M 1003M 20.5M /home/s_______r
raid1p1/home/t__r 31K 1024M 31K /home/t__r
raid1p1/home/v_____p 159M 1.84G 159M /home/v_______p
raid1p1/home/x______n 228K 1024M 228K /home/x_______n
raid1p1/log 12.9M 1.99G 12.9M /var/log
raid1p1/mail 213M 9.79G 213M /var/mail
raid1p1/migration 4.39G 624M 4.39G /migration
raid1p1/mysqldb 48.5M 9.95G 48.5M /var/db/mysql
raid1p1/public 3.86M 4.00G 3.86M /public
raid1p1/software 71.7G 28.3G 71.7G /software
raid1p1/storage 5.36G 1.30T 1.23G /storage
raid1p1/storage/compressed 4.09G 1.30T 4.09G /storage/compressed
raid1p1/storage/squid 35.0M 1.30T 35.0M /var/squid
Werden wir mal ein wenig praktischer. Ich habe für Euch eine 500 GB USB-Festplatte an den Server angeschlossen.
Mit "dd if=/dev/zero of=/dev/da0" habe ich die ersten Sektoren ausgenullt. Erstellen wir mal einfach mal einen
weiteren Speicherpool mit dem Namen "usbdisk" im System und schauen uns das ganze an:
Code:
# zpool create usbdisk /dev/da0
# zpool status
pool: raid1p1
state: ONLINE
scan: scrub repaired 0 in 4h46m with 0 errors on Sat Feb 2 07:56:07 2013
config:
NAME STATE READ WRITE CKSUM
raid1p1 ONLINE 0 0 0
mirror-0 ONLINE 0 0 0
ada1 ONLINE 0 0 0
ada2 ONLINE 0 0 0
mirror-1 ONLINE 0 0 0
ada3 ONLINE 0 0 0
ada4 ONLINE 0 0 0
errors: No known data errors
pool: usbdisk
state: ONLINE
scan: none requested
config:
NAME STATE READ WRITE CKSUM
usbdisk ONLINE 0 0 0
da0 ONLINE 0 0 0
errors: No known data errors
# zpool list
NAME SIZE ALLOC FREE CAP DEDUP HEALTH ALTROOT
raid1p1 3.62T 1.28T 2.35T 35% 1.00x ONLINE -
usbdisk 464G 89.5K 464G 0% 1.00x ONLINE -
Wir haben nun einen Pool "usbdisk" mit 464GB Nettokapazität erzeugt. Prüfen wir das mal!
OK. ZFS hat sofort den Pool in das System eingehängt und wir können Daten abspeichern.
Code:
# df -h
Filesystem Size Used Avail Capacity Mounted on
/dev/ada0p2 51G 9.2G 38G 19% /
devfs 1.0k 1.0k 0B 100% /dev
procfs 4.0k 4.0k 0B 100% /proc
raid1p1/development 5.0G 47M 5G 1% /development
raid1p1/home 1.2T 50k 1.2T 0% /home
...
usbdisk 456G 31k 456G 0% /usbdisk (Mountpoint == Pool).
Ein kleiner Test! Und wie wir sehen gibt es nun zwei leere Dateien mit den Namen "Hallo" und "NF-F".
Ich mußte keine Formattierung oder dergleichen durchführen. Geht einfach!
Code:
# cd /usbdisk
# touch Hallo NF-F
# ls -la
total 7
drwxr-xr-x 2 root wheel 4 Feb 5 22:41 .
drwxr-xr-x 31 root wheel 1024 Feb 5 22:37 ..
-rw-r--r-- 1 root wheel 0 Feb 5 22:41 Hallo
-rw-r--r-- 1 root wheel 0 Feb 5 22:41 NF-F
Im Folgenden möchte ich mein Dateisystem aber besser strukturieren. Ich lege daher ein neues Dateisystem
im Speicherpool "usbdisk" von ZFS an. Dateisystem? Sieht doch aus wie ein normales Directory?!
Code:
# zfs create usbdisk/NikonFotografieForum
# zfs list
NAME USED AVAIL REFER MOUNTPOINT
...
usbdisk 130K 457G 31K /usbdisk
usbdisk/NikonFotografieForum 31K 457G 31K /usbdisk/NikonFotografieForum
# ls -la
total 8
drwxr-xr-x 3 root wheel 5 Feb 5 22:42 .
drwxr-xr-x 31 root wheel 1024 Feb 5 22:37 ..
-rw-r--r-- 1 root wheel 0 Feb 5 22:41 Hallo
-rw-r--r-- 1 root wheel 0 Feb 5 22:41 NF-F
drwxr-xr-x 2 root wheel 2 Feb 5 22:42 NikonFotografieForum
Warum ist "NikonFotografieForum" jetzt ein weiteres Dateisystem? Das zeigt uns gleich ein paar
Abfragen und Einstellungen in ZFS. Stellen wir uns vor ich möchte "usbdisk/NikonFotografieForum" als
"fForum" nutzen. Dann gebe ich folgendes ein:
Code:
# zfs set mountpoint=/forum usbdisk/NikonFotografieForum
# df -h
Filesystem Size Used Avail Capacity Mounted on
...
usbdisk 456G 31k 456G 0% /usbdisk
usbdisk/NikonFotografieForum 456G 31k 456G 0% /forum <== umgehängt!
Im laufenden Betrieb kann ich die Dateisystem einfach umhängen. Nun habe ich neben /home etc. auch
ein /forum. Komisch! Warum habe alle Dateisysteme (/usbdisk und /forum) die selbe Größe (456G) ?
Das liegt daran, daß diese im selben Pool liegen. Finde ich das gut? Nein! Weil ich möchte maximal
10GB darin ablegen können. Andererseits soll aber auch garantiert werden, daß ich mindestens 5GB auch
wirklich nutzen kann. Weil wenn ich in "/usbdisk" Daten speichere geht das vom Pool ab und alle weiteren
Dateisysteme werden verringert. Aber wir sind hier ja bei ZFS. Also ...
Code:
# zfs set quota=10G usbdisk/NikonFotografieForum
# zfs set reservation=5G usbdisk/NikonFotografieForum
# df -h
Filesystem Size Used Avail Capacity Mounted on
usbdisk 451G 31k 451G 0% /usbdisk
usbdisk/NikonFotografieForum 10G 31k 10G 0% /forum
Wir sehen nun das "/forum" maximal 10GB Daten aufnehmen kann und auch noch ~10GB frei hat. Stimmt das?
OK! Wir prüfen das einfach mal:
Code:
# zfs get avail,quota,used,reservation usbdisk/NikonFotografieForum
NAME PROPERTY VALUE SOURCE
usbdisk/NikonFotografieForum available 10.0G -
usbdisk/NikonFotografieForum quota 10G local
usbdisk/NikonFotografieForum used 31K -
usbdisk/NikonFotografieForum reservation 5G local
In der letzten Zeile sehen wir unsere Reservierung. Egal was passiert das ZFS garantiert nun für "/forum"
eine Mindestkapazität von 5GB. Ups! Ich wollte doch eigentlich 6GB Reservierung haben und nur maximal 8GB.
Kein Problem ...
Code:
# zfs set quota=8G usbdisk/NikonFotografieForum
# zfs set reservation=6G usbdisk/NikonFotografieForum
# zfs get avail,quota,used,reservation usbdisk/NikonFotografieForum
NAME PROPERTY VALUE SOURCE
usbdisk/NikonFotografieForum available 8.00G -
usbdisk/NikonFotografieForum quota 8G local
usbdisk/NikonFotografieForum used 31K -
usbdisk/NikonFotografieForum reservation 6G local
Ihr seht man kann ganz einfach im laufenden Betrieb die Resourcenverteilung verändern. Ich speichere aber
häufig auch Texte im Dateisystem. Text kann man doch gut "zusammenfassen" (Komprimierung). ZFS bietet mir
dafür eine Online-Komprimierung an.
ZFS bitte komprimiere alles was ich in das Dateisystem kopiere ...
Code:
# zfs set compression=on usbdisk/NikonFotografieForum
# zfs get compression,compressratio usbdisk/NikonFotografieForum
NAME PROPERTY VALUE SOURCE
usbdisk/NikonFotografieForum compression on local
usbdisk/NikonFotografieForum compressratio 1.00x -
Jetzt kopiere ich mal ein paar Texte in das Dateisystem. Ich nutze dazu einfach den Befehl
"man zfs >> /forum/zfs-manual.txt" (mehrfach) und dann sieht das so aus:
Code:
# df -h
usbdisk/NikonFotografieForum 8.0G 275k 8G 0% /forum
# ls -la /forum
total 250
drwxr-xr-x 2 root wheel 3 Feb 5 23:01 .
drwxr-xr-x 32 root wheel 1024 Feb 5 22:46 ..
-rw-r--r-- 1 root wheel 434128 Feb 5 23:01 zfs-manual.txt
# zfs get compression,compressratio usbdisk/NikonFotografieForum
NAME PROPERTY VALUE SOURCE
usbdisk/NikonFotografieForum compression on local
usbdisk/NikonFotografieForum compressratio 2.04x -
Wie man oben sieht wurde eine Datei mit dem Namen "zfs-manual.txt" angelegt. Diese ist 434128 Bytes groß.
Belegt werden aber nur 275k (inkl. Verwaltungsdaten) in "/forum". ZFS scheint komprimiert zu haben und
das ohne Zeitverzögerung. Mit dem "zfs get ..." Befehl sehe ich nun einen Faktor 2.04x für die Komprimierung.
Mir gefällt dieser transparente Mechanismus. Speicherplatz sparen und Sicherheit in einer Lösung.
Und das ist natürlich nicht alles was das Dateisystem kann. Ich erzeuge in festen Intervalen in meinem
mir wichtigen Dateisystem-Strukturen eine sog. Snapshot. Snapshots ist eine Funktionalität die meistens
nur Volume Manager beherrschen. Also ext2/3/4, ufs etc. haben dieses Feature in der Regel nicht. Was bedeutet das?
Das Dateisystem ZFS merkt sich alle Änderungen ab dem Zeitpunkt wo ich den Snapshot setze. Der Befehl
lautet wie folgt:
Code:
# zfs snapshot usbdisk/NikonFotografieForum[MENTION=39745]Frozen[/MENTION]
In diesem Beispiel wird ein Snapshot mit dem Label "frozen" im Pool "usbdisk" und dem Dateisystem
"NikonFotografieForum" angelegt. Das @-Symbol leitet den Namen des Snapshots ein. Mit dem Befehl ...
Code:
# zfs list -t snapshot
NAME USED AVAIL REFER MOUNTPOINT
raid1p1/home/a____r@daily22 0 - 140G -
raid1p1/home/a____r/mail@daily22 638K - 154M -
raid1p1/home/m_____@daily22 4.50M - 1.06T -
raid1p1/home/m_____/mail@daily22 89.5K - 1.54G -
usbdisk/NikonFotografieForum[MENTION=39745]Frozen[/MENTION] 0 - 275K -
... kann ich mir die aktuellen Snapshots anschauen und sehe wieviel Änderungen dort vorhanden sind.
Über einen Snapshot kann ich jederzeit ein Backup anfertigen ohne inkonsistente Daten zu haben. Ich gehe
sogar ein Schritt weiter. Ich lösche versehentlich meine Datei "zfs-manual.txt":
Code:
# rm zfs-manual.txt
# ls -la
total 6
drwxr-xr-x 2 root wheel 2 Feb 5 23:13 .
drwxr-xr-x 32 root wheel 1024 Feb 5 22:46 ..
Die Datei ist weg. Stellt euch vor das wäre das bestes Foto in 2012 gewesen. Weg! Nun kommt der Snapshot
zum tragen. Wir zaubern ...
Code:
# zfs rollback usbdisk/NikonFotografieForum[MENTION=39745]Frozen[/MENTION]
# ls -la
total 250
drwxr-xr-x 2 root wheel 3 Feb 5 23:01 .
drwxr-xr-x 32 root wheel 1024 Feb 5 22:46 ..
-rw-r--r-- 1 root wheel 434128 Feb 5 23:01 zfs-manual.txt
Die Daten sind wieder da. Und zwar in dem selben Zustand wie sie zum Zeitpunkt des Snapshots vorgelegen haben. Soo! Das war es erst einmal. Sicherlich kein Thema für alle aber es soll ja auch nur ein Erfahrungsbericht sein. Ich greife via SAMBA im Netzwerk mit meinen Windows XP/7-Clients auf den Server zu. Im Gigabit-Netz erreiche ich ca. 70 Mbyte/s im Schreib-/Lesezugriff. Ergänzungen / Korrekturen natürlich gern willkommen.
- Fortsetzung folgt sofern Interesse besteht -