Initramfs-tools-Skript zum Mounten komprimierter Ordner auf tmpfs

Initramfs-tools-Skript zum Mounten komprimierter Ordner auf tmpfs

Ich versuche, eine kleine Rettungspartition (~800 MB freier Speicherplatz nach allen anderen System- und Speicherpartitionen) für einen Laptop mit Spezialhardware zu erstellen, der einen speziellen Kernel und spezielle Kernelmodule erfordert, sodass Standardrettungstools wie Clonezilla Live und GParted Live nicht sehr gut funktionieren. Die Partition ist zu klein, um die Module und die Software aufzunehmen, die ich für das, was ich erstellen möchte, brauche, daher muss der Großteil des Systems komprimiert und zur Laufzeit in den RAM geladen werden. Außerdem ziehe ich es vor, das System vollständig zu extrahieren, anstatt mich auf zu verlassen squashfs, und ich möchte die Möglichkeit haben, am System vorgenommene Änderungen so weit zu speichern, wie die Partition es zulässt. Mit Ubuntu 20.04 als Basissystem habe ich zu diesem Zweck das folgende Schema entwickelt:

  1. Nachdem Sie das anfängliche System in erstellt haben chroot, erstellen Sie einen leeren Ordner /ramals Einhängepunkt für die tmpfsUnterbringung der dekomprimierten System- und Benutzerdateien zur Laufzeit. Verschieben Sie alle System- und Benutzerdateiordner ( home, usr, var, opt, etc,usw.) in /ramund ersetzen Sie jedes durch einen symbolischen Link auf /ram/$dir. Komprimieren Sie /ramals /ram.tar.gzund belassen Sie die speziellen Einhängepunkte ( dev, sys, run, tmp, und proc) sowie bootunverändert auf rootfs. Löschen Sie die /ram/*und schreiben Sie sie rootfsauf die Partition.
  2. Beim Booten, nachdem Kernel und initrdgeladen wurden, mounten Sie vorab rootfs, mounten Sie tmpfsauf /ramund extrahieren Sie dann den Inhalt von /ram.tar.gzin /ram. Dies muss vor rootfsdem Ersetzen initramfsals Root geschehen, da sonst kein Zugriff auf die Dienstprogramme möglich ist, die zum Mounten und Extrahieren des komprimierten Archivs rootfserforderlich sind ./ram
  3. Mounten rootfsund mit dem Booten fortfahren.
  4. Beim Herunterfahren sichern Sie die Datei /ram.tar.gzund /ram.tar.gz.bakkomprimieren die geänderten Dateien /ramin /ram.tar.gz. Dies kann mithilfe von erreicht werden systemd.

Natürlich kann bei Schritt 4 etwas schiefgehen, und deshalb muss bei Schritt 2 die Integrität geprüft /ram.tar.gzund die Sicherung geladen werden, wenn das fehlschlägt. Dies sollten jedoch nur ein paar zusätzliche Befehle sein, die in das initramfs-toolsSkript aufgenommen werden müssen, und über den Rahmen meiner Frage hinausgehen, die lautet:

/usr/share/initramfs-tools/initWie erstelle ich ein Skript, um Schritt 2 auszuführen, ohne zu ändern /etc/initramfs-tools/scripts? Die Befehle sollten einfach genug sein, da

mount -t tmpfs -o $OPTIONS none /ram
tar xvzf ram.tar.gz

Ich bin jedoch etwas ratlos, in welchen Ordner ich das Skript einbinden soll (Init? Lokal? Oben? Unten? Premount?) und wie ich mit dem PREREQHeader im Skript selbst arbeiten soll.

Antwort1

Es stellte sich als ziemlich unkompliziert heraus. Erstellen Sie:

/etc/initramfs-tools/scripts/local-bottom/ramfiles
#!/bin/sh

set -e

PREREQ=""

prereqs()
{
        echo "${PREREQ}"
}

case "${1}" in
        prereqs)
                prereqs
                exit 0
                ;;
esac

mount -t tmpfs -o size=100% none ${rootmnt}/ram
tar xvzf ${rootmnt}/ram.tar.gz -C ${rootmnt}


Dann

sudo chmod +x /etc/initramfs-tools/scripts/local-bottom/ramfiles
sudo update-initramfs -u

verwandte Informationen