
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:
- Nachdem Sie das anfängliche System in erstellt haben
chroot
, erstellen Sie einen leeren Ordner/ram
als Einhängepunkt für dietmpfs
Unterbringung der dekomprimierten System- und Benutzerdateien zur Laufzeit. Verschieben Sie alle System- und Benutzerdateiordner (home
,usr
,var
,opt
,etc
,usw.) in/ram
und ersetzen Sie jedes durch einen symbolischen Link auf/ram/$dir
. Komprimieren Sie/ram
als/ram.tar.gz
und belassen Sie die speziellen Einhängepunkte (dev
,sys
,run
,tmp
, undproc
) sowieboot
unverändert aufrootfs
. Löschen Sie die/ram/*
und schreiben Sie sierootfs
auf die Partition. - Beim Booten, nachdem Kernel und
initrd
geladen wurden, mounten Sie vorabrootfs
, mounten Sietmpfs
auf/ram
und extrahieren Sie dann den Inhalt von/ram.tar.gz
in/ram
. Dies muss vorrootfs
dem Ersetzeninitramfs
als Root geschehen, da sonst kein Zugriff auf die Dienstprogramme möglich ist, die zum Mounten und Extrahieren des komprimierten Archivsrootfs
erforderlich sind ./ram
- Mounten
rootfs
und mit dem Booten fortfahren. - Beim Herunterfahren sichern Sie die Datei
/ram.tar.gz
und/ram.tar.gz.bak
komprimieren die geänderten Dateien/ram
in/ram.tar.gz
. Dies kann mithilfe von erreicht werdensystemd
.
Natürlich kann bei Schritt 4 etwas schiefgehen, und deshalb muss bei Schritt 2 die Integrität geprüft /ram.tar.gz
und die Sicherung geladen werden, wenn das fehlschlägt. Dies sollten jedoch nur ein paar zusätzliche Befehle sein, die in das initramfs-tools
Skript aufgenommen werden müssen, und über den Rahmen meiner Frage hinausgehen, die lautet:
/usr/share/initramfs-tools/init
Wie 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 PREREQ
Header 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