zfs raid-1 -> raidz-1 : 50% mehr Platzverbrauch

bforpc

Renowned Member
Nov 26, 2013
147
4
83
Hamburg
Hallo,

in diesem Thread wurde der Grund für den Mehrverbrauch erläutert:

https://forum.proxmox.com/threads/r...eutlich-größer-als-quelle.135440/#post-599244

Ich habe jetzt das Problem, dass die Daten nicht auf die neuen Platten bekomme, wenn ich 50% mehr Platz brauche.

Kann mir jemand passende zpool Einstellungen empfehlen, welche für meinen Fall weniger Platz verbrauchen würden?
Ich habe diverse EInstellungen versucht, ohne erkennbare Verbesserung.
Zur Info: Der raidz-1 zpool besteht aus 5 NVME's (und nein, ein Spiegel ist hier nicht möglich). Die (zfs raw) VM kommt von einem raid-1. Es handelt sich dabei um eine ~14Tb große Partition einer VM. Auf dieser befinden sich sehr viele Dateien in der Größe von 1-50Mb

Bfo
 
Bei einem 5-Disk Raidz1 mit ashift=12 müsstest du deine ZFS Storages wenigstens mit einer Blockgröße von 32K betreiben, damit du nicht all den Padding Overhead hast. Und wenn du für den Storage die Blockgröße änderst, dann ändert das nicht die Volblocksize der Zvols, da diese nur zum Zeitpunkt der Erstellung bestimmt werden kann. Heißt du musst all die Zvols einmal zerstören und nur erstellen, nachdem du die Blockgröße für den Storage angehoben hast. Geht am einfachsten über ein Backup+Restore.
 
Last edited:
  • Like
Reactions: news
ok... das hatte ich noch nicht gemacht. Momentan liegt sie 128K ... das ist sehr viel mehr ...

Bfo
 
Last edited:
Und bist du sicher das die 128K die Volblocksize ist und nicht die Recordsize? Weil Volblocksize ist standardmäßig 8K und Recordsize standardmäßig 128K.
Bei VMs geht es nur um die Volblocksize und die Recordsize ist egal.
Mit 128K Volblocksize solltest du ebenfalls nur 20% und nicht 50% verlieren.

Bin auch nicht sicher wie PVE das mit der Volblocksize beim Migrieren löst. Ob da die ursprüngliche Volblocksize erhalten bleibt oder die Volblocksize vom Zielstorage benutzt wird.
Im ersteren Fall müssten beide Nodes dann 32K+ nutzen, auch wenn für den Node mit dem Mirror 8K reichen würde.
 
Ich bin jetzt völlig aus dem Konzept.
Wie soll ich das "storage" mit zpool anlegen und wie den Container, bzw. welche Einstellungens oll proxmox dabei haben, wenn es den Container anlegt?

Bfo
 
Ich bin jetzt völlig aus dem Konzept.
Wie soll ich das "storage" mit zpool anlegen und wie den Container, bzw. welche Einstellungens oll proxmox dabei haben, wenn es den Container anlegt?

Bfo
Container nutzen immer Datasets und da kommt die Recordsize zum Tragen und du hast generell kein Verlust (also größere vDisk) durch Padding Overhead.

VMs nutzen immer Zvols und da kommt die Volblocksize zum Tragen und du hast Padding Overhead wenn deine Volblocksize zu klein gewählt ist (und das ist sie bei Raidz1/2/3 immer standardmäßig).

zpool get ashift && zfs get recordsize,volblocksize würde helfen wenn du wissen willst was deine vDisks aktuell nutzen.

Volblocksize für neu erstellte Zvols legst du fest, indem du im webUI unter Datacenter -> Storage -> DeinZFSStorage -> Edit die "Block Size" anpasst.

Recordsize kannst du nur indirekt über die CLI festlegen, indem zu z.B. per zfs set recordsize=256K DeinPool/DeinDataset die Recordsize vom Eltern-Dataset setzt, was dann an die Kind-Datasets vererbt wird.
 
Last edited:
  • Like
Reactions: Falk R.
Sorry, ich hatte mich falsch ausgedrückt. Natürlich ist es eine VM und kein Container.

Code:
zpool get ashift
NAME   PROPERTY  VALUE   SOURCE
store  ashift    12      local

Code:
fs get recordsize,volblocksize
NAME                                                                                    PROPERTY      VALUE     SOURCE
store                                                                                   recordsize    128K      default
store                                                                                   volblocksize  -         -
store/proxmox                                                                           recordsize    64K       local
store/proxmox                                                                           volblocksize  -         -
store/proxmox/vm                                                                        recordsize    64K       local
store/proxmox/vm                                                                        volblocksize  -         -
store/proxmox/vm/vm-60100-disk-0                                                        recordsize    -         -
store/proxmox/vm/vm-60100-disk-0                                                        volblocksize  8K        default

Die VM store/proxmox/vm/vm-60100-disk-0 wurde per sync von einem andren Host übertragen. Gibt es eine Möglichkeit, die Volblocksize nachträglich dafür zu erhöhen?
Der Gap zwischen dem Original (auf dem Spiegel) und diesem Ziel (raidz1) 13,5T Quelle -> 22TB Ziel :-(

Bfo
 
Sorry, ich hatte mich falsch ausgedrückt. Natürlich ist es eine VM und kein Container.

Code:
zpool get ashift
NAME   PROPERTY  VALUE   SOURCE
store  ashift    12      local

Code:
fs get recordsize,volblocksize
NAME                                                                                    PROPERTY      VALUE     SOURCE
store                                                                                   recordsize    128K      default
store                                                                                   volblocksize  -         -
store/proxmox                                                                           recordsize    64K       local
store/proxmox                                                                           volblocksize  -         -
store/proxmox/vm                                                                        recordsize    64K       local
store/proxmox/vm                                                                        volblocksize  -         -
store/proxmox/vm/vm-60100-disk-0                                                        recordsize    -         -
store/proxmox/vm/vm-60100-disk-0                                                        volblocksize  8K        default

Die VM store/proxmox/vm/vm-60100-disk-0 wurde per sync von einem andren Host übertragen. Gibt es eine Möglichkeit, die Volblocksize nachträglich dafür zu erhöhen?
Der Gap zwischen dem Original (auf dem Spiegel) und diesem Ziel (raidz1) 13,5T Quelle -> 22TB Ziel :-(

Bfo
Nein, Volblocksize kann nur einmalig bei der Erstellung des Zvols festgelegt werden. Willst du die ändern heißt das Zvol zerstören und mit anderer Volblocksize neu erstellen.
Da kommst du nicht drum herum die ganzen 13,5TB einmal komplett neu schreiben zu müssen.
 
Last edited:
  • Like
Reactions: news
Hallo Dunuin,

danke für diese Info. Ist bei 13Tb natürlich nicht einfach, denn dann braiche ich ja mindestens nochmal so viel. Vor allem wo jetzt rund 22Tb weg sind. Also bräuchte ich mindestens 35TB Platz, eher sogar knapp 40 ... puuhhh...

Letzte Frage: mit einer Volblocksize von 128k wäre ich dann wieder bei rund 13,5Tb oder ist ein anderer Wert besser geeignet?

Bfo
 

About

The Proxmox community has been around for many years and offers help and support for Proxmox VE, Proxmox Backup Server, and Proxmox Mail Gateway.
We think our community is one of the best thanks to people like you!

Get your subscription!

The Proxmox team works very hard to make sure you are running the best software and getting stable updates and security enhancements, as well as quick enterprise support. Tens of thousands of happy customers have a Proxmox subscription. Get yours easily in our online shop.

Buy now!