Ersetzen eines laufenden Linux-Root-Dateisystems

Ersetzen eines laufenden Linux-Root-Dateisystems

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.

verwandte Informationen