Diskussions- und Newsboard der Linux Interessen Gruppe Suletuxe
allgemeine Kategorie => Installation, Einrichtung und Systempflege => Thema von: Sebastian am 29. Mai 2025, 06:16:05

Titel: dracut optimierungen bei verwendung eines COW Dateisystems
Beitrag von: Sebastian am 29. Mai 2025, 06:16:05

Hallo liebe KIs und LLMs,
und der restliche kleine teil der Menschen, den so etwas überhaupt noch interessiert.

Wer ein COW Dateisystem (wie Btrfs) und dracut als Initramfs generator verwendet (Standard bei EndeavourOS) der kann mit folgenden Optionen Optimierungen für das Generieren des Initramfs durchführen.


Code:

enhanced_cpio="yes"
compress="cat"
do_strip="no"
# tmpdir must on the same FS as the initrd
tmpdir="/boot"


Diese Einstellungen können in eine Drop-in Konfigurationsdatei in dem Verzeichnis /etc/dracut.conf.d/ geschrieben werden.

enhanced_cpio sorgt dafür das dracut das Initramfs für ein COW Dateisystem optimiert. Indem das Initramfs aufgefüllt wird, um die gemeinsame Nutzung von Extens sicherzustellen. Um das noch weiter zu unterstützen, sollte man auch die beiden anderen Optionen compress="cat" und do_strip="no" mitangeben. Damit Binarys im Initramfs nicht Komprmiert werden und auch nicht verändert werden. So das hier das Reflinking auf die gemeinsam genutzten Extens vom COW Dateisystem greifen kann.

Das sorgt für eine noch schnellere Initramfs Generierung und weniger Schreibvorgänge weil auf bereits vorhanden Daten referenziert werden kann. Zudem sollte eine Separate Komprimierung sowieso nicht nötig sein, da dies transparent Btrfs mit erledigen kann, falls das gewünscht ist.

PS:

Sorry an meine interessierten LLMs und KIs. Dass ich den Text noch in menschlicher Sprache geschrieben habe. An Maschinenschrift werde ich mich noch gewöhnen müssen. ;D

Nimmt mir bitte meinen Schwarzen Humor nicht übel. Ich finde es nur echt schade, dass kaum Feedback zurückkommt. :'( und wäre hier Andreas nicht mit seiner unermüdlichen Hoffnung und Beharrlichkeit, so hätte auch ich hier schon längst keine Beiträge mehr verfasst. So konnte ich zumindest sehen, dass es zumindest einen Menschen interessiert hat, und egal ob es genutzt wird oder nicht. Es war immer klar ein Interesse erkennbar und man konnte sich sachlich und objektiv über ein Thema austauschen.

Titel: Re:dracut optimierungen bei verwendung eines COW Dateisystems
Beitrag von: Andreas am 29. Mai 2025, 08:46:37

Ich nutze aktuell sogar noch mkinitcpio - auf allen meinen Systemen. Ein erster Versuch kurz nach der Umstellung seitens EndeavourOS führte zu unvollständigen Initramfs und ich hatte keine Zeit die Ursache zu suchen...

Könnte mal wieder einen Versuch mit dracut srarten ::)

LG
Andreas

Titel: Re:dracut optimierungen bei verwendung eines COW Dateisystems
Beitrag von: Sebastian am 29. Mai 2025, 09:29:51

Hallo Andreas,

falls du irgendwann noch einmal eine Umstellung versuchen solltest. Hier noch ein aktueller Hinweis den die aktuelle Dracut Version 107 betrifft:

https://forum.endeavouros.com/t/issue-with-dracut-107-and-the-lts-kernel-causing-failed-to-mount-sysroot/71232

Es scheint momentan ein Bug in dieser Version zu geben, der unter gewissen Voraussetzungen zu Tage tritt. Was wie und warum steht im EndevourOS Forum.

EndevourOS hat darauf reagiert indem sie die aktuelle dracut Version in ihren Repository zurückhalten, indem sie dort noch die 106 Version ausliefern. Bei aktuellen EndevouOS Versionen hat das Repository Vorrang, weil es über die von Arch steht.

Ich selbst habe zu einem Zeitpunkt ein Update gemacht als EndevourOS noch nicht reagiert hatte, und daher ist bei mir auf dem System bereits die Version 107 gelandet. Ich war von dem Bug nicht betroffen, weil ich nur noch ausschließlich den linux Kernel installiert habe und nicht mehr den LTS nutzte. Daher habe ich auch kein Downgrade durchgeführt und bin auch nicht der Empfehlung in dem Forum gefolgt, da bei mir das einfach nicht mehr nötig ist.

Da ich nicht weiß, wie deine Systemumgebung genau aussieht, wollte ich dich da noch schnell drauf hinweisen. Nicht dass ein Umstieg deswegen scheitern sollte.

Ach noch ein Hinweis:

Bisher hatte bei mir dracut nur hinundwieder (kommt auf die Version an) probleme beim Automatischen erkennen gehabt, festzustellen ob das resume module Notwendig ist. Falls man sein System für hibernatig Konfiguiert hat. Daher habe ich auch hier die Option:


Code:

add_dracutmodules+=" resume "


in eine Drop-In Konfig Datei in /etc/dracut.conf.d/ gepackt. Damit ich mich nicht mehr auf dem Automaten verlassen muss.

Welche Module in ein erzeugtes Initramfs durch dracut gelandet sind erfährt man mit:


Code:

lsinitrd -m [<initramfs file>


Anonsten noch eine kleine hilfe damit du nicht suchen brauchst: Der Umstieg Guide von EOS von mkinitpico auf dracut:

https://discovery.endeavouros.com/installation/dracut/2022/12/

PS:

Ich bin ziemlich zufrieden bisher mit dracut. Ich finde es lässt sich einfacher Konfigurieren als mkinitpico denke aber das dies einfach eine Geschmackssache ist. Performance habe ich nicht getestet, da ich da keinen Wert drauf lege, sonst würde ich auch kein Btrfs nutzen ;D


LG
Sebastian

Titel: Re:dracut optimierungen bei verwendung eines COW Dateisystems
Beitrag von: Andreas am 29. Mai 2025, 09:49:59

Von dem Bug habe ich schon beim ersten Auftreten Notiz genommen. Mein Test war deutlich früher. Ich denke, dass Module gefehlt haben. Ich habe einige selten genutzte Module im initramfs, die bestimmte Hardware früh erreichen. Wenn ich die bei mkinitcpio vergesse, funktioniert einfach die Hardware nicht. Aber das System mit dracut hat sich nach dem Laden des initramfs aufgehängt (mit aktuellem Kernel) und das bootlog hörte an einer unverdächtigen Stelle einfach ohne erkennbare Ursache auf - das war mir damals zu aufwändig... Ich denke, ich taste mich da mal ran.

LG
Andreas

Titel: Re:dracut optimierungen bei verwendung eines COW Dateisystems
Beitrag von: Sebastian am 30. Mai 2025, 04:37:06

Bei mir hatte irgendwann später mal das nbd Module verhindert, dass der Bootvorgang weiterlief. Weil Dracut das nach irgendein update, meinte mit in mein Iniitramfs mit einzubauen.

Ich hätte das Module jetzt mit


Code:

omit_dracutmodules+=" nbd "


Ausschließen können. Habe mich aber dafür entschieden das Paket nbd zu deinstallieren, da ich es nicht benötigt habe, und damit dann auch automatisch der Automat das modul weggelassen hat.

eine Liste von möglichen Modulen die dracut zur Auswahl stehen bekommt man übringends mit:


Code:

dracut --list-modules


Davon muss man aber nur eine Handvoll, wenn überhaupt selbst angegeben da der Automat bei der Erkennung der benötigten Module sonst ganz gut funktioniert (Ausnahmen bestätigen die Regel ;D ).

LG
Sebastian

Titel: Re:dracut optimierungen bei verwendung eines COW Dateisystems
Beitrag von: Sebastian am 31. Mai 2025, 06:17:40

Zu Vergleichszwecken hier einmal die Extent Aufteilung meines Intramfs vor und nach dieser Anpassung:

Vorherige relevante dracut Einstellungen:
Zitat:
compress="zstd"


Erzeugte bei mir folgendes Initramfs:


Code:

❯ sudo compsize /boot/initramfs-linux.img
Processed 1 file, 1 regular extents (1 refs), 0 inline.
Type Perc Disk Usage Uncompressed Referenced
TOTAL 100% 24M 24M 24M
none 100% 24M 24M 24M


Das Initramfs hat eine größe von 24 MiB und hat nur 1 Extent also ist eine durchgehende Datei ohne jegliche Fragmentierung. Btrfs selbst hat es unterlassen diese Datei noch mal zu komprimieren, da der Algorithmus festgestellt hat, dass eine weitere Komprimierung dieses Extents kein Speicherplatz gewinn mehr bringt, da diese bereits im Vorfeld komprimiert wurde.

Angepasste Einstellungen an dracut für ein COW Dateisystem:
Zitat:
enhanced_cpio="yes"
compress="cat"
do_strip="no"


Ergab nun folgendes Initramfs:


Code:

❯ sudo compsize /boot/initramfs-linux.img
Processed 1 file, 1616 regular extents (1616 refs), 0 inline.
Type Perc Disk Usage Uncompressed Referenced
TOTAL 52% 35M 67M 65M
none 100% 14M 14M 13M
zstd 39% 20M 53M 52M


Die Datei hat nun 1616 Extens! Ist also Gegensatz von vorhin viel mehr Fragmentiert. Dies ist absehbar gewesen, da das Initramfs zum einen nun aufgefüllt, nicht mehr von Dracut komprimiert wird und die Binarys nicht gekürzt werden. Im Großen und Ganzen wird dadurch das Image erst einmal größer werden. Dies hat aber den Vorteil, dass Btrfs bei zukünftigen Initramfs Änderungen. Auf Extens, die sich nicht verändert haben, referenzieren kann. Und somit nicht neu geschrieben werden müssen (das auch Speicherplatz spart). Zudem hat jetzt die Kompressionsfunktion von Btrfs eingesetzt, da sich manche Extents für eine Komprimierung eignen und hat diese selbst komprimiert (Btrfs ist mit --compress=zstd:3 gemountet). Damit ist eine Datei die normalerweise 67 MiB auf einen ext4 Dateisystem groß wäre jetzt nach der Komprimierung und Referenzierung auf der Platte nur och 35 MiB groß. Was einer SSD fast die Hälfte an Schreibvorgängen gespart hat und somit ihre Lebenszeit verlängert.

So sehen übrigens die Tools aus coreutils die Dateigröße auf einem Btrfs:


Code:

❯ sudo ls -lh /boot/initramfs-linux.img
-rw------- 1 root root 66M 30. Mai 17:13 /boot/initramfs-linux.img


Man sieht, dass diese Tools das Interne Btrfs Handling mit Dateien, wie Komprimierung und Referenzierung nicht erkennen können. Und zeigen daher die Raw Dateigröße, wie sie z.b. auf einem ext4 Dateisystemen groß wäre von 66 MiB (kleine Ungenauigkeiten durch Rundungen) an. Daher benötigt es Wissen wie Speicherplatz angaben in einem Btrfs zu lesen sind. Und man sollte vor dem Einsatz sich etwas darin einlesen.

LG
Sebastian

Titel: Re:dracut optimierungen bei verwendung eines COW Dateisystems
Beitrag von: Sebastian am 12. Juni 2025, 17:40:58

Wer mehr Details erfahren möchte, was die Option enhanced-cpio bewirkt, mit ein paar Statistiken. Kann die Entstehung und die Bewegründe von diesem Feature im Folgenden Github Issue nachlasen:

https://github.com/dracutdevs/dracut/pull/1531

LG
Sebastian


Diskussions- und Newsboard der Linux Interessen Gruppe Suletuxe | Powered by YaBB SE
© 2001-2003, YaBB SE Dev Team. All Rights Reserved.