Direkt zum Hauptinhalt

ZFS Grundlagen


Inhaltsverzeichnis


ZFS Grundlagen

ZFS Workshop - Live10.10.2023

ZFS Workshop - Live12.10.2023

Workshop 10.10.2023

  • Workshop 12.10.2023

ZFS Grundlagen

Kostenpflichtiger Link für Videos

ZFS Workshop - Live10.10.2023

Kostenpflichtiger Link für Videos

ZFS Workshop - Live12.10.2023

Kostenpflichtiger Link für Videos

Workshop 10.10.2023

  • FreeBSD kann Linux von ZFS booten 
  • Linux kann nicht von ZFS booten ! 
  • dmesg -w 
    dmesg -wT # Zeit wird richtig angezeigt 
    lsblk 
    Install ProxMox 

◦ZFS (RAID 0) - stripe von Platten # keine Redundanz ! ◦ZFS (RAID 1) - 2 * Platten - ProMox OS - z.B. zwei NVMe

  • ‣  Empfohlen für SSD Systeme 
  • ‣  NVMe mit VMs 
  • ‣  HDD nur bedingt - OS 
  • ‣  HDD für OS und VMs nicht empfehlenswert 
  • ‣  USB Sticks sind raus 

◦ZFS (RAID 10) - min. 4 * Platten - 4 * NVMe oder 4 * SATA-SSD
◦ZFS (RAIDZ-1) - nur SSD - dann in Ausnahmen für VMs
◦ZFS (RAIDZ-2 oder RAIDZ-3) - nur NAS oder andere Ablagen - Backup nicht so oft - z.B. einmal

pro Woche (z.B. 30 Platten als RAIDZ-X), wobei X=2 oder X=3
◦# zfs RAID1, RAID10 auswählen - ProxMox OS
◦ashift 12 # Standard bei den heutigen großen Platten (4K Platten - Sectorsize) - 3 * 4k entspricht

12
◦ ashift 9 # Nur im Ausnahmefällen - Plattplatten unter 2 GB - Sectorsize < 4K z.B. 512 Byte) -

Blocksize
◦Compression on (Stand von ProxMox) - Chriz hat mal gehört lz4 wäre besser - Glaubenskriege ◦Checksum immer an lassen
◦Copies 1 - 2 bedeutet pro Platte nur noch die halbe Kapazität - Blöcke werden doppelt

geschrieben
◦hdsize - nur Teil der Platte - Rest z.B. für Cache - Praktisch bei NVMe - Test 64 GB ◦Erste Installation schlägt fail
◦Partitionstabelle von beiden SSD löschen - reboot

• TrueNAS
◦TrueNAS Storage Server für NAS und SAN Aufgaben

‣ TrueNAS Core und TrueNAS Scale können VMs
• Rudimentäres Containering und unbrauchbar für Virtualisierung

  • ‣  Unterbau ist stabiler als Linux (basiert auf FreeBSD) - Linux ist aber auch stabil 
  • ‣  Reine Appliance, Bedienung erfolgt ausschließlich über Webinterface 
  • ‣  Kernfunktonen 
    • Samba NAS inkl. AD Integration und SID 
    • NFS NAS/SAN inklusive Zugriffskontrolle 
    • ISCSI SAN inkl. Zugriffskontrolle
      ◦kann iSCSI besser Linux 
  • ‣  Indikation für Einsatz 
    • Ergänzung als ZFS Fiileserver mit oder ohne AD Integration 
    • SAN Server NFS für höhere Anzahlvon PVE Systemen mit HA Bedarf 
    • SAN server mit iSCSI für höchsten HA Bedarf 
  • SAN Server mit iSCSI einfache Backup oder OS Aufgaben 
  • Vollständiges Monitoring und Webgui für Snapshots und Replikation, wie
    Systemzustand - Monitoring ist von Haus drin, das System sagt Dir wie es ihm geht 
  • Wenn z.B. die Snapshot nicht mehr funktionieren, ist das Debuggging die Hölle ...
    • ProxMox
    ◦Gemischtes system für Virtualisierung und ZFS Storage
    ◦Umfangreiche Virtualisierung und Containering-Lösung
    ◦Moderner Unterbau mit aktuellem Debian Linux
    ◦Reichhaltige Funktionen in Bereichen kommen schnell an ihre Grenzen und werden durch
    eigene Kommdozeilenlösungen erweitert 

‣ Kaum Funktionen für ZFS

◦Kernfunktionen

  • ‣  KVM Virtualisierung und LXC Containering 
  • ‣  ZFS Storagesystem für Software RAID und rudimentäre Snapshot- und Replikationslösung 
  • ‣  Optional: NFS-Kernel Server 
  • ‣  Optional: iSCSI Target 
  • ‣  Optional: erweitertes ZFS-Management mit Sysops Hauslösungen
    ◦Indikation für Einsatz 
  • ‣  Kleinere Anzahl von PVE Systemen mit potenten Aufnahme von Datenträgern 
  • ‣  Hoher Anspruch an Snapshotverwaltung 
  • ‣  Leichte Replikation der Daten auf zweites System und eventuell weitere Ziele 
  • ‣  Applikationsbasierte Datensicherung 
  • ‣  Eigens Monitoring und Reporting bevorzugt - Zentrales Monitoring wie Checkmk 
  • ‣  Einfacheres Deployment und Wiederherstellung 

◦Bei Linux kommt alles auf dem Kernel (ZFS und KVM) ◦Chriz rät von der Nutzung als iSCSI Server ab ◦Proxmox OS auf eigene Platten

• USB Stick sind mittlerweile raus - wie z.B. TrueNAS - TrueNAS rät mittlerweile von USB Sticks ab

• Anschauen des Systems
◦Installation von htop - sieht man es besser als mit top - System hat 4 Kerne

  • ‣  Load ist wichtig (letzte Minute als Wert - letzten 5 min als Wert - letzten 15min als Wert) 
    • Geht der Wert über 4 haben wir ein Problem 
    • Geht der Wert gegen 20 und haben die Platten das OS - dann wars das !!!
      ◦Bei HDD‘s ist das schon schlimmer, da sich die Platten drehen 
  • ‣  Im Notfall Platten auf eine USB Platte spiegeln (USB-3) - z.B. bei internen NVMe‘s 
    • Defekte NVMe tauschen, wenn Zeit zum herunterfahren und NVMe tauschen 
    • Beispielhaftes System
      ◦Onboard 2 * NVMe Mirror für PVE
      ◦Alternativ 2 * USB3 SSD als OS - In Sendung getestet - Video kann man sich
      anschauen 

‣ Sieht nur nicht so gut aus

◦4 * SATA SSD RAID5

◦4 * SATA HDD RAID10 (je mehr Spindeln desto besser) • Künftige Erweiterungen

◦Ersten Server anschauen


htop

 zeigt eine geringe Auslastung < 1 


zpool status rpool-ssd

 # größere Server 

    • raidz1-0 mit 4 Platten # nur 25 % Verlust statt 50% bei RAID10 
    • Cache NVMe Partition 4 - Proxmox OS eine NVMe 
    • Hierbei muss die Load berücksichtigt werden - Abhängig vom Anwendungsfall 

  • zpool iostat -v rpool-ssd 1 
    • Cache Disk hat schon 91 GB gecachet - Level 2 Cache 
    • Hinzukommt der RAM Cache Level 1 Cache 
    • Empfehlung ist RAID 1 oder RAID10
      ◦Bei HDD‘s auf jedenfall
      ◦Vergleich mit der zweiten Server, der schon ein Jahr länger läuft 

htop

 - zeigt größere Load von ca. 9 bei 32 Kernen 


zpool iostat -v 1 
    • raidz1-0 mit 4 * SSD - rpool ◦cache NVMe Partition p2 
    • mirror-0 mit 2 * SSD 8TB -rpool-HDD
      ◦mirror-1 mit 2 * SSD 8 TB
      ◦log mirror-2 mit NVMe jeweils Partition 1 - Write Cache ◦Cache NVMe Partition 2 - read cache
      ◦Wie kann man den HDD Pool um weitere 8 TB erweitern 
  • ‣  Weiteren Mirror dran hängen mit zwei 8 TB Platten # geht nicht Gehäuse voll 
  • ‣  2 Platten austauschen 

• Bei RAID1 oder 10 reicht es zwei HDD‘s zu tauschen, vorzugsweise die ältesten ◦Beispiel von anderen System wurden der mirror-2 auf 8TB Platten getauscht ◦Die anderen beiden Mirror‘s bestehen jeweils aus 2 * 2TB

◦Bei RAIDZ1 im Datastore dringend die Blocksize 16k einstellen
Bevor VM‘s angelegt werden !!! - Standard bei Proxmox ist 8k - Verschwendung von

Speicherplatz
• Wird das nicht beachtet müssen die Daten in einen neuen Storage mit 16k Blocksize

kopiert werden
◦Platten mit U.2 Schnittstelle im neuen Server bestellt

‣ Aussagen nächste Woche in der Sendung ◦Overhead bei RAIDZ

  • ‣  Mit 4 Platten - schreibt immer 4 * 4K - da eine Platte für Redundanz ist - bleiben 3 * 4k = 12, daher kommt ashift=12 
  • ‣  Bei volBlocksize 8k ergibt sich damit eine schlechte Verteilung, da er immer 12k schreibt 
  • ‣  Bei volBlocksize 16k wird es besser verteilt 

• Workshop PVE

◦Anlegen einer VM - nur die Disk ist interessant - auf ProxMox GUI

‣ Disk-0

  • Kein Thin Provision - Thin ausgeschaltet # ==> Thick 
  • Anlegen mit einer Disk von 100GB
    ◦CLI 

‣ zpool history

  • zpool create -f -o cachefile=none -a shift=12 rpool mirror /dev/disk/by-id/ata- KINGSTON...-part3 \
    /dev/disk/by-id/ata-INTESO...-part3 
    ◦cachefile=none # pool wird händisch import 
    zfs create rpool/ROOT # Verwaltungsdataset 
    zfs create rpool/ROOT/data # Obergeordnetes Dataset für VM‘s 
    zfs create rpool/ROOT/pve-1 # Proxmox OS 
    zfs set atime=on realtime=on rpool # Standardwert - Funktion muss noch geklärt 
    werden 
    zfs set compression=on rpool 
    zfs set sync=disabled rpool # von dem Wert wird abgeraten !!! 
    zfs set sync=standard rpool # Das sollte der Standardwerte für den Parameter sein 
    zfs set mountpoint=/ rpool/ROOT/pve-1 # root Filesystem für ProxMox 
    zpool set boots=rpol/ROOT/pve-1 rpool 
    zpool export rpool 
    zpool import -N rpool 
    ———————————————— 
    zfs create -b 16k -V 104867600k rpool/data/vm-100-disk-0 # 100GB disk 
    ◦-o volblocksize=16k # -b ist vermutlich neu 
    ◦-o refreservation ... - schauen wir uns jetzt an 
    ———————————————— 
    zpool status # wie geht es unserem RAID 
    zfs list # was haben wir 
    zfs get all rpool/data/vm-100-disk-0 
    
    ◦Property creation # wann wurde die Platte erzeugt

◦Property used # was belegt die Platte gerade - 102G - Metadaten
◦Property available # viel Platz wäre da noch
◦Property referenced # viel Platz belegt es wirklich - 56k
◦Property volsize # ist 100G groß
◦Property volblocksize # 16k !!!
◦Property refreservation # 102GB - Proxmox hat die LUN um 2% überprovisioniert

- das ist neue bei Proxmox - wir hatten keine Parameter in der zpool history !!! ◦Property compression # on
◦Property guid # eindeutig Nummer
◦Property primarycache # arc cache - RAM

◦Property secondarycache # ssd cache
◦Property usedbysnapshots # Belegung durch snapshots ◦Property usedbydataset # Belegung durch Unter-Datasets ◦Werte default, local, inherited from ..., ...

‣ local # ist selbst gesetzt auf dieser Ebene

  • ‣  default # Standardwert 
  • ‣  Inherited # vererbt 
  • ‣  received # per receive empfangen
    ◦Anlegen einer weiteren Disk in der selben VM - ProxMox GUI 

