Ich versuche, eine Bash-Skript-basierte Methode zum Ersetzen des Root-Dateisystems auf einem laufenden PC zu entwickeln. Das System verwendet eine MBR-partitionierte Festplatte mit einem ext4-Rootfs und einer Swap-Partition, leider verwendet es kein LVM/BTRFS oder ähnliches Nützliches. Es läuft eine minimale Debian-Distribution mit Grub/Kernel und Initrd/Systemd.
Es besteht kein physischer Zugriff auf den betreffenden PC. Auf ihm läuft eine Kiosk-Software, mit der ein proprietäres Tool verwendet werden kann, um ein Tarball mit Binärdateien und einem Update-Shell-Skript auf den PC zu übertragen. Mein Plan ist, dieses Update-System zu verwenden, um zu versuchen, das Root-Dateisystem zu ersetzen.
Meine Ideen lassen sich im Wesentlichen auf Folgendes reduzieren:
Ersetzen Sie das initrd durch eine benutzerdefinierte Version, die switch_root nicht auf das echte rootfs umstellt, sondern es ersetzt (wahrscheinlich durch Verwendung von dd zum Schreiben eines neuen Images), und starten Sie dann das neue System neu.
(Irgendwie!) switch_root vom Live-System zu einer Art temporärem Dateisystem, dann führe den obigen dd & reboot aus
Wie oben, aber pivot_rooten Sie den Init-Prozess in ein neues, temporäres Dateisystem und führen Sie das Obige oder etwas Ähnliches aus …
Ich bin mit der Funktionalität von Pivot_Root und Switch_Root nicht vertraut und spiele gerade damit herum. Ich bin sicher, dass dies schon einmal gemacht wurde, aber ich habe gesucht und keine Lösung gefunden!
Antwort1
Sehendiese Stack Exchange-AntwortDie akzeptierte Antwort weist aufdieser Link, darin wird erklärt, wie Sie mit pivot_root ein temporäres Root-Dateisystem im Arbeitsspeicher erstellen, das Ihnen ermöglicht, Ihr Root-Dateisystem ohne Neustart zu ändern, in der Größe anzupassen, es zu ersetzen oder auf andere Weise damit herumzuspielen.