# Grundsätzliches

Kurze Übersichten über die verfügbaren Befehle welche zur Verwaltung von ZFS Arrays benötigt werden

# Pools

### Pools auflisten

```bash
sudo zpool list
```

<div id="bkmrk-sudo-zpool-list-neue"><div><span style="font-size: 2.333em; font-weight: 400;">Neuen </span><span style="font-size: 2.333em; font-weight: 400;">ZFS Pool auf einer einzelnen Festplatte erstellen:</span>  
</div></div>```bash
sudo zpool create vol0 /dev/sd[x]
```

<div id="bkmrk-"></div><p class="callout info">Der neu erstellte Pool wird automatisch unter `/[pool name]` gemounted</p>

### Alle Datasets in einem Pool löschen

```bash
sudo zfs destroy -r [pool name] 
```

<div id="bkmrk--0"></div>### Pool löschen

```bash
sudo zpool destroy [pool name]
```

<div id="bkmrk-festplattenstatus-ei"><div><span style="font-size: 2.333em; font-weight: 400;">Festplattenstatus einsehen</span>  
</div></div>```bash
sudo zpool status
```

<div id="bkmrk-sudo-zpool-status-po"><div><span style="font-size: 2.333em; font-weight: 400;">Poolbalance einsehen</span>  
</div></div>```bash
zpool list -v
```

<div id="bkmrk--1"></div><p class="callout warning">Wird einem bestehendem Pool eine weitere Festplatte hinzugefügt, kann es passieren dass die Daten über alle Festplatten ungleichmäßig verteilt werden da ZFS kein automatisches Balancing betreibt.   
  
Der einfachste Weg den Pool zu balancen wäre ein neues Dataset zu erstellen und alle Daten auf dieses zu verschieben und danach wieder zurück.   
  
Dies sollte jedoch nicht mit `mv` getan werden, da hierbei erst alle Daten kopiert und danach gelöscht werden - Der Speicherplatz könnte für dieses Verfahren nicht ausreichen! Besser ist es hierfür `rsync` zu verwenden da hierbei eine Datei nach der anderen verschoben wird und keine doppelte Belegung des Speicherplatzes entsteht</p>

# Scrubbing

### Pool scrubben (Dateien auf Integrität prüfen)

```
sudo zpool scrub [pool name]
```

<p class="callout info">Den Fortschritt des Scrubbings kann man mit `sudo zpool status` einsehen</p>

# Datasets

### Dataset erstellen

```shell
sudo zfs create [pool name]/[dataset name]
```

<p class="callout info">ZFS wird das neue Dataset automatisch unter `/path/to/pool/[dataset name]` mounten</p>

##### Kaskadiertes Dataset erstellen

```shell
sudo zfs create [pool name]/[dataset name]/[descendent filesystem]
```

### Alle Datasets und Pools auflisten

```shell
sudo zfs list
```

### Dataset löschen

```shell
sudo zfs destroy [pool name]/[dataset name]
```

<p class="callout info">Ein Dataset kann nicht gelöscht werden solange noch Snapshots oder Klone dieses Datasets bestehen</p>

### Dataset Recordsize setzen

```shell
sudo zfs set recordsize=[size] pool/dataset/name
```

<p class="callout info">Die Recordsize muss mit der richtigen Einheit angegeben werden, bspw. 16k, 128k, 1M, 1G usw.</p>

### Dataset Recordsize abfragen

```shell
sudo zfs get recordsize pool/dataset/name
```

# Snapshots

### Snapshot eines Datasets anlegen

```shell
sudo zfs snapshot [pool]/[dataset name]@[snapshot name]
```

### Snapshots auflisten

```shell
sudo zfs list -t snapshot
```

### Snapshot umbenennen

```shell
sudo zfs rename [pool]/[dataset]@[old name] [new name]
```

### Zu einem Snapshot zurückkehren / wiederherstellen

```shell
sudo zfs rollback -r [pool]/[dataset]@[snapshot name]
```

<p class="callout danger">Dadurch werden alle späteren Snapshots gelöscht!</p>

<p class="callout info">Das Dateisystem welches durch den Snapshot betroffen ist wird für den Rollback automatisch un- und wieder gemounted. Sollte dies Fehlschlagen kann durch `-f` das Unmounten forciert werden</p>

### Snapshot löschen

```shell
sudo zfs destroy [pool]/[dataset]@[snapshot name]
```