‣ Disk-1 anlegen

  • Thin provisioning wieder reinnehmen 
  • Anlegen einer Disk mit 100 GB ◦zfs list # disk mit Thick und Thin 
  • ‣  rpool/data/vm-100-disk-0 # USED 102G - Thick 
  • ‣  rpool/data/vm-100-disk-1 # USED 56k - Thin ◦zpool list # rpool CAP bei 0% - nie über 80% 

‣ Aus Notizen kopiert

80% lahm

90% scheisslahm, keine snapshots mehr möglich
• 96% stop, vm fliegt aufs maul
• danach im dümmsten fall rollback auf snapshot vor 90% Fülle

• dann alte Snapshots löschen

  • ZFS Begriffe
    ◦ZPOOL # Speicherpool, RAID
    ◦rpool # rpool ist der Name vom ProxMox Pool ◦zfs dataset # da landen Dateien drin
    ◦ZVOL # reserviert Blöcke - virtuelle Festplatte 
  • zfs list

    ◦Unterschied dataset und ZVOL 
    • ‣  dataset # hat eine Mountpoint 
    • ‣  ZVOL # bei Mountpoint wird ein - (Minus) angezeigt 


ls -althr /dev/zvol/rpool/data ◦vm-100-disk-0 -> ../../../zd0 ◦vm-100-disk-1 -> ../../../zd16

• Spaßübungen ◦zpool status 1

‣ Erste Platte herausziehen
• Status zeigt nach einiger Zeit removed

  • ‣  Stecken der Platten in einen ganz anderen Slot 
    • Status zeigt die Platte wieder online 
    • resilvered 1.54M 
  • ‣  Zweite Platte herausziehen 

• Status zeigt nach einiger Zeit removed # Da sich nur wenig auf dem System tut, dauert

es einfach ein bisschen
‣ Stecken der Platte in einen anderen Slot

  • Dauert ganz schöne lange, können schauen ob er die Platte hat 
  • dmesg -w 

◦hängt ... - glaube ich habe ihn gekillt ...
◦Er bekommt die Daten nicht los - die load steigt langsam ◦Platten ziehen

◦Ausschalten
◦Platte wieder reinstecken ◦Einschalten und booten

  • ‣  EFI sieht welche Platten Bootbar sind 
  • ‣  Bei alten Systemen ohne EFI ist das ein Problem 

• Man muss wissen, wo die Bootfähigen Platten sitzen (Slotnummer) ◦Darum muss man sich das für den Ernstfall dokumentieren

◦Zeigen das es kompatibel ist
‣ Boot mit dem TrueNAS Installer

• Shell aufrufen

zfs list #

 zeigt nichts an

zpool import

 # zeigt Dir den Pool an

‣ TrueNAS bezeichnet die Platten ganz anders ◦gptid/7c9c...

◦gptid/bd88...


zpool import -d /dev

  • ‣  ada0p3 
  • ‣  ada1p3 
  • ‣  # import zeigt last accessed by another System !!! 
zpool -d /dev/ -f -a

 # Erzwinge import für alles was Du siehst ◦zfs list # bring Fehler - /bin/sh: zfs not found 

‣ TrueNAS hat jetzt das importierte Dataset als root Filesystem genommen, ProxMox Linux !!! Damit geht nichts mehr ...

◦Damit ist gezeigt das Linux ZFS mit TrueNAS kompartibel ist
◦Ausschalten und wieder Einschalten - Proxmox findet seine UFI boot Partitionen

  • ‣  Proxmox hat bei Erzeugen ein import -f gemacht # sollte den pool importieren 
    • Boot bleibt hängen - weil ... 
    • The pool can be imported, use zpool import -f ... 
    • Failed to import pool rpool 
    • Manually import the pool and exit # Eigentümerschaft muss erst
      übernommen werden !!! 

zpool import

 # zeigt an was es gibt 


zpool import -d /dev/ 


• sda3
• sdb3 


zpool import -d /dev/disk/by-id 


• ata-KINGSTON...-part3
• ata-INTENSO-...-part3 

 zpool import -d /dev/disk/by-uuid 

• Da hat er gerade keinen Bock darauf

  • ‣  zpool import /dev/disk/by-partuuid
    • 7c9c...
    • bd88.. 
  • ‣  zpool import /dev/disk/diskseq 

• Das kann er nicht

zpool import -d /dev/disk/by-uuid rpool

• Das ist nicht Dein System

 zpool import -d /dev/disk/by-id rpool -f 

# Empfehlung Chriz

  • Jetzt hat er ihm 
  • zfs list 
  • Wir sind jetzt im init-RAM, das kann nur die nötigsten ZFS Befehle !!! - 

minimal Linux - solle ja im Normalfall nur den ZFS Pool mounten und

weiter booten

  • exit # mit exit init-RAM verlassen !!! 
  • Jetzt fährt er weiter hoch
    ◦Erweiterung der Platten 

  • dmesg -w 
  • ‣  Überlegungen bei Plattentausch 

    • zpool status 

    • Bei RAID1
      ◦1. Zpool replace (Platte ist danach leer)
      ◦2. Platte ziehen (Platte ist noch gut) - aber Redundanz kurz weg, nur wenn nichts
      frei an Slots
      ◦3. 3-fach Mirror (geil !!!) 
    • zpool trim rpool 

    • Einschub

    • cat /etc/cron.d/zfsutils-linux
       # TRIM the first Sunday every month 
  • ‣  zpool set autotrim=on rpool # Empfehlung von Chriz - macht es im Leerlauf, cron ladet ja
    nicht 
  • ‣  SSDs nur löschen reicht nicht, beim schreiben wird sonst vorher gelöscht 

  • zpool set autoexpand=on rpool 
    dmesg -Tw 
  • ‣  Stecke die erste neue Platte rein 

  • sgdisk /dev/sda -R /dev/sdc # kopiert die Partionen, nur bei PVE Bootplatten notwendig 
    sgdisk-G /dev/sdc # neue GUID erzeugen 
    cfdisk /dev/sdc 
    • Partition 3 vergrößern
      ◦New Size 446.1G merken wir uns kurz wir haben ja noch die zweite Platte - die ist
      nicht baugleich 
    • Früher gab es hinten die Partition ZFS reserved - die kann man löschen 

◦Für unterschiedliche Große Platten


dmesg -Tw

 

  • ‣  Zweite Platte dazu stecken 
    • sgdisk /dev/sdc -R /dev/sdd
       # Partition schon von der vergrößerten Partition kopieren,
      damit entfällt das vergrößern 
    • sgdisk /-G dev/sdd 

  • ‣  lsblk 
    • Beide alten Platten sichtbar 
    • Beide neue Platten sichtbar 
  • ‣  Wenn die neuen Partition abweichen, dann mit kleinerer Platte anfangen !!! 
  • ‣  ProxMoxBootManager reparieren - ProMoxspezial 

    • proxmox-boot-tool format /dev/sdc2 --force # hat schon was drauf, daher --force -nur 
      PVE 
      proxmox-boot-tool format /dev/sdd2 --force # hat schon was drauf, daher --force - nur 
      PVE 
      proxmox-boot-tool format /dev/sdc2 # nur PVE 
      proxmox-boot-tool format /dev/sdd2 # nur PVE 

  • ‣  Danach hat mal 4 boot Möglichkeiten im EFI # sehen wir später beim booten 

  • zpool status # jetzt wollen wir das noch ordentlich machen 
    ls -althr /dev/disk/by-id | grep sdc3 
    ls -althr /dev/disk/by-id | grep sdc3 
    zpool attach rpool ata-KINGSTON...-part3 ata-INTEL...-part3 
    zpool attach rpool ata-INTENSO...-part3 ata-KINGSTON...-part3 
    Erklärung der beiden Befehle
    zpool attach rpool <gute Platte 1> <neue Platte 1> # Zur Erklärung ◦
    zpool attach rpool <gute Platte 2> <neue Platte 2> # Zur Erklärung 
    zpool status 3
    • ◦Ist schon komplett eingespiegelt - muss nur 1.4GB spiegeln, weil ZFS 
  • reboot 

  • 480er Platte zum booten im Bootmenu auswählen
    ◦Und bootet 
  • zpool Status 

    ◦Alle 4 Platten sind sichtbar 
  • proxmox-boot-tool status 

    ◦Alle 4 Platten können booten 
  • zpool status 1 

  • Wir ziehen SSD‘s 
  • zpool list # 224G 
  • zpool detach rpool ata-KINGSTON...-part3 # Platte240-1 
    zpool detach rpool # ata-INTENSO...-part3 # Platte240-2 
    zpool list # 446G - zpool ist jetzt vergrößert und die alten Platten können als 
    Schubladen Backup aufbewahrt werden 
    zpool get all | grep local 
    zpool get autoexpand 
    ◦Erweitern mit zwei mirror‘s 


zpool add rpool mirror sdc sdd mirror sde sdf

• 2 HDD dazu stecken - 2TB - 5 Jahre alte Modelle - WD RED schlimmer geht nicht ... ◦

dmesg -Tw

‣ Sehen alle Warnzeichen
• WDD Red mit nur 3.0 Gbps statt 6

◦Bei ersten Versuch haben wir die falschen Platten genommen

  • ‣  Das System hat es nicht zugelassen 
  • ‣  Als wir die Partitionen löschen wollte, haben wir gesehen - beim reinstecken haben sich die
    Plattenbezeichnungen geändert !!! Daher Vorsicht beim arbeiten mit sdX, kann sich bei
    reinstecken verändern das heißt unbedingt auf die dmesg Ausgaben achten !!! 
  • ‣  lsblk # zeigt es auch sauber an - welche sdX hat welche Größe 


zpool create -n rpool-hdd /dev/sda /dev/sdb 
# faul - da ist schon was drauf
zpool create -n -f rpool-hdd /dev/sda /dev/sdc # dann mit force

‣ Problem ?

  • Name, kein mirror, kein ashift, kein compression, etc 
  • Platten würden hintereinander gehängt kein mirror und damit keine Redundanz
    zpool create -n -f rpool-hdd /dev/sda /dev/sdc # dann mit force

    ◦Fehler ... ashift, name, kein mirror, kein compression

    zpool create -n rpool-hdd mirror /dev/sda /dev/sdb -f # mirror ist zusehen
    zpool create -n rpool-hdd mirror /dev/sda /dev/sdb -f -o ashift=12 ... # Abgebrochen ◦Mach es im Zweifelsfall über die GUI 
  • ‣  ZFS create
    • RAID Level Mirror
    • ashift 12
    • Compression on
    • Hinweis in GUI: ZFS is not compatible with diss backed by a hardware RAID
    controller 
  • ‣  No disk used sagt die GUI 
  • ‣  Die beiden Disks in der GUI - wipe disk ausführen 
  • ‣  Jetzt kann über ZFS create angelegt werden 

• Achtung RAID Level nicht bei Single Disk lassen, sondern Mirror auswählen

pastedGraphic.png pastedGraphic_1.png pastedGraphic_2.png pastedGraphic_3.png

• NICHT auf CREATE geklickt
könnte man auch ashift 9 machen - zeigt den Befehl

◦Hier

  • ‣  Nur blöd wenn Du den Pool vergrößerst - wir mach es jetzt trotzdem !!! 
  • ‣  Nach dem Anlegen zeigt die GUI den Befehle an 
  • /sbin/zpool create create -o ashift=9 rpool-HDD mirror /dev/disk/by-id/ata-WDC_... / dev/disk/by-id/ata-WDC_... # hinten ohne Partitonsangabe, d.h. die komplette Disk 
  • zfs set compression=on rpool-hdd 
  • systemctl enable zfs-import@rpool\2hdd.service # Import Service - eigentlich 

pastedGraphic_4.png

importiert er den Pool auch so - wie es ProxMox gelöst hat, gefällt Chriz • So bitte nicht

◦Wenn rpool-hdd/data # Proxmox macht es auf das Hauptdataset, das ist strategisch sehr ungünstig

◦Wir machen das ordentlich mit CLI
‣ zfs create rpool/data # Werte werden von oben übernommen (vererbt) - abgebrochen

◦Wir nehmen das erzeugte über die GUI wieder heraus und machen es nochmal in der GUI ‣ Add ZFS

• ID rpool-hdd-data
• ZFS Pool rpool-hdd\data # Ist auswählbar
• Block Size 16k # nur bei RAID5 - wir machen absichtlich 8K ! • Thin provision auswählen - d.h. Harken setzen

