# ZFS

Das Zetabyte Filesystem. Der Heilsbringer für alle kleineren und mittleren Installationen. Trojanersicher und extrem vielseitig!

# Schutz mit ZFS

[![image.png](https://aow.de/uploads/images/gallery/2023-09/scaled-1680-/OSZimage.png)](https://aow.de/uploads/images/gallery/2023-09/OSZimage.png)

### Wie eine Variable mit drei Buchstaben alles ändern kann!

#### Zetabyte Filesystem statt proprietärer Raid Controller oder Blackboxen ohne Kontrolle

ZFS ist ein von Sun Microsystems entwickeltes transaktionales Dateisystem, das zahlreiche Erweiterungen für die Verwendung im Server- und Rechenzentrumsbereich enthält. Hierzu zählen die vergleichsweise große maximale Dateisystemgröße, eine einfache Verwaltung selbst komplexer Konfigurationen, die integrierten RAID-Funktionalitäten, das Volume-Management sowie der prüfsummenbasierte Schutz vor Datenübertragungsfehlern. Einfach formuliert: Der Verbund der Festplatten wird von der gleichen Software geregelt die auch die Inhalte der Festplatten bereitstellt. Dadurch ist der Austausch von Datenträgern vor dem Ausfall bereits ohne Verlust der Redundanz möglich. Die vektorbasierte Snapshottechnoligie ermöglicht tausende Versionen ohne Last bereitzustellen. Im Notfall können alte Systemstände gestartet, extrahiert oder analysiert werden. Ohne Bereitstellungszeit! Die Veränderungen der Snapshots können einfach per Push oder trojanersicherem Pull auf beliebig viele Systeme übertragen werden. Im Vergleich zu einem Backup ist ein Replikat kein Versprechen auf eine Wiederherstellung, es ist eine Garantie! Dank ZFS endlich nie wieder Festplatten durch die Gegend tragen und Langzeitarchive aufbauen!

Unsere wichtigsten Lösungen hierzu sind Proxmox VE und TrueNAS Scale/Core, welche beide ZFS integriert haben und daher über allen traditionellen, oft überladenen, Lösungen stehen. Beide Systeme sind Open Source und können kostenfrei auf nahezu jeder Hardware genutzt werden.

[![image.png](https://aow.de/uploads/images/gallery/2023-09/scaled-1680-/fQFimage.png)](https://aow.de/uploads/images/gallery/2023-09/fQFimage.png)

#### Egal welche ergänzende Backupsoftware Sie nutzen...

mit ZFS als Basis können sie Ihre Backups vor Kompromittierung schützen. Damit es erst gar nicht so weit kommen kann, nutzen wir eine Technik die wir liebevoll Miyagimethode nennen. Die beste Verteidigung gegen Angriffe ist einfach nicht da zu sein. Unsere Ultimate Backupserver sind nicht nur unerreichbar für Angreifer, sondern die meiste Zeit ausgeschaltet und damit unangreifbar! Final schliessen wir das Konzept mit einer Überwachungsmethode die das Vergessen von Sicherungen unmöglich macht und durch Prüfsummen unsere Replikate ohne Fehlerquote eindeutig bestätigt. Wir haben also kein Versprechen auf Sicherung, sondern eine Garantie!

#### Schon bei der ersten Störung bezahlt sich das komplette System

Eine Datensicherung ist eine Methode die im Notfall die Zeit und auch den Platz für eine Wiederherstellung benötigt. Im Schnitt dauert eine Rücksicherung, wenn es bei einer bleibt, mehrere Stunden bis mehrere Tage. Gerechnet auf den Ausfall der Mitarbeiter, der verlorenen Aufträge und dem immensen Schaden an der eigenen Reputation, ist die Investition in ein kostengünstiges ZFS-System schon fast lächerlich im Verhältnis zu dem Stress eines längeren Ausfalls. Es gibt keine Wiederherstellungszeit oder extra Platzbedarf!

# ZFS Befehle

ZFS Befehle

Beispiel für eine selbst erstellte Eigenschaft:

zfs set zfs:backup=basename tank/data/vm-1066-disk-0

setzt die Eigenschaft zfs:backup Option basename auf local für die angegebene Disk0

<div class="level2" id="bkmrk-befehl%E2%80%A6%E2%80%A6%E2%80%A6%E2%80%A6%E2%80%A6%E2%80%A6%E2%80%A6%E2%80%A6%E2%80%A6%E2%80%A6%E2%80%A6%E2%80%A6%E2%80%A6%E2%80%A6"><div class="table sectionedit3"><table class="inline"><thead><tr class="row0"><th class="col0">Befehl………………………………………</th><th class="col1">Erklärung</th></tr></thead><tbody><tr class="row1"><td class="col0">**zpool status**</td><td class="col1">Zeigt den Zustand der ZPOOLS</td></tr><tr class="row2"><td class="col0">zpool iostat 1</td><td class="col1">Zeigt Perfomance Lesen/Schreiben, 1=fortwährend</td></tr><tr class="row3"><td class="col0">**zfs list**</td><td class="col1">Zeigt die eingerichteten Datasets</td></tr><tr class="row4"><td class="col0">zfs list -o space</td><td class="col1">\[-o name|-o compression|…\] Gute Übersicht der Datasets inkl. Speicherverbrauch Snapshots (Option `-t snapshot` zeigt nur Snapshots, `-H` ohne Überschrift für Scripts)</td></tr><tr class="row5"><td class="col0">**zfs get written**</td><td class="col1">Zeigt alle geschriebenen *datasets* inkl. Snapshots</td></tr><tr class="row6"><td class="col0">zfs get written | grep 402-disk</td><td class="col1">Erweiterung mit `grep` um einzelne VMs zu finden (hier 401)</td></tr><tr class="row7"><td class="col0">zfs get all rpool/data/&lt;ort&gt;</td><td class="col1">*all* zeigt alle Werte der Dateneigenschaften, z.B. Zugriffsrechte oder Snapshots</td></tr><tr class="row8"><td class="col0">zfs get compression rpool/data/&lt;ort&gt;</td><td class="col1">\[creation|compression|…\] Zeigt Eigenschaft (hier: Kompression) eines *datasets*</td></tr><tr class="row9"><td class="col0">zfs get -r &lt;eigenschaft&gt; rpool/data/&lt;ort&gt;</td><td class="col1">Zeigt Eigenschaft *rekursiv* inkl. Unter-Datasets</td></tr><tr class="row10"><td class="col0">zfs set &lt;eigenschaft&gt;=\[on|off\] rpool/data/&lt;ort&gt;</td><td class="col1">Ein- und Ausschalten einer Eigenschaft **Achtung bei -r!** (siehe [ZFS Options](https://wiki.cloudistboese.de/doku.php?id=wikiintern:1zfs#zfs_options "wikiintern:1zfs ↵"))</td></tr><tr class="row11"><td class="col0">zfs allow</td><td class="col1">Um Eigenschaften des Hauptverzeichnisses zu delegieren</td></tr><tr class="row12"><td class="col0">zfs inherit -r &lt;eigenschaft&gt; rpool/data/&lt;ort&gt;</td><td class="col1">Der Unterbefehl *inherit* wird *rekursiv* angewendet, wenn die Option *-r* angegeben wird (Achtung: Überschreibt Eigenschaften )</td></tr><tr class="row13"><td class="col0">zfs create rpool/data/&lt;ort&gt;</td><td class="col1">Erstellt ZFS Pool z.B. *rpool/data/repl* für Replikationsverzeichnis</td></tr><tr class="row14"><td class="col0">zfs destroy pool/data/&lt;ort oder VMID&gt;</td><td class="col1">Löscht den ZFS-Pool (bei vorhanden Snapshots nicht möglich)</td></tr><tr class="row15"><td class="col0">zfs destroy -r rpool/data/&lt;ort oder VMID&gt;</td><td class="col1">Löscht den ZFS-Pool inkl. aller Snapshots **unwiderruflich**</td></tr></tbody></table>

</div></div>

# ZFS Begriffe

<div class="level2" id="bkmrk-begriff%E2%80%A6%E2%80%A6-erkl%C3%A4rung-"><div class="table sectionedit5"><table class="inline" style="width:100.246914%;"><thead><tr class="row0"><th class="col0" style="width:13.115383%;">Begriff……</th><th class="col1" style="width:86.884617%;">Erklärung</th></tr></thead><tbody><tr class="row1"><td class="col0" style="width:13.115383%;">ZPOOL</td><td class="col1" style="width:86.884617%;">Allgemeiner Name für einen Speicher-*Pool* von HDs (von einer einzigen Festplatte \[einzelne *vdev*\]) bis raid-z3 \[mehrere *vdes*\], einem Software RAID-System auf ZFS-Basis</td></tr><tr class="row2"><td class="col0" style="width:13.115383%;">rpool</td><td class="col1" style="width:86.884617%;">Standardmäßig angelegter *ROOT-ZPOOL* bei Proxmox-Installationen</td></tr><tr class="row3"><td class="col0" style="width:13.115383%;">zfs Dataset</td><td class="col1" style="width:86.884617%;">Komplett individuelles Dateisystem z.B. unterhalb vom *ROOT ZFS Datasets* oder weiterer ZPOOLs (z.B. *mypool*). Dieses entsteht beim `zfs create` des Raids, beispiel **rpool/data** - Dort legt man üblicherweise Dateien ab, diese können auch *VMDK*, *RAW*oder *QCOW* für VMs enthalten</td></tr><tr class="row4"><td class="col0" style="width:13.115383%;">ZVOL</td><td class="col1" style="width:86.884617%;">Reservierung von Blöcken, erreichbar über den */dev*/-Ordner (Beispiel: `/dev/zvol/rpool`), und wird unter /dev/zvol/rpool/data nochmals detailiert symbolisch verlinkt. Üblicher Zugriff erfolgt über den PVE Manager der diese Volumes den VMs zuweist und dort auch verwaltet</td></tr></tbody></table>

</div></div>

# Vergleich von True NAS und Proxmox VE als Storage Server

<div class="no" id="bkmrk-">  
</div>### 1. TrueNAS (ehemals FreeNAS)

<div class="level3" id="bkmrk-reiner-storage-serve">1. <div class="li">Reiner Storage Server für NAS und SAN Aufgaben</div>
2. <div class="li">Rudimentäres Containering und unbrauchbare Virtualisierung</div>
3. <div class="li">Solider Unterbau basiert auf FreeBSD, gilt als noch stabiler als Linux</div>
4. <div class="li">Reine Appliance, Bedienung erfolgt ausschliesslich über Webinterface</div>
5. <div class="li">**Kernfunktionen**</div>
    - <div class="li">Samba NAS inkl. AD Integration und SID</div>
    - <div class="li">NFS NAS/SAN inkl. Zugriffskontrolle</div>
    - <div class="li">iSCSI SAN inkl Zugriffskontrolle</div>
6. <div class="li">**Indikation für Einsatz**</div>
    - <div class="li">Ergänzung als ZFS Fileserver mit oder ohne AD Integration</div>
    - <div class="li">SAN Server mit NFS für höhere Anzahl von PVE Systemen mit HA Bedarf</div>
    - <div class="li">SAN Server mit iSCSI für höchsten HA Bedarf</div>
    - <div class="li">SAN Server mit iSCSI für einfache Backup oder <abbr title="Operating System">OS</abbr> Aufgaben</div>
    - <div class="li">Vollständiges Monitoring und Webgui für Snapshots und Replikation, sowie den Systemzustand</div>

</div>
### 2. Proxmox VE

<div class="level3" id="bkmrk-gemischtes-system-f%C3%BC">1. <div class="li">Gemischtes System für Virtualisierung und ZFS Storage</div>
2. <div class="li">Umfangreiche Virtualisierung und Containering-Lösung</div>
3. <div class="li">Moderner Unterbau mit aktuellem Debian Linux</div>
4. <div class="li">Reichhaltige Funktionen in allen Bereichen kommen schnell an ihre Grenzen und werden durch eigene Kommandozeilenlösungen erweitert</div>
5. <div class="li">**Kernfunktionen**</div>
    - <div class="li">KVM Virtualisierung und LXC Containering</div>
    - <div class="li">ZFS Storagesystem für Software Raid und rudimentärer Snapshot- und Replikationslösung</div>
    - <div class="li">Optional: NFS-Kernel Server</div>
    - <div class="li">Optional: iSCSI Target</div>
    - <div class="li">Optional: erweitertes ZFS-Management mit [Sysops](https://www.sysops.de/ "https://www.sysops.de/") Hauslösungen</div>
6. <div class="li">**Indikation für Einsatz**</div>
    - <div class="li">Kleinere Anzahl von PVE Systemen mit potenter Aufnahme von Datenträgern</div>
    - <div class="li">Hoher Anspruch an Snapshotvorhaltung</div>
    - <div class="li">Leichte Replikation der Daten auf zweites System und eventuell weitere Ziele</div>
    - <div class="li">Applikationsbasierte Datensicherung</div>
    - <div class="li">Eigenes [Monitoring](https://wiki.cloudistboese.de/doku.php?id=wikiintern:checkmk "wikiintern:checkmk") und Reporting bevorzugt</div>
    - <div class="li">Einfacheres Deployment und Wiederherstellung</div>

</div>

# ZFS RAID

#### Übersicht ZFS-RAID

<div class="level4" id="bkmrk-raid-1-%28mirror%29-empf">- <div class="li">RAID-1 (mirror) *Empfohlen z.B. für reines Proxmox-System ohne VMs*</div>
- <div class="li">RAID-Z1 (1 Parity-Bit, ~RAID 5)</div>
- <div class="li">RAID-Z2 (2 Parity-Bits, ~RAID 6)</div>
- <div class="li">RAID-Z3 (3 Parity-Bits)</div>

</div>
#### RaidZ(2,3)

<div class="level4" id="bkmrk-sinnvoll-f%C3%BCr-datenab">- <div class="li">Sinnvoll für Datenablage und gelegentlichen Zugriff</div>
- <div class="li">Oft in Kombination mit harter Kompression im NAS Betrieb</div>
- <div class="li">Bei Erweiterung müssen alle Datenträger im Verbund getauscht werden </div>
- <div class="li">Bei PVE als Datastore dringend 16k Blocksize für neue Systeme hinterlegen, da sonst extremer Overhead (siehe Warnung)</div>
- <div class="li">x-y Verlust an Platz für Redundanz</div>

</div>
#### Raid Z+1

<div class="level4" id="bkmrk-eventuelle-kette-aus">- <div class="li">Eventuelle Kette aus mehreren RaidZ denkbar</div>
- <div class="li">Besserer Kompromiss aus Platzbedarf und Redundanz</div>
- <div class="li">Für VMs mit leichtem Anspruch akzeptabel</div>
- <div class="li">2x x-y Verlust an Platz für Redundanz</div>

</div>
#### Raid 1+0

<div class="level4" id="bkmrk-absolut-notwendig-f%C3%BC">- <div class="li">Absolut notwendig für VM Einsatz mit drehenden HDDs, sonst Latenz schlecht</div>
- <div class="li">Weitere Spiegel sind jederzeit anfügbar</div>
- <div class="li">Einzelne Spiegel können während des Betriebs ohne Redundanzverlust getauscht werden (wenn Slots frei)</div>
- <div class="li">Tausch zweier Datenträger führt zur Erweiterung der Kapazitäten (`zpool set autoresize=on <rpool>`)</div>
- <div class="li">Jedoch 50% Platzverlust für Redundanz</div>

</div>
#### Raid5+0

<div class="level4" id="bkmrk-kompromiss">- <div class="li">Kompromiss</div>

</div>
#### Solidstate Disks

<div class="level4" id="bkmrk-bei-zfs-immer-zu-bev"><div class="level4">- <div class="li">Bei ZFS immer zu bevorzugen, da Latenz ca 2x langsamer als ohne ZFS</div>
- <div class="li">Für HDD Systeme immer Cache Device einsetzen, dieses muss nicht redundant oder hotswappable sein. Ausfall unterbricht nicht den Betrieb</div>
    - <div class="li">**SATA**</div>
        - <div class="li">nur 6GBit/s halb-duplex (ca. 600 Megabyte/s)</div>
        - <div class="li">bei onBoard Controller darauf achten, mit wie vielen PCIe Lanes und mit welcher PCIe Generation angebunden, ggf. Flaschenhals</div>
        - <div class="li">günstig</div>
        - <div class="li">Samsung Pro, Intel mit krummen Zahlen (960GB, 1920GB), z.B. DC-S4510</div>
        - <div class="li">nicht immer Hot-Swap möglich</div>
        - <div class="li">SSDs im Formfaktor 2,5 Zoll und M.2 gängig</div>
    - <div class="li">**SAS**</div>
        - <div class="li">12GBit/s und voll-duplex (ca. 1,2 Gigabyte/s)</div>
        - <div class="li">teurer, aber weniger Müll am Markt</div>
        - <div class="li">Hersteller noch unklar</div>
        - <div class="li">Hot-Swap</div>
    - <div class="li">**NVMe**</div>
        - <div class="li">Protokoll setzt nativ auf PCIe auf, Latenz und Overhead gegenüber den klassischen Protokollen (SATA, SAS) sehr gering</div>
        - <div class="li">Vollduplex</div>
        - <div class="li">Bandbreite abhängig von PCIe-Generation und Anzahl der angebundenen Lanes (z.B. mit PCIe 4.0 x4 sind etwa 7 Gigabyte/s möglich, mit PCIe 3.0 x4 etwa 3,5 Gigabyte/s)</div>
        - <div class="li">**M.2 Formfaktor**</div>
            - <div class="li">nicht verwechseln mit M.2 SATA SSDs, PCIe / NVMe muss in den Specs stehen</div>
            - <div class="li">Sinnvoll für Cache oder LOG</div>
            - <div class="li">Wenn durch Bios bootfähig kann man sich ein Notsystem darauf bauen</div>
            - <div class="li">günstig</div>
            - <div class="li">belegen keinen Slot</div>
        - <div class="li">**U.2 Formfaktor (SFF-8639)**</div>
            - <div class="li">Bekannte irische Band ![LOL](https://wiki.cloudistboese.de/lib/images/smileys/icon_lol.gif)</div>
            - <div class="li">Einsatzbereich Server und Storage</div>
            - <div class="li">Wenig Erfahrung mit ZFS</div>
            - <div class="li">Hot-Swap</div>
            - <div class="li">PCIe 3.0 x4 Anbindung, Abwärtskompatibel zu SAS und SATA, Mischbetrieb über ein Kabel mit entsprechender Backplane möglich</div>
            - <div class="li">teuer</div>
        - <div class="li">**U.3 Formfaktor (SFF-TA-1001)**</div>
            - <div class="li">Nachfolger der U.2 Schnittstelle</div>
            - <div class="li">PCIe4.0 Unterstützung</div>
            - <div class="li">weitere Eigenschaften identisch zur U.2 Schnittstelle</div>

<div class="wrap_center wrap_round wrap_tip plugin_wrap">  
</div></div></div>**RAIDZ-BUG**

<div class="level4" id="bkmrk-name-volblock-lrefer"><div class="wrap_center wrap_round wrap_tip plugin_wrap"><div class="table sectionedit16"><table class="inline"><thead><tr class="row0"><th class="col0">NAME</th><th class="col1">VOLBLOCK</th><th class="col2">LREFER</th><th class="col3">REFER</th></tr></thead><tbody><tr class="row1"><td class="col0">pool1/test5</td><td class="col1">8K</td><td class="col2">16.7G</td><td class="col3">35.7G (213% overhead)</td></tr><tr class="row2"><td class="col0">pool1/test2</td><td class="col1">16K</td><td class="col2">89.4G</td><td class="col3">95.6G (6,93% overhead</td></tr><tr class="row3"><td class="col0">pool1/test3</td><td class="col1">32K</td><td class="col2">89.9G</td><td class="col3">96.0G (6,78% overhead)</td></tr><tr class="row4"><td class="col0">pool1/test4</td><td class="col1">64K</td><td class="col2">50.1G</td><td class="col3">53.5G (6,78% overhead)</td></tr><tr class="row5"><td class="col0">pool1/test</td><td class="col1">128K</td><td class="col2">60.7G</td><td class="col3">60.7G (0% overhead)</td></tr></tbody></table>

</div></div></div>

# ZFS Optimierung und Todsünden

#### ZFS Funktionen für SSDs

<div class="level4" id="bkmrk-zpool-get-autotrim-%3C">- <div class="li">`zpool get autotrim <poolname>`: Auslesen ob „autotrim“ eingeschaltet ist</div>
- <div class="li">`zpool trim <poolname>`: Pool manuell trimmen. Nicht alle SSDs können das, aber die meisten</div>
- <div class="li">`zpool status -t <poolname>`: Auslesen TRIM status</div>
- <div class="li">`zpool set autotrim=on <poolname>`: generell trimmen (autotrim einschalten, wenn manuelles trimmen erfolgreich)</div>
- `zfs set logbias=throughput <dataset/zvol>`: Eventuell bei großen Files spannend
- `zfs set sync=disabled  <dataset/zvol>`: kann Leistung steigern, auf Kosten der Sicherheit
- Es gibt weniger Müll an SAS SSDs als SATA am Markt
- Enterprise SSDs verwenden! 480G, 960G, 1920G, 3840G ....

</div>
#### ZFS mit Spindeln

- Mit mehr disks skalierst die Bandbreite
- Mit mehr vdevs skalierst IOps
- SAS (vollduplex) ist bei gleicher Bandbreite schneller als SATA (Halbduplex)!
- HBA muss den Linkspeed der Disk unterstützen, neuere Disk funktioniert an altem HBA und anders herum, Links Speed kann man u.a. mit lshw auslesen
- SATA Disks können an SAS Controller betrieben werden, anders herum nicht kompatibel

#### U.2 sticht SAS aus

- Viele Mainboards unterstützen SATA, SAS und U.2
- Direkte Anbindung an PCIe Bus, also kein 12G Limit

<div class="level4" id="bkmrk-je-mehr-spindeln-des"></div>#### ZFS mit Cache und oder LOG

- `zpool add cache <poolname> diskxpx`: Eventuell Lesecache auf Boot NVMe vom PVE oder ganze Disk
- `zpool add log <poolname> <strong>mirror</strong> diskxpx  diskxpx`: Eventuell Logdevice auf Boot NVMe**´s** vom PVE oder ganze Disks im **Spiegel plus USV!**
- `zfs set sync=always <poolname>`: ohne Sync, kein Log

<div class="level4" id="bkmrk--1"></div>
#### Todsünden

> **HW RAID Controller nutzen und mehrere LUNs als Raid VDEVs nutzen** Datenverust, kein Smart, keine Metriken

> <div class="li">**Single VDEV Raid z. B. auf Hardware Raid oder iSCSI/FC SAN**</div><div class="li">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  
> </div>

> <div class="li">**Deduplizierung aktivieren**</div><div class="li">kann nicht mehr ausgeschaltet werden, ggf. in neueren ZFS Versionen optimiert  
> </div>

> <div class="li">**ZFS\_ARC zu klein / zu groß** </div><div class="li">schlechte Leistung, bei Cache und LOG mehr ARC notwendig  
> </div>

> <div class="li">**Pool über 80% Füllstand**</div><div class="li">Leistungseinschränkung bis Stillstand bei ca 96%  
> </div>

> <div class="li">**Snapshot Bereinigung / Management aus dem Blick verlieren** </div><div class="li">führt ggf. unbeobachtet zu vollem Raid  
> </div>

> <div class="li">**Snapshots auf Backups**</div><div class="li">völlig kontraproduktiv, führt zu sehr vollem Raid  
> </div>

> <div class="li">**Anfügesnapshot durch schlechtes Management verlieren**  
> </div><div class="li">Replikation benötigt neuen Platz und Zeit</div>

> <div class="li">**Druckbetankung**</div><div class="li">dafür ist ZFS nicht gemacht, was mehr kann, braucht auch mehr Leistung  
> </div>

> <div class="li">**PVE auf selbem RAID wie Systeme (OS auf Datenpool)**</div><div class="li">Last auf VMs führt im Härtefall bis zum Kernelcrash  
> </div>

> <div class="li">**Kein ECC RAM**</div><div class="li">Datenbeschädigung die nicht in jedem Fall durch Scrub und Resilver behoben werden kann (selten)  
> </div>

> <div class="li">**Proxmox Datastore auf ZFS Dataset Directory setzen**</div><div class="li">Proxmox erstellt eventuell beim Booten den Ordner selbst und ZFS kann dann nicht mounten, Rollback setzt alle virtuellen Disks im Dataset zurück  
> </div>

> <div class="li">**Platzangaben vertrauen** </div><div class="li">Recordsizes, Volblocksizes, Compressions, Special Devices und Co. machen eine Vorhersage fast unmöglich und rechtfertigen Thin Provisioning  
> </div>

> <div class="li">**zpool upgrade zu früh oder zu spät**</div><div class="li">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!  
> </div>

> <div class="li">**Festplatte ersetzen bei Proxmox ZFS Boot Systemen** </div><div class="li">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.  
> </div>

> <div class="li">**iSCSI LUNs mit Proxmox**</div><div class="li">nicht empfehlenswert, bestenfalls mit dem Free-/TrueNAS Plugin. Wie lange das supportet ist weiss keiner.  
> </div>

> <div class="li">**Import Proxmox Pool in Recovery Umgebung**</div><div class="li">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  
> </div>

> <div class="li">**Billige USB Adapter und Gehäuse**</div><div class="li">Manche Adapter haben alle die gleiche Kennung, daher ggf. Raid erstellen und importieren über zpool import /dev/disk/by-path oder by-partuuid  
> </div>

> **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!

> **Startsektor der Partition nicht oktal** Manche Festplatten starten ab Block 34, manche auf Block 2048. Bei Startblock 34 sollte die erste Partition bis Block 2047 gehen, damit die nächste Partition direkt bei 2048 anfängt

> **Alles auf einmal machen**  
> Betrieb, Scrub, Trim Backup und Replikation treiben die Load in die Höhe, nach fest kommt ab:)

> **Nur auf ZFS vertrauen**  
> Auch wenn wir nun weit über 15 Jahre ZFS produktiv fahren, machen wir immer zusätzlich Replikate und Backups. Nur so kann wirklich nichts mehr passieren. Replikate bei denen die VM zum Snapshotten heruntergefahren wurde, dürften die absolut beste Sicherung sein und immer die erste Wahl bei Problemen

### Update 2024 zum Thema Volblocksize

\# zfs create -o volblocksize=8k rpool/8k -V 1G

\#Warning: volblocksize (8192) is less than the default minimum block size (16384).To reduce wasted space a volblocksize of 16384 is recommended.

rpool/16k <span class="Apple-converted-space"> </span>**1.11G**<span class="Apple-converted-space"> </span>15.2T<span class="Apple-converted-space"> </span>81.4K<span class="Apple-converted-space"> </span>-  
rpool/8k<span class="Apple-converted-space"> </span>**1.49G**<span class="Apple-converted-space"> </span>15.2T<span class="Apple-converted-space"> </span>81.4K<span class="Apple-converted-space"> </span>-

NAME<span class="Apple-converted-space"> </span>STATE <span class="Apple-converted-space"> </span>READ WRITE CKSUM

rpool <span class="Apple-converted-space"> </span>ONLINE <span class="Apple-converted-space"> </span>0 <span class="Apple-converted-space"> </span>0 <span class="Apple-converted-space"> </span>0

<span class="Apple-converted-space"> </span>**raidz1**-0<span class="Apple-converted-space"> </span>ONLINE <span class="Apple-converted-space"> </span>0 <span class="Apple-converted-space"> </span>0 <span class="Apple-converted-space"> </span>0  
<span class="Apple-converted-space"> </span>scsi-201000000000000005cd2e475ae4b5651-part3<span class="Apple-converted-space"> </span>ONLINE <span class="Apple-converted-space"> </span>0 <span class="Apple-converted-space"> </span>0 <span class="Apple-converted-space"> </span>0  
<span class="Apple-converted-space"> </span>scsi-201000000000000005cd2e4f1bd4e5651-part3<span class="Apple-converted-space"> </span>ONLINE <span class="Apple-converted-space"> </span>0 <span class="Apple-converted-space"> </span>0 <span class="Apple-converted-space"> </span>0  
<span class="Apple-converted-space"> </span>scsi-201000000000000005cd2e4ef8f4b5651-part3<span class="Apple-converted-space"> </span>ONLINE <span class="Apple-converted-space"> </span>0 <span class="Apple-converted-space"> </span>0 <span class="Apple-converted-space"> </span>0  
<span class="Apple-converted-space"> </span>scsi-201000000000000005cd2e4889d4b5651-part3<span class="Apple-converted-space"> </span>ONLINE <span class="Apple-converted-space"> </span>0 <span class="Apple-converted-space"> </span>0 <span class="Apple-converted-space"> </span>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

# ZFS Import - Importieren von ZPOOLS

Bei (Neu-)Installationen oder anderen Startproblemen z.B. von Proxmox ist es teilweise nötig, den *ZPOOL* manuell zu importieren (siehe auch [Proxmox Startproblem](https://wiki.cloudistboese.de/doku.php?id=atknowhow:ato_opensource:ato_1proxmox#prox_bootproblem "atknowhow:ato_opensource:ato_1proxmox")).

Prüfen, ob es *zpools* gibt

```
zpool import
```

Importieren der *zpools*

```
zpool import -fa #Optionen -f force, -a all.
```

Die häufigste Ursache ist gerade bei mehreren internen Festplatten die Verzögerung.  
Abhilfe schafft das Anpassen des mit einem Delay im *Grub-Loader*

```
nano /etc/default/grub
```

In dieser Konfigdatei wird folgende Zeile ergänz mit *rootdelay=10* ( = 10 Sekunden Verzögerung)

```
GRUB_CMDLINE_LINUX_DEFAULT="quiet rootdelay=10" 
```

**Wichtig:** Danach immer GRUB aktualisieren mit

```
update-grub
```

bzw.

<div class="level2" id="bkmrk-%C2%A0update-grub%C2%A0-aktual">- <div class="li">` update-grub ` *Aktualisierung der Grub Loaders*</div>
- <div class="li">` grub-install /dev/sdb ` *Installation des Grub Loaders auf weiteres Laufwerk (hier sdb)*</div>
- <div class="li">`update-initramfs -u ` *Aktualisiert die Grub-Infos auf diesen HDs*</div>

</div>#### Gibt es zwei identische //zpools// namens //rpool//, kann man diese folgender Weise importieren:

```
# Anzeigen der eindeutigen ID des zpools
zpool import
# Import des zpools per ID
zpool import -f <ID des zpools>
# Import des zweiten zpools mit identischen Originalnamen mit neuem Namen z.B. rpool2
zpool import <identischer zpoolname(org)> <neuer zpool name>
# Anzeigen des Mountpointes des zweiten zpools
zfs get mountpoint <neuer zpool name>
# Sollte dieser ebenfalls auf / (root) stehen in Proxmox wie folgt anpassen
zfs inherit mountpoint rpool/ROOT/pve-1
```

**Wichtig:** Der Mountpoint wird *IN DAS ZFS-FILESYSTEM* geschrieben, daher bei Änderungen oder Neuinstallationen von Proxmox mit mehreren *zpools* VORHER Haupt-zpool *rpool* umbenennen und Mountpoint anpassen!

Quelle: [Proxmox](https://pve.proxmox.com/wiki/ZFS:_Tips_and_Tricks#Grub_boot_ZFS_problem "https://pve.proxmox.com/wiki/ZFS:_Tips_and_Tricks#Grub_boot_ZFS_problem") und [Sysops-Matrix](https://www.thegeekdiary.com/solaris-zfs-how-to-import-2-pools-that-have-the-same-names/ "https://www.thegeekdiary.com/solaris-zfs-how-to-import-2-pools-that-have-the-same-names/")


#### Import eines Pools mit temporärem Namen

Eindeutige ID anzeigen:

```
zpool import # z.B. id: 16760479674052375628 
```

Import:

```
zpool import -R /a -t altrpool 16760479674052375628
```

```
# zpool list
NAME      SIZE  ALLOC  FREE  CAP  DEDUP  HEALTH  ALTROOT
altrpool   97G  22.4G   74G  23%  1.00x  ONLINE  /a
rpool     465G  75.1G  390G  16%  1.00x  ONLINE  -
```

[Quelle Oracle](https://docs.oracle.com/cd/E36784_01/html/E36835/gbdbk.html "https://docs.oracle.com/cd/E36784_01/html/E36835/gbdbk.html")

# ZFS Arc oder Arcsize

Arc, Arcstat oder Arcsize bezieht sich auf den *CACHE* im Arbeitspeicher zur Verwaltung eines *ZPOOLS*. Es ist eine Grundeinstellung eines ZPOOLs, nicht direkt eine Option eines Datasets.

Setzen des Cache Limit „Arcsize“

```
echo "options zfs zfs_arc_max=2147483648" >> /etc/modprobe.d/zfs.conf
```

oder manuell

```
nano /etc/modprobe.d/zfs.conf
2147483648
6442450944
```

Beispiele bzw. Berechnung

```
(8GB=8*1024*1024*1024)
```

Update der Eintragungen für ZFS

```
update-initramfs -u -k all
```

„echo 3 &gt; /proc/sys/vm/drop\_caches (??)

\##ToDo: Erklärungen inkl. Abhängigkeiten von Cache-SSDs, Datengößen usw.

# Neue Anzeigen der Eigenschaften der ZSF-Datasets

ZFS Options

```
zfs list # Anzeigen der Datasets
zfs list -t filesystem -o name,used # Anzeigen zusätzlicher Eigenschaften (hier //name// und //used//)
zfs get all <eines der datasets z.B. "rpool/data/vm-123-disk-0">
```

Anzeigen einer einzelnen Eigenschaft (z.B. Compression)

```
zfs get compression tank # nur vom ZPOOL tank
zfs get -r compression tank # Rekursive Anzeige aller 
```

Setzen von Eigenschaften (2. Zeile Beispiel: Eigenschaft *com.sun:auto-snapshot* für Script *zfs-auto-snapshot*)

```
set compression=on tank/home/
zfs set com.sun:auto-snapshot=false tank/home
```

Setzen der Kompression auf alle unterliegenden *datasets*

```
zfs inherit compression tank 
```

Überschreiben **aller** Eigenschaftswerte (Bitte beachten Sie, dass die Option -r die Eigenschaftswerte aller untergeordneten Datasets zurücksetzt.)

```
zfs inherit -r compression tank
```

# SOURCE-Werte

<div class="level3" id="bkmrk-source-wert-beschrei"><div class="level3"><div class="table sectionedit24"><table class="inline"><thead><tr class="row0"><th class="col0">SOURCE-Wert</th><th class="col1">Beschreibung</th></tr></thead><tbody><tr class="row1"><td class="col0">`default`</td><td class="col1">Dieser Eigenschaftswert wurde für dieses Dataset bzw. seine übergeordneten Datasets nie explizit gesetzt. Es wird der Standardwert für diese Eigenschaft verwendet.</td></tr><tr class="row2"><td class="col0">`inherited`from *Dataset-Name*</td><td class="col1">Dieser Eigenschaftswert wurde vom übergeordneten Dataset geerbt, das in *dataset-name* angegeben ist.</td></tr><tr class="row3"><td class="col0">`local`</td><td class="col1">Dieser Eigenschaftswert wurde mithilfe von `zfs set` für dieses Dataset explizit gesetzt.</td></tr><tr class="row4"><td class="col0">`temporary`</td><td class="col1">Eigenschaftswert wurde mithilfe von `zfs mount - o` gesetzt und gilt nur solange, wie das Dateisystem eingehängt ist. Weitere Informationen zu temporären Eigenschaften von Einhängepunkten finden Sie unter [Verwenden temporärer Einhängepunkte.](https://docs.oracle.com/cd/E19253-01/820-2313/gamnt/index.html "https://docs.oracle.com/cd/E19253-01/820-2313/gamnt/index.html")</td></tr><tr class="row5"><td class="col0">- (keiner)</td><td class="col1">Diese Eigenschaft ist schreibgeschützt. Ihr Wert wird von ZFS bereitgestellt.</td></tr></tbody></table>

</div></div></div>Quelle [Doc.Orcale.com](https://docs.oracle.com/cd/E19253-01/820-2313/6ndu3p9bf/index.html "https://docs.oracle.com/cd/E19253-01/820-2313/6ndu3p9bf/index.html")

# HD-Identifikation unter ZFS

<div class="level2" id="bkmrk-zpool-status-zeigt-e">- <div class="li">`zpool status` zeigt erst mal alle Platten und Datasets</div>
- <div class="li">Unter */dev/disk/by-id*/ sind die Festplatten per ID aufgelistet</div>
- <div class="li">`by-id`</div>
    - <div class="li">`ata-` zeigt klassischen S-ATA Platte mit Seriennummer</div>
    - <div class="li">`wwn-` zeigt SAS-Platte (Nummer ebenfalls auf HD zu finden)</div>
    - <div class="li">`usb-` USB Stick oder Festplatte</div>
    - <div class="li">`iscsi-` iSCSI Platte</div>
- <div class="li">`by-label`</div>
    - <div class="li">zeigt die *rpools* (Daten/rpool/rpool2/System-reserviert) mit Mountpoints</div>
- <div class="li">`by-partlabel`</div>
    - <div class="li">`zfs-… → ../../sd(n)1` ZFS Symbolic-Links zu der Hauptpartition (1) der Disks sd(n)</div>
- <div class="li">`by-uuid`</div>
    - <div class="li">zeigt UUIDs für jede einzelne Partition inkl. Mountpoints *sd(nm)*</div>
- <div class="li">`by-path`</div>
    - <div class="li">gibt Aufschluss über die jeweilige Schnittstellen-Pfad (z.B. `pci-0000:44:00.0-sas-phy3-lun-0`)</div>
- <div class="li">`lsblk -f` für Mountpoints</div>
- <div class="li">`ls -althr` zeigt alle HDs mit ID an</div>

</div>

# Aktualisieren von ZFS-Speicher-Pools

Gerade nach Updates von *Proxmox* sollte man immer die *ZPOOL* prüfen und mit Update des ZFS-Systems abschließen. Eine ausführliche Erklärung gibt es im [Oracle Solaris ZFS-Administrationshandbuch](https://docs.oracle.com/cd/E24841_01/html/820-2313/gcikw.html "https://docs.oracle.com/cd/E24841_01/html/820-2313/gcikw.html").

Um zu sehen, ob ein Upgrade nötig ist:

```
zpool status
```

Genauere Infos über den aktuelle *ZPOOL*

```
zpool upgrade -v
```

Um letztendlich alle (`-a`) *ZPOOLs* zu aktualisieren:

```
zpool upgrade -a
```

# Dateiwiederherstellung von ZVOLs in Proxmox

<div class="level2" id="bkmrk-voraussetzung%3A-backu"><div class="level2">- <div class="li">Voraussetzung: Backups über *zfs-auto-snapshot*</div>
- <div class="li">`zfs clone rpool/data…/vm-<vmid>-disk-0@…auto-snapshot rpool/data/…/vm-<vmid>-disk-9 `</div>
- <div class="li">`cfdisk /dev/zd<nr> `</div>
- <div class="li">`mkdir /mnt/restore `</div>
- <div class="li">`mount /dev/zd<nr>p3 /mnt/restore/`</div>
- <div class="li">`ls /mnt/restore/ ` zum Kontrollieren und Auslesen der alten Dateien und eigenen Einstellungen</div>

<div class="wrap_center wrap_round wrap_tip plugin_wrap">  
</div></div></div>Kennzeichnung der geklonten Disk mit Ziffer **9**  
als Standard für geclonte Disks  
ermöglicht Routine für Notfälle!

#### Löschen des Clones bzw. Rückgängigmachen der Schritte

<div class="level4" id="bkmrk-cfdisk-%2Fdev%2Fzd-unmou">- <div class="li">`cfdisk /dev/zd `</div>
- <div class="li">`unmount /mnt/restore `</div>
- <div class="li">`zfs destroy -r rpool/data/…/vm-<vmid>-disk-9`</div>

</div>

# Sharing unter ZFS - SAN Protkolle

Inhalt

<div class="level4" id="bkmrk-%C3%9Cbersicht-sharing-%28s">- <div class="li">Übersicht Sharing (Samba, NFS, iSCSI oder SSHFS)</div>
- <div class="li">NFS Sharing</div>
- <div class="li">Samba Sharing</div>
- <div class="li">iSCSI Sharing (unvollständig!)</div>
- <div class="li">Vergleich SAN Protokolle</div>
- <div class="li">Vergleich Fileserver Windows, UCS, TrueNAS und Zamba</div>

---

  
</div>## Übersicht Sharing (Samba, NFS, iSCSI oder SSHFS)

<div class="level2" id="bkmrk-samba-schnittstelle-"><div class="level2">- <div class="li">**Samba**</div>
    - <div class="li">Schnittstelle zum Anwender</div>
    - <div class="li">Für Filesharing</div>
    - <div class="li">Kompatibel mit allen Betriebsystemen</div>
    - <div class="li">Authentifizierung lokal oder AD</div>
    - <div class="li">Verschlüsselt</div>
    - <div class="li">Kein Routing sinnvoll möglich über NAT</div>
- <div class="li">**NFS**</div>
    - <div class="li">Schnittstelle zu iX Systemen (Linux, Mac, etc.)</div>
    - <div class="li">Einfachste Konfiguration und Absicherung (/etc/exports)</div>
    - <div class="li">Für Filesharing</div>
    - <div class="li">Schnell</div>
    - <div class="li">Einfach zu Mounten</div>
- <div class="li">**iSCSI**</div>
    - <div class="li">Komplex</div>
    - <div class="li">Für Blocksharing von u. a. Disks, LVM, ZVOLS</div>
    - <div class="li">Multipath</div>
    - <div class="li">HA+RR etc</div>
- <div class="li">**SSHFS**</div>
    - <div class="li">Filesharing via SSH</div>
    - <div class="li">Langsam</div>
    - <div class="li">Für ESXi ohne vCenter zur Migration</div>

</div></div><div class="level2" id="bkmrk--0">---

  
</div>
## NFS Sharing

Erzeugen Dataset und Mount unter */rpool/nfsshare*, ideal für *VMs* (raw, vmdk, qcpow2) oder *Files*:

```
zfs create rpool/nfsshare
```

Freigabe der Dateien:

```
zfs set sharenfs=on rpool/nfsshare
```

oder mit Zugriffsrechten aus dem Netz *192.168.11.0/24*:

```
zfs set sharenfs="rw=@192.168.11.0/24" rpool/nfsshare
```


#### Zugriffssteuerung

Vereinfacht für kompletten Share mit

```
chmod oder chown # nach Bedarf
```

Zugriffsteuerung per *Linux PAM* Benutzer mit Editieren der Datei `/etc/exports`

```
# freigabe1 wird für zwei Rechner freigegeben
# notebook darf nur lesen (ro)
# desktop darf lesen und schreiben (rw)
rpool/nfsshare     notebook(ro,async) desktop(rw,async)
```

oder kombiniert mit *IPs* oder *Netzwerken*

```
# Freigabe gilt nur für 192.168.1.13, jedoch nur mit Leserechten:
rpool/nfsshare     192.168.1.13(ro,async)
# Freigabe gilt für alle IPs von 192.168.1.1 bis 192.168.1.255, mit Lese-/Schreibrechten:
rpool/nfsshare       192.168.1.0/255.255.255.0(rw,async)
# Freigabe gilt nur für den Rechner mit dem Namen notebook
rpool/nfsshare     notebook(ro,async)
```

Bei Leistungsproblemen mit *NFS* kann man ggfs. *sync* deaktivieren mit `zfs set sync=disabled rpool/nfsshare`.  
Weitere Infos zu den Risiken gibt es bei [https://jrs-s.net/2019/07/20/zfs-set-syncdisabled/](https://jrs-s.net/2019/07/20/zfs-set-syncdisabled/ "https://jrs-s.net/2019/07/20/zfs-set-syncdisabled/").


#### Mounten von NFS Shares

<div class="level4" id="bkmrk-mount-in-proxmox-dat"><div class="level4">- <div class="li">Mount in Proxmox</div>
    - <div class="li">*Datacenter* &gt; *Storage* &gt; Taste *Add* &gt; NFS</div>
    - <div class="li">ID: Mount benennen „myNAS1“</div>
    - <div class="li">Server: IP Adresse des Server</div>
    - <div class="li">Export: Auswahl der NFS Freigabe (taucht auf bei erfolgreicher NFS-Verbindung)</div>
- <div class="li">VMware per Datastore Dialog</div>
- <div class="li">HyperV über Erweiterung Windows Funktionen</div>
- <div class="li">Linux</div>
    - <div class="li">`mkdir /mnt/nfsmount && mount -t nfs 192.168.0.100:/rpool/nfsshare /mnt/nfsshare`</div>
    - <div class="li">oder</div>
    - <div class="li">per fstab</div>
        - <div class="li">`192.168.0.100:/rpool/nfsshare /mnt/nfsshare nfs rw 0 0`</div>
    - <div class="li">wenn der umount mal scheitert:</div>
        - <div class="li">`umount -l /mnt/nfsshare #lazy umount`</div>

</div></div><div class="level4" id="bkmrk--5">---

</div>
## Samba Sharing

Erzeugen Dataset und Mount unter */rpool/smbshare*:

```
zfs create rpool/smbshare
```

Freigabe der Dateien:

```
zfs set sharesmb=on rpool/smbshare
chmod 777 /rpool/smbshare
```


#### Zugriffssteuerung

Vereinfachtes Sharing mit

```
smbpasswd -a root    # erzeugt Samba Passwort
chmod oder chown     # nach Bedarf
```

Detailliertere Zugriffsteuerung mit Editieren der Datei `/etc/samba/smb.conf`

```
[Global]
workgroup = workgroup security = user
map to guest = Bad Password

[homes]
comment = Home
Directories browsable = no
read only = no
create mode = 0777

[smbshare]
path = /rpool/smbshare
public = yes
writeable = yes
comment = smb
share printable = no
guest ok = yes
create mask = 0777
security mask = 0777
directory mask = 0777
force create mode = 0777
directory security mask = 0777
```

Kontrolle der effektiven Config `testparm` (zum Kontrollieren der effektiven Konfiguration)  
und Abschluss mit

```
service smbd restart
```


#### Zugriff auf SMB Freigaben

<div class="level4" id="bkmrk-windows%3A-%5C%5C%3Cip%3E%5Csmbs"><div class="level4">- <div class="li">Windows: `\\<IP>\smbshare`</div>
- <div class="li">macOS und Linux: `smb://<IP>/smbshare`</div>
- <div class="li">Nötige Erweiterung für Linux-Zugriff</div>
    - ```
        apt-get install cifs-utils
        mkdir /mnt/smbshare
        mount -t cifs //ip/smbshare /mnt/smbshare #username=root
        ```
    - <div class="li">per fstab</div>
        - <div class="li">`ip/smbshare /mnt/smbshare cifs iocharset=utf8 0 0`</div>

</div></div>[hoch](https://wiki.cloudistboese.de/doku.php?id=wikiintern:zfssharing#zsh_inhalt "wikiintern:zfssharing ↵")

<div class="level4" id="bkmrk--9">---

  
</div>
## iSCSI Sharing

Unvollständig

Erzeugen Dataset und Mount unter */rpool/iscsishare*:

```
zfs create rpool/iscsishare
```

Freigabe der Dateien:

???


#### Zugriffssteuerung

Vereinfachtes Sharing mit

???

Detailliertere Zugriffsteuerung mit Editieren der Datei `/etc/???`


#### Zugriff auf SMB Freigaben

<div class="level4" id="bkmrk-windows%3A-proxmox%3A-ma"><div class="level4">- <div class="li">Windows:</div>
- <div class="li">Proxmox:</div>
- <div class="li">macOS und Linux:</div>
- <div class="li">Nötige Erweiterung für Linux-Zugriff</div>
    - ```
        ???
        ```
    - <div class="li">per fstab</div>
        - <div class="li">???</div>

</div></div>
## Vergleich SAN Protokolle

<div class="level2" id="bkmrk-vorteile-nfs-schlank"><div class="level2">- <div class="li">**Vorteile NFS**</div>
    - <div class="li">schlank</div>
    - <div class="li">einfach</div>
    - <div class="li">übersichlich bei Fehlersuche</div>
    - <div class="li">schnell</div>
- <div class="li">**Nachteile NFS**</div>
    - <div class="li">Wenig Funktionen</div>
    - <div class="li">kein Multipath (Gleichzeitiger Zugriff von mehreren Servern)</div>
    - <div class="li">kein Sharing von Volumes</div>
    - <div class="li">keine UUID (eindeutige Identifizierung)</div>
- <div class="li">**Vorteile iSCSI**</div>
    - <div class="li">Multipath</div>
    - <div class="li">HA</div>
    - <div class="li">Sharing von Volumes</div>
    - <div class="li">Blockgrößen und etliche Paramter</div>
    - <div class="li">Eindeutige Identifizierung</div>
    - <div class="li">Hoher Funktionsumfang</div>
- <div class="li">**Nachteile iSCSI**</div>
    - <div class="li">aufwendiges Setup</div>
    - <div class="li">schwierige Fehlersuche</div>
    - <div class="li">schlechte Integration PVE</div>

</div></div>
## Vergleich Fileserver Windows, UCS, TrueNAS und Zamba

<div class="level2" id="bkmrk-windows-natives-smb-"><div class="level2">- <div class="li">**Windows**</div>
    - <div class="li">Natives SMB</div>
    - <div class="li">Kritischer Windows Unterbau</div>
    - <div class="li">Partitionierung notwendig</div>
    - <div class="li">NTFS Probleme</div>
    - <div class="li">Kein ZFS, dafür wenige Wiederherstellungspunkte möglich</div>
- <div class="li">**Univention**</div>
    - <div class="li">Klassiches, aktuelles Samba</div>
    - <div class="li">Umfangreiches System als Unterbau</div>
    - <div class="li">LVM bei Kapaziätserweiterung notwenidg</div>
    - <div class="li">EXT4</div>
    - <div class="li">Kein ZFS, keine Schattenkopien</div>
- <div class="li">**TrueNAS**</div>
    - <div class="li">Volle <abbr title="Graphical User Interface">GUI</abbr>, ZFS und Replikationen, Monitoring</div>
    - <div class="li">Extra Hardware</div>
    - <div class="li">Läuft direkt auf Hardware, daher schnell</div>
- <div class="li">**Zamba**</div>
    - <div class="li">Schnelle Bereitstellung per LXC</div>
    - <div class="li">Schlank und schnell, da quasi direkt auf ZFS</div>
    - <div class="li">Schattenkopien so viele man möchte</div>
    - <div class="li">ZFS <abbr title="Graphical User Interface">GUI</abbr> via Cockpit, Wiederherstellung via Windows-Explorer</div>
    - <div class="li">Erste Wahl bei Einsatz von Debian oder Proxmox</div>

</div></div>[hoch](https://wiki.cloudistboese.de/doku.php?id=wikiintern:zfssharing#zsh_inhalt "wikiintern:zfssharing ↵")

— *[Andi Treml](mailto:info@tremlnet.de "info@tremlnet.de") 2021/05/15 14:33-16:*

# Proxmox VM mit ZFS Auto-Snapshots klonen

##### Falls man bei Proxmox die Autosnapshots aktiviert hat, ist es recht einfach einen Klon oder von einem Replikat einen Snapshot zum Test zu booten, ggf. ohne Netzwerk

**Auflisten der VMs**

qm list

<span class="s1"><span class="Apple-converted-space"> </span>**2001** OpnSense-Node-PVE-HA running<span class="Apple-converted-space"> </span>16384 <span class="Apple-converted-space"> </span>40.00 3675016<span class="Apple-converted-space"> </span></span>

**<span class="s1">Auflisten der Disks</span>**

<span class="s1">zfs list | grep **2001**</span>

*<span class="s1">rpool-hdd/data/sysops/vm-**2001-disk-1** </span>*

**Auflisten der Snapshots**

<span class="s1">zfs list -t snapshot rpool-hdd/data/sysops/vm-2001-disk-1</span>

*rpool-hdd/data/sysops/vm-2001-disk-1@backup-zfs\_2023-05-04\_01:04:24 15.9M - 13.8G -*  
*rpool-hdd/data/sysops/vm-2001-disk-1@zfs-auto-snap\_hourly-2023-05-03-2355 16.0M - 13.8G -*  
*rpool-hdd/data/sysops/vm-2001-disk-1@zfs-auto-snap\_hourly-2023-05-04-0055 22.6M - 13.8G -*  
*rpool-hdd/data/sysops/vm-2001-disk-1@zfs-auto-snap\_hourly-2023-05-04-0155 18.7M - 13.8G -*  
*rpool-hdd/data/sysops/vm-2001-disk-1@zfs-auto-snap\_hourly-2023-05-04-0255 18.8M - 13.8G -*  
...

**<span class="s1">Klonen der Disk, keine Last, kein Platz, keine Zeit</span>**

<span class="s1">zfs clone rpool-hdd/data/sysops/vm-2001-disk-1@backup-zfs\_2023-05-04\_01:04:24 rpool-hdd/</span><span class="s2">clon</span><span class="s1">e/vm-2001-disk-9</span>

*<span class="s1">rpool-hdd/clone/vm-2001-disk-9<span class="Apple-converted-space"> </span>35.9M<span class="Apple-converted-space"> </span>11.3T <span class="Apple-converted-space"> </span>13.8G<span class="Apple-converted-space"> </span>-  
</span><span class="s1">rpool-hdd/data/sysops/vm-2001-disk-1<span class="Apple-converted-space"> </span>21.5G<span class="Apple-converted-space"> </span>11.3T <span class="Apple-converted-space"> </span>13.8G<span class="Apple-converted-space"> </span>-</span>*

**<span class="s1">Datastore anlegen für Clones</span>**

[![image.png](https://aow.de/uploads/images/gallery/2023-05/scaled-1680-/image.png)](https://aow.de/uploads/images/gallery/2023-05/image.png)

**Konfig kopieren**

<span class="s2">cd /etc/pve/qemu-server #dort liegen die VM Definitionen des aktuellen Hosts  
</span><span class="s2">cp</span><span class="s1"> 2001.conf 9992001.conf #kopiert die Konfiguration, Achtung wegen Autostart und Nettwerkkarten!  
nano 9992001.conf</span>

<span class="s1">Dort die Disk ändern auf **rpool-hdd-clone:vm-2001-disk-9 #Achtung: muss geändert werden, sonst bootet die Disk aus zwei VMs und geht defekt!**</span>

**<span class="s1">Dann die VM 9992001 Netzwerkkarten in GUI optional deaktivieren</span>**

<span class="s1">qm start 9992001</span>

**<span class="s1">Am Ende kann die VM gelöscht werden, der Klon sollte verschwinden, ansonsten kann er über die GUI im Store rpool-hdd-clone gelöscht werden!</span>**

**<span class="s1">Sichere Prüfung zum Klon löschen</span>**

<span class="s1">zfs get origin rpool-hdd/clone/vm-2001-disk-9 #nur ein Klon hat ein Origin</span>

*<span class="s1">rpool-hdd/clone/vm-2001-disk-9<span class="Apple-converted-space"> </span>origin<span class="Apple-converted-space"> </span>rpool-hdd/data/sysops/vm-2001-disk-1@backup-zfs\_2023-05-04\_01:04:24<span class="Apple-converted-space"> </span>-</span>*

<span class="s1">zfs destroy -r rpool-hdd/clone/vm-2001-disk-9 #der ist dann definitiv für immer weg</span>

<span class="s1">cz</span>

# Schutz mit ZFS für VSphere und Hyper-V

[![image.png](https://aow.de/uploads/images/gallery/2023-09/scaled-1680-/0iqimage.png)](https://aow.de/uploads/images/gallery/2023-09/0iqimage.png)

#### TrueNAS Scale/Core

Es ist nicht notwendig auf teure, proprietäre SAN Systeme zurückzugreifen. Die Erfahrung zeigt dass gerade diese Geräte im Notfall eine hohe Abhängigkeit vom Hersteller mit sich bringen. Ebenfalls wird oft der Support verweigert wenn die SAN nicht den Vorstellungen des Hypervisor Supporters entspricht und umgekehrt. Mit einer TrueNAS SAN Lösung kann fast jede beliebige Server Hardware als Basis genutzt werden. Open ZFS ist in der Scale Version in Debian, in der ausgereifteren Core Version in FreeBSD enthalten und seit über 15 Jahren bewährt! Es entstehen keine Kosten für den Betrieb und die Updates gehen erfahrungsgemäß über eine Dekade ohne Probleme. Verschlüsselung, Replikation, Monitoring und Snapshots sind hier Standard. Ein Hardware Raid Controller wird wie immer nicht benötigt und man spart so noch mehr Geld!

#### Proxmox Virtual Environment

Ist ein Umstieg auf Proxmox geplant, profitiert man hier durch die hohe Flexibilität vom darunter liegenden Debian. Sowohl Hypervisor, also auch ZFS sind hier im Kernel enthalten. Für kleinere Installationen ist der NFS-Kernel-Server hier eine willkommene, zu VMware VSpehere sehr kompatible Alternative zum üblichen iSCSI Protokoll. So kann Proxmox hier für die Übergangszeit sowohl SAN, als auch später die Hypervisor Rolle übernehmen, nahtlos! Sobald die erste virtuelle Maschine auf Proxmox mit ZFS migriert wurde, profitiert sie sofort von Raid, Snapshots, Kompression und Replikationen. Eine sehr einfach umzusetzende, verständliche und nachhaltige Lösung!

#### Variante NAS auf ZFS mit TrueNAS oder Zamba aus der LXC-Toolbox

Liegt der Fokus eher auf Dateiablage und nicht auf virtuellen Maschinen, so kann man diese einfach auf ZFS ablegen. Der Anwender wird sofort unter der Explorer Funktion “Vorherige Versionen” alle Snapshots des Systems sehen. Active Directory Integration ist selbstverständlich vorhanden, wie auch die Administration der Benutzerrechte über den gewohnten Weg. Dank der eigens entwickelten Zamba Lösung ist es nicht mehr notwendig dedizierte Hardware für ein ZFS basiertes NAS zu verwenden, ist aber trotzdem möglich!

#### Backup durch ZFS absichern

Wie bereits beschrieben können Backups aller Systeme auf ZFS NAS Lösungen gespeichert und tagelang mit Snapshots gegen Kompromittierung abgesichert werden. Als Hardware geht es hier von Raspberry Pi4 bis High End Server!

#### Hardware für ZFS

Sie finden spezielle Hardware für Proxmox, TrueNAS und Opensense bei unseren Partnern Thomas-Krenn.AG (neu) und Servershop24 (gebrauchte Geräte, bitte mit HBA anfragen)

[![image.png](https://aow.de/uploads/images/gallery/2023-09/scaled-1680-/9Knimage.png)](https://aow.de/uploads/images/gallery/2023-09/9Knimage.png)

#### [zfs.rocks Videos bei YouTube](http://zfs.rocks)  

# ZFS Ashift

Bei **ZFS** bezeichnet **`ashift`** die **Blockgröße (Sektorgröße)**, mit der ZFS **intern auf einem vdev arbeitet**.  
Der Wert ist ein **Exponent zur Basis 2**:

<div class="contain-inline-size rounded-2xl corner-superellipse/1.1 relative bg-token-sidebar-surface-primary" id="bkmrk-sektorgr%C3%B6%C3%9Fe-%3D-2%5Eashi"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs">  
</div></div></div><div class="overflow-y-auto p-4" dir="ltr">`Sektorgröße = 2^ashift Bytes`</div></div>---

## Bedeutung von ashift 9 bis 12

<div class="TyagGW_tableContainer" id="bkmrk-ashift-sektorgr%C3%B6%C3%9Fe-e"><div class="group TyagGW_tableWrapper flex w-fit flex-col-reverse" tabindex="-1"><table class="w-fit min-w-(--thread-content-width)"><thead><tr><th>ashift</th><th>Sektorgröße</th><th>Entspricht</th></tr></thead><tbody><tr><td>9</td><td>512 Byte</td><td>klassische 512B-Sektoren</td></tr><tr><td>10</td><td>1.024 Byte</td><td>1 KB</td></tr><tr><td>11</td><td>2.048 Byte</td><td>2 KB</td></tr><tr><td>12</td><td>4.096 Byte</td><td>**4 KB (Standard heute)**</td></tr></tbody></table>

</div></div>---

## Warum ashift wichtig ist

ZFS schreibt **immer in ashift-großen Blöcken** auf die Platte.

Wenn:

- die **physische Sektorgröße** der Platte größer ist als ashift
- oder das Storage intern mit größeren Blöcken arbeitet

→ entstehen **Read-Modify-Write-Zyklen**, was:

- Performance kostet
- unnötige Schreibvorgänge erzeugt
- SSDs schneller altern lässt

---

## Praxisbezug (heute sehr wichtig)

### Moderne Festplatten &amp; SSDs

- Fast alle **HDDs**: 4K physische Sektoren (Advanced Format)
- **SSDs / NVMe**: intern ebenfalls ≥ 4K

👉 **ashift=12 ist heute der sichere Standard**

---

## Typische Szenarien

### ashift=9 (512B)

❌ **Nicht mehr empfehlenswert**

- schlecht für moderne HDDs/SSDs
- Performanceeinbrüche möglich
- kann nicht nachträglich geändert werden

---

### ashift=12 (4K)

✅ **Best Practice**

- kompatibel mit:
    
    
    - HDDs
    - SSDs
    - NVMe
    - RAID-Controllern
- minimaler Platzverlust
- stabile Performance

---

### ashift &gt; 12 (z. B. 13 = 8K)

⚠️ Nur sinnvoll bei:

- speziellen Enterprise-Systemen
- dediziertem Storage mit garantierter Blockgröße

---

## Wichtig: ashift ist **final**

- Wird **beim Erstellen des vdevs festgelegt**
- **Nicht änderbar**
- Auch beim Ersetzen einzelner Platten bleibt ashift gleich

👉 Fehlerhafte Wahl = Pool neu erstellen

---

## Empfehlung (kurz &amp; klar)

<div class="TyagGW_tableContainer" id="bkmrk-einsatz-empfehlung-h"><div class="group TyagGW_tableWrapper flex w-fit flex-col-reverse" tabindex="-1"><table class="w-fit min-w-(--thread-content-width)"><thead><tr><th>Einsatz</th><th>Empfehlung</th></tr></thead><tbody><tr><td>Heimserver / NAS</td><td>**ashift=12**</td></tr><tr><td>SSD / NVMe</td><td>**ashift=12**</td></tr><tr><td>Unbekannte Hardware</td><td>**ashift=12**</td></tr><tr><td>Alte 512B-Platten</td><td>trotzdem **ashift=12**</td></tr></tbody></table>

</div></div>---

## Prüfen, welchen ashift ein Pool hat

<div class="contain-inline-size rounded-2xl corner-superellipse/1.1 relative bg-token-sidebar-surface-primary" id="bkmrk-zdb--c-poolname-%7C-gr"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs">  
</div></div></div><div class="overflow-y-auto p-4" dir="ltr">`zdb -C poolname | grep ashift`</div></div>---

Wenn du möchtest, erkläre ich dir auch:

- **Zusammenspiel von ashift &amp; recordsize**
- **Einfluss auf ZVOLs / VM-Storage**
- **ashift bei RAIDZ vs. Mirror**
- **Performance-Tuning für SSD-Pools**