logo

Suletuxe.de
Linux - Nutzer
helfen
Linux - Nutzern

Willkommen, Gast. Bitte Login oder Registrieren.
13. Dezember 2025, 19:02:21
Übersicht Hilfe Suche Login Registrieren

Amateurfunk Sulingen
Diskussions- und Newsboard der Linux Interessen Gruppe Suletuxe  |  allgemeine Kategorie  |  Tutorials  |  Thema: Btrfs Speicherplatz belegung Grafisch darstellen « zurück vorwärts »
Seiten: [1] nach unten Drucken
   Autor  Thema: Btrfs Speicherplatz belegung Grafisch darstellen  (Gelesen 106 mal)
Sebastian
YaBB God
*****

Offline

Einträge: 812





Profil anzeigen
Btrfs Speicherplatz belegung Grafisch darstellen
« am: 26. November 2025, 09:14:43 »

Einleitung:
Hallo Suletuxe,

ich habe mich wieder etwas tiefer mit dem Dateisystem Btrfs beschäftigt. Dieses Mal wollte ich herausfinden, wie mein System Daten und Dateien physisch auf dem Datenträger allociert. Ich wollte besser verstehen, wie ein Copy-on-Write (COW) Dateisystem im Laufe der Zeit fragmentiert und ob das für mich relevant wird, vor allem weil ich plane, Btrfs auch auf HDDs einzusetzen.

TLDR;
Ich habe mir per btrfs-heatmap die physische Belegung meines Laptops anzeigen lassen, um Fragmentation, Chunk-Verhalten und die Arbeitsweise von Btrfs über die Zeit zu beobachten. Zusätzlich habe ich mir einen systemd-Service samt Timer gebaut, der täglich eine Heatmap erzeugt.

Hauptteil:
Um mir wortwörtlich ein besseres Bild zu machen, habe ich mein Btrfs-Dateisystem mit dem Tool btrfs-heatmap grafisch darstellen lassen.

Bild Dateisystem Übersicht:

Bild Dateisystem Übersicht

Die obere Grafik wird über eine Hilbert-Kurve dargestellt. Diese Kurve ermöglicht es, lineare Daten platzsparend in einem Quadrat abzubilden. Die erste physische Adresse liegt unten links, schlängelt sich dann nach oben und endet unten rechts.
Zur Illustration:



Die Farbbedeutungen in der Übersicht:

  • Blau = Metadaten
  • Weiß = allocierter Speicher
  • Schwarz = unallocierter Speicher


Das dargestellte Bild zeigt Btrfs im SSD-Modus. Hier kümmert sich Btrfs weniger darum, Daten zusammenhängend abzulegen, da Fragmentation auf SSDs praktisch keine Rolle spielt. Besonders gut erkennbar ist, dass sich Metadaten am Anfang des Datenträgers sammeln. Dieser Bereich ist bereits so stark gefüllt, dass Btrfs etwa in der Mitte der Platte einen neuen Metadaten-Chunk allociert und begonnen hat, ihn zu beschreiben.

Man sieht außerdem im oberen linken Bereich größere unallocierte Lücken innerhalb bereits allocierten Regionen. Vermutlich hatte ich dort große Dateien abgelegt, die einen gesamten Chunk (ca. 1 GiB) vollständig gefüllt hatten und beim Löschen wieder komplett freigegeben wurden. Da Btrfs versucht, Chunks möglichst vollständig zu füllen, bevor neue angelegt werden, entstehen solche großen freien Bereiche.

Wichtig ist die Unterscheidung zwischen Chunk-Allocation und Datei-Fragmentation. Chunk-Lücken bedeuten nicht automatisch, dass Dateien fragmentiert sind. Innerhalb eines Chunks kann eine Datei dennoch an vielen Stellen verteilt liegen oder sich sogar über mehrere Chunks erstrecken. Für eine möglichst zusammenhängende Ablage sorgt btrfs filesystem defragment. Das habe ich in einem eigenen Beitrag genauer beschrieben:

BTRFS – balance vs defragment oder was sind diese Chunks und Extents für …

Zum Vergleich habe ich die Metadaten-Chunks vom Anfang und aus der Mitte der Platte im Detail aufgenommen:

Metadaten-Chunk 1
Metadaten-Chunk 2

Was die Farben im Detail bedeuten, steht in der btrfs-heatmap-Dokumentation