◦Zurück auf der CLI testen wir


zfs list 
zfs create -o compression=off -o primarycache=none rpool/test # kein none bei compression 
zfs create -o compression=off -o primarycache=none rpool-hdd/test 
arcstat # ist der RAM Cache der würde hier mit helfen 
cd/rpool/test#ssd 
dd if=/dev/zero of=ssd.tmp bs=1M count=4096 status=progress 
zpool iostat -v 1 
# ist langsam - ist es die Kingston 
dd if=/dev/zero of=ssd.tmp bs=1M count=2048 status=progress # soll nicht solange 
dauern 
zpool offline rpool ata-KINGSTON...-part3 
zpool iostat -v 1 
# geht viel schneller 
zpool online rpool ata-KINGSTON...-part3 
zpool status # resilvered 2 G 
zpool iostat -v 1 
  • ‣  # Spiegel Platte wieder ein 
    • ZFS muss nur das Delta synchronisieren - das geht relativ schnell 
    • RAID Controller muss ganze Platte dazu im Vergleich einspiegeln - das dauert ... 
  • ‣  # mit dieser Methode kann man eine Fehlerhafte Platter herausfinden - Redundanz geht
    kurzzeitig verloren 
  • ‣  # jetzt haben wir eine Schreibrate von 200 - Platte scheint sehr schnell langsam zu werden 


cd/rpool-hdd/test 
‣  dd if=/dev/zero of=hdd.tmp bs=1M count=2048 status=progress # hab den Namen 
  • angepasst im Video wird der gleiche genommen 
  • ‣  # Wenn die HDD‘s die Daten nicht weggeschrieben werden geht die load hoch 
  • ‣  # Festplatte vertragen keine dauerdruck Betankung 
  • ‣  # Geht nur solange gut wie die caches funktionieren 
  • ‣  # Mit RAID5 ist das Ganze noch schlimmer ... 
  • ‣  Lesebeschleunigen  mitSSD-SSD über USB, weil kein Slot mehr frei ist 

  • dmesg -Tw
     
  •  # wichtig immer erst mit dryrun 

  • zpool status 
    ls -althr /dev/disk/by-id | grep sde 
    zpool add -n rpool-hdd ata-INTENSO... # Im Video erst Pool rpool - falscher Pool 
    zpool add -n rpool-hdd ata-INTENSO... -f 
    Gut? Nein, Platte ist nur hinten dranhängt ohne Redundanz 
    zpool add -n rpool-hdd cache ata-INTENSO... -f # niemals cache vergessen 
    zpool add rpool-hdd cache ata-INTENSO... -f # niemals cache vergessen 
    zpool status 
    zpool iostat -v 1 
    cp hdd.tmp hdd_2.tmp 
    # dauert zu lange 8GB 
    # mal was anderes drauf kopieren 
    cp -R /etc /rpool-hdd/test # mehrfach das Kommando ausführen 
    # Jetzt sieht man so langsam etwas bei der Cache SSD 
    apt install zip # damit wir das mal packen können 
    zip etc.zip etc -R 
    cp etc.zip etc2.zip # wieder mehrfach ausführen 
    # man sieht jetzt das der Cache anfängt zu arbeiten ... 
    dd if=/dev/zero of=ssd.tmp bs=1M count=8196 status=progress 
    # cache SSD einfach herausziehen 
    zpool status # zeigt nach kurzer Zeit remove für die Cache SSD an 
    zpool iostat -v 1 # bleibt die SSD noch drin bzw. wird angezeigt 
    # Platte wieder stecken 
    dmesg -w # zeigt an Cache SSD wieder gefunden 
    # attach und detach wird als Mirror - alles andere add und remove 
    zpool remove rpool-hdd ata-INTENSO... # cache SSD wieder entfernen 
    zpool status 
    # vorsichtig writecache, logdevice genannt 
    # Chriz verwendet das eher selten 
    zpool add -n rpool-hdd log ata-INTENSO... -f 
  • ‣  # Nicht machen, geht die disk beim schreiben kaputt, Datenkorrupt!!! 
  • ‣  # Man braucht zwei Platten und am besten noch eine USV 
  • ‣  # das ist der Vorteil von Batterie gepufferten RAID Controllern 
  • ‣  Platten Platte stecken - in diesem Fall auch wieder über USB 

  • dmesg -w 
    zpool add -n rpool-hdd log ata-KINGSTON... ata-INTENSO... -f 
    # immer noch falsch - verloren !!!! - kein Mirror 
    # einmal falsch gemacht, alles umkopieren und evtl. neue Platten besorgen 
    zpool add -n rpool-hdd log mirror ata-KINGSTON... ata-INTENSO... -f 
    zpool add rpool-hdd log mirror ata-KINGSTON... ata-INTENSO... -f 
    zpool status 
    zpool iostat -v 1 
  • ‣  # interessiert ihn nicht # write cache ist ein Phänomen für sich ... 
  • ‣  # Update write cache (Property: sync=always - Siehe Update am Ende dieser Doku -
    Sendung vom 16.10.2023) 

  • dd if=/dev/zero of=ssd.tmp bs=8k count=819600 status=progress # jetzt kannst Du auch 
    mal 8k machen .. 
    zpool iostat -v 1 
    # mit 8k Perfomat das noch gut 
    dd if=/dev/zero of=ssd.tmp bs=4k count=819600 status=progress # Er sollte es kippen 
  • ‣  # heute performen die Platten gut, besser als erwartet ... 
  • ‣  # das war secondary cache 
  • ‣  # Frage an Chriz: Was wäre Deine Empfehlung bei ein solchen System 
  • ‣  # Nur lese Cache machen 
  • ‣  # Wieder entfernen - writecache 

  • zpool remove rpool-hdd ata-KINGSTON... ata-INTENSO... 
    # macht er so nicht 
    zpool detach rpool-hdd ata-KINGSTON... # damit wird der write cache mirror aufgetrennt 
    zpool status 
    zpool remove rpool-hdd ata-INTENSO... 
    zpool history # für Doku aus history nehmen - hatte Chriz bis jetzt noch nie gebraucht 
    # Problem RAM 
    free -h 
    arcstat 
    # ZFS nimmt bis 50 % vom RAM für cache l1 
    # das ist zu viel für VM‘s, zu wenig für NAS 
    cat /sys/module/zfs/parameters/zfs_arc_max # 0 
    cat /sys/module/zfs/parameters/zfs_arc_min # 0 
    # wir nehmen mal 1 GB = 1024*1024*1024 = 1073741824 
    echo 1073741824 > /sys/module/zfs/parameters/zfs_arc_min # 1GB 
    echo 2147483648 > /sys/module/zfs/parameters/zfs_arc_max # 2GB 
    # macht unser Postinstaller einfacher! 
    arcstat 1 # zeigt 2.0G für max Wert an Überschrift: C, unter size zeigt er die aktuelle 
    Belegung 
  • ‣  # SSD Cache und RAM beschleunigen zusammen 
  • ‣  # SSD Cache braucht etwas von diesen RAM Cache 
  • ‣  # Werte dürfen nicht zu klein sein, man muss einfach die Werte anschauen, dann kommt
    man schon dahinter 
  • ‣  # Empfehlung: 1GB pro 1TB Daten max , min die Hälfte - es viertel geht auch ... - zur
    Orientierung 
  • ‣  # Diese Anpassung ist nicht reboot fähig !!! 
  • ‣  # ProxMox spezifisch 

  • vi /etc/modprobe.d/zfs.conf 
    • options zfs zfs_arc_max=1073741824 
    • options zfs zfs_arc_max=2147483648 
  • ‣  # Die Daten liegt auf dem root dataset und das ist beim boot nicht importiert 

  • update-initramfs -u # Update initramfs für „ZFS mini Kernel beim booten“ 
  • ‣  # damit ist es jetzt boot fest 
  • ‣  #Test mit cmdline hat noch nicht funktioniert - suchen über find - wird noch nach geliefert 
  • ‣  # /etc/kernel/cmdline #eigene Syntax Passthrough pci ProxMox cmdline - iommu -vermutlich hat die Syntax nochn icht gepasst 
  • ‣  # update-initramfs -u #muss auch noch gemacht werden
    • Controller
    ◦RAID verboten kein RAID0 für einzelne Platte
    ◦AHCI sehr gut
    ◦HBA sehr gut, meist 4 Disks pro Anschluss, Ausnahme so genannte Multiplexer, dann gerne 25 

pro Anschluss
◦NVMe, top
◦U.2, abwarten
◦RAID geht auch über drei vergleichbare Controller ◦Vorteil HBA mit zwei Ports

  • ‣  RAID 10 8 Disks 
  • ‣  Lane 1 Lane2 ‣44 ‣4. 4 ‣4. 4 ‣4. 4 
  • ‣  Gibt 24 stat 12GBit Leistung 
  • ‣  Test mit Kabel ziehen 
  • ‣  4 Disks finden mit dmesg -w 
  • ‣  zpool create rpool-hdd sda sdb sdc sdd 
  • ‣  Dann 
  • ‣  Kabel drauf 
  • ‣  Platten rein 

  • zpool attach rpool-hdd sda sde 
    zpool attach rpool-hdd sdb sdf 
    zpool attach rpool-hdd sdd sdg 
    zpool attach rpool-hdd sde sdb 
  • ‣  Dann flotter sas raid
    ◦Aufpassen, böse Falle boot 
  • ‣  z.B. HPE Gen8 25Bay mit LSI Controller meint das jede Disk im Slot0 der Backplane steckt 
  • ‣  z.B. Patchen von RAID Controller geht, nervt und im dümmsten Fall kann es nicht booten,
    also nur TrueNAS, da der anderes bootet 
  • ‣  Eventuell Notlösung mit Super Grub ISO 

• Woher weis ich das es meinem System gut geht ? ◦Health

◦80 % Füllgrad
◦Zustand der Festplatten / SSD ◦LXC Tool Box

git clone


‣ Config anpassen

  • DHCP 
  • Checkmk 
bash install # LXC Container für CheckMK 


◦Checkmk

pct enter 101
ip a # IP Adresse in der config DCHP auf true gesetzt ... 



◦CheckMK im Browser öffnen 

‣ Diesen Teil am besten im Video schauen - bei ca. 3:27:30

•...

  • # falsch - Install CheckMK Agent für Linux 
  • dpkg --install <Paketname.deb> 
    apt install ./<Paketname.deb> # löst Abhängigkeiten auf 

• checkmk-smart aus BashClub ist besser als smart-tool von checkmk

◦Erfordert auf dem Client Aktionen - PVE ◦Erfordert auf CheckMK Aktionen

‣ MKP lies sich im Workshop nicht installieren, ist auf Fehler gelaufen .. # Chriz fragt nach - Ist von Nils

•...

apt install ipmi* # Empfehlung von Chriz - kann nicht jeder Server

 •...

Todsünden ZFS und Optimierungen

Optimierungen

  • ‣  zpool ... autotrim ... 
  • ‣  zfs ... cache ... 
  • ‣  Je mehr Spindeln desto besser
    ◦Todsünden 
  • ‣  HW RAID Controller nutzen (knallt) 
  • ‣  Deduplizierung aktivieren - kann nicht mehr ausgeschaltet werden 
  • ‣  ZFS_ARC_MAX zu klein / zu groß 
  • ‣  Pool über 80% Füllstand 
  • ‣  Snapshot Bereinigung / Management aus dem Blick verlieren 
  • ‣  Bei ZFS-Auto-Snapshot auf Ziel nicht deaktiviert 
  • ‣  Anfügesnapshot durch schlechtes Management verlieren 
  • ‣  Druckbetankung 
  • ‣  PVE auf selben RAID wie Systeme (OS auf Datenpool) 
  • ‣  FreeNAS auf USB Stick 



  • Workshop 12.10.2023 
  • Kurze Wiederholung Montag ◦zpool status

    zpool iostat -v 1 
    zfs list 
  • Kleines System ◦
    zfs list 
    • ‣  Sieht die verschiedenen Pools 
    • ‣  Pool rpool-hdd 
    • ‣  Pool rpool 


