====== ZFS ======
===== Gundlangen =====
IO Writes:
* Asynchronous - Eine Applikation schreibt etwas in das Storage und das Storage meldet sobald dieses den IO im Ram zwischenlagert ein OK zurück. Fällt die Storage aus gehen die IO's die noch im Ram liegen verloren
* Synchronous - Eine Applikation schreibt etwas in das Storage und das Storage meldet erst ein Ok zurück wenn diese die Daten auf den Disken runterschrieben hat. Dies kostet Performance ist jedoch Crash Consistent
\\
Sync Einstellungen unter ZFS
* standard - nur synchrone Schreibvorgänge werden mithilfe des ZIL abgesichert
* always - jeder Schreibvorgang findet unter Verwendung des ZIL statt
* disabled - der ZIL wird deaktiviert
\\
\\
==== ashift ====
Für einen performanten Zugriff auf die Hardware muss ZFS die Größe der Sektoren der Festplatte (physical block size) kennen. \\
Wie ermittle ich die Block Size meiner Patten?
lsblk -o NAME,MOUNTPOINT,PHY-SEC
\\
Anzeigen der aktuellen ashift wertes wenn man schon einen Pool hat
zpool get ashift
\\
Ashift beim erstellen setzten
zpool create -o ashift=12
==== vdev (virtual device) ====
Ist ein virtuelles Gerät, auf dem die in ZFS gespeicherten Daten abgelegt werden. Es kann sich dabei um eine Festplatte, eine reguläre Datei, ein RAID-Z/Mirror handel.
\\
\\
==== Pool ====
Ist ein Zusammenschluss aus mehreren vdevs zu einem großen Speicherpool.
\\
\\
==== Dataset ====
Bezeichnet ZFS-Dateisysteme, Volumes und Snapshots. Datasets sind in einer Vererbungshierarchie organisiert und immer einem bestimmten zpool zugeordnet. Sie dienen der Strukturierung von Pools und ermöglichen eine Anpassung an verschiedene Anforderungen.
\\
\\
==== Copy-On-Write ====
Beschreibt die Funktion von Dateisystemen, Blöcke nicht direkt zu überschreiben, sondern eine Kopie der neuen Daten in einem anderen freien Block abzulegen. Nachdem ein neuer Block erfolgreich abgespeichert wurde, wird der entsprechende Zeiger angepasst. Sollte das System während eines Schreibvorgangs abstürzen, entsteht somit kein inkonsistenter Zustand des Dateisystems. Ausschließlich die in dem Moment geschriebenen Daten gehen verloren, währenddessen die vorherige Version des Blocks noch unverändert ist. Darüber hinaus ermöglicht dieses Konzept das schnelle und einfache An legen von Snapshots.
\\
\\
==== ARC (Adaptive Replacement Cache) ====
Dieser Cache liegt im Ram des Betriebssystems.
\\
\\
==== L2ARC (Level 2 ARC) ====
Dieser Cache wird in den meisten Fällen auf SSDs ausgelagert (muss konfiguriert werden).
Wenn der Ram für den Cache zu klein wird werden alle Objekte die aus dem ARC raus fliegen würden in den L2ARC geschrieben.
\\
\\
==== ZIL (ZFS Intent Log) ====
\\
==== SLOG (ZFS Separate Intent Log) ====
\\
----
\\
===== Pools =====
==== Anzeigen des Status von einem oder allen Pools ====
zpool status
zpool status -v
zpool status -v pool
\\
==== Anzeige welche Pools bzw. Datensets Compression aktiv haben ====
zfs get compression
\\
===== ZFS Optionen =====
==== Anzeigen aller ZFS Optionen für einen bzw. allen Pools ====
zfs get all
\\
==== Compression setzten ====
zfs set compression=lz4
\\
==== Anzeigen der Compression Rate ====
zfs get compressratio
\\
===== IO Stats =====
==== IO Stats anzeigen ====
zpool iostat -v 1
\\
===== Caching =====
==== ARC ====
Anzeig der aktuellen Auslastung des Caches in Bytes
cat /proc/spl/kstat/zfs/arcstats |grep c_
c_min 4 536870912
c_max 4 2147483648
arc_no_grow 4 0
arc_tempreserve 4 0
arc_loaned_bytes 4 0
arc_prune 4 0
arc_meta_used 4 0
arc_meta_limit 4 536870912
arc_meta_max 4 0
\\
Arc Cache Size setzten
vim /etc/modprobe.d/zfs.conf
# Min 512MB / Max 2048 MB Limit
options zfs zfs_arc_min=536870912
options zfs zfs_arc_max=2147483648
Es wird ein Reboot für diese Einstellung benötigt. \\
Kontrolle der aktuellen Einstellungen:
cat /sys/module/zfs/parameters/zfs_arc_min
536870912
cat /sys/module/zfs/parameters/zfs_arc_max
2147483648
\\
L2ARC Device hinzufügen
zpool add -f cache
\\
L2ARC Device entfernen
zpool remove
\\
ZIL bzw. SLOG Device hinzufügen
zpool add -f pool log /dev/sda2
\\
ZIL bzw. SLOG Device entfernen
zpool remove
==== Auslastung der Pools anzeigen inkl. der Disken ====
zpool list -v
\\
===== ZFS Health =====
==== Scrub ====
zpool scrub pool
\\
===== Snapshots =====
==== Erstellen eines Snapshots auf einem Dateset ====
zfs snapshot /@
\\
==== Erstellen eines Snapshots auf einem Pool sprich auf allen Datasets ====
zfs snapshot -r @
\\
==== Anzeigen der aktuellen Snapshots ====
zfs list -t snapshot
\\
==== Löschen eines Snapshots ====
zfs destroy @
\\
==== Rückstieg auf einen Snapshot ====
zfs rollback /@
\\
----
zfs-stats -a ???
zilstat
\\
===== Compression =====
==== Compression anzeigen ====
zfs get compression
zfs get all | grep compress
\\
==== Compression setzten ====
In den meisten Fällen ist lz4 die beste und schnellste Variante
zfs set compression=lz4