Fragen zur sinnvollen Nutzung eines ZFS Pools

speerwerfer

New Member
Jun 5, 2025
23
1
3
Hallo,

ich hab mir in einem PVE mit externen USB Platten einen ZFS Pool (raidz) zusammengestrickt. Das ganze ist jetzt nur zum testen und lernen. Ich weiß, das diese HW Konstellation suboptimal ist. Mir geht es darum den Umgang mit Devices & Storage zu lernen.

Hier mal die aktuelle Konfiguration:

Bash:
root@proxmox:~# lsblk
NAME                         MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
sda                            8:0    0 298.1G  0 disk
├─sda1                         8:1    0  1007K  0 part
├─sda2                         8:2    0     1G  0 part /boot/efi
└─sda3                         8:3    0 297.1G  0 part
  ├─pve-swap                 252:0    0     8G  0 lvm  [SWAP]
  ├─pve-root                 252:1    0  84.3G  0 lvm  /
  ├─pve-data_tmeta           252:2    0   1.9G  0 lvm
  │ └─pve-data-tpool         252:4    0   185G  0 lvm
  │   ├─pve-data             252:5    0   185G  1 lvm
  │   ├─pve-vm--100--disk--0 252:6    0     8G  0 lvm
  │   ├─pve-vm--101--disk--0 252:7    0     4M  0 lvm
  │   ├─pve-vm--101--disk--1 252:8    0    32G  0 lvm
  │   ├─pve-vm--102--disk--0 252:9    0     1G  0 lvm
  │   ├─pve-vm--103--disk--0 252:10   0     8G  0 lvm
  │   ├─pve-vm--104--disk--0 252:11   0     2G  0 lvm
  │   └─pve-vm--106--disk--0 252:12   0    20G  0 lvm
  └─pve-data_tdata           252:3    0   185G  0 lvm
    └─pve-data-tpool         252:4    0   185G  0 lvm
      ├─pve-data             252:5    0   185G  1 lvm
      ├─pve-vm--100--disk--0 252:6    0     8G  0 lvm
      ├─pve-vm--101--disk--0 252:7    0     4M  0 lvm
      ├─pve-vm--101--disk--1 252:8    0    32G  0 lvm
      ├─pve-vm--102--disk--0 252:9    0     1G  0 lvm
      ├─pve-vm--103--disk--0 252:10   0     8G  0 lvm
      ├─pve-vm--104--disk--0 252:11   0     2G  0 lvm
      └─pve-vm--106--disk--0 252:12   0    20G  0 lvm
sdb                            8:16   0 232.9G  0 disk
├─sdb1                         8:17   0 232.9G  0 part
└─sdb9                         8:25   0     8M  0 part
sdc                            8:32   0 232.9G  0 disk
├─sdc1                         8:33   0 232.9G  0 part
└─sdc9                         8:41   0     8M  0 part
sdd                            8:48   0 232.9G  0 disk
├─sdd1                         8:49   0 232.9G  0 part
└─sdd9                         8:57   0     8M  0 part
sr0                           11:0    1  1024M  0 rom

root@proxmox:~# zpool list
NAME           SIZE  ALLOC   FREE  CKPOINT  EXPANDSZ   FRAG    CAP  DEDUP    HEALTH  ALTROOT
ZFS-USB-RAID   696G  1.16M   696G        -         -     0%     0%  1.00x    ONLINE  -

root@proxmox:~# zpool status
  pool: ZFS-USB-RAID
 state: ONLINE
config:

        NAME          STATE     READ WRITE CKSUM
        ZFS-USB-RAID  ONLINE       0     0     0
          raidz1-0    ONLINE       0     0     0
            sdb       ONLINE       0     0     0
            sdc       ONLINE       0     0     0
            sdd       ONLINE       0     0     0

errors: No known data errors

root@proxmox:~# zfs list
NAME           USED  AVAIL  REFER  MOUNTPOINT
ZFS-USB-RAID   783K   449G   128K  /ZFS-USB-RAID

  • sda ist für das Proxmox VE System. Ein paar Testcontainer und eine Test VM laufen da.
  • sdb, sdc & sdd sind zu einem raidz ZFS Pool (ZFS-USB-RAID) verbunden.
  • Der Pool ist im PVE unter /ZFS-USB-POOL gemountet.

Ich möchte in diesem ZFS Pool nun Nutzdaten der Container und der VM ablegen können. Z.b. soll im späteren Echtsystem in einem Container die Bilderverwaltung Immich laufen und die Bilder sollen nicht im Container sondern auf dem ZFS Pool liegen.

Um den ZFS Pool in den Container zu bekommen, könnte ich nun über die Konsole einen Mount Point für den Container setzen: pct set 200 -mp0 /ZFS-USB-POOL,mp=/mnt/ZFS-USB-POOL,backup=0 Damit wäre der komplette ZFS Pool in dem Container im Zugriff. Wenn ich den gleichen ZFS Pool auch in einem anderen Container per Mount Point einbinde, dann sehen beide Container jeweils die Daten des anderen. Das würde ich gerne vermeiden.

Wenn ich jetzt per UI einen Mount Point für den ZFS Pool in den Container setze, dann wird ja eine virtuelle Disk auf dem ZFS Pool angelegt. Wenn ich es richtig im Kopf habe könnte ich die z.B. mit 100 GB anlegen und die wird aber erst mit der Zeit auf 100GB anwachsen, je nach dem wie viel Platz tatsächlich benötigt wird. Das wäre OK. Ich muss halt darauf achten, das meine virtuellen Disks nicht den Gesamtplatz des ZFS Pools sprengen.

ABER: Wenn ich einzelne Verzeichnisse aus so einer virtuellen Disk Sichern möchte, dann geht das nur aus dem Container heraus. Ich müsste als in jedem Container die Backups konfigurieren und triggern. Schön wäre es ja, wenn ich das vom PVE System aus machen könnte. Dort sehe ich aber nur die komplette virtuelle Disk und nicht deren Inhalt.

Fragen:
Sind meine Ideen grundsätzlich sinnvoll? Oder bin ich bei der Nutzung eines ZFS Pools auf dem Holzweg?
Welche der beiden Varianten ist empfehlenswert? Gibt es vielleicht noch eine weitere?
 
Wenn ich jetzt per UI einen Mount Point für den ZFS Pool in den Container setze, dann wird ja eine virtuelle Disk auf dem ZFS Pool angelegt. Wenn ich es richtig im Kopf habe könnte ich die z.B. mit 100 GB anlegen und die wird aber erst mit der Zeit auf 100GB anwachsen, je nach dem wie viel Platz tatsächlich benötigt wird. Das wäre OK. Ich muss halt darauf achten, das meine virtuellen Disks nicht den Gesamtplatz des ZFS Pools sprengen.

ABER: Wenn ich einzelne Verzeichnisse aus so einer virtuellen Disk Sichern möchte, dann geht das nur aus dem Container heraus. Ich müsste als in jedem Container die Backups konfigurieren und triggern. Schön wäre es ja, wenn ich das vom PVE System aus machen könnte. Dort sehe ich aber nur die komplette virtuelle Disk und nicht deren Inhalt.
Sorry. Ich sehe gerade, das mit der gemounteten virtuellen Disk geht doch. Ich kann von PVE in die virtuelle Disk des Containers reinsehen.

Hmm, dann wäre das doch genau der richtige Weg um für die einzelnen Container Platz im ZFS Pool zu nutzen, ohne das die Container gegenseitig die Daten der anderen Container sehen. PVE kann aber in alle virtuellen Disks reinschauen und diese auch ggf sichern.
 
Hmm, ich war gestern den ganzen Tag unterwegs und nicht im Forum. Ich sehe aber in meinen Benachrichtigungen, das hier wohl Antworten geschrieben wurden. Nun sehe ich aber nichts mehr. Was ist da los? Warum ist das alles wieder verschwunden?
 
Last edited:
Hat dir zufällig der User News geantwortet?
bei dem kommt das öfters vor. ;)
 
Ja, technisches Problem? Oder Antwort wieder gelöscht?
Keine Ahnung, sehe ich aber öfters. Eigentlich gibt es hier keine automatisch löschende Nachrichten. Daher müsste es manuell sein.
 
Es gibt leider einige User, die die Angewohnheit haben einen Teil ihrer Postings nach kurzer Zeit wieder zu löschen. Was das soll, weiß ich auch nicht, kann nicht in deren Köpfe gucken ;)
 
Um den ZFS Pool in den Container zu bekommen, könnte ich nun über die Konsole einen Mount Point für den Container setzen: pct set 200 -mp0 /ZFS-USB-POOL,mp=/mnt/ZFS-USB-POOL,backup=0 Damit wäre der komplette ZFS Pool in dem Container im Zugriff. Wenn ich den gleichen ZFS Pool auch in einem anderen Container per Mount Point einbinde, dann sehen beide Container jeweils die Daten des anderen. Das würde ich gerne vermeiden.
Ich denke wenn du das so versuchst wie beschrieben, wirst du den Container nicht starten können. Nachdem du genau nicht willst, dass die Container die Daten des jeweils anderen sehen, empfiehlt es sich, vorher ZFS Filesysteme zu erstellen. Davon hat dann jeder Container eines und die werden jeweils gemounted. Das geht z.B. über zfs create. Wenn du den Mountpoint über das UI erstellst, wird das automatisch gemacht, wie du unten schon angemerkt hast. Für Container werden Filesysteme erstellt, für VMs Volumes.
ABER: Wenn ich einzelne Verzeichnisse aus so einer virtuellen Disk Sichern möchte, dann geht das nur aus dem Container heraus. Ich müsste als in jedem Container die Backups konfigurieren und triggern. Schön wäre es ja, wenn ich das vom PVE System aus machen könnte. Dort sehe ich aber nur die komplette virtuelle Disk und nicht deren Inhalt.
Wenn es um einen Container geht und ein Filesystem erstellt wurde für den Mountpoint am Container, dann hat das Filesystem normalerweise auch einen Mountpoint am Host. Mit zfs list solltest du sehen können, wo das ist. Da siehst du auch den Inhalt.
 
  • Like
Reactions: speerwerfer
empfiehlt es sich, vorher ZFS Filesysteme zu erstellen. Davon hat dann jeder Container eines und die werden jeweils gemounted. Das geht z.B. über zfs create.
Jupp, ich hab die letzten Tage etwas Grundlagen zu ZFS gelernt und mich jetzt dazu entschieden getrennte ZFS Datasets zu erstellen und diese dann in den Containern zu nutzen. Ich würde es aber jetzt tatsächlich mit zfs createüber die Konsole machen und nicht über die GUI. Das wären dann ja Volumes, richtig?
 
Jupp, ich hab die letzten Tage etwas Grundlagen zu ZFS gelernt und mich jetzt dazu entschieden getrennte ZFS Datasets zu erstellen und diese dann in den Containern zu nutzen. Ich würde es aber jetzt tatsächlich mit zfs createüber die Konsole machen und nicht über die GUI. Das wären dann ja Volumes, richtig?
Du kannst mit zfs create beides erstellen. Die Oracle Dokumentation zu ZFS gibt da eine ganz nette Übersicht zur Erstellung von Filesystems und Volumes.
 
  • Like
Reactions: speerwerfer
Hmm, jetzt bin ich wieder unsicher. Bleiben wir bei meinem Beispiel:
Ich möchte in dem Pool ZFS-USB-RAID einen Dataset für die Bilder von Immich anlegen und dieses Dataset an den LXC durchreichen und dort nutzen. Nimmt man dafür dann eher ein Volume oder ein Filesystem? Was sind jeweils die Vor- & Nachteile?

Ich tendiere zu den Filesystem Datasets, da ich das Volume als Blockdevice nicht brauche.
 
Last edited:
Für LXC macht ein Filesystem Sinn, weil du mit LXC das Filesystem einfach mounten kannst. Mit einem Volume hast du nur eine virtuelle Disk, auf welcher man dann ein Filesystem partitionieren könnte. Man kann zwar das Filesystem, das auf dieser Disk partitioniert ist, am Host mounten und dann ein Bindmount einrichten, aber es bietet keine Vorteile für deine Nutzung mit dem Container und verkompliziert das Setup.

Volumes werden primär für VMs verwendet. Damit hat man dann eine virtuelle Disk, die man der VM als "Hardware" präsentieren kann wie eine reguläre Disk und auf dieser kann dann das Filesystem für die VM partitioniert werden.
 
  • Like
Reactions: speerwerfer
Ich muss hier noch mal nachhaken - jetzt aber zum ZFS Dataset Type Volume.

Ich hab jetzt mit zfs create -V 5gb tank/immich_volume ein Dataset vom Type volume erstellt. Das wird auch in der Konsole gelistet:
Code:
root@proxmox:~# zfs list
NAME                          USED  AVAIL  REFER  MOUNTPOINT
tank                         10.2G   439G  32.0K  /tank
tank/immich_volume           5.08G   444G  16.0K  -
Nun will ich das als virtuelle Disk in einer VM nutzen. Wie kriege ich das hin? Wenn ich in der VM unter Hardware Add/Hard Disk wird mir unter Storage tank/immich nicht angezeigt! Wie bekomme ich denn das Blockdevice in die VM?

1751036861785.png
 
Ich muss hier noch mal nachhaken - jetzt aber zum ZFS Dataset Type Volume.

Ich hab jetzt mit zfs create -V 5gb tank/immich_volume ein Dataset vom Type volume erstellt. Das wird auch in der Konsole gelistet:
Code:
root@proxmox:~# zfs list
NAME                          USED  AVAIL  REFER  MOUNTPOINT
tank                         10.2G   439G  32.0K  /tank
tank/immich_volume           5.08G   444G  16.0K  -
Nun will ich das als virtuelle Disk in einer VM nutzen. Wie kriege ich das hin? Wenn ich in der VM unter Hardware Add/Hard Disk wird mir unter Storage tank/immich nicht angezeigt! Wie bekomme ich denn das Blockdevice in die VM?
Du hast ein Dataset (Dateisystem) erstellt. Das kannst du nicht in eine VM hängen. Du könntest das Dataset nur als Datastore einrichten um dann virtuelle Disks drauf zu legen, aber das willst du ja gar nicht und ist auch nicht zu empfehlen.
Wenn du einen ZFS Pool hast, legst du virtuelle Disks deiner VMs einfach in diesen Pool. Dann wird tatsächlich ein Blockdevice für die VM erstellt und kein Dataset (Dateisystem). Das erste Dateisystem legst du in deiner VM auf das Blockdevice (virtuelle Disk).

P.S. falls du doch auf einen LXC wechseln willst, ist das natürlich wieder anders. ;)
 
Last edited:
  • Like
Reactions: Johannes S
Du hast ein Dataset (Dateisystem) erstellt.
Bist du sicher? Die Dokus sagen, das ich mit zfs create -V 5gb tank/immich_volume ein Dataset vom Type volume erstelle.
https://docs.oracle.com/cd/E18752_01/html/819-5461/gaypf.html

Und die Propperty sagt auch was anderes:
Code:
root@proxmox:~# zfs get -r type tank/immich_volume
NAME                PROPERTY  VALUE   SOURCE
tank/immich_volume  type      volume  -

Ich hab jetzt auch noch mal geziehlt ein Dataset vom Type Filesystem erstellt:
Code:
root@proxmox:~# zfs list
NAME                          USED  AVAIL  REFER  MOUNTPOINT
tank                         10.2G   439G  32.0K  /tank
tank/immich_fs               30.6K   439G  30.6K  /tank/immich_fs
tank/immich_volume           5.08G   444G  16.0K  -

root@proxmox:~# zfs get -r type tank/immich_fs
NAME            PROPERTY  VALUE       SOURCE
tank/immich_fs  type      filesystem  -
 
Last edited:
Ich muss hier noch mal nachhaken - jetzt aber zum ZFS Dataset Type Volume.

Ich hab jetzt mit zfs create -V 5gb tank/immich_volume ein Dataset vom Type volume erstellt. Das wird auch in der Konsole gelistet:
Code:
root@proxmox:~# zfs list
NAME                          USED  AVAIL  REFER  MOUNTPOINT
tank                         10.2G   439G  32.0K  /tank
tank/immich_volume           5.08G   444G  16.0K  -
Nun will ich das als virtuelle Disk in einer VM nutzen. Wie kriege ich das hin? Wenn ich in der VM unter Hardware Add/Hard Disk wird mir unter Storage tank/immich nicht angezeigt! Wie bekomme ich denn das Blockdevice in die VM?

View attachment 87548
Guten Morgen, du musst dir nur klar machen dass es jetzt ein ZFS-Volume ist und das verhält sich als Block device. Das ist sowas, wie ein /dev/sdX und liegt unter /dev/zvol/tank/...
Das device musst also mounten, vorher also partitionieren (cfdisk) und formatieren mkfs -t <type>, z.B als ext4 oder XFS.
 
Last edited:
Warum erstellst du es selbst?
Weil ich gerade mit ZFS rumspiele um es zu verstehen :-)

PVE erstellt diese ZVOLs mit der angegebenen Größe wenn ein Storage mit dem Typ ZFS benutzt wird.
Du meinst, wenn ich über diesen Dialog in einer VM unter Hardware eine Hard Disk hinzufüge und dann einen ZFS Storage auswähle? Immich_gui ist ein Storage welches auf das tank/immich_fs Dataset zeigt.

1751140324351.png
 
Wenn du in Datacenter > Storage vorher ein ZFS storage angelegst dass darauf zeigt und du das auswählst dann ja.
Du kannst das mit zfs list -rt volume sehen. Beachte dass für CTs datasets erstellt werden.
 
Last edited:
Wenn du in Datacenter > Storage vorher ein ZFS storage angelegst dass darauf zeigt und du das auswählst dann ja.
Ja genau, ich habe mit zfs create tank/immich_fs ein Dataset vom Typ Filesystem erstellt
Code:
root@proxmox:~# zfs list -rt filesystem
NAME             USED  AVAIL  REFER  MOUNTPOINT
tank            10.2G   439G  33.3K  /tank
tank/immich_fs  30.6K   439G  30.6K  /tank/immich_fs
Dann unter Datacenter > Storage das ZFS Storage immich_gui angelegt
1751175181584.png
und das dann wie oben gezeigt als Hard Disk in der VM eingebunden.

Zusatzfrage: Das ZFS Storage Immich_gui hab ich mit Thin provision angelegt. Auch wenn darin jetzt die Disk für die VM liegt, scheint nicht sofort der komplette Platz belegt zu werden. Ich hätte jetzt damit gerechnet, wenn ich die eingehängte Disk in der VM mit einem ext4 formatiere, dass dann auch der komplette Platz allociert wird.
1751175501085.png
Beachte dass für CTs datasets erstellt werden.
Damit meinst du dann das hier?
1751175980747.png