Direkt zum Hauptinhalt

ZFS Optimierung und Todsünden

ZFS Funktionen für SSDs

  • zpool get autotrim <poolname>: Auslesen ob „autotrim“ eingeschaltet ist
  • zpool trim <poolname>: Pool manuell trimmen
  • zpool status -t <poolname>: Auslesen TRIM status
  • zpool set autotrim=on <poolname>: generell trimmen (autotrim einschalten, wenn manuelles trimmen erfolgreich)
  • zfs add rpool cache nvmn0e1: füge nvmn0e1 als cache Device in rpool

ZFS mit Spindeln

  • Je mehr Spindeln desto schneller
  • Gespiegelte Disks ggf. auf mehrere SAS Lanes verteilen (dmesg beobachten)
  • SAS ist schneller als SATA!
  • Maximaler Speed ist oft durch alte HBA limitiert (6/12G)
    • G ist Gigabit, also 6/8 = 750MB/sek max

Todsünden

  • HW RAID Controller nutzen und mehrere LUNs als Raid VDEVs nutzen 

    Datenverust, kein Smart, keine Metriken

  • Single VDEV Raid z. B. auf Hardware Raid oder iSCSI/FC SAN
    Bei Beschädigung kann keine weitere Disk die Redundanz, bzw. die Konsistenz bestätigen. Wenn ein VDEV zu viele Fehler liefert, lehnt ZFS es für einen weiteren Import dauerhaft ab!!! Eventuell zpool import -fFX poolname probieren, destruktiv für Rollback auf letzten guten Zustand, sehr riskant
  • Deduplizierung aktivieren
    kann nicht mehr ausgeschaltet werden, ggf. in neueren ZFS Versionen optimiert
  • ZFS_ARC zu klein / zu groß 
    schlechte Leistung, bei Cache und LOG mehr ARC notwendig
  • Pool über 80% Füllstand
    Leistungseinschränkung bis Stillstand bei ca 96%
  • Snapshot Bereinigung / Management aus dem Blick verlieren
    führt ggf. unbeobachtet zu vollem Raid
  • Snapshots auf Backups
    völlig kontraproduktiv, führt zu sehr vollem Raid
  • Anfügesnapshot durch schlechtes Management verlieren
    Replikation benötigt neuen Platz und Zeit
  • Druckbetankung
    dafür ist ZFS nicht gemacht, was mehr kann, braucht auch mehr Leistung
  • PVE auf selbem RAID wie Systeme (OS auf Datenpool)
    Last auf VMs führt im Härtefall bis zum Kernelcrash
  • Kein ECC RAM
    Datenbeschädigung die nicht in jedem Fall durch Scrub und Resilver behoben werden kann (selten)
  • Proxmox Datastore auf ZFS Dataset Directory setzen
    Proxmox erstellt eventuell beim Booten den Ordner selbst und ZFS kann dann nicht mounten, Rollback setzt alle virtuellen Disks im Dataset zurück
  • Platzangaben vertrauen
    Recordsizes, Volblocksizes, Compressions, Special Devices und Co. machen eine Vorhersage fast unmöglich und rechtfertigen Thin Provisioning
  • zpool upgrade zu früh oder zu spät
    pool upgrade erweitert features die ggf. beim aktuellen Proxmox ISO noch nicht verfügbar, jedoch im Upgrade verfügbar sind. Im Recoveryfall kann man nur readonly mounten!
  • Festplatte ersetzen bei Proxmox ZFS Boot Systemen
    zpool replace sollte nur nach Übernahme der Partitionstabelle einer funktionierenden Disk auf die dritte Partition ausgeführt werden, zusätzlich mit proxmox-boot-tool init/format auf die zweite Partition.
  • iSCSI LUNs mit Proxmox
    nicht empfehlenswert, bestenfalls mit dem Free-/TrueNAS Plugin. Wie lange das supportet ist weiss keiner.
  • Import Proxmox Pool in Recovery Umgebung
    Achtung Eigentümer des Pools ändert sich, daher zpool import -fa benutzen, beim nächsten boot wieder zpool import -fa und exit, /etc/pve ist in Recoveryumgebung nicht vorhande, da aus FUSE generiert
  • Billige USB Adapter und Gehäuse
    Manche Adapter haben alle die gleiche Kennung, daher ggf. Raid erstellen und importieren über zpool import /dev/disk/by-path oder by-partuuid
  • Raid ohne dryrun erweitern
    'zpool add -n rpool mirror sdc3 sdd3' wäre korrekt, wobei es tödlich wäre hier das wort mirror zu vergessen
  • Konsumer SSDs für Cache und LOG
    Waren im Dauerbetrieb schon nach weniger als zwei Jahren am Limit, währen Enterprise SSDs nach 9 Jahren erst bei 30% waren. Getestet mit Samsung Consumer und Intel Enterprise
  • VMs nicht trimmen
    Discard in VMs gibt mit SSD Emulation freie Blöcke an ZFS zurück, ansonsten sehr viel Platz verschenkt!

  • Update 2024 zum Thema Volblocksize
  • root@pve83:~# zfs create -ovolblocksize=8k rpool/8k -V 1GWarning: volblocksize (8192) is less than the default minimum block size (16384).To reduce wasted space a volblocksize of 16384 is recommended.

  • rpool/16k                                               1.11G  15.2T  81.4K  -
    rpool/8k                                                1.49G  15.2T  81.4K  -

  • NAME                                              STATE     READ WRITE CKSUM

  • rpool                                             ONLINE       0     0     0

  •   raidz1-0                                        ONLINE       0     0     0
        scsi-201000000000000005cd2e475ae4b5651-part3  ONLINE       0     0     0
        scsi-201000000000000005cd2e4f1bd4e5651-part3  ONLINE       0     0     0
        scsi-201000000000000005cd2e4ef8f4b5651-part3  ONLINE       0     0     0
        scsi-201000000000000005cd2e4889d4b5651-part3  ONLINE       0     0     0

  • Bei RaidZ2 wäre der Overhead über 200%

  • Inzwischen warnt ZFS, jedoch sieht das keine in der PVE GUI!

  • Emfpehlung Volblocksize für ZVOLs

  • Raid 1 / 10 8-16k 

  • Raid5(Z1) 16k

  • Raid6+(Z2-3) 32k

  • Empfehlung Recordsize für Datasets

  • LXC 128k

  • Mailarchiv 16k

  • Proxmox Backup Server 1024k