Fragmentierung lösen

Nov 25, 2023
51
2
8
Germany
Moin,

hab hier mal eine Frage bzgl. der Fragmentierung. Ich habe 3 HDDs (je 18TB) im raidz1 in Windows angehängt. Das ganze wird dort als Festplatte für BlueIris (Kameraspeicher) genutzt. Jetzt sehe ich aber das die Fragmentierung mittlerweile schon bei 35% ist. 20% des Speichers ist pauschal frei. Ich weiß das man das ganze behebn kann indem man das ganze Dataset hin und her kopiert. Gibt es hierzu noch eine bessere Methode bzw. etwas sinnvolleres wie ich das ganze umsetzen kann?

Sehe ich es richtig das ich die Fragmentierung auf SSDs nicht beachten muss? z.B. hat mein rpool 20% (sind aber m2 nvme).
Die sollen eh demnächst durch 2 Datacenter U2 ersetzt werden.
 
Gibt es hierzu noch eine bessere Methode bzw. etwas sinnvolleres wie ich das ganze umsetzen kann?
Nein, da hilft nur alle Daten runter und neu schreiben. Das geht sehr komfortabel und schnell per "zfs send | zfs recv" und dabei bleiben sogar die Snapshots erhalten. Vorausgesetzt natürlich du hast einen gleich großen freien Pool zur Hand und dich stört keine Downtime. ;)
Sehe ich es richtig das ich die Fragmentierung auf SSDs nicht beachten muss?
Jain. Bei SSDs sind das mit der Fragmentierung generell nicht ganz so dramatisch wie bei HDDs. Auch hat heute jede SSD Wearleveling und GC in der Firmware, dass sich die SSD selbst defragmentiert, wenn sie gerade nichts besseres zu tun hat. Du musst halt nur ordentlich trimmen/discarden, damit die SSD weiß, was an Daten weg kann.
 
Last edited:
Nein, da hilft nur alle Daten runter und neu schreiben. Das geht sehr komfortabel und schnell per "zfs send | zfs recv" und dabei bleiben sogar die Snapshots erhalten. Vorausgesetzt natürlich du hast einen gleich großen freien Pool zur Hand und dich stört keine Downtime. ;)
Downtime ist hier eigentlich nicht gewünscht. Was wäre den die gescheite Alternative? Auf ZFS in dem Fall zu verzichten?


Jain. Bei SSDs sind das mit der Fragmentierung generell nicht ganz so dramatisch wie bei HDDs. Auch hat heute jede SSD Wearleveling und GC in der Firmware, dass sich die SSD selbst defragmentiert, wenn sie gerade nichts besseres zu tun hat. Du musst halt nur ordentlich trimmen/discarden, damit die SSD weiß, was an Daten weg kann.
Das habe ich gestern gemerkt. Hab auf dem rpool ein zpool trim laufen lassen und die fragmentierung ging von 20% auf 3%.
Macht es Sinn zpool trim automatisch aktivieren zu lassen?




Noch ne separate Frage. Wenn ich die beiden m2 vom rpool ersetzen will durch Datacenter U2. Kann ich dann einfach wie hier beschrieben vorgehen? https://r00t.dk/post/2022/05/02/proxmox-ve-7-replace-zfs-boot-disk/
 
Last edited:
Downtime ist hier eigentlich nicht gewünscht. Was wäre den die gescheite Alternative? Auf ZFS in dem Fall zu verzichten?
Naja, hättest du ein PVE Cluster mit ZFS Replikation zwischen den Nodes, hättest du über Live Migration alle VMs/LXCs vom Node wegmigrieren können ohne Downtime. Dann den Pool leeren und Daten zurückspielen und VMs wieder hinmigrieren.

Macht es Sinn zpool trim automatisch aktivieren zu lassen?
Ein "zpool trim" sollte eigentlich standardmäßig einmal im Monat laufen.

Noch ne separate Frage. Wenn ich die beiden m2 vom rpool ersetzen will durch Datacenter U2. Kann ich dann einfach wie hier beschrieben vorgehen? https://r00t.dk/post/2022/05/02/proxmox-ve-7-replace-zfs-boot-disk/
Ja.
 
@Dunuin
das ist auch für mich interessant.
mein pool hat 36% fragmentierung.
nach einem manuellen absetzen von zpool trim geht die fragmentierung jetzt langsam runter.
kann es sein, dass das nicht automatisch läuft wie der scrub?

in der entsprechenden cron-config ist der trim zwar drin, aber hab ich eine möglichkeit zu prüfen ob der auch macht, was er soll?

beim scrub seh ichs ja im zpool status, dass er gelaufen ist.
 
kann es sein, dass das nicht automatisch läuft wie der scrub?
Das ist beides Teil des gleichen Skriptes. Skript wir aufgerufen, dann aufs Datum geguckt und bei dem einen Tag im Monat wird dann der Scrub angestoßen und bei einem anderen der Trim.
Wenn es ordentlich zu trimmen gibt, kann es auch einfach sein, dass sich da bei dir zu viel im Pool ändert und es dann nützlich wäre, wenn man öfter trimmen würde.
beim scrub seh ichs ja im zpool status, dass er gelaufen ist.
Bin nicht ganz sicher, müsste ich hier mal gucken, aber könnte mir vorstellen, dass das dann in der zpool history enthalten ist.

Außerdem gibt es dann noch die autotrim option für den Pool: zpool get autotrim
 
Last edited:
  • Like
Reactions: beisser
in der historie (den befehl kannte ich noch nicht, danke dafür) sehe ich nur die automatischen scrubs und den einen manuellen trim, den ich grad gestartet habe.

autotrim ist off.
 
Jedes Dateisystem speichert die Daten in Blöcke ab. Wenn man etwas löscht und wieder etwas neu schreibt, dann können die leeren Blöcke als nächstes Belegt werden.
Somit liegt, über die Zeit gesehen, eine große Datei verteilt auf dem Datenspeicher und nicht mehr an einem Stück.
 
Naja, hättest du ein PVE Cluster mit ZFS Replikation zwischen den Nodes, hättest du über Live Migration alle VMs/LXCs vom Node wegmigrieren können ohne Downtime. Dann den Pool leeren und Daten zurückspielen und VMs wieder hinmigrieren.

habe ich so ja natürlich nicht. Ich habe gedacht ob es dann nicht sinnvoller wäre einfach die Festplatten zu Windows durchzureichen und in Windows einen Raidpool zu erstellen? Weil das hin und her senden ist so leider keine Option. Trim ist für den Pool "unsupported".
 

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!