zpool export rpool-hdd 
  • ‣  # ProxMox - datacenter - Storage — rpool-hdd-data deaktivieren (Enable harken
    herausnehmen) 

  • zpool import # macht nix - zeigt aber Namen an 
    zpool import rpool-hdd rpool2 # Pool unter anderem Namen importieren 
    zpool import -d /dev/ # sdX 
    zpool import -d /dev/by-id # ata-WDC_WD20EARS* 
    zpool import -d /dev/by-uuid # ganz wilde 
    zpool import rpool-hdd rpool2 # rename 
    zpool export rpool2 
    zpool import # zeigt nur an 
    zfs list # nur rpool importiert !!! 

• Aus Notizen hinzugefügt

• root@zfs:~#

zfs list

  • NAME
    • rpool
    • rpool/ROOT

• rpool/ROOT/pve-1
• rpool/data
• rpool/data/subvol-101-disk-0 • rpool/data/vm-100-disk-0
• rpool/data/vm-100-disk-1

• rpool/test

USED AVAIL

 106G   326G

1.53G   326G

1.53G   326G

 103G   326G

1.01G  31.0G

 102G   428G

  56K   326G

2.00G 326G

REFER MOUNTPOINT
96K /rpool #standard Pfad, bei Truenas /mnt... 96K /rpool/ROOT #organisatorisches Dataset

1.53G / #Proxmox mit Debian, mit / mount
96K /rpool/data #organisatorisches Dataset 1.01G /rpool/data/subvol-101-disk-0 #LXC als DS

56K - #VM als Volume 56K - #VM als Volume

2.00G /rpool/test #z. B. NAS auf PVE


 zpool get all rpool 
    • Property altroot # Standard - (würde /mnt stehen, mountpoint /mnt) - z.B. TrueNAS
      macht das gerne 

    • zfs get all rpool/ROOT/pve-1 
      zfs get all rpool/ROOT/pve-1 | grep local 

    • ◦Property mountpoint wurde angepasst auf / # normalerweise wäre der mountpoint /rpool/ROOT/pve-1 —> das ist rein ProxMox 

