====== 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