ZFS
Allgemeine Hinweise
ZFS wird von SUN seit Solaris 10 6/06 supportet. Damit kann man wohl davon ausgehen, dass die Kinderkrankheiten beseitigt sind. Ausführliche Information über ZFS findet man hier. Die Eckdaten machen deutlich, das es für die Zukunft designed ist:
| Wortlänge | 128-Bit |
| Volumemanager | Integriert |
| Ausfallsicherheit | RAID 1, RAID-Z1 (~RAID 5) und RAID-Z2 (~RAID 6) integriert |
| Höchstanzahl von Dateien | 248 |
| maximale Größe des Dateisystems | 16 Exbibyte (= 16 × 260 Byte) |
| maximale Größe einer Datei | 16 Exbibyte (= 16 × 260 Byte) |
| maximale Größe jedes Pools | 3 × 1023 Pebibyte (ca. 2 × 1038 Byte) |
| maximale Anzahl an Dateien in einem Verzeichnis | 256 |
| maximale Anzahl an Geräten im zPool | 264 |
| Dateisysteme im zPool | 264 |
| zPools im System | 264 |
ZFS ist dabei nicht ausschließlich ein Filesystem, sondern es ist gleichzeitig auch Volumemanger. Diese beiden Teile finden sich auch in der Administration wieder. Über die beiden Kommandos zfs (Filesystem) und zpool (Volumemanager) lässt sich alles administrieren.
Besonders hervorzuheben ist das ZFS mit Hilfe von Checksummen die Datenintegrität sicherstellt. Das bedeutet, das z.B. bei Plattenspiegelung eindeutig festgestellt werden kann, welcher Spiegel defekt und welcher intakt ist. Im Gegensatz zu den alten Volumemanager / Filesystem Kombinationen ist das ein großer Fortschritt für die Datenintegrität. Das alte “fsck” entfällt dadurch.
Hier nun meine Übliche “Befehlssammlung” zum Thema. Wie immer gibt es keine Garantie, weder auf Vollständigkeit noch auf Fehlerfreiheit. Wenn man sich auf dieser Ebene bewegt sollte man wissen was man tut, oder es bleiben lassen und Support einkaufen.
ZFS Pools (der Volumemanager …)
Alle Filesysteme sind in Pool organisiert. Einem Pool stellt man normalerweise die gesamte Platte zur Verfügung, aber es geht natürlich auch Partitionsweise (RAID Sets machen auf Partitions Ebene keinen Sinn). Die Devices können einzeln, gespiegelt oder in RAID 5 (RAID Z) Pools gepackt werden.
1. Infos Sammeln
zpool list
zpool status [-xv] <pool>
-x : nur fehlerhafte
-v : verbose
zpool history [-il] <pool>
-i : zusätzlich zu User Events auch interne Events
-l : long
2. Anlegen und Löschen
zpool create [-fn] [-m mountpoint] <pool> <vdev>
-f : force (könnte auch schon benutzt sein …)
-n : nur anzeigen, nix machen
vdev: disk, file, mirror, raidz, raidz1, raidz2, spare
zpool destroy [-f] <pool>
3. Devices (Platten) hinzufügen und entfernen (für Erweiterung)
zpool add [-fn] <pool> <vdev>
zpool remove <pool> <vdev>
4. Spiegeln
zpool attach [-f] <pool> <device> <new-device>
zpool detach <pool> <device>
5. Devices wechseln
zpool replace [-f] <pool> <device> <new-device>
6. Export / Import
zpool export [-f] <pool>
zpool import <pool>
7. Überprüfen
zpool scrub [-s] <pool>
-s : Stoppen
8. Pool Einstellungen
zpool get all <pool>
zpool set property=value <pool>
Hilfreich bei defekten Pools. Default ist “wait”, damit klemmen dann auch alle Status Abfragen:
zpool set failmode=continue <pool>
9. Performance
zpool iostat [-v] [<pool>] … [interval [count]]
ZFS Datasets (das Filesystem …)
Und das hier ist dann das Filesystem, das man nicht kleiner machen kann, weil es auch nur den Platz beansprucht den der aktuelle Füllstand benötigt. Vergrößern und Formatieren muss man es auch nicht …
Aber neben Filesystemen umfasst der Begriff Dataset auch Volumes (zB. RAW Volume für DB) und Snapshots.
1. Inofs Sammeln
zfs list [-r] [filesystem|volume|snapshot]
-r : rekursiv
2. Anlegen und Löschen
zfs create [-p} [-o property=value] <filesystem>
-p : alle nicht vorhanden Parents werden auch angelegt
zfs create [-ps] [-b blocksize] [ -o property=value] -V <size> <volume>
-s : sparse volume ohne Platzreservierung
zfs destroy [-rRf] <filesystem|volume|snapshot>
-R : rekursiv auch mit Clone
3. Umbenennen
zfs rename <filesystem|volume|snapshot> <filesystem|volume|snapshot>
5. Snapshots
zfs snapshot [-r] <filesystem@snapname|volume@snapname>
zfs rollback [-rFf] snapshot
destroy und rename funktionieren genau wie bei Filesystemen oder Volumes
6. Clones
Snapshots sind nur read-only. Zum Bearbeiten brauchen wir einen Clone von einem Snapshot
zfs clone [-p] <snapshot> <filesystem|volume>
Es besteht aber nach wie vor eine Abhänigkeit zwischen dem Snapshot und dem Clone. Wenn man den Snapshot löschen will, geht das erst wenn man den Clone “promotet”, dh. die Abhängigkeit auflöst.
zfs promote <clone-filesystem>
7. Dataset Replications und Backups
Immer nur die Snapshots …. macht doch Sinn oder?
zfs send <snapshot>
zfs receive <filesystem|volume|snapshot>
zfs receive -d <filesystem>
Beispiele:
# zfs send tank/fish@trip | zfs receive newpool/crab@trap
# zfs send tank/fish@trip | ssh faraway zfs receive backup_tank/fish
# zfs send -R tank@today | zfs receive -d backup
8. Dataset Einstellungen
zfs get all <filesystem|volume|snapshot>
zfs set property=value <filesystem|volume|snapshot>
Damit werden z.B Mountpoints gesetzt oder auch die Kompression eingeschaltet. Quotation und Reservation werden auch als Property gesetzt.
9. Owner
zfs allow <everyone|user|group> <filesystem|volume>
zfs unallow <everyone|user|group> <filesystem|volume>
Versionierung / Upgrades
Anzeigen der verfügbaren Version auf dem System
zpool upgrade [-v]
Upgrade des gesamten Pools
zpool upgrade <pool>
Upgrade einzelner Datasets
zfs upgrade [-r] [-V version] <filesystem>





Ergänzt am 02.03.2010