Hetzner - DokuWiki

OpenSolaris ZFS-Grundlagen

OpenSolaris verwendet standardmäßig das Dateisystem "ZFS", das u.a. folgende Funktionalität anbietet:

  • beschreibbare Snapshots
  • transparente Kompression (mit LZJB oder GZIP)
  • Subvolumes (deren Administration bestimmten Benutzern überlassen werden kann)
  • Volumen-basierte Quotas und Reserven
  • Checksummen für alle Daten (erhöhte Datenintegrität)
  • kein fsck notwendig: Daten sind stets konsistent
  • (manuelle, nicht-kontinuierliche) Replikation mit "zfs send" und "zfs receive"

Inhaltsverzeichnis

Pools / Subvolumes auflisten

Um verfügbare ZPools aufzulisten, können Sie folgenden Befehl verwenden:

$ zpool list
NAME      SIZE   USED  AVAIL    CAP  HEALTH  ALTROOT
rpool    49.8G  8.33G  41.4G    16%  ONLINE  -
storage   648G   206G   442G    31%  ONLINE  -

Für Volumen gilt analog:

$ zfs list
NAME                                 USED  AVAIL  REFER  MOUNTPOINT
rpool                               12.0G  37.0G  81.5K  /rpool
rpool/ROOT                          3.33G  37.0G    19K  legacy
rpool/ROOT/opensolaris               263M  37.0G  3.07G  /
rpool/ROOT/opensolaris-1            63.8M  37.0G  3.07G  /
rpool/ROOT/osol-recovery            3.01G  37.0G  2.86G  /
rpool/dump                          4.00G  37.0G  4.00G  -
rpool/export                         678M  37.0G    21K  /export
rpool/export/home                    678M  37.0G    21K  /export/home
rpool/export/home/gunnar             678M  37.0G   678M  /export/home/gunnar
rpool/swap                          4.00G  40.6G   344M  -
rpool/xendumps                        19K  37.0G    19K  /var/xen/dump
storage                              292G   346G    22K  /storage
[...]

Subvolumes erstellen / zerstören

Verwenden Sie folgenden Befehl, um ein Subvolume zu erstellen und dafür die Kompression zu aktivieren:

$ pfexec zfs create storage/source

"storage" ist hierbei der Name des ZPools, während "source" der Name des neuen Subvolumes ist. Sie können Subvolumes auch über weitere Ebenen schachteln (z.B. storage/source/onnv).

Sie können die Kompression für ein Subvolume wie folgt aktivieren (bereits vorhandene Daten werden erst dann komprimiert, wenn sie überschrieben werden):

$ pfexec zfs set compression=on storage/source

Alle weiteren verfügbaren Einstellungen sowie statistische Daten (z.B. die Kompressionsrate) können Sie mit folgendem Befehl einsehen:

$ zfs get all storage

Ein nicht mehr verwendetes Subvolume (inkl. aller darin enthaltenen Dateien) kann wie folgt wieder gelöscht werden:

$ pfexec zfs destroy storage/source

Falls ein Volume weitere Subvolumes oder Snapshots enthält, müssen diese zunächst entweder mit dem Parameter "-r" (rekursives Löschen) oder manuell mit "zfs destroy" entfernt werden.

Snapshots

Snapshots sind nur-lesbare Momentaufnahmen eines Volumes, die zunächst keinen Speicherplatz benötigen, da ZFS auf dem Copy-on-Write-Prinzip basiert. Speicherplatz wird durch Snapshots erst dann verbraucht, sobald Änderungen am ursprünglichen Dateisystem durchgeführt werden.

Im Gegensatz zu LVM-Snapshots unter Linux muss für ZFS-Snapshots kein Speicherplatz im Vorfeld reserviert werden.

Snapshots können mit folgendem Befehl erstellt werden:

$ pfexec zfs snapshot storage/source@snap-1

"snap-1" ist hierbei der Name des zu erstellenden Snapshots. Snapshots werden normalerweise in "zfs list" nicht angezeigt - verwenden Sie hierfür den Parameter "-t all":

$ zfs list -r -t all storage/source
NAME                    USED  AVAIL  REFER  MOUNTPOINT
storage/source          197M  15.4G   197M  /storage/source
storage/source@snap-1      0      -   197M  -

Dateien aus Snapshots sind standardmäßig nicht im Dateisystem sichtbar. Um auf die Dateien zuzugreifen, haben Sie drei Möglichkeiten:

  • Setzen Sie die "snapdir"-Eigenschaft des Volumes auf "visible":
$ pfexec zfs set snapdir=visible storage/source

Über das Verzeichnis ".zfs/snapshots", das sich unterhalb des Mountpunkts des jeweiligen Subvolumes befindet, können Sie auf die Snapshots zugreifen:

$ ls -l /storage/source/.zfs/snapshot/
total 2
drwxr-xr-x 3 root root 3 2009-07-17 18:50 snap-1
  • Erstellen Sie einen Clone für den Snapshot
$ pfexec zfs clone storage/source@snap-1 storage/source-snap-1

Bei einem Clone handelt es sich um eine beschreibbare Copy-on-Write-Kopie des Quellsnapshots.

  • Führen Sie ein Rollback aus, hierbei werden die Daten des Quelldateisystems auf den Stand des Snapshots zurückgesetzt:
$ pfexec zfs rollback storage/source@snap-1

Weitere Befehle für die Verwaltung von Snapshots finden Sie in der Manpage zfs(1m).

Automatische Snapshots

OpenSolaris bietet mehrere Dienste, um automatisch in bestimmten Intervallen Snapshots von ZFS-Dateisystemen zu erstellen:

$ svcs -a | grep auto-snapshot
disabled       15:25:02 svc:/system/filesystem/zfs/auto-snapshot:hourly
disabled       15:25:02 svc:/system/filesystem/zfs/auto-snapshot:frequent
disabled       15:25:02 svc:/system/filesystem/zfs/auto-snapshot:daily
disabled       15:25:02 svc:/system/filesystem/zfs/auto-snapshot:weekly
disabled       15:25:02 svc:/system/filesystem/zfs/auto-snapshot:monthly

Aktivieren Sie zunächst die gewünschten Dienste, z.B.:

$ pfexec svcadm enable zfs/auto-snapshot:hourly
$ pfexec svcadm enable zfs/auto-snapshot:daily

Danach können Sie für einzelne Volumes die automatischen Snapshots aktivieren:

$ pfexec zfs set com.sun:auto-snapshot=true storage/source

Beachten Sie hierbei, dass ZFS Eigenschaften standardmäßig an Subvolumes vererbt, und somit beispielsweise auch für storage/source/onnv automatisch Snapshots erstellt werden.

Weitere Informationen zu automatischen Snapshots finden Sie hier.



© 2012. Hetzner Online AG. Alle Rechte vorbehalten.