Gerade Metadaten-Chunks fragmentieren stark. Das ist logisch, da dort die meisten Änderungen stattfinden. Daten selbst bewegen sich bei einem COW-Dateisystem dagegen kaum – es werden eher neue Extents angehängt. Metadaten müssen jedoch ständig aktualisiert werden, um auf neue Daten zu zeigen.

Um die Entwicklung des Dateisystems über längere Zeit zu beobachten, habe ich mir einen systemd-Service mit Timer gebaut, der täglich eine neue Heatmap erstellt. Sobald ich genug Bilder gesammelt habe, werde ich daraus ein Daumenkino basteln, um Chunk-Bewegungen sichtbar zu machen.

Systemd Service:
Hier der systemd-Service (Template) für die tägliche Heatmap:

Code:

[Unit]
Description=Generiert eine Heatmap eines Btrfs Dateisytems unter / gemountet ist.

[Service]
Type=oneshot
WorkingDirectory=/home/%i/Bilder/btrfs-heatmap
Group=%i
ExecStart=/usr/bin/btrfs-heatmap /
ProtectSystem=strict
ReadWritePaths=/home/%i/Bilder/btrfs-heatmap

PrivateTmp=true
PrivateDevices=true
LockPersonality=true
ProtectClock=true
ProtectKernelLogs=true
ProtectKernelModules=true
ProtectControlGroups=true
RemoveIPC=true
RestrictSUIDSGID=true
RestrictRealtime=true
SystemCallFilter=@system-service @basic-io @file-system ~@privileged
IPAddressDeny=any
NoNewPrivileges=true
RestrictFileSystems=btrfs

Datei: /etc/systemd/system/btrfs-heatmap@.service

Code:

[Unit]
Description=Startet 1x am Tag den btrfs-heatmap@.service

[Timer]
OnCalendar=daily
Persistent=true

[Install]
WantedBy=timers.target

Datei: /etc/systemd/system/btrfs-heatmap@.timer

Zur Nutzung legt man im Heimatverzeichnis den Ordner $HOME/Bilder/btrfs-heatmap an. Dieser ist der einzige Pfad, in dem der Service schreiben darf. Anschließend aktiviert man den Timer. Hinter dem @-Zeichen im Servicenamen steht der Benutzername, damit systemd die Pfade korrekt ersetzt.

So wüdre der Timer aktiviert werden:

Code:

# Falls die zwei Dateien grade Frisch angelegt worden sind einmal Daemon neu starten
sudo systemctl daemon-reload
sudo systemctl enable --now btrfs-heatmap@sebastian.timer


Der erste lauf würde dann am nächsten Tag statfinden. Möchte man gleich ein Bild Anfertigen dann einmal bitte den Service direkt starten:

Code:

sudo systemctl start btrfs-heatmap@sebastian.service

Fazit:
Die Heatmaps geben ein sehr anschauliches Gefühl dafür, wie Btrfs intern mit Chunks, Metadaten und Daten arbeitet. Gerade langfristige Beobachtungen zeigen gut, welche Bereiche sich dynamisch verändern. Der tägliche systemd-Export erleichtert das enorm und erlaubt spannende Auswertungen über Wochen oder Monate.

Quellenangabe:


LG
Sebastian
« Letzte Änderung: 26. November 2025, 09:17:22 von Sebastian » Gespeichert

Wo die digitale Kultur blüht, nutzen Angreifer Emotionen, Gewohnheiten und Markenbindung aus. Der Schutz beginnt nicht mit Technik, sondern mit Bewusstsein. Wer sich informiert, vorsichtig klickt und sichere Tools nutzt, kann auch unbeschwert an der Digitalkultur teilnehmen.
Seiten: [1] nach oben Drucken 
Diskussions- und Newsboard der Linux Interessen Gruppe Suletuxe  |  allgemeine Kategorie  |  Tutorials  |  Thema: Btrfs Speicherplatz belegung Grafisch darstellen « zurück vorwärts »
Gehe zu: 


Login mit Username, Passwort und Session Länge

 Es wird die Verwendung "Blink"-basierter Browser und mindestens 1024x768 Pixel Bildschirmauflösung
für die beste Darstellung empfohlen
 
freie Software für freie Menschen!
Powered by MySQL Powered by PHP Diskussions- und Newsboard der Linux Interessen Gruppe Suletuxe | Powered by YaBB SE
© 2001-2004, YaBB SE Dev Team. All Rights Reserved.
- modified by Andreas Richter (DF8OE)
Valid XHTML 1.0! Valid CSS!