zfs list 
    • rpool/data/subvol-101-disk-0 # mountpoint mit / vorne dran - LXC Container 
    • rpool/data/vm-100-disk-0 # mountpoint - —> da ZVOL - VM 
  • ‣  # DataSet und VOL sind in der Behandlung fast zu 90% gleich 
  • ‣  # DataSet default 128k Recordsize, doof bei Mailarchiv - hat viele kleinere Dateien als 128l 
  • ‣  #VOL default Thin, 8k Volblocksize, besser 16k - RAID5 
  • ‣  zfs get all rpool/data/subvol-101-disk-0 
    • Property type filesystem 
    • Property creation # Datum Anzeige 
    • Property used 1.01G 
    • Property available 31.0G 
    • Property referenced. 1.01G 
    • Property compressration 1.93x # wenn man alles zusammenzählt vermutlich 2 G
      belegt 
    • Property mounted. yes # bei Replicakten mounted no # dann kann keiner reinschauen 
    • Property quota none # Quata liegt max. Größe fest 
    • Property reservation none # Platz ist reserviert und wird anderen verwehrt - Thick
      provisioning 
    • Property recordsize. 128k 
    • Property mountpoint. /rpool/data/subvol-101-disk-0 
    • Property sharenfs off # NFS Freigaben machen 
    • Property cheksum on # bei der Installation gesetzt - Wert wurde vererbt 
    • Property compression on # bei der Installation gesetzt - Wert wird vererbt 
    • Property atime on # Will Chriz noch nachliefern - wird gerne von ProxMox angeschaltet
      ◦Aus Internet (https://www.unixtutorial.org/zfs-performance-basics-disable-atime/): ◦Why disable atime?


    • atime is access time, which isn’t that useful of a knowledge unless your scenario is highly specific.
      As you know, atime, ctime and mtime are kept for all the files - but some filesystems support an option of disabling atime, meaning that’s one operation that filesystem doesn’t need to track and therefore update on the disk when you’re accessing files (or listing directories).

      In modern operating systems, there might be hundreds or thousands of files read from each
      filesystem - and atime flag means kernel has to update access time for each such file and commit that updated time to disk for every access operation. That’s expensive, especially when you’re accessing the same files very frequently - OS will probably cache the file contents, so that’s not going to be too I/O heavy, but would still have to update access time on disk for such access. 

Disabling atime is a great way to improve I/O performance on filesystems with lots of small files that are accessed freqently

  • Property snapdir hidden 
  • Property aclmode, aclinherit, xattr # ist abhängig was willst Du damit machen ... 
  • Propery copies 1 # Erhöht man den Wert, wird Kapazität entsprechend verringert (z.B.
    2 = 50%) 
  • Property refquota 32G # limit —> am Beispiel 32G —> 32G belegt = voll # ProxMox
    nutzt refquota 
  • Property refreservation none # limit -> am Beispiel 32G —> 10 belegt = voll, da noch
    22GB in alten snapshot liegen, die gelöscht wurden # Thick Provisioning / Thin
    Provisioning —> Grusselig für Kopfweh # Chriz nutzt das nicht 
  • Property guid # eindeutige ID 
  • Property primarycache all # arc cache - level 1 cache 
  • Property secondarycache all # ssd cache - kann man abschalten, aber auf metadata
    gesetzt werden, dann werden keine Benutzerdaten mehr im cache gespeichert -
    Details (https://docs.oracle.com/cd/E19253-01/819-5461/ghbxt/index.html) 
  • Property usedbysnapshots 0B # hat zur Zeit keine snapshots 
  • Property usedbydataset 1.01G 
  • Property usedbychildren 0B 
  • Property usedbyrefreserfaton 0B 
  • Property dedup off # Chriz: Finger weg !!! - Bei Nutzung einen eigenen Computer
    nehmen und der macht nur das !!! z.B. 50000 Backup Platten und Du willst die alle archivieren oder 5000 Literoom Bibiliotheken (Fotos) - System braucht viel CPU und RAM 
  • Property sync standard # ist für NFS interessant 
  • Property refcomressratio 1.93x 
  • Property written 1.01G # was wirklich geschrieben wird, z.B. der Unterschied zwischen 

zwei snapshots

  • Property logicalused 1.75G 
  • Property logicalreferenced 1.75G 
  • Property filesystem_limit none # würde Chriz nie nutzen 
  • Property snapshot_limit none # würde Chriz nie nutzen 
  • Property filesystem_count none # würde Chriz nie nutzen 
  • Property snapshot_count none # würde Chriz nie nutzen - Besser Anzahl der
    snapshots im Monitoring überwachen 
  • Property snapdev hidden # noch nie gesehen - muss wohl neu sein 
  • Property encryption off # dazu gehören noch keylocation und keyformat 
  • Property keylocation none # wo liegt der key 
  • Property keyformat none # wie wird der key abgelegt 
  • Property special_smal_blocks 0 # z.B. Blöcke <16k dorthin legen # hat Chriz bei einen
    seiner Systeme gezeigt 
  • Aus Notizen übernommen
    ◦ default = ab werk
    ◦ - = Ausgabe
    ◦ local = hier gesetzt
    ◦ inherited = vererbt von...
    ◦ received = bei Replikation empfangen 


zfs list -t snapshot # noch keine auto-snapshot-Engine drauf • No dataset available

  • ‣  # dann können wir Thorsten Postinstaller testen —> Nach dem Workshop hat Thorsten den neue Postinstaller vorgestellt, der zur Zeit noch im Branch dev liegt (https:// www.youtube.com/watch?v=nF6780iwP54) 

  • zfs list 
    # snapshot per Hand auslösen 
    cd /rpool/test 
    ls 
    touch hitler 
    ls 
    zfs snapshot rpool/test@snap1 
    zfs list -t snapshot 
    zfs list -t filesystem # ist einfach zfs list ohne ZVOL 
    zfs list -t volume # ist zfs list und zeigt nur ZVOL‘s 
    zfs list -t snapshot 
    ls 
    # jetzt kommt ein böser 
    cp ssd.tmp x_hdd.tmp # wird abgebrochen dauert zu lange 
    touch eurzewiriwe 
    touch bdfjjsdhkfhsdfh 
    touch piwerlsdfns 
    ls 
    zfs list -t snapshot # was gibt es alles an snapshots 
    zfs get all rpool/test@snap1 # kein sinnvoller Name - mal schauen was es sich mit dem 
    snapshot auf sich hat
     
  • ‣  # was steht in einen solchen snapshot drin 
    • Property type snapshot 
    • Property creation <Datum> # snapshot wurde <Datum> erzeugt # 13:28 der Sytemzeit 
    • Property user 64k # für snapshot Technologie 
    • Property referenced 2.00G # er hat 2GB verbraten 
    • Property compressratio 1.00x # Kompression findet hier wohl nicht statt 
    • Property guid # eindeutige ID 

  • ls 
    zfs rollback rpool/test@snap1 # snapshot zurück rollen 
    ls # damit ist alles wieder wie vorher 
    rm * # snapshot fällt nicht weg 
    zfs rollback rpool/test@snap1 
    ls # und alles ist wieder da  
  • ‣  # Vorgang kann n-mal durchgeführt werden 
  • ‣  # vm snapshot nach rollback weg # Chriz aus seiner Erinnerung 
  • ‣  # Der Trick ist ... 
  • ‣  # Lebensretter 
  • ‣  aptinstallzfs-auto-snapshot 

  • zfs-auto-snapshot # bei dem Tools funktioniert erstmal nichts 
    cat /etc/crontab 
  • ‣  # wie funktioniert die crontab 
  • ‣  service cron status # cron ist ein Dienst der läuft 

  • cat /etc/crontab 
    • # Erklärung 
    • * * * * * root ...
      ◦Minute (0 -59) # Erster Stern
      ◦Hour (0 -23) # Zweiter Stern
      ◦Day of month (1 -31) # dritter Stern
      ◦Month (1 -12) # vierter Stern
      ◦Day of week (0 -6) (Sunday= 0 or 7) # fünfter Stern 
  • ‣  # Cron guru in Google suchen, der kann die 5 „Sterne“ auflösen (https://crontab.guru) 

  • vi /etc/crontab # Du kannst die einfach editieren 

• cron daily auf 18:25 setzen, wenn die Leute Feierabend haben (25 18 * * *)


  • service cron reload # Reload des Configfiles 
  • ‣  # Was zfs-auto-snap tut ist in jeden der Ordner 

• ls /etc/cron.daily

•...

  • # sich in jeder der Ordner rein zu schreiben 
    /etc/corn.daily/zfs-auto-sanpshot # einfach mal ausführen 
    zfs list -t snapshot # er macht mir auf alles einen snapshot - hier die Ausgabe dazu 
    # Wenn die Software deinstalliert, bleiben die snapshot für immer liegen 
    # wenn ein Programm snapshots macht, muss es diese auch aufräumen !!! 
    apt purge zfs-auto-snapshot # was es wirklich weg haut - Kommado abgebrochen 
    # jetzt habe ich im Viertelstunden Takt snapshots 
    cat /etc/cron.d/zfs-auto-snapshot # liegen die Crontab Einträge die nicht in das obige 
    Muster passen - hier können die Zeiten entsprechend festgelegt werden 

• */15 * * * * root ...

‣ Diese könne man auch auf 5 min ändern */5
• --keep 4 # bedeutet er hebt 4 snapshot auf 4 * 5 min = 20 min

  • ‣  Macht wenig Sinn 
  • ‣  */15 * * * * root ... - -keep 12 // # 12 * 15 min = 3 Stunden 
  • ‣  # bei autosnapshots Dateisystemplatz < 80 % ständig prüfen !!!! # ZFS System !!!! 
  • ‣  # löscht jetzt irgendwas - wie lange würde das im Dümmsten Fallen dauern bis es wieder
    freigegeben wird ? 
  • ‣  # --keep=X —> Empfehlung Chriz 
  • ‣  vi /etc/cron.monthly/zfs-auto-snapshot 

--keep=3 # geändert auf 3 vorher Stand da 12 Monate —> Chriz das ist zu viel

  • ‣  Antwort: 3 Monate 
  • ‣  vi /etc/cron.weekly/zfs-auto-snapshot 

--keep=4 # Standwert war 8

 vi /etc/cron.daily/zfs-auto-snapshot 

--keep=10 # Standwert war 31


vi /etc/cron.hourly/zfs-auto-snapshot

 • --keep=96 # Standwert war


  • # Wie ist das ganze zu bewerten 
    zfs list 
    zfs destroy rpool/test # dann ist es immer weg 

• Warnung: use -r dann noch snapshot vorhanden ‣ zfs destroy -r rpool/test # dann ist es immer weg

  • ‣zfs list 
    zfs create rpool/test -o compression=off # nicht none - Das könnte zu einen späterem 
    Zeitpunkt im Kurs, die Fage auf werfen, warum bei den snapshots keine Kompression 
    durchgeführt wird 
    cd /rpool/test 
    /etc/cron.hourly/zfs-auto-snapshot # von hand auslösen - wurde man jede Minute 96 * mal 
    den hourly snapshot auslösen, hatten nur noch snapshot für 96 Minuten bei den hourly 
    snapshot, da diese anhand der Namen aufgeräumt werden 
    zfs list -t snapshot rpool/test # Zeitangabe bei den snapshot in UTC - damit es keine 
    Probleme bei der Umstellung auf Sommerzeit bzw. Winterzeit gibt 
    # kam ist der selbe Minute noch ein frequent snapshot dazu 
    zfs list # belegt 96K (REFER) 
    dd if=/dev/zero of=datei1 bs=1M count= 1024 # 1G Daten erzeugen, darum compression 
    ausgeschaltet 
    ls 
    ls -alth # 1G 
    zfs list # 1G 
    dd if=/dev/zero of=datei2 bs=1M count= 1024 # 1G Daten erzeugen 
    zfs list # bei ersten Abfragen 1.71G - schreiben war noch nicht fertig 
    ls -althr # 2G Daten 
    zfs get all rpool/test # written 2.00G 
    zfs list # jetzt sind die 2G auch zu sehen - war vorhin noch nicht mit dem schreiben fertig 
    # jetzt kommt Kopfschmerz Zeug 
    /etc/cron.hourly/zfs-auto-snapshot # nächster snapshot - ist der einfachste Weg snapshots 
    zu machen 
    dd if=/dev/zero of=datei3 bs=1M count= 1024 # 1G Daten erzeugen 
    zfs list # 3G 
    /etc/cron.hourly/zfs-auto-snapshot # nächster snapshot 
    rm datei1 
    /etc/cron.hourly/zfs-auto-snapshot # nächster snapshot # geht nur einmal pro Minute da 
    keine Sekunden Angabe gibt - daher nicht gemacht 
    zfs list # rpool/test USED=3.00G, REFER=2.00G 
    # was bedeutet das ? 2GB an Daten, 3 inkl. aller snapshots 
    dd if=/dev/zero of=datei4 bs=1M count= 1024 # 1G Daten erzeugen 
    zfs list # dauert noch eine Sekunde 
    zfs list # USED=4.00G, REFER=3.00G 
    rm datei2 
    dd if=/dev/zero of=datei4 bs=1M count= 1024 # 1G Daten erzeugen # blöderweise diese 
    noch mal angefasst - da macht aber nix 
    zfs list -t snapshot # sonst zerhaue ich mir meine Demo 
    zfs rollback -r rpool/test@zfs-auto-snap_hourly-2023-10-12-1148 
    ls # wo stehen wir hier - 3 Dateien 
    dd if=/dev/zero of=datei4 bs=1M count= 1024 # Erzeugen der 4. Datei nochmal neu 
    zfs list # jetzt sind wir wieder da - wo wir vorher waren 
    rm datei1 
    /etc/cron.hourly/zfs-auto-snapshot 
    zfs list -t snapshot rpool/test # jetzt interessiert mich, was das bedeutet 
    # REFER 
    # sagt wie voll der livezustand war 
    # Frage vorhin war was hat sich geändert, das können wir uns auch gleich anschauen 
    zfs get written | grep test 

  • ‣  # zeigt den zuwachs 
  • ‣  # man würde auf einen snapshot zurück rollen der keinen großen Zuwachs hatte - bei den
    letzten snapshot war der Zuwachs entweder 2G oder 1G, der davor 0 - damit würde man
    auf diesen zurück rollen 
  • ‣  zfs get all rpool/test@zfs-auto-snap_hourly-2023-10-12-1148 
  • referenced 3.00G 
  • written 1.00G # da wurde 1G dazu gefügt 
  • ‣  # Jetzt zur Frage von Eben 
  • ‣  Warum sich die snapshot überschneiden ? 
    • ‣  Tägliche Reorganisation der Datenbank ==> viele Veränderung 
    • ‣  Was tun ? 
    • Anzahl der Snapshots Strategie 
    • NAS = Zuwachs, selten Löschung > viele Snapshots, egal 
    • DB = Veränderung permanent > viele Snapshots
      ◦Problem: Kunde hat 400GB, teilsweise täglich 160GB Veränderung 

• Evtl. hourly snapshot - aber nicht so lange aufheben
• Normalerweise typische VM, 3 Monate wie eben, ca. 2,5 * Platzbedarf inklusive

compression - 150GB / 200GB auf 3 Monate ‣ # Lass uns mal echte Daten anschauen

  • zfs list 
    qm list 
    # Typischer Terminalserver 
    # Termininal Server mit kleiner DB 
    zfs get written rpool/data/panora_vm_1501-disk-0 # geht nicht 
    zfs get written | grep rpool/data/panora_vm_1501-disk-0 # Erst alles Abfragen was 
    geschrieben und anschließend Filtern
    ◦Windows Event log ca. 1.5M pro Stunde - Zuwachssystem ◦zfs destroy rpool/data/pandora/vm-1501-disk-0@zfs-auto- 
    snap_frequent-2023-10-12-1100 # wichtig @ im Namen ◦zfs get written | grep rpool/data/panora_vm_1501-disk-0 
    zfs get written | grep rpool/data/panora_vm_1501-disk-0 | grep 2023-10-12-1 # mal sehen ob es so besser geht 

◦Es wird Platz freigegeben, aber bei written vorher 314k sind jetzt 326k

  • ‣  # PVE Workshop 
    • ls # zeigt datei2 datei3 datei4 
      rm * # alles lösche 
      zfs list # REFER 96k (kein Daten), USED 4.00GB # snapshot noch vorhanden 
      zfs list -t snapshot rpool/test # ich muss jetzt alle Snapshots löschen in denen die 
      Datei vorhanden war 
      # z.B. die lange da war, oder Du musst die 3 Monate abwarten 
      # Da muss man schon gut überlegen, was man da treibt ... 
      # Wo bekomme ich raus, wann was da war ? 
      # snapdir 
      # wichtig: oberster Ordner vom Dataset - hier rpool/test 
      cd .zfs # unsichtbarer Ordner 
      cd snapshot 
      ls # zeigt die snapshot als zfs-auto-snap_hourly_2023-10-12-<Uhrzeit> an 
      # jetzt kann man in jeden Ordner reingehen und siehst wie es zum Zeitpunkt aussah 
      cd zfs-auto-snap_hourly-2023-10-12-1148 
      ls # zeigt an wie es zu diesem Zeitpunkt war 

    • # jetzt kann man sich verschiedene andere Ordner nach dem gleichem Schema
      anschauen 
    • z.B. Ordner x: sieht genau so aus 
    • z.B. Ordner y: Ordner ist leer 
    • Verzeichnis .zfs/snapshot/... # ist read only
      ◦Man kann nur Daten heraus kopieren 
  • ‣  # Genau das ist der Trick vom Zamba File Fileserver 
  • ‣  # andere Alternative wir nehmen die snapshot Liste 
    • zfs list -t snapshot rpool/test 
      zfs diff rpool/test@zfs-auto-snap_frequent-2023-10-12-1145 rpool/test@zfs-auto-snap_frequent-2023-10-11-1200 # jetzt kann man die Veränderungen sehen

◦+ /rpool/test/datei2 # kam dazu

◦M /rpool/test # wurde angefasst

  • ‣  # zurück rpool/test 
    • cd /rpool/test 
      ls # ist leer - dann müssen wir mal was zurück rollen 
      zfs rollback rpool/test@zfs-auto-snap_frequent-2023-10-12-1200 
      ls # Dann ist das Zeug wieder da 
      rm datei3 # löschen mal die Datei3 
      /etc/cron.hourly/zfs-auto-snapshot 
      zfs list -t snapshot rpool/test 
      zfs diff rpool/test@zfs-auto-snap_hourly-2023-10-12-1150 rpool/test@zfs-auto- 
      snap_hourly-2023-10-12-1205
      ◦- /rpool/test/datei # Datei wurde gelöscht ◦M /rpool/test 
      # das kann beliebig oft wiederholt werden - kann man lassen
       
  • ‣  # Photo arbeiten an altem Stand, z.B. Katalog 


zfs clone rpool/test@zfs-auto-snap_hourly-2023-10-12-1148 rpool/test-klon # Uhrzeit UTC - zweiter Parameter „neuer Name“ 
zfs list # rpool/test-klon REFER 3.00G Daten, USED 0B # und wir brauche dafür nichts 
cd /rpool/test-klon 
ls # zeigt die Dateien: datei1 datei2 datei3 
dd if=/dev/zero of=datei5 bs=1M count=1024 # Erzeugen datei5 und diese existiert nur 
im Klone 
zfs list # zeigt keine Veränderung 
# rpool/klon hat compression eingeschaltet ... 
ls 
rm datei5 
zfs set compression=off rpool/test-klon 
dd if=/dev/zero of=datei5 bs=1M count=1024 
zfs list # rpool/test-klon REFER 4.00G, USED 1.00G

  • # jetzt haben wir so richtig Kopfschmerzen 
  • # rpool/test REFER 2.00G auf die 2.00G Daten hat der User Zugriff, USED 4.00G
    liegen 2.00G mehr, die ich wieder herstellen könnte 
  • # einer dieser snapshots wurde geklont und das führt zu 0G 
  • # Anschließend haben wir 1.00G reingeschrieben und REFER 4.00G belegt - bei Klon
    anlegen waren 3.00G belegt 
  • # gibt in der Belegung rpool/test und rpool/test-klon 5.00 GB 
  • # jetzt merke ich das der Klon besser war, klon erst mal besser als rollback - weil da
    verliere ich erstmal nichts 
  • zfs promote rpool/test-klon # ... 
    zfs list 
    ◦rpool/test 1.00G (USED) ... 2.00G (REFER)
    ◦rpool/test-klon 4.00G (USED) ... 4.00G (REFER) - gerade umgedreht ◦# mit den Worten von Darth Vader zu sagen - jetzt bin ich der Meister 
    zfs promote rpool/test # ..
    ◦rpool/test 4.00G (USED) ... 2.00G (REFER) ◦rpool/test-klon 1.00G (USED) ... 4.00G(REFER) 
    zfs destroy -r rpool/test # kann nicht gelöscht werden, da abhängiger Klone ◦Fehlermeldung in Englisch 
    zfs promote rpool/test-klon # dann kann ich den alten löschen 
    zfsdestroy-rrpool/test 
    zfs list # kein Dataset rpool/test mehr
    
    ◦rpool/test-klon 4.00G (USED) 4.00G(REFER) 
  • # aus Ordner heraus gehen - ist man noch im Ordner kommt bei rename die 

Fehlermeldung busy

  • cd 
    zfs rename rpool/test-klon rpool/test 
    zfs list 

  • ◦rpool/test 4.00G (USED) 4.00G(REFER) 
  • # das ist fies - Geil oder ? 
  • # vor rollback, gerne mal klon machen und klon in Betrieb nehmen geht 
  • # Bei Replication (weil das neuer ist) #könnte ich auch zurückrollen und dann die
    Replication fortsetzen 

‣ # Trojainer

  • rm -r / * ◦Fehlermeldung 
    rm -r / * - -no-perverse-root ◦Löscht System 

  • # der ist tot 
  • # den bringen wir zum laufen nach der Pause 
  • # Ich mach jetzt mal wieder meinen ZALMAN - steckt den mal an den zerstörten PVE 
  • # man hier noch sieht ist der Kernel mit ZFS und KVM noch da
    ◦# die VM‘s müssten jetzt noch laufen - mal so am Rande 
  • # Jetzt müssen wir das System hard killen, weil keine Ausschaltmöglichkeit mehr 
  • # Wir booten jetzt ProxMox CD - Version 8 - ganz normale ISO
    ◦Advance Options 
    • ‣  Debug mode (Console) 
    • ‣  exit # für Debug 

    • zfs list # passiert gar nichts - englisches Tastaturlayout 
      zpool import 
      zpool import rpool # Du bist ein böser, der gehört Dir nicht 
      zpool import rpool -f # und jetzt gehört er mir 
      zfs list # hier ist ein komplettes meine Daten 

  • ls /rpool/test # ist Leer wurde ja alles gelöscht 
    zfs list -t snapshot # sehe jetzt die ganzen snapshots 

• # Wir erinnern und an /rpool/ROOT/pve-1 - das ist der ProxMox

zfs rollback rpool/ROOT/pve-1@zfs-auto-snap_hourly-2023-10-12-1205

• # zack erledigt


zfs rollback rpool/test@zfs-auto-snap_hourly-2023-10-12-1148 
ls /rpool/test # und schon sind die Daten wieder da 
  • ‣  # machen einen reboot und ziehen das USB Device wieder ab 
  • ‣  # bootet 
    • # Über Boot Auswahl Platte auswählbar 
    • # bei einen missglückten ProxMox Update auf 8
      ◦Könnte man einen älteren Kernel von ProxMox 7 booten
      ◦In der Regel hält der ProxMox einige ältere Kernel Versionen zur
      Auswahl bereit 
  • ‣  # Chriz hat das schon zwei gebraucht 
  • ‣  # Man kann es auch im laufenden Betrieb - wenn man es eilig hat 
    • VM‘s stoppen 
    • Rollback auf pve-1 snapshot 
    • 2 s warten und hard den Netzstecker ziehen 
    • System bootet und alles sollte wieder gut sein 

• # Proxmox wieder da

zfs list -t snapshot
zfs history # schaue mal was ich gemacht habe
zfs history | grep rollback # und schauen was ein guter Rollback war
zfs list -t snapshot -o name | grep zfs-auto-snap_hourly-2023-10-12-1205 
# und filtere mir diese Uhr Zeit raus

‣  # zeigt alle snapshot an, die er zu diesem Zeitpunkt gemacht hat 

  • ‣  Kopiere mir die snapshot Namen in einen TextEdit 

• Schreibe bei allen am Anfang: zfs rollback -r ◦falls gerade ein snapshot läuft


pct list # Container auflisten
pct start 101
pct start <Nummer des Containers> ◦qm list # VM‘s auflisten
qm start <Nummer der VM>

Einschub: CheckMK und SmartPlugin war die Anleitung falsch Datei - Chriz hat es gefixt und es geht


pct enter 101 # Und man ist im Container drin ‣ exit

pct stop 101 # Container wieder gestoppt ‣ # Kurze Zusammenfassung Datasets

  • history | grep zfs
    # Wir haben unsere history verloren 
    # macht auch nichts. ... ◦
    zfs list 
    zfs list -t snapshot
    zfs get written
    zfs get written,creation,guid # kann auch interessant sein
    zfs destroy # Achtung dataset@snapshot, sonst alles weg !!!
    zfs rollback -r

  • ◦# alle snapshots dürften gelöscht werden, solange ich nix replizieren möchte 
  • # Frage: Räumt zfs-auto-snapshot auf ? ◦Erklärung in den Notizen
    ‣ mmmwwdddddhhhhhhhfffhf 

‣ mmmwwdddddhhhhhhh_ffhff # kommt ein frequent dazu und wir wollen 4

pastedGraphic_5.png

aufheben, dann wird der älteste frequent gelöscht und der Vektor wird am _

übersprungen - der nachfolgende Vektorpunkt wird größer, um den gelöschten Vektorpunkt

• Erklärung mit Snapshot Größen ◦Erklärung mit Strecken und unterschiedlichen Wegen

‣ # Erklärung der Funktion & Co von Dataset‘s
• # Wir gehen mal auf einen anderen ProxMox - Produktiv System

◦ProxMox GUI Windows Maschine

  • ‣  In der Windwos Maschine mal etwas deinstallieren z.B. Element Client 
  • ‣  Netzwerkkabel deaktivieren 
  • ‣  # Hacker macht da irgendwo Blödsinn 
  • ‣  # Was könnte ich tun, wenn ich mit der Kiste nicht mehr klar komme ? 
    • # Rollback - Ist klar 
    • # wie bekomm ich bei VMs den besten rollback Zeitpunkt raus ? 

◦CLI mit dem ProxMox per ssh verbinden


qm list
VM 200 WIN10 
zfs list | grep 200 

• Disk-0 ist eindeutig # 312G zu 42.8G - Was eine Verwendung ..

‣ zfs get written | grep rpool/data/vm-200-disk-0
• Produziert pro Stunde 100 MB als Workstationen und wie weit geht es

zurück und wo liegt das Problem ? ◦Ganze viele @home-zfs Snapshots ◦@bashclub-zfs aus 2022
◦Die ist doch Perfect

◦Wenn Du die snapshot Engine beendest, räumt keiner mehr auf

◦Das ist auch bei TrueNAS ein Problem ‣ zfs list rpool/data/vm-200-disk-0

• Hat keinen Mountpoint

  • qm stop 200 
    cfdisk /dev/rpool/data/vm-disk-0 

  • ◦# so sieht Windows aus ◦Partition 1 - 500 MB ◦Partition 2 - 99,5G 


zpool status # Du hast einmal den RAID 
  • ‣  # nach import raid - kommen die Mountpoints - ... 
    • /rpool/test # Mountpoint 
    • /rpool/data/vm-200-disk-0 # Volume ZVOL 
  • ‣  # Wenn du in den Ordner reinschaust 
  • ‣  ls -althr /dev/zvol/rpool/data 

• ../../../zdXpY # sind alle im Ordner dev

  •  ls /dev 
    lsblk 
    zpool status 
    # Warum habe ich eine NVMe drin und nicht in Benutzung - Ich frage für 
    einen Freund ... 
    fdisk /dev/nvme0n1 # gar nicht gewusst das da eine NVMe drin war 
    zpool add -n rpool cache nvme0n1 
    zpool add rpool cache nvme0n1 # cache dazu gefügt 
    zpool status 
    zfs get written | grep rpool/data/vm-200-disk-0 
  • ‣  # ich könnte mir vorstellen, das das ein gute Zeitpunkt wäre - rpool/data/
    vm-200-disk-1@zfs-auto-snap_hourly-2023-10-12-0717 

  • zfs get creation rpool/data/vm-200-disk-1@zfs-auto- 
    snap_hourly-2023-10-12-0717 # wegen der wirklichen Uhrzeit - 09:17 
    # 2 Stundenunterschied - Abhängig von Sommer- / Winterzeit 
  • ‣  # Ist mir persönlich schon etwas zu spät 

  • zfs get creation rpool/data/vm-200-disk-1@zfs-auto- snap_hourly-2023-10-12-0517 # 07:17 
    zfs rollback -r rpool/data/vm-200-disk-1@zfs-auto- snap_hourly-2023-10-12-0517 # geht so - abgebrochen 
  • ‣  # so arbeite ich 

  • zfs clone rpool/data/vm-200-disk-1@zfs-auto-snap_hourly-2023-10-12-0517 rpool/data/vm-200-disk-9 
    # mache eine Disk-9 draus oder nach rpool-clone 
  • ‣  # Chriz hat nach dem Screenshot auf 12:17 zurück gerollt wegen den
    Replicaten 

  • zfs list | grep 200 

• # man sieht -disk-0 und -disk-9

  • vi /etc/pve/qemu-server/200.conf # Anpassung der -disk-0 auf -disk-9 
    qm start 200 
  • ‣  # Wechsel in die ProxMox GUI 
    • # wir sehen: Netzwerkkarte ist an 
    • # und Element Client ist wieder da 
    • VM wieder stoppen 
  • ‣  # Wechsel zur Command Line 
  • ‣  # Könnte disk-9 promoten und als Livesystem nehmen 

  • zfs list | grep 200 
  • ‣  # kann aber auch den Klon wieder löschen 

  • zfs destroy -r /rpool/data/vm-200-disk-9 
    zfs rollback -r rpool/data/vm-200-disk-1@zfs-auto- snap_hourly-2023-10-12-0517 
    vi /etc/pve/qemu-server/200.conf # wieder zurück auf disk-0 ändern 
    qm start 200 
  • ‣  # Macht am die Änderung in der 200.conf nicht und startet diese gibt es 

keine Fehlermeldung - im Video zu shen

  • ‣  # Was wäre denn wenn ich hier eine alte Datei bräuchte 

  • zfs list 
    pct list 
    # rpool/data/subvol-106-disk-0 
    # file restore 
    cd /rpool/data/subvol-106-disk-0 
    cd .zfs 
    cd snapshot 
    ls 
    cd home-zfs_2023-10-08_06:26:17 # irgend ein alter snapshot 
    ls # Du alle Dateien und Ordner zu diesen alten Zeitpunkt 
    cd var/log # besser unter var/log gucken 
    ls -althr # jetzt sieht man die alten Dateien 
  • ‣  # jetzt könnte ich eine alte Datei einfach heraus kopieren 
  • ‣  # Aus einem Klone könnte ich es auch verändern 
  • ‣  # Könnte man mit einen FileZilla in den Ordner gehen und auf deine
    Workstation kopieren 
  • ‣  # Zeigen mit FileZilla über SFTP 
  • ‣  # Quiz Frage 
  • ‣  
    zfs list -t snapshot | grep 200-disk 
  • ‣  # an die Dateien von hier: rpool/data/vm-200-disk-0@home-
    zfs_2023-05-28_09:02:10 

  • zfs clone rpool/data/vm-200-disk-0@home-zfs_2023-05-28_09:02:10 rpool/ data/vm-200-disk-9 # wieder disk-9 # ginge auch mit mount parameter, aber 

    das führt hier zu weit - so ist es einfacher 

  • mkdir /mnt/restore 
    mount /dev/zvol/rpool/data/vm-200-disk-9-part1 /mnt/restore # man 

mounted Partition und nicht das Volume

  • ‣  # Sprung zurück in FileZilla und den Pfad auf /mnt/restore ändern 
  • ‣  # dort sieht man jetzt die gemounteten Daten 
  • ‣  # Ist auch auf der Command Line möglich sich anzuschauen -in directory
    wechseln und mit ls schauen ... 
  • ‣  # falsche Partition 

  • umount /mnt/restore 
    mount /dev/zvol/rpool/data/vm-200-disk-9-part2 
  • ‣  # und wieder zurück in FileZilla # und ist das Geil ? - da brauchst Du keine
    Backupsoftware, bis die gestartet und evtl. Upgedatet ist - bist Du schon 10
    mal fertig 

  • umount /mnt/restore 
    zfs destroy -r rpool/data/vm-200-disk-9 # destroy Clone 
  • ‣  # Frage Du hast doch noch ganze viele snapshot von 2022, wie würdest du
    die aufräumen ? 
  • ‣  # alle unseren guten Tools unter https://github.com/bashclub 

• check-zfs-replication # check-snapshot_age -gehst auf raw - Pfad aus Browser kopieren

wget <Pfad aus Browser> 
chmod +x check-snapshot-age 
./check-snapshot-age 
    • # rpool/repl # ist ein repl - dort sollte es keine autosnaps gegeben ◦# kein hourly
      ◦# 20 daily‘s
      ◦# für die Dummheit 3 Stunden frequent 
    • # rpool
      ◦# hourly sind wieder an auf 96 ◦# daily 20
      ◦# frequent 12 

• # ist kein fertiges Tool - alarmiert kein bashclub und backup - müsste man mal umprogrammieren

  • ./check-sanpshot-age # auf anderer Maschine ... 
    zfs list -t snapshot | grep 2022 # mal sehen was hier das Problem ist 
    zfs destroy -r rpool/repl 
    zfs list -t snapshot | grep rpool/data/vm-106-disk-0 
  • • # in 2022 snapshot mit Prefix bashclub gemacht hat • # dann gibt es home-zfs
    ◦# wohl mal auf home-zfs geändert und ist das aktuelle Prefix • # in-house repl nutzt backup-zfs 
  • ‣  # Profi Tipp: Replications Prefixes immer gut auswählen 
  • ‣  # das ist kein gutes Beispiel 
  • ‣  # Github - zfs-housekeeping # das ist super 
  • ‣  # Link aus Github kopieren 


  • wget <path> # cleansnaps genannt 
    chmod +x cleansnaps.sh 
    # chmod +x erklärt 
    vi cleansnaps.sh 
    #!/bin/sh 
    ./cleansnaps.sh # zeigt Hilfe 
    /cleansnaps.sh -t -k 95 rpool/data hourly # -t wie test -k 95, eins weniger (96) 
    • # Ausgabe immer pro Dataset 
    • # oben sieht du oben würde er immer einen löschen # - Zeichen:
      löschen, + Zeichen: behalten 

  • ./cleansnaps.sh -f -k 95 rpool/data hourly # -f ist force ohne Rückfragen - hat 
    # Chriz gerade schon entschieden zu tun 
    ./cleansnaps.sh -t -k 0 rpool/data bashclub-zfs # jetzt kann ich schauen, ob  

er jetzt wird etwas löschen würde, was ich noch brauche ...

  • zpool list 
    zfs list -t snapshot | grep bashclub-zfs | grep 2023 # sind da irgendwelche 
    snapshots aus 2023 
    # jetzt passt das 
    ./cleansnaps.sh -f -k 0 rpool/data bashclub-zfs # bashclub-zfs snapshot 
    # werden gelöscht 
  • ‣  # Frage: scrubbing 
  • ‣  # läuft bei ProxMox alle 2 Wochen autorisiert - wenns blöd läuft legt du die
    Maschine lahm - stellt die defekte Blöcke anhand der Checksummen wieder her - in der Zeit sollten keine Backup laufen # zfs scrub -s <zpool> # kann es abgebrochen werden 
  • ‣  # snapshot ausmisten ist ultra wichtig 
  • ‣  zfs get creation | grep -v 2023 # sollte nichts mehr älter sein als 2023 

• # es noch ein Ergebnis

zfs get creation | grep -v 2023 | grep @

• # zeigt alle snapshots an

  • ‣  # auf data.alt hatte Chriz das Script nicht los gelassen 
  • ‣  # Gut, die lassen wir mal, wird schon einen Grund gehalt haben 
  • ‣  # Jetzt gucken wir uns die Windows Maschine nochmal an 
  • ‣  zfs 
    • rpool/data/vm-200-disk-0 275G ... 41.7G 
    • # immer noch ziemlich viel 

list

‣ zfs

  • # @home-zfs sind viele - warum ? 
  • # im Replication Script steht -k 5 # erkläre ich gleich 
  • # Moment mal ... 
  • # es sollten nur 5 @home-zfs sein und er hat es nicht bereinigt - ich 

get written | grep rpool/data/vm-200-disk-0

glaube meine Schwein pfeift ... - auf gehts

  • ./cleansnaps.sh -t -k 5 rpool/data home_zfs # bei -k 0 könnte ich nicht mehr 
    anfügen (Replication) 
    # passiert immer wenn der Computer gewechselt wird - vorher raspi später 
    ein ProxMox - das ist mir nicht das erste Mal aufgefallen - ich kann es euch 
    nicht erklären ... 
    ./cleansnaps.sh -f -k 5 rpool/data home_zfs 
    # wir haben 5 snapshots auf, der letzte ist der eigentliche den wir zum 
    # anfügen brauchen 

‣ # Replication

  • zfs list 
    zpool import # haha ◦# zeigt rpool2 
    zpool import rpool2 rpool-hdd # den hatten wir schon 
    zfs create -o com.sun:auto-snapshot=false rpool-hdd/repl # repl immer ohne auto-\
    snapshots !!! - Doppelpunkt bedeutet User Parameter - ohne Doppelpunkt geht es nicht 
    /etc/cron.hourly/zfs-auto-snapshot 
    zfs list -t snapshot | grep repl # Gibt es ist eine autosnapshot auf repl ? 
    # Antwort: Nein 
    zfs get all rpool-hdd/repl 
    # Property com.sun:auto-snapshot false local 
    zfs list 
    # wir wollen replizieren 
    # Erklärung in Notizen 
    zfs send + zfs recv 


zfs send ds@snapshot + zfs recv dataset # grobe Idee

zfs snapshot rpool/test@repl1

zfs send rpool/test@repl1 # Error

‣ # der output muss irgendwo hin - du könntest es in eine Datei schreiben,

macht aber keinen Sinn

Lokal push


zfs send rpool/test@repl1 | zfs recv -dvF rpool/repl # neuester Snapshot 
zfs -pvR send rpool/test@repl1 | zfs recv -dvF rpool/repl # mit allen snapshots 
  • ‣  # Achtung diese Methode immer nehmen bei z.B. mehreren DCs und SQL /
    Anhänge auf zwei Disks
    Remote Push auf Quelle 


zfs -pvR send rpool/test@repl1 | ssh root@192.168.66.10 zfs recv -dvF

Mirror/replica/zfsworkshop # andere computer daher ssh
Remote Pull auf Ziel - # der heile Gral # kompromittierter Quelle kommt nicht auf

Replikation !!! - Trojainer sicher, wenn Quelle nicht auf Ziel kommt

  • ‣  zfs recv -dvF Mirror/replica/zfsworkshop | ssh root@192.168.50.80 zfs -pvR
    send rpool/test@repl1 # Achtung geht so nicht und wirft komischen
    output 


ssh root@192.168.50.80 zfs -pvR send rpool/test@repl1 | zfs recv -dvF Mirror/replica/zfsworkshop

 # immer zfs send | zfs recv als Prinzip
◦Wie gehts dann weiter ... ? 

  • ‣  Egal welches Replications Tool Du auch verwendest - es ist immer das
    gleiche Prinzip zfs send + zfs recv 
  • ‣  -i ohne zwischen snapshots 
  • ‣  -I mit zwischen snapshots 

  • zfs-pvRI sendrpool/test@repl1rpool/test@zfs-auto- snap_frequent-2023-10-12-1345 \ 
    | zfs recv -dvF rpool/repl # das ist incrementalle Replication 


  • ‣  # Großes I mit Zwischensnapshots (inhaus) - Kleines i (außer Haus, wenn 

pastedGraphic_6.png pastedGraphic_7.png pastedGraphic_8.png pastedGraphic_9.png pastedGraphic_10.png

möglich) - w für Raw, komprimierte oder verschlüsselte Übertragung ‣ # Bei der Firma hast du alles mit compression=on, Replikat Server ist compression gleich lz4. Dann würde er es erst entpacken, ungepackt

