[Sammelthread] ZFS Stammtisch

Hmmm ich habe damals von gecryptetem OpenZFS 0.8 also glaub der ersten die das hatte dann auf eine "final" umgestiegen das hat damals problemlos geklappt aber glaube für jede Version auf jede glaube das wird dir niemand zu 100% sagen können.

Kannst ja evtl einen Test machen? also eine Dummy-Datei als zfs device nutzen darauf auf dem Quellsystem ein genauso wie das andere gecryptete ZFS draufmachen und dann schauen ob das auf dem Zielsystem aufmachen und beschrieben kannst. Dafür reicht ja ein 100 MB File (zumindest wenn es Linux / Freebsd ist geht das ja einfach)
 
Wenn Du diese Anzeige nicht sehen willst, registriere Dich und/oder logge Dich ein.
Also mein Stand war noch bix zu einer bestimmten Version war es zwischen Solaris und dem Rest kompatibel. Dann kamen die Feature Flags, dann war es mit Solaris nicht mehr kompatibel, aber alles andere untereinander. Aber das scheint ja nun auch nicht mehr so zu sein...
Wieso kann es nicht einfach eine Versionsnummer geben und wenn das OS diese Nummer dann hat oder höher kann man den Pool importieren und nutzen.

Solaris <-> OpenZFS, Illumos ZFS: nein, nie
Also Illumos ZFS ist ungleich OpenZFS?

Ich dachte Illumos hängt immer nur bisschen hinterher aber ansonsten ist das dasselbe..
 
Also mein Stand war noch bix zu einer bestimmten Version war es zwischen Solaris und dem Rest kompatibel. Dann kamen die Feature Flags, dann war es mit Solaris nicht mehr kompatibel, aber alles andere untereinander. Aber das scheint ja nun auch nicht mehr so zu sein...
Wieso kann es nicht einfach eine Versionsnummer geben und wenn das OS diese Nummer dann hat oder höher kann man den Pool importieren und nutzen.


Also Illumos ZFS ist ungleich OpenZFS?

Ich dachte Illumos hängt immer nur bisschen hinterher aber ansonsten ist das dasselbe..

OpenZFS war bis 2019 Illumos ZFS, ab dann wurden beide in getrennten Repositories von eigenen Teams gepflegt. Illumos ZFS ist sehr konservativ was die Übernahme neuer OpenZFS Features angeht während in OpenZFS Neues sehr schnell landet, auch wenn es noch nicht voll getestet ist. Fast Dedup z.B. kommt jetzt erst in Illumos ZFS.


Pool Austausch zwischen OpenZFS Releases und/oder Illumos ZFS höngt daran ob das ZielOS die jeweiligen Features unterstützt, einen neuen OpenZFS Pool kann man oft auch nicht in einem älteren OpenZFS ohne Support für ein Feature öffnen.

Vorteil ist natürlich dass in Illumos ZFS in vielen Jahren nicht soviel Probleme waren wie in OpenZFS teils in einem Jahr.
 
Naja OpenZFS wird halt von extrem vielen genutzt da findet man halt Sachen die praktisch nur in 0,000001% der Fälle auftreten.

Meine es wurden doch schon 1 oder 2 Fehler durch OpenZFS entdeckt die seit Jahrzehnten im ZFS Code waren.
 
Pool Austausch zwischen OpenZFS Releases und/oder Illumos ZFS höngt daran ob das ZielOS die jeweiligen Features unterstützt
Sind diese Features denn identisch oder werden hier einfach Features die das gleiche machen parallel entwickelt und sind dann zueinander inkompatibel?
Ich habe ja einen OmniOS ZFS Pool und diesen will ich einfach in Proxmox, TrueNAS beispielsweise öffnen mounten, zumindest lesen.





Illumos had ported the zfs encryption prior to this bug fix, so we still use
the older incompatible format.

Heißt das das damit OmniOS jetzt ein anderes encryption benutzt als OpenZFS?
 
Zuletzt bearbeitet:
OpenZFS kann einen unverschlüsselten OmniOS Pool problemlos öffnen, da alle OmniOS Features unterstützt sind. Andersrum kann es Probleme machen, z.B. ein OpenZFS Pool mit aktiviertem Raid-Z Expansion kann in OmniOS nicht geöffnet werden, da es das Feature da noch nicht gibt.

Verschlüssellung ist ein Sonderfall. Da gab es in OpenZFS ein Update das nicht rückwärtskompatibel war und einen Pool move mit Illumos ZFS oder älterem OpenZFS verhindern kann. Normales zfs send ist dann der Workaround.

