Btrfs wird nicht als file sondern block-based filesystem behandelt

SteffenDE

Member
Feb 10, 2021
30
4
13
53
Hallo,
ich teste gerade in einer Lab-Umgebung ein wenig und habe PVE mit local filesystem btrfs als RAID1 installiert. Warum, weniger Speicher und die Consumer NVME sollten damit besser klar kommen als mit ZFS.

Soweit auch alles gut, ich habe die VMs sowieso auf einem NBFS Storage liege, nutze den lokalen Storage nur zum Testen. Nun ist mir aufgefallen, wenn der Btrfs Storage im Datacenter eingebunden ist und ich dort Disk erstelle oder importiere, diese nur als RAW angelegt werden können. Dies passiert dich nur wenn es sich um einen Block level storage handelt und laut Btrfs sollte dies nicht sein (https://pve.proxmox.com/wiki/Storage). Verstehe ich dabei was falsch?

Dies bedeutet bei Migrationen müsste dann ja immer zwischen RAW und QCOW2 migriert werden oder?

Ich kann den mount des btrfs nun auch als Dir-Storage hinzufügen und dann auch mit QCOW2 arbeiten. Sinnvoll, nur eines von beiden oder was muss / soll man da beachten?

Wäre schön, wenn wir mir dazu jemand ein paar Hinweise geben könnte.
Danke.
 
Die pve Installation legt ein lvm Konstruct an, sodaß du deswegen block und filestorage hast, siehe lvs+lvdisplay.
Im block storage können nur raw images liegen, im file storage raw und/oder qcow images.
Du kannst ww. das local-btrfs, was das lvm block storage ist, rauskonfigurieren, sodaß dann auf deiner pve Platte nur noch btrfs als "local" zur Verfügung steht, So ist zwar eine Umformatierung nicht mehr nötig, aber da es lokal ist wird immer noch bei vm/lxc Migration alle Daten physikalisch hin- und herkopiert.
 
Bist Du Dir da sicher?

Bei Btrfs sehe ich unter LVM rein gar nix (kann auch nix auswählen) und auch keine unterschiedlichen Storage Typen. In der Doku steht auch bei Btrfs nix von LVM ...

Das die Daten kopiert werden müssen ist schon klar und auch kein Problem, wenn ich z.B. am NFS Storage mal was machen will habe ich schon immer (bisher VMware) mal die ein oder andere VM temporär auf den lokalen Storage migriert.

Du kannst ww. das local-btrfs, was das lvm block storage ist, rauskonfigurieren, sodaß dann auf deiner pve Platte nur noch btrfs als "local" zur Verfügung steht
Wie meinst Du das bzw. hast Du eine Anleitung dazu?

Danke.
 
Mmh, hab das mal so angenommen, weil ich keine pve Inst. mit btrfs habe.
Was ist denn der output von df und lsblk bei dir ?
 
Also nach Installation ist es im Standard so:btrfs subvolume list

Code:
NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
nvme0n1     259:0    0 931.5G  0 disk
├─nvme0n1p1 259:1    0  1007K  0 part
├─nvme0n1p2 259:2    0     1G  0 part
└─nvme0n1p3 259:3    0   127G  0 part
nvme1n1     259:4    0 931.5G  0 disk
├─nvme1n1p1 259:5    0  1007K  0 part
├─nvme1n1p2 259:6    0     1G  0 part /boot/efi
└─nvme1n1p3 259:7    0   127G  0 part /

Filesystem     1K-blocks    Used Available Use% Mounted on
udev            47744028       0  47744028   0% /dev
tmpfs            9555528    1632   9553896   1% /run
/dev/nvme1n1p3 133168128 2647556 129516748   3% /
tmpfs           47777636   46800  47730836   1% /dev/shm
tmpfs               5120       0      5120   0% /run/lock
efivarfs             128      31        93  25% /sys/firmware/efi/efivars
/dev/nvme1n1p2   1046512   11936   1034576   2% /boot/efi
/dev/fuse         131072      16    131056   1% /etc/pve
tmpfs            9555524       0   9555524   0% /run/user/0

Dazu wird dann ein subvolume angelegt:
btrfs subvol list /
ID 256 gen 21 top level 5 path var/lib/pve/local-btrfs
 
Ach, das sieht ja interessant aus ..., von deiner 1TB nvme wird also p3 auf 130G partioniert und der freie Rest als block subvolume (~800G) ... ?!
Da steht die Frage im Raum wieso unter einem Filesystem Pfad /var/lib/pve/local-btrfs, wenn es ja kein gemountetes Fikesystem ist ... ?!
Würde man unter runtime filesystem unter /dev/pve/local-btrfs (oder so) vermuten ...
Aber benutzen kannst du es als block oder eingebunden als file storage, funktionieren tut beides. Block ist etwas schneller, kann aber keine normalen Files aufnehmen. Bin jetzt kein spezieller Freund vonj btrfs, ist schon etwas kompliziert im handling der subvolumes etc, was allerdings auch sehr viel kann (zB mehrere / snapshots ww. booten etc), aber wenn dir das liegt, finde ich es gut, daß sich jemand daran erfreuen kann.
 
Die Besachränkung auf die 130GB kommt von mir bei der Installationm (hd size), da ich dann eine eigene Datenpartition erstelle.

Ist aber auch wenn ich da nichts ändere vom Design identisch, nur dass eben die ganze Platte genutzt wird. Aber local-btrfs sieht grundsätzlich genau so aus.

Aber benutzen kannst du es als block oder eingebunden als file storage
Wie genau kann ich das als file storage einbinden bzw. wie ist der richtige Weg dazu? Einfach als Dir bekannt machen?

Danke.
 
Weiß nicht, was pve datacenter bei btrfs und dir macht, aber einfach ausprobieren. Entweder es geht gleich oder meckert ggf. rum, wobei du dann das subvolume erst per fstab Eintrag vorher mounten mußt und dann nochmal per datacenter per dir einbinden.
 
Ich habe nun via Directory eingebunden und kann dann auch file-basiert arbeiten. Die Frage ist nur passt das so?

Wenn ich als btrfs einbinde geht definitiv nur RAW.
 
Versuch doch mal auf "local" (obwohl das ja eigentlich genau der Pfad deines Subvolumes theo. wäre ..., btrfs ist halt nur pve experimental). Hast du nicht eine 2 Platte, die du ganz regulär mit btrfs formatierst und mountest und dann geht da auch kein qcow - würde mich ja brennend interessieren ?!
 
Hi,

ich habe in dem Mini-PC nur die 2 NVME's, aber wenn ich vom Setup nur die 128GB selbst konfigurieren lasse und den Rest via parted nachträglich als separate Partition mit Btrfs formatiere kommt genau der Fall raus (nur RAW). Sprich ich erstelle das device mit Btrfs und muss dieses dann ja via Datacenter Storage bekannt machen und das kann ich nach (so zumindest meine bisherige Erkenntnis) nur als Btrfs oder als Directory. Im Standard passiert das vom Setup als Btrfs dann dort nur via RAW und wenn ich es als Directory einbinde kann ich auch QCow2.

Ich kann gar kein local auswählen oder habe ich hier noch ein Verständnisproblem?
Screen_20241231-143859.png
 
Ich kann gar kein local auswählen oder habe ich hier noch ein Verständnisproblem?
"local" ist eine default storage definition, die in Form von "Dir" bereitgestellt wird.
Eine Testplatte wäre zB auch ein usb-stick, erst btrfs drauf, dann mounten (!!) und dann im Datacenter als "Dir" einbinden - dann müßte halt auch qcow2 gehen.
Genau so müßte es auch mit deinem Subvolume gehen, - nur wenn du das möchtest - (ist kein muß oder soll, da bei pve idR vorgesehen ist block storage für image files zu nehmen, aber eben kein "muß" ist), also zB mkdir /var/lib/pve/btrfs (neben /var/lib/pve/local-btrfs),
mount auf /var/lib/pve/btrfs und dann als "Dir" definieren.
 
OK + Danke, so habe ich es jetzt gemacht. Ich habe das gleiche Ziel als Btrfs und als Dir angelegt, dann kann ich sowohl als auch nutzen oder siehst Du dabei Probleme?
 
Nö, wir nutzen zu 99% auch nur (xfs-nfs) filestorage, weil es viel komfortabler im Handling ist. Das Forum ist doch theo. schon lange mit block storage unknown handling chats übergelaufen und nimmt kein Ende ... wer's mag, kann's machen, wer's nicht mag macht's halt anders, was natürlich auch das coole bei pve daran ist, geht alles irgendwie :)
 
  • Like
Reactions: SteffenDE
OK + Danke, so habe ich es jetzt gemacht. Ich habe das gleiche Ziel als Btrfs und als Dir angelegt, dann kann ich sowohl als auch nutzen oder siehst Du dabei Probleme?
Naja Blockspeicher spart sich den Dateisystemoverhead, das sollte also performanter sein. Ob man im Heimnetz etwas davon bemerkt, ist freilich eine andere Sache
 
Last edited:
Bei block (zvol oder lvm*) Problemen oder remote Migrationen wünscht man sich den fehlenden Dateisystemoverhead ... :cool: