Können initramfs ausgelagert werden, um die Festplatte auszutauschen?

7

Ich verwende initramfsCentos über PXE. Der initramfsverwendete Speicher wird innerhalb des "zwischengespeicherten" Werts in /proc/meminfooder via aufgelistet free.

Da ich Leistungsdaten berechnen muss, muss ich wissen, ob der von der verwendete Speicher zurückgefordert werden initramfskann (dh auf die Festplatte ausgelagert werden kann) oder nicht. In der Regel wird nur ein sehr kleiner Teil des /Dateisystembaums verwendet, sodass ein Großteil initramfsdavon ausgelagert werden kann.

Als ich darüber las, bekam ich widersprüchliche Informationen. Einige Quellen behaupteten, dass initramfssich das Verhalten so verhält initrdund darauf basiert ramfs, was bedeutet, dass behaupteter Speicher nicht zum Auslagern ausgelagert werden kann. Andere Quellen behaupten, dass dies initramfsim Wesentlichen tmpfsbedeuten würde, dass es zum Auslagern ausgelagert werden kann.

Was wahr ist? Können die nicht verwendeten Teile des initramfsDateisystems ausgelagert werden, um Speicherplatz auszutauschen?

dfens123
quelle
Ich denke, das ist mit einer VM mit wenig Speicher leicht herauszufinden ...
Hauke ​​Laging

Antworten:

6

BEARBEITEN: Antwort aktualisiert / korrigiert.

Obwohl die Kerneldokumentation zu diesem Thema besagt, dass "Rootfs eine spezielle Instanz von Ramfs ist (oder tmpfs, wenn dies aktiviert ist) [...]", handelt es sich in Wirklichkeit immer noch um Ramfs, wie ein kurzer Blick im Code zeigt ( rootfs ist) nicht erwähnt in mm/shmem.c).

Einige Patches (siehe z. B. hier und hier ) wurden an die Linux-Kernel-Mailingliste (lkml) gesendet , um dies zu ändern. Aber sie wurden nicht akzeptiert. Ein Grund war, dass Sie Swap normalerweise während der initramfs-Phase oder in eingebetteten Systemen nicht aktiviert haben.

Das initramfs-Image wird in die rootfs extrahiert. Bevor der Benutzerbereich (normalerweise von switch_rootaufgerufen /init) zum neuen Stamm wechselt, wird der Inhalt des Stamms gelöscht, sodass nur die minimale Speichermenge eines leeren RAMF übrig bleibt. Danach können Sie die Speichernutzung grundsätzlich ignorieren, und die Frage, ob sie ausgetauscht werden kann, ist nahezu irrelevant.

Jofel
quelle
1
Danke für die Information. Ich sollte klarstellen: Ich mache keine Leistung switch_root, das initramfs ist ein 2 GB cpio-Archiv einer vollständigen CentOS-Installation, die über PXE gestartet wurde, es bleibt als rootfs. Daher möchte ich wissen, ob ein lokales Swap-Gerät einen Teil der nicht verwendeten 2 GB freigeben kann.
dfens123
Auch nach gossamer-threads.com/lists/linux/kernel/1463249 : „Rootfs ist eine spezielle Instanz von ramfs (oder tmpfs, wenn es das ist aktiviert)“ , aber es war immer eine Lüge, bis jetzt. Ich bin mir also nicht sicher, ob rootfs tatsächlich ein tmpfs ist oder noch ramfs. Wie soll ich das überprüfen?
dfens123
1
@ dfens123, anstatt den Client das gesamte System in ein massives Rootfs herunterladen zu lassen, warum mounten Sie nicht einfach Root über NFS?
Psusi
@ dfens123 Ich habe meine Antwort korrigiert.
Jofel
1
Ich nehme an, ich könnte das cpio-Archiv in ein tatsächliches tmpfs und switch_root aus den ramfs / rootfs extrahieren
dfens123
1

Wie Sie sagen, rootfskönnen Dateidaten nur ausgelagert werden, wenn sie mit implementiert sind tmpfs, nicht mit ramfs.

Seit Linux v3.12 tmpfswird in einigen Fällen verwendet. Wenn ich den Code richtig gelesen habe, geschieht dies nur , wenn Sie keine root=Option übergeben. Sie können die Verwendung von rootfstype=ramfsRamfs durch Übergabe erzwingen, aber Sie können tmpfs nicht durch Übergabe von rootfstype = tmpfs erzwingen.

Wenn Sie den statBefehl haben, stat -f .wird bestätigt, ob Sie sich auf einem ramfsäquivalenten oder einem tmpfsäquivalenten oder einem anderen Dateisystemtyp befinden.


Dies wurde implementiert in:

6e19eded3684 "initmpfs: Verwenden Sie initramfs, wenn rootfstype = oder root = angegeben ist."

Befehlszeilenoption rootfstype = ramfs, um das alte Verhalten von initramfs zu erhalten, und verwenden Sie ramfs anstelle von tmpfs für stub, wenn root = definiert ist (aus kosmetischen Gründen).

Es ist aus zwei Gründen etwas verwirrend. Erstens überschreibt es effektiv die Logik im Commit, die unmittelbar davor steht:

16203a7a942 "initmpfs: Lassen Sie rootfs tmpfs verwenden, wenn CONFIG_TMPFS aktiviert ist."

Rufen Sie bedingt die entsprechenden Funktionen fs_init und fill_super auf.

Zweitens root=scheint der Test für in der Dokumentation nicht erwähnt zu werden, auch nicht in Version 4.17:

https://github.com/torvalds/linux/blob/v4.17/Documentation/filesystems/ramfs-rootfs-initramfs.txt

Wenn CONFIG_TMPFS aktiviert ist, verwendet rootfs standardmäßig tmpfs anstelle von ramfs. Fügen Sie "rootfstype = ramfs" zur Kernel-Befehlszeile hinzu, um Ramfs zu erzwingen.

sourcejedi
quelle