Insgesamt ist ZFS egal auf welcher Plattform nur aufwärtskompatibel (neues liest älteres). Migration benötigt ansonst zfs send.
Beitrag automatisch zusammengeführt:

Naja OpenZFS wird halt von extrem vielen genutzt da findet man halt Sachen die praktisch nur in 0,000001% der Fälle auftreten.

Meine es wurden doch schon 1 oder 2 Fehler durch OpenZFS entdeckt die seit Jahrzehnten im ZFS Code waren.

Prinzipiell richtig, dennoch gab es in den letzten Jahren mehrfach Fälle von Datenverlust in OpenZFS durch neuere Features die in Illumos ZFS keine Auswirkung hatten - weil es das auslösende Feature nicht gab oder weil das Problem nur mit einer bestimten Kombination OpenZFS Release auf einem der vielen Linux Distributionen auftrat. OpenZFS gleicht da mehr einem Zoo mit den vielen Distributionen, jede mit einem anderen ZFS Stand und niemand weiss, ist dieses oder jenes das Zuverlässigere, hilft ein Update oder nicht.

Bei Illumos gibt es halt genau ein ZFS auf genau einem OS das vom Anbeginn der Zeit nur auf ZFS ausgelegt war, gepflegt von einem Kern-Team das nur Code integriert der mehrere extra Tests durchlaufen hat. Ist ähnlich bei Solaris und darum sind beide auch so stabil auf Kosten der schnellen Weiterentwicklung oder Integration von Features.
 
Zuletzt bearbeitet:
Da gab es in OpenZFS ein Update das nicht rückwärtskompatibel war und einen Pool move mit Illumos ZFS oder älterem OpenZFS verhindern kann. Normales zfs send ist dann der Workaround.
Das heißt doch dann übersetzt aktuelles Illumos und aktuellen OpenZFS ist zueinander nicht kompatibel wenn ich einen verschlüsseltes Dataset habe.
Für mich ist nur aktuelles Illumos und aktuellens OpenZFS relevant. Alles andere nicht.
Also ich übersätze das jetzt so dass ich dazwischen wenn ich verschlüsselung einsetze nicht kompatibel bin.

Wird diese Inkompatbilität denn erkannt beim Import oder kann man sich da einfach die Daten zerschießen?


Prinzipiell richtig, dennoch gab es in den letzten Jahren mehrfach Fälle von Datenverlust in OpenZFS durch neuere Features die in Illumos ZFS keine Auswirkung hatten - weil es das auslösende Feature nicht gab oder weil das Problem nur mit einer bestimten Kombination OpenZFS Release auf einem der vielen Linux Distributionen auftrat. OpenZFS gleicht da mehr einem Zoo mit den vielen Distributionen, jede mit einem anderen ZFS Stand und niemand weiss, ist dieses oder jenes das Zuverlässigere, hilft ein Update oder nicht.
Diese Entwicklung untergräbt dann aber irgendwie so den Sinn wieso viele ZFS einsetzen.
Beitrag automatisch zusammengeführt:

Normales zfs send ist dann der Workaround.
Wenn ich aber nur einen Pool habe heißt es ich muss 2mal zfs send machen, weil ich dann einen zwischenschritt über ein nicht verschlüsseltes Dataset machen muss wenn ich am Ende wieder einen verschlüsselten dataset haben will?
 
Zuletzt bearbeitet:
Das heißt doch dann übersetzt aktuelles Illumos und aktuellen OpenZFS ist zueinander nicht kompatibel wenn ich einen verschlüsseltes Dataset habe.
Für mich ist nur aktuelles Illumos und aktuellens OpenZFS relevant. Alles andere nicht.
Also ich übersätze das jetzt so dass ich dazwischen wenn ich verschlüsselung einsetze nicht kompatibel bin.

Ist allerdings kein üblicher Fall, dass man einen Pool wechselseitig mit verschiedenen Betriebssystemen importieren will. In dem Fall muss man dafür sorgen, dass kein Feature verwendet wird, dass nicht auf allen Systemen geht.

Wird diese Inkompatbilität denn erkannt beim Import oder kann man sich da einfach die Daten zerschießen?

habs nie probiert, ist dann aber wohl wie mit allen Features, import nicht möglich.

Diese Entwicklung untergräbt dann aber irgendwie so den Sinn wieso viele ZFS einsetzen.
wieso. Auf einen defekten ZFS Pool kommen bei gleicher Nutzerzahl sicher ein mehrfaches an defekten ext4/ntfs oder ReFS Pools. Ausserdem hat niemand behauptet, dass man mit ZFS kein Backup haben sollte.
Wenn ich aber nur einen Pool habe heißt es ich muss 2mal zfs send machen, weil ich dann einen zwischenschritt über ein nicht verschlüsseltes Dataset machen muss wenn ich am Ende wieder einen verschlüsselten dataset haben will?

nein, bis auf den Sonderfall raw send, macht zfs send immer einen unverschlüsselten Datenstrom auch wenn source verschlüsselt war.
 
Verschlüssellung ist ein Sonderfall. Da gab es in OpenZFS ein Update das nicht rückwärtskompatibel war und einen Pool move mit Illumos ZFS oder älterem OpenZFS verhindern kann. Normales zfs send ist dann der Workaround.
Wann soll das denn in Illumos behoben werden? Gibt es da irgendwelche Infos?
 
Verschlüssellung ist ein Sonderfall. Da gab es in OpenZFS ein Update das nicht rückwärtskompatibel war und einen Pool move mit Illumos ZFS oder älterem OpenZFS verhindern kann. Normales zfs send ist dann der Workaround.
Also irgendwie kann ich der Diskussion hier inhaltlich nicht folgen...

IST es denn jetzt inkompatibel (ohne Workarrounds oder ähnlichem) oder ist es das nicht?

Auf der einen Seite schreibst du:
Ist allerdings kein üblicher Fall, dass man einen Pool wechselseitig mit verschiedenen Betriebssystemen importieren will. In dem Fall muss man dafür sorgen, dass kein Feature verwendet wird, dass nicht auf allen Systemen geht.
gleichzeitig aber auch:

Verschlüssellung ist ein Sonderfall. Da gab es in OpenZFS ein Update das nicht rückwärtskompatibel war und einen Pool move mit Illumos ZFS oder älterem OpenZFS verhindern kann. Normales zfs send ist dann der Workaround.

Offenbar reicht es dann doch nicht aus wenn alle Features die man auf dem anderen System benutzen will auch funktionieren weil es hier doch ZUSÄTZLICHE Inkompatibilitäten gibt?
 
Zuletzt bearbeitet:
Lesbar importieren wird denke ich immer gehen selbst wenn - was ich jetzt nicht weiss ob es das gab - ein Crypt Algo nicht mehr unterstützt wird. Schreibbar aber dann vielleicht nicht.

Read Only meine ich ist es bei ZFS immer so dass vorhandene Features abwärtskompatibel sind, aber R/W unter manchen - seltenen - Umständen eventuell nicht.
 
OpenZFS Enc ist seit einer fundamentalen nicht rückwärtskomptiblen Anderung in 2018 inkompatibel zu Illumos Enc. Auch ältere OpenZFS Benutzer hatten damals nur die Wahl, Pool neu machen und kopieren. Und das gleiche gilt für Illumos Nutzer heute,

Auch readonly geht nicht bei verschlüsselten Daten oder inkompatibler vdev Struktur (Raid-Z Expansion).

Pool Move geht also nur ohne verschlüsselte Pools und sicher nur mit in Illumos erstellten Pools.
 
Es gab einen Ansatz in Illumos Encryption "dual" zu machen also dass Illumos die ältere und neuere OpenZFS Version versteht. Ist aber halt ein extremes Nischenthema, würde nicht darauf warten/wetten. Eher wird Illumos es so machen wie OpenZFS, Update=Pool neu. Fast Dedup wird gerade portiert.
 
Ich habe Claude KI gebeten in den Illumos Sourcen nachzusehen wie der aktuelle Stand der Enc Kompatibilität zwischen Illumos und OpenZFS ist


Code:
Ich habe im illumos-gate-Quellcode selbst nachgesehen (nicht nur in der Mailingliste-Diskussion von damals) – und das Ergebnis korrigiert meine letzte Antwort in einem wichtigen Punkt.

In usr/src/uts/common/fs/zfs/dsl_crypt.c (aktueller master-Branch) finden sich exakt die Kompatibilitäts-Mechanismen, die OpenZFS 2018 eingeführt hat:

c
boolean_t
dsl_dir_incompatible_encryption_version(dsl_dir_t *dd)
{
    ...
    return (version != ZIO_CRYPT_KEY_CURRENT_VERSION);
}

mit dem Kommentar "We don't support receiving old on-disk formats. The version 0 implementation protected several fields in an objset that were not always portable during a raw receive." Und in usr/src/uts/common/sys/fs/zfs.h gibt es die passenden Errata-Konstanten:

ZPOOL_ERRATA_ZOL_6845_ENCRYPTION – das ist exakt der Fix aus OpenZFS-PR #6864 (der 2018 das Format gebrochen hat)
ZPOOL_ERRATA_ZOL_8308_ENCRYPTION – ein weiterer, späterer Kompatibilitäts-Fix (OpenZFS-PR #8308, "mixed raw/non-raw sends")

Zusätzlich existiert der Tunable zfs_disable_ivset_guid_check, explizit dokumentiert für Kompatibilität mit älteren OpenZFS/ZoL-Verschlüsselungs-Streams ohne IVset-GUID.

Heißt konkret: meine Aussage von eben war veraltet. Der Mailingliste-Thread mit Jason Kings Erklärung ("illumos nutzt noch das alte, inkompatible Format") stammt aus der Frühzeit des illumos-Encryption-Ports (~2019). Der aktuelle illumos-gate-master-Branch hat die relevanten OpenZFS-Formatfixes seither offenbar nachgezogen – illumos nutzt jetzt dieselbe ZIO_CRYPT_KEY_CURRENT_VERSION und dieselbe Versions-/Errata-Logik wie aktuelles OpenZFS. Auf Code-Ebene sieht das nach echter Format-Kompatibilität aus, nicht mehr nach dauerhaftem Bruch.

Einschränkung, die ich nicht wegargumentieren will: das GitHub-Issue #13301 (SmartOS/illumos → Linux Mount-Fehler) ist neueren Datums und weiterhin offen/ungeklärt. Das könnte heißen, dass (a) die konkret verwendete SmartOS/illumos-Distribution nicht auf aktuellem illumos-gate-master basiert, (b) es sich um einen engeren Spezialfall handelt (z.B. genau die IVset-GUID- oder Mixed-Send-Problematik, die die genannten Tunables/Erratas ja gerade adressieren sollen, aber evtl. nicht in jeder Konstellation greifen), oder (c) schlicht noch nicht jeder betroffen Nutzer die neuere illumos-Version einsetzt. Ich kann aus dem Quellcode allein nicht mit Sicherheit sagen, dass ein zfs send --raw/receive zwischen aktuellem illumos und aktuellem OpenZFS heute in der Praxis garantiert klappt – nur, dass die dafür nötige Kompatibilitätslogik im Code vorhanden ist. Für produktiven Einsatz (Replikation zwischen deinem napp-it cs/OpenZFS-Windows-Member und einem illumos/OmniOS-Member) würde ich das vor dem Verlassen auf die Doku einmal mit einem echten Testdataset ausprobieren.

Sources:

illumos-gate/dsl_crypt.c (master)
illumos-gate/sys/fs/zfs.h (master)
Encrypted dataset created under current SmartOS/Illumos cannot be mounted on Linux · Issue #13301 · openzfs/zfs
Detect and prevent mixed raw and non-raw sends · Pull Request #8308 · openzfs/zfs

Müsste man also ausprobieren, wie sich ein verschlüsselter Pool Illumos->OpenZFS oder OpenZFS -> Illumos verhält
 
OS übergreifend hatte ich schon Probleme mit der Erkennung von ZFS Partitionen auf Sticks, USB Platten/SSD sind ok.
 
Hab meinen Pool mal versucht zu importieren in Truenas 26 Beta3.

Pool importieren klappt, nicht verschlüsselte Dateisysteme mounten ebenfalls. Bei meinen verschlüsselten Datasets (mit OmniOS erstellt vor einiger Zeit) spuckt er aber einen I/O Fehler aus. Das richtige vom falschen Passwort kann TrueNAS unterscheiden, aber mit dem richtigen Passwort kann das Dataset dennoch nicht gemountet werden...
Was etwas unschön ist ist die Tatsache dass TrueNAS mit einfach paar Datasets auf meinem Pool erstellt hat ungefragt, irgendwelche Systemordner anscheinend .system/config und son Käse.
(TrueNAS selbst wurde natürlich auf ner anderen SSD installiert, ich mache meine Dataplatten immer raus wenn ich ein OS installiere)
 
Läßt den Schluss zu, dass Illumos ZFS trotz Anpassungen in 2022 mit neuesten OpenZFS Sachen nicht zusammenarbeitet. Sa wäre dann Migration über zfs send nötig.

Ja, TN macht in vielem sein eigenes Ding.
 
Läßt den Schluss zu, dass Illumos ZFS trotz Anpassungen in 2022 mit neuesten OpenZFS Sachen nicht zusammenarbeitet. Sa wäre dann Migration über zfs send nötig.
Hab mit einem aktuellen OmniOS in Nappit jetzt mal einen neuen Pool erstellt NVMe im M.2/USB Gehäuse. Darauf ein verschlüsseltes Dataset angelegt und dann in einer TrueNAS VM anschließend versucht das ganze zu öffnen. Diesmal geht es, er nimmt das Passwort fürs Dataset und kann es erfolgreich öffnen...

Meine alten Datasets auf meinem Produktivsystem waren aber alle von vor 2022 erstellt worden. Damit hatte ich kein Erfolg.
Aber schonmal eine gute Nachricht wie ich finde.

Hab zwar keine Daten hin und her kopiert aber ich gehe mal davon aus sollte alles okay sein.
 
Zuletzt bearbeitet:
  • Danke
Reaktionen: gea
Keine Frage, nur Anmerkung. Hatte mein Projekt immer nach jeder grösseren Änderung per MC stundenlang hin und her kopiert. Jetzt endlich mal auf ZFS sync umgestellt. Gute Güte, hätte ich schon lange mal machen müssen. Storage wird dann nach dem grossen Netzwerkumbau eh komplett neu gemacht mit eigenen Datasets. Aber zumindest mein Projekt atm ist in kürze "weggesichert", super geil!

Screenshot 2026-09-10 030006.png
 
hoi @gea: habe eine Anwendung mit 8 VMs in einem eigenen Dataset. Alles 8 VMs haben zusammen thin um die 12 GB. Wenn ich die lokal oder über 10G Netzwerk komplett übertrage, brauche ich da paar Minuten, vielleicht 5 oder 6 (s.o.). Wenn ich einen Snapshot anlege und einen ZFS sync mache, dauert das viel länger, so um die 20 Minuten. Ist das normal?

Die KI meint, ich solle so fragen:

Hallo Gea,

ich sichere ein ZFS-Dataset mit ESXi-VMs (NFS-Datastore, VMDKs) per `zfs send | ssh | zfs recv`
von einem OmniOS-Filer auf einen zweiten OmniOS-Server. Der volle Erstlauf ist schnell, jeder
inkrementelle Lauf danach ist dagegen um ein Vielfaches langsamer — obwohl er nur einen Bruchteil
der Daten enthält. Ich würde gern verstehen, ob das erwartetes ZFS-Verhalten ist, bevor ich an
Kernel-Tunables drehe.

**Umgebung**

- Quelle: OmniOS r151054 (`omnios-r151054-a81cbdaf88`), Pool `Micron1` = eine SATA-SSD (single
vdev, ashift 12), Dataset `recordsize=128K`, `compression=lz4`, `sync=standard`, `atime=off`.
Inhalt: acht VMs als NFS-Datastore für ESXi, 12,7 GB belegt (thin VMDKs).
- Ziel: OmniOS r151058 (`omnios-r151058-516f7694c9`), drei Pools `SAS1`–`SAS3`, jeweils ein
Mirror aus zwei SAS-HDDs, Dataset gleiche Properties. `zfs_per_txg_dirty_frees_percent = 30`,
`zfs_dirty_data_max ≈ 1,6 GB`, `zfs_txg_timeout = 5` (alles Default, nichts in `/etc/system`).
- Strecke: 10 GbE, `zfs send -c -v … | ssh root@ziel "zfs recv <pool>/yummisites"`. Kein
mbuffer (gemessen: bringt hier nichts, Deckel ist die Schreibrate des Mirrors, ~115 MB/s).
- Snapshots werden von Hand bei ausgeschalteten VMs angelegt (`zfs snapshot -r`).

**Messung**

Voller Erstlauf (`zfs send -c snap@A | zfs recv -F`): 12,7 GB in ~90 s je Pool — passt zu den
115 MB/s der Platten.

Inkrementeller Lauf danach (`zfs send -c -i A B`), Stream laut `zfs send -nv`: **69,9 MB**.
`zstreamdump` des Streams:

```
Total DRR_OBJECT records = 198
Total DRR_FREEOBJECTS records = 58
Total DRR_WRITE records = 4188
Total DRR_FREE records = 1181
Total records = 5627
Total write size = 69792256
Total stream length = 71582416
```

Zwischen A und B wurden die VMs heruntergefahren; die 1181 FREE-Records sind vermutlich die
Bereiche, die die Gäste beim Shutdown in ihren VMDKs freigegeben haben (Swap, Logs, Truncate).

Derselbe Stream, aber ohne Empfang (`zfs send -c -i A B | ssh ziel "cat > /dev/null"`): **1 s**.
Mit `zfs recv`: **10 min 44 s** je Pool. `zpool history -il` auf dem Ziel:

```
08:43:47 [txg:657773] receive SAS3/SAS3/yummisites/%recv
08:54:31 [txg:659374] finish receiving SAS3/SAS3/yummisites/%recv snap=B
```

Also **1601 Transaktionsgruppen in 644 s** (2,5 txg/s) für 70 MB — Netz und Send sind
nachweislich nicht der Engpass, `zpool status` sauber, kein Scrub/Resilver, keine Plattenfehler,
Load 0,1. Ein zweiter Inkrementallauf ohne FREE-Records (nur Writes) läuft in Sekunden.

**Meine Vermutung**

Der Empfänger verarbeitet die FREE-Records über `dmu_free_long_range()`, und die Drossel
`zfs_per_txg_dirty_frees_percent` erzwingt bei grossen freigegebenen *Adressbereichen* (thin
VMDKs: wenig belegt, aber grosse Ranges) laufend `txg_wait_synced()` — daher die vielen kleinen
txgs und die Wartezeit auf die HDDs, obwohl kaum Daten geschrieben werden. Beim vollen Send gibt
es keine FREE-Records, deshalb ist er schnell.

**Fragen**

1. Ist das so erwartet, oder übersehe ich etwas (Property am Dataset, Stream-Option)?
2. Ist `zfs_per_txg_dirty_frees_percent` hier die richtige Stellschraube, und mit welchem Wert
(höher, oder 0 = Drossel aus) — oder rät man davon auf einem Backup-Ziel eher ab?
3. Gibt es einen sinnvolleren Weg, VM-Datastores mit vielen Freigaben inkrementell zu
replizieren (z. B. `zfs send` ohne `-c`, anderes `recordsize` am Ziel, `logbias=throughput`)?

Für ein Backup-Ziel, das ohnehin nur nachts läuft, ist das kein Drama — ich möchte nur wissen,
ob ich einem Bug hinterherlaufe oder einem Designmerkmal.

Gruss und danke
 
Die einfachste Methode wäre ein Test mit incremental transfers

-unbuffered netcat statt ssh (ist encrypted ssh das Problem)
-buffered netcat, mbuffer vergleichen (bringt ein Puffer was bei inc transfers)
-oder cs stream (napp-it 4ai) versuchen, das macht buffered encrypted transfers auch bei normalen datasets.

Ich würde buffer send/receive nicht per default ausschliessem, Inkr. Transfers machen mehr Kopfbewegungs aös ein full send. Da bringt ein Puffer eventuell schon was.

Was auch oft was bringt, ist die ip Puffer zu erhöhen um 10G LAN schneller zu machen
 
Ja, habe deine zahlreichen Änderungen letzthin immer still mitverfolgt, aber waren mir zu viele Builds. Glaube habe noch eine Version ohne netcat. Den buffer einzubauen haben wir so versucht, Claude meinte, bringt keine Verbesserung. Von napp-it 4ai bin ich noch ganz weit weg. Habe zfs sync auch nicht über napp-it gemacht, sondern direkt in der solarish ssh Konsole. War nur verwundert, dass die Snaps so lange gingen.

Bevor ich die beiden napp-it dann mal modernisiere, baue ich mal mein Netzwerk komplett um. In dem Zug wird auch der Storage komplett neu organisiert, mit eigenen Datasets pro Anwendung, und so. Im Moment habe ich diverse Datenträger/Pools, und da flach über alle Pools nur je jeweils ein Dataset. Also mit wirklich effizient Snaps anlegen ist da atm. noch nichts. Für die neue Anwendung habe ich jetzt mal ein eigenes Dataset angelegt, da bin ich schon mal ganz glücklich darüber, dass ich die VMs in 5 Minuten statt 2h "kopieren" kann.

Kommt Zeit, kommt Rat. Wenn wir schon bei Zeit sind: habe zwei ESXi mit solarish und nappit-SE am laufen. Wenn da damit Geld verdient würde, bräuchte es da dann zwingend die kommerzielle napp-it Lizenz? Weil das würde mir bei meinem Startup wohl einen Strich durch die Rechnung machen. Die beiden ESXi sind eh nur Zwischenlösung, wenn das mal richtig losgeht dann, werde ich eh auf einen kleinen PVE Cluster wechseln. ESXi nutze ich nur noch wegen meinen Spiliserver, da ist vSphere halt einfach viel besser mit DX Clients, vmware WS als VMRC und so. Bzw. geht auf Proxmox leider gar nicht, so gerne ich wechseln würde.
 
napp-it se oder 4ai/cs free reicht - auch kommerziell genutzt, wenn man keine Gruppen/Cluster für remote replication braucht. Für Homeuse erlaubt 4ai auch einen Cluster mit 3 Hosts.

Napp-it se nutzt buffered netcat für remote replikation. Napp-it 4ai nutzt mit cs-stream ein Go Tool für encrypted, buffered ZFS Replikation oder filesysnc mit rclone any to any (ersetzt ssh, mbuffer, pve, rsync).

 
Danke @gea: Übertragung und Puffer waren es aber nicht: zfs send des Stroms bis /dev/null dauert 1,3 s, mbuffer ist schon drin (gemessen ohne Unterschied). Die Zeit fällt komplett beim zfs recv an, und dort haben wir es jetzt gefunden:

Auf den HGST HUH721212AL4200 (Firmware A630) am LSI 9300-8i dauert jeder SYNCHRONIZE CACHE konstant 500–650 ms — egal ob der Write Cache ein- oder ausgeschaltet ist (mit dtrace auf scsi_transport, cdb 0x35 gemessen; Platten dabei zu 1–2 % ausgelastet, also keine Kopfbewegungen). ZFS schickt pro txg vier davon, und der inkrementelle Strom erzwingt durch seine ~1'200 FREE-Records rund 1'600 txgs → 11 Minuten für 343 MB. Derselbe Strom auf eine WD Red am anderen Filer: 42 s. Test mit zfs_nocacheflush=1: 50 txgs in 2,3 s statt 60 s.

Lösung auf dem Backupserver: Write Cache der sechs Platten beim Boot ausschalten (rc3.d-Skript, die Platten behalten die Einstellung nicht) und in /kernel/drv/sd.conf:

sd-config-list = "HGST HUH721212AL4200", "cache-nonvolatile:true";

Damit bleibt zfs_nocacheflush auf 0, nur dieses Modell bekommt keinen Flush mehr. Ergebnis: 50 txgs in 2,3 s, inkrementeller Lauf ~40 s statt 11 min.

Zwei Fragen: Kennst Du dieses Flush-Verhalten bei den HGST-SAS am 9300? Und ist cache-nonvolatile + Write Cache aus so sauber, oder würdest Du es anders lösen?
 
ich würde 2 Sachen probieren

1. Multipath mpio deaktivieren (falls aktiv aber nicht verkabelt, kann dann Probleme machen)
napp-it Menü Disks > Details > SAS (reboot nötig)

2. Ist die Firmware vom 3008 aktuell

Ansonst per init oder mit "other job" script beim restart den cache ausschalten
 
Ja, wie gesagt, wir konnten das Problem bereits lösen. Keine Ahnung, wieso das alles immer so kompliziert sein muss. Nach meinem Netzwerkumbau werde ich Storage sowieso nochmal komplett umbauen, vielleicht setze ich die Filer bei der Gelegenheit gleich neu auf dann.

Es sind zwei Stellen, nicht nur das Skript:

1. /etc/rc3.d/S90hgst-writecache-off schaltet beim Start per "format -e" den Write Cache aller HUH721212AL4200 aus (die Platten behalten das nicht über einen Reset).

2. /kernel/drv/sd.conf: sd-config-list = "HGST HUH721212AL4200", "cache-nonvolatile:true"; — das ist die eigentliche Wirkung. Damit schickt sd gar keinen SYNCHRONIZE CACHE mehr. Mit Write Cache aus allein dauerte jeder Flush weiterhin 500–650 ms. /etc/driver/drv gibt es auf OmniOS nicht, deshalb direkt in /kernel/drv.

Beides gehört zusammen: die sd.conf-Zeile ist nur mit ausgeschaltetem Write Cache die Wahrheit. Seit dem Reboot: 0 Flush-Pakete, 50 txgs von 60 s auf 2.3 s.

MPIO: mpxio ist global an, aber die sechs HGST hängen nicht unter scsi_vhci, sondern direkt an den mpt_sas-iports (/pci@0,0/…/pci15d9,808@0/iport@1/disk@w5000cca…). Nur die Micron-SSD läuft über vhci, mit einem Pfad, das ist auch das Einzige, was "mpathadm list lu" zeigt. Abschalten würde für die HGST also nichts ändern.

Firmware: Ziel LSI 3008 (AOC-S3008L-L8e) auf 16.00.10.00, Quelle PERC H310 ebenfalls aktuell. Die Zeit fällt ohnehin komplett beim Empfänger an, der Send bis zstreamdump dauert 1.3 s.
deshalb ein rc3.d-Skript beim Start. Aber die eigentliche Wirkung kommt von sd-config-list = "HGST HUH721212AL4200", "cache-nonvolatile:true"; in /kernel/drv/sd.conf (bei OmniOS dort, /etc/driver/drv gibt es nicht) Mit Write Cache aus allein dauerte jeder SYNCHRONIZE CACHE weiterhin 500–650 ms. Seit dem Reboot: 0 Flush-Pakete, 50 txgs von 60 s auf 2.3 s.

MPIO: mpxio ist zwar global an, aber die sechs HGST hängen nicht unter scsi_vhci, sondern direkt an den mpt_sas-iports (/pci@0,0/…/pci15d9,808@0/iport@1/disk@w5000cca…). Nur die Micron-SSD läuft über vhci, mit einem Pfad. Das ist auch das Einzige, was mpathadm list lu zeigt. Abschalten würde für die HGST also nichts ändern.

Firmware: Ziel LSI 3008 (AOC-S3008L-L8e) auf 16.00.10.00, Quelle PERC H310 ebenfalls aktuell. Die Zeit fällt ohnehin komplett beim Empfänger an, der Send bis zstreamdump dauert 1.3 s.
 
Hoi @gea

Mal eine Frage zu ESXi-Hotsnaps und ZFS-Replikation. Bis vor Kurzem habe ich die VM-Verzeichnisse noch per Copy/MC lokal und auf einen entfernten NFS-Speicher kopiert. Inzwischen nutze ich ZFS-Replikation, sowohl lokal als auch übers Netzwerk.

Die letzten Tage habe ich dafür jeweils die acht VMs heruntergefahren, einen ZFS-Snapshot erstellt und anschliessend meine beiden Replikationsskripte über PuTTY gestartet.

Jetzt bin ich einen Schritt weiter: Die SSH-Anmeldung von napp-it am Haupt-ESXi funktioniert. Unter ESXi → SSH automate kann ich für die acht VMs auf dem Dataset ESXi-Hotsnaps erstellen. Danach erstelle ich händisch den ZFS-Snapshot, lasse meine beiden Replikationsskripte laufen und lösche anschliessend über SSH automate die ESXi-Hotsnaps wieder.

Kann ich diesen Ablauf mit napp-it als manuell gestarteten Job zusammenfassen? Einen festen Zeitplan möchte ich atm. nicht, sondern den gesamten Ablauf bei Bedarf mit einem Klick starten. Die Anwendung befindet sich zurzeit noch in Entwicklung, deshalb brauche ich aktuell keine täglichen Snapshots. Ausserdem läuft der Backupserver nicht durchgehend. Ist dafür die vorhandene SSH-Automatisierung vorgesehen, oder wäre das etwas für die SOAP-Automatisierung?

Und zur Reihenfolge: Können die ESXi-Hotsnaps schon unmittelbar nach erfolgreichem Erstellen des ZFS-Snapshots wieder gelöscht werden, also noch vor der eigentlichen Replikation?

Umgebung: 2x ESXi Free 8.0U3e und napp-it Free 26.05.03dev auf OmniOS, SE und CS vorhanden.

Eure Entwicklung mit SOAP und allem dazu hatte ich am Rande mitverfolgt und schon gedacht, dass ich das irgendwann brauchen werde. Mit der jetzigen Lösung bin ich bereits ziemlich zufrieden – der manuelle Gesamtjob wäre noch der nächste Schritt.

Gruss und danke
 
Die einfachste Option wäre es, einen napp-it Replikationsjob anzulegen. Da die ip des ESXi eintragen und der Rest passiert automatisch (SSH Zugriff muss eingerichtet sein, siehe System > ESXi > Serverlist.)

Ablauf:
Dann wird ein vor dem Start der Replikation ein ESXi Hotsnap ausgeführt. Die ESXi Snap-Delta Datei liegt dann im VM Ordner. Dann wird ein ZFS Snap erstellt, der diese Delta Datei enthält. Jetzt kann/wird der ESXi Snap gelöscht (ist ja im ZFS Snap). Die Replikation überträgt dass das Dateisystem mit ESXi Snap.

Restore:
Dateisystem mit ESXi Snap wiederherstellen und in ESXi auf den ESXi Snap zurückgehen.

Diese automatische Unterstützung für ESXi ist in napp-it 4ai noch nocht enthalten (bisher nur Proxmox VM freeze). Da müsste man ein Pre-Job Shell Script (jobid.pre) erstellen der vor der Repliktion den ESXi Snap macht und ein jobid.post script das den Snap wieder löscht.

1789804024531.png
 
Hardwareluxx setzt keine externen Werbe- und Tracking-Cookies ein. Auf unserer Webseite finden Sie nur noch Cookies nach berechtigtem Interesse (Art. 6 Abs. 1 Satz 1 lit. f DSGVO) oder eigene funktionelle Cookies. Durch die Nutzung unserer Webseite erklären Sie sich damit einverstanden, dass wir diese Cookies setzen. Mehr Informationen und Möglichkeiten zur Einstellung unserer Cookies finden Sie in unserer Datenschutzerklärung.


Zurück
Oben Unten refresh