# ZFS auf Linux/ Dataset
## Dataset
### Allgemeines

* Es gibt 5 Typen von Datasets:
* Filesysteme: Dieser Typ ähnelt traditionellen Filesystemen am meisten. Er soll im folgenden als Dataset bezeichnet werden.
* Volumes
* Snapshots
* Clones
* Bookmarks
* Files müssen in einem Dataset (genau in einem Filesystem-Dataset) gespeichert werden. Datasets werden in einem zpool gespeichert. zpools sind nicht dafür gemacht, Daten direkt darin zu speichern.
* Ein Dataset ist eine Menge von Daten mit bestimmten, gemeinsamen Policies. Dies erinnert am ehesten an eine traditionelle Partition. Datasets sind aber ungleich flexibler.
* Unter ZFS legt man üblicherweise sehr viele Datasets an, da dies die Kontrolle über die Daten erleichtert. Bei traditionellen Partitionen wäre dies ein Albtraum.
* Alle Datasets teilen sich den Speicher eines zpools:
** Sie belegen nur so viel Platz im Pool, wie die dort gespeicherten Daten tatsächlich benötigen.
** Man kann Datasets Grenzen (Quotas) setzen. Diese Grenzen lassen sich im Betrieb dynamisch verändern. Man muss sich beim Anlegen eines Datasets keine Gedanken um die Größe machen wie bei den Partitionen.
* Man kann Datasets hierarchisch aufbauen, also ineinander verschachteln. Eigenschaften werden in dieser Hierarchie vererbt, können aber in jeden Dataset auch verändert werden.
* Man sollte einer Gruppe von Files/Directories ein Dataset zuweisen, wenn sie eine oder mehrere der aufgezählten Eigenschaften gemeinsam haben sollen.
* Der Admin kann die Verwaltung eines Datasets an einen User (Projektleiter) ohne root-Rechte delegieren.
* Jedes Dataset wird beim Anlegen automatisch gemountet.
* Einem Dataset kann man bestimmte Eigenschaften mitgeben:
** einen Mountpoint
** Quota
** Komprimierung
** Deduplizierung
** permissions
** Eigenschaften der Snapshots
** atime aktualisieren oder nicht
** exec oder nicht
** recordsize
* Datasets werden mit dem Befehl "zfs" verwaltet.

### Dataset anlegen

zfs create legt Datasets und Sub-Datasets, also eine Hierarchie von Datasets, in dem angegeben Pool an.
| Befehl | Erklärung |
| zfs create | legt Dataset an |
| zpooltest/dataset-2/dataset-2.1 | Name des Pools/Name des Datasets/Name des Sub-Datasets |
| zfs list | listet die Eigenschaften der Datasets |
Achtung: Der name des zpools beginnt nicht mit einem "/".

### Dataset mounten

Datasets werden nach dem Anlegen automatisch gemountet:
Mit den Befehl mountall aus dem Paket "ubuntu-zfs", das beim Booten aufgerufen wird, kann man die Datasets dauerhaft mounten.

### Datasets füllen

Das folgende Beispiel zeigt, wie Files in den diversen Datasets Platz in dem gemeinsamen Pool belegen:

### Dataset umbenennen,verschieben

"zfs rename" kann sowohl Datasets umbenennen als auch Datasets von einem Ende des zpools an das andere verschieben.
Hierarchie vor und nach obigen beiden Befehlen:
Man muss dabei beachten:
* Wenn ein Dataset neue Eltern bekommt, werden von diesen möglicherweise andere Eigenschaften vererbt.
* Die Dataset-spezifischen Eigenschaften bleiben unverändert.
* Der Mountpoint ändert sich schlagartig. Mit der Option "-u" kann man dies verhindern.

### Dataset zerstören

Vorsicht: Das Dataset wird ohne Rückfrage und Warnung zerstört.
| Befehl | Erklärung |
| zfs destroy | zerstört Dataset mit Inhalt ohne Warnung/Rückfrage |
| zpooltest/dataset-2/dataset-2.1 | Name des Pools/Name des Datasets/Name des Sub-Datasets |
Liste der Datasets vor und nach "zfs destroy"
mehr zu mountall, rename, Optionen