Übertragen und auf dem Replikat Server wieder packen. -w sorgt dafür das dein Replikat die gleiche Komprimierung hat wie die Quelle und damit hast du viel weniger Daten

• # Den Parameter sollte man noch dazu nehmen ◦Kontrolle

pastedGraphic_11.png pastedGraphic_12.png pastedGraphic_13.png pastedGraphic_14.png pastedGraphic_15.png pastedGraphic_16.png pastedGraphic_17.png pastedGraphic_18.png pastedGraphic_19.png

◦ ◦ ◦ ◦ ◦

root@zfs:~# 

checkzfs --filter rpool/test --replicafilter rpool-hdd/repl --columns +message --threshold 75,90


status ║ Quelle ║ Replikat ║ Snapshotname ║
Alter ║ Anzahl ║ Kommentar ═══════╬════════════╬═════════════════════╬══════════════════════════════════════╬══════════ ══╬════════╬══════════

  ok   ║ rpool/test ║                     ║ zfs-auto-snap_daily-2023-10-12-1353    5Min

8Sek ║ ok

38Sek ║

    15 ║

║ rpool/test ║ rpool-hdd/repl/test ║ zfs-auto-snap_hourly-2023-10-12-1349 ║ 9Min

13 ║

◦Replikation Quick and Dirty - gut

  • ‣  Schlüssel tauschen 
  • ‣  Auf Ziel Skript 
  • ‣  Zeitplaner 
  • ‣  Report
    • #CommandLine 


zfs send rpool/test@repl1 | zfs recv -dvF rpool/repl

◦# ◦# ◦# ◦#

  • zfs list 
    zfs list 

  • ◦# ◦# 

-d Destination ? # spielt auch keine Rolle ihr bekommt nachher eine Tool dafür -v verbose
-F force rollback
into rpool/repl/test@repl1

-t snapshot rpool/repl/test rpool-hdd/repl/test@repl1 0B USED, 104k (REFER) oh da ist nur einer - hauen wir es nocheinmal weg

  • zfs destroy -r rpool/repl/test 
    zfs -pvR send rpool/test@repl1 | zfs recv -dvF rpool/repl 
    # p progress
    # v verbose
    # -R recursive # nach hinten, nicht nach unten 
    cat .ssh/id_rsa.pub
    # Public Key kommt aufs Ziel 
    # Ziel Host per ssh einloggen
    sudo vi /root/.ssh/authorized_keys 
    zfs destroy -r rpool/repl/test 
    zfs -pvR send rpool/test@repl1 | zfs recv -dvF rpool/repl 
    # p progress
    # v verbose
    # -R recursive # nach hinten, nicht nach unten 
    cat .ssh/id_rsa.pub
    # Public Key kommt aufs Ziel 
    # Ziel Host per ssh einloggen
    sudo vi /root/.ssh/authorized_keys 

‣ Public Key einfügen

zfs list # ich schaue mal wo wir es hinpacken
sudo zfs create Mirror/replica/zfsworshop # das Vermerke ich mir ◦
zfs get written Mirror/replica/zfsworshop
# Property com.sun:auto-snapshot false inherited from Mirror ◦
zfs list | grep Mirror/replica/zfsworkshop
# noch nicht was groß drin 96k • # Push Host


zfs -pvR send rpool/test@repl1 | ssh root@192.168.66.10 zfs recv -dvF Mirror/ replica/zfsworkshop

‣ # einmal Fingerabdruck bestätigen • # Von Replica Ziel ausführen

◦# Achtung funktioniert so nicht - bringt komischen Output, da zfs recv und zfs send vertauscht


zfs list | grep Mirror/replica/zfsworkshop # hat schon was


sudo zfs destroy -r Mirror/replica/zfsworkshop 
sudo us # ist schöner ... 
zfs recv -dvF Mirror/replica/zfsworkshop | ssh root@192.168.50.80 zfs -pvR 

send rpool/test@repl1

  • # Fingerprint bestätigen 
  • # Password Eingabe 
  • # komischer Output 
  • # Abbruch

 

ssh-copy-id 192.168.50.80 # solange der Passwort login noch an ist, kannst du es so machen

• Password Eingabe

  • ‣  # Wir probieren es nochmal 

  • zfs recv -dvF Mirror/replica/zfsworkshop | ssh root@192.168.50.80 zfs -pvR send rpool/test@repl1 

• # gleicher komischer output


  • # Warum fliegt er auf die Fresse ? 
    zfs list 
    zfs list | grep zfs 
    # Warum liegt er auf die Fresse ? 
    # mal schauen ob der ssh funktioniert 
    ssh root@192.168.50.80 
    # geht 
    exit 
    # das können wir mal testen 
    ssh root@192.168.50.80 zfs -pvR send rpool/test@repl1 
    # daher kommt das Problem her 
    ssh root@192.168.50.80 zfs get all rpool/test@repl1 # probieren mal was 
    # einfacheres 
    zfs recv -dvF Mirror/replica/zfsworkshop | ssh root@192.168.50.80 zfs -pvR \
    -w send rpool/test@repl1 # -w raw dazu - erklär ich gleich 

• # gleicher komischer Output

  • ‣  # Das Terminal macht das Problem - Terminal mal neustarten 
  • ‣  # RasperryPI 

  • sudo su 
    lshw # ist ein Raspberry Pi - geht wunderbar 
    # Wir tasten uns mal ran - evtl. Sonderzeichen im Editor 
    # vorher Teil kopieren - | im Terminal - hinteren Teil kopieren 
    zfs recv -dvF Mirror/replica/zfsworkshop | ssh root@192.168.50.80 zfs -pvR send rpool/test@repl1 
  • ‣  # immer gleicher komischer Output 
  • ‣  # ich lasse es mal durchlaufen - ist irgendwie gruselig 
  • ‣  # ich habe keine Ahnung 
  • ‣  # Abbruch 
  • ‣  # lass mich das mal umgedreht probieren, bin geistig abgewandert 
  • ‣  # ich glaube ich hab mich vertan

    zfs send und zfs recv - in richtiger Reihenfolge 
    ssh root@192.168.50.80 zfs -pvR send rpool/test@repl1 | zfs recv -dvF Mirror/replica/zfsworkshop 
  • ‣  # ja das wars 
  • ‣  # wie würde es hier weitergehen ? 
  • ‣  # bleiben wir noch mal bei der Push Replication vom Anfang (Lokal) 

• # zurück auf den Workshop Maschine - ist schön klein und kompakt
◦# jetzt kommt gleich ein Autosnapshot, aber ich mache einen von hand ◦/etc/cron.hourly/zfs-auto-snapshot

zfs list -t snapshot | grep test
zfs destroy -r rpool-hdd/test # hauen wir mal weg, sonst kommen wir da
# durcheinander - nicht schön
# zfs list -t snapshot | grep test
# Es gibt neuere snapshot auf dem System, die nicht in repl1 liegen

# wie kommen wir da ins Geschäft ?
zfs -pvRI send rpool/test@repl1 rpool/test@zfs-auto-snap_frequent-2023-10-12-1345 | zfs recv -dvF rpool/repl 

# das -R schadet im Prinzip nicht # neuesten Snapshot angeben - Jetzt kommt noch ein kleines oder großes i dazu

  • ‣  # -i ohne Zwischensnapshots 
  • ‣  # -I mit Zwischensnapshots ◦# das war‘s - das ist alles
    ◦zfs list -t snapshot | grep test 

‣ # wenn du jetzt guckst, dann stellst du fest, das Quelle und Replica gleich sind

◦# dann kommt der autosnapshot ◦/etc/cron.hourly/zfs-auto-snapshot ◦zfs list -t snapshot | grep test

‣ # dann haben wir wieder einen snapshot mehr auf der Quelle ◦

zfs -pvRI send rpool/test@repl1 rpool/test@zfs-auto-snap_hourly-2023-10-12-1349 | zfs recv -dvF rpool/repl

◦# Das ist alles und da reden wir seit 15 Jahren auf dem Kanal

zfs list -t snapshot | grep test


◦# Das kann mit jeden Tool automatisiert werden
◦# Problem autosnapshot plus repl Engine die auf Namen reagieren = miese

Falle

  • ‣  # Vergleicht Namen, wenn auf beiden Seiten gleich ist, dann wird nichts geschickt, wenn ein Snapshot auf beiden Seiten zur gleichen Zeit gemacht wurde 
  • ‣  # Des wegen auch autosnapshot disable auf dem Replikat, damit kein Name erzeugt wird, der den Eindruck erweckt das das der selbe snapshot wäre 

◦# ich zeige euch mal, wie man das vernünftig heraus findet

◦# was ist der neuste snapshot vom Replikat
‣ rpool-hdd/repl/test@zfs-auto-snap_hourly-2023-10-12-1349


zfs get guid rpool-hdd/repl/test@zfs-auto-snap_hourly-2023-10-12-1349 # neuster repl snap

‣ <guid> vom snapshot auf repl ◦zfs get guid | grep <guid>


/rpool-hdd/repl/test@zfs-auto-snap_hourly_2023-10-12-1349 <guid> 
/rpool/test@zfs-auto-snap_hourly-2023-10-12-1349 <guid> 
# Damit sind beide identisch 
# wenn doppelt, anfügen möglich, so lange das der neuste ist oben ◦/etc/cron.hourly/zfs-auto-snapshot
/etc/cron.daily/zfs-auto-snapshot # das geht ja alles weiter
# sagen wir mal repl muss < 1h sein 
zfs get creation rpool-hdd/repl/test@zfs-auto-snapshot_hourly-2023-12-1349 

‣ # sehe das es passt

# fail safe repl Prüfung # hat sich Chriz ausgedacht ...
◦# das hat dann jemand programmiert
◦# Software liegt auf github bashclub - check-zfs-replication
◦# GitHub README.md kopiert die drei Zeilen

wget -O /usr/local/bin/checkzfs https://raw.githubusercontent.com/bashclub/

check-zfs-replication/main/checkzfs.py ◦
chmod +x /usr/local/bin/checkzfs ◦
checkzfs --help


◦# lade das runter und installiert das
◦# das macht du auf dem Ziel immer ◦# hier ist Quelle und Ziel gleich ◦checkzfs --soruceonly

‣ # Wissen wir ob das das selbe ist - wüssten wir nicht

‣ # wir haben aber gerade nachgeschaut
◦# deswegen Filter

checkzfs --filter rpool/data/ --replicafilter rpool-hdd/repl # rpool/data/ - damit
# fällt /rpooldata heraus, da es uns nicht interessiert - replicafilter schaue ab hier ◦
# zweimal warn - Warum ?
checkzfs --filter rpool/data/ --replicafilter rpool-hdd/repl --columns +message #

steht im Helpfile drin

# stimmt haben wir nicht repliziert

checkzfs --filter rpool/test --replicafilter rpool-hdd/repl --columns +message # den haben wir repliziert

# passt
checkzfs --filter rpool/test --replicafilter rpool-hdd/repl --columns +message --

threshold 75,90 # in Minuten
◦# Zeigen auf großer Maschine - wir hatten vorhin den Rasperry


sudo su 
cd 
  • ‣  # wir mach das immer von Ziel, daher Angabe der Quelle 


checkzfs --source 192.168.50.100 --filter rpool/data/ --replicafiler Mirror/ \
replica/pveloft/ - -threshold 1500,2000 
# täglich Sicherungen - hier etwas genauer bei relicafilter, weil Chriz schonmal 
#replica‘s mal wo anderes hinkopiert hat, dann würden die mehrfach auftauchen 

• # ales gesichert

  • ‣  # das ist der Hammer 
  • ‣  # wir erinnern uns an die vm 200 - das ist wieder im grünen Bereich 
  • ‣  # jetzt kommt der Knaller - ist CheckMK Thema 

  • cd /etc/check_mk/ 
    ls 
    cat checkzfs  
  • # Enthält die Parameter von checkzfs 
  • source: 192.168.50.200 
  • filter: rpool/data/ 
  • threshold: 1500,2000 
  • prefix: pveloft 
  • replicafilter: Mirror/replica/pveloft/ 
  • ‣  # ich habe das Script verlinkt 

  • cd /usr/lib/check_mk_agent/local 
    ls -althr 
    cd 3600 # Damit er das alle Stunde macht 
    ls -althr 
    checkzfs -> /usr/local/bin/checkzfs 
    # wenn das Script hier liegt nimmt es die config die unter /etc liegt 
    ./checkzfs 
    # Ausgabe für check_MK # Vorne die 0 bedeutet OK 
    # Ist anderer Workshop
     
  • ‣  # Wechsel zu Check_MK GUI 

• # Schaut am sich am besten im Video an Zeitpunkt: 3:01:17

‣ Pull Replikation

  • # In Notizen
    ◦# Replikation Quick und Dirty 
  • # Schaut Euch gerne mal Thorsten Tool an - das verfolgt eine andere Strategie 
  • # Github BashClub - bashclub-zfs-push-pull
    ◦# bashclub-zfs - das habe ich erweitert - das macht die eigentliche Arbeit ◦# 02pull # das habe selber hin gerotzt ... - das sorgt dafür das du nicht alles
    einzeln eintragen must ◦# kann push und pull 
  • # Wir nehmen unseren Raspi 
  • ssh 192.168.50.80 # kommen wir auf die andere Maschine, damit schon Schlüssel 

getauscht

  • mkdir workshop # ich mach mal einen Unterordner, damit ich nicht durcheinander komme ... 
    cd workshop 
    ls 
    git clone https://github.com/bashclub/bashclub-zfs-push-pull.git 
    ls 
    cd bashclub-zfs-push-pull 
    chmod +x 02pull # das heißt 02pull, weil wir manchmal auch schon 01auto-zfs- 
    snapshot, usw. hatten und von der Zeit ein bisschen steuern kann 
    chmod +x bashclub-zfs 
    cp bashclub/zfs /usr/bin # ist dann von überall aufrufbar 
    bashclub-zfs 
    vi 02pull 

  • ◦# und füllst es aus
    ◦# zum Testen zusätzlich eine echo vor Zeile mit bashclub-zfs
    ◦# ich mache das große Programm das nichts vergessen bleibt
    ◦# -t pull-zfs ist der Name
    ◦# -R ziehe mir die alten snapshots
    ◦# -I (inhaus) - Zwischensnapshots
    ◦# außer Haus würdest du wahrscheinlich das R und I verlassen, außer du hast
    Domaincontroller oder Datenbanken auf mehreren Plattenverteilt ◦# -k Anzahl der snapshots währe noch anpassbar
    ◦# -p ist der ssh port # könnte angepasst werden 
  • # das kopierst du in cron.hourly, cron.daily - what ever 
  • # das wars 
  • ./02pull 

    ◦Gibt die auszuführen Befehl aus 


/usr/bin/bashclub-zfs ...

‣...

  • # wenn du das Tool nicht mehr nutzt müsstest du alle snapshot mit dem Namen „pull-
    zfs“ löschen - wie vorhin mit der Windows Maschine gemacht 
  • # ein ausgebenes bashclub-zfs ausführen 
  • /usr/bin/bashclub-zfs -t pull-zfs -R -I -p 22 -v 192.168.50.80:rpool/data/vm-disk-1 
    Mirror/replica/zfsworkshop
    # macht alle Zwischensnapshots 
    vi 02pull

  • ◦# echo entfernen 
  • ./02pull # jetzt kann ich das nochmal komplett ausführen 

  • # Thorsten sein Script macht das Schritt für Schritt und immer wieder auflistet - dauert
    dadurch viel länger 
  • # Quelle - anderer Server 
  •  /etc/cron.hourly/zfs-auto-snapshot 
    /etc/cron.weekly/zfs-auto-snapshot # dann läuft zwischendurch noch ein weekly, das 
    ist aber scheiß egal 
    # Ziel 
    ./02pull 
    # hätte Du auf dem Ziel die autosnapshots an hättest, würde er auf die Fresse fliegen 
    # so würdest Du es mitbekommen, bei der alten Backup Methode war das ein Problem 
    vi 02pull 

  • ◦# Anpassung von -k 1 vornehmen, da sollte er das letzte und vorletzte behalten 
  • ./02pull 
    ◦# man sieht die Bereinigung auf dem Ziel zfs destroy -r ... 
    # damit ist die Replikation erledigt 
    # fertig 
    # wie bekommen wir raus wie es geklappt hat - hatten wir schon vorhin 
    checkzfs --source 192.168.50.80 # das würde eigentlich schon reichen 
    checkzfs --source 192.168.50.80 --filter rpool/data/ 
    checkzfs --source 192.168.50.80 --filter rpool/data/ --threshold 1500,2000 # 
    replicafilter ist optional 

  • # kannst dann noch mit Mail / check_MK - bring es erstmal soweit zu laufen ... 
  • # Profi Tipp: Wenn Du unter ProxMox den Mail Versand hin bekommst - Siehe
    Sendung nach dem Workshop - Link siehe weiter oben 
  • checkzfs --source 192.168.50.80 --filter rpool/data/ --threshold 1500,2000 --output mail 

  • # That‘s it - mehr musste nicht wissen 
  • # fertig 
  • # Frage kann ich auf mehrere Ziel replizieren 
  • # Chriz zeigt mal grob wo die Reise hingeht 
  • Siehe Video bei ca. 3:51
    ◦checkzfs # gibt es noch den Parameter maxsnapshots 

‣ z.B. 200 # hatten wir eben noch vergessen

write cache - Update Sendung 16.10.2023 (https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3Dshl0y5Pv2Mg&usg=AOvVaw2XX- BL9mdn9Mu0FPbNZFbB&opi=89978449)

◦Log Cache

zfs get sync rpool-hdd

• Propery: sync auf always setzen, normalerweise steht der Wert auf standard ‣ zpool iostat -v 1# Durch always hat sich die Nutzung des write caches verbessert ‣ zfssetsync=alwaysrpool-hdd