Estoy tratando de idear un método bash-scriptable para reemplazar el sistema de archivos raíz en una PC en funcionamiento. El sistema usa un disco particionado MBR con rootfs ext4 y una partición de intercambio, desafortunadamente no usa LVM/BTRFS ni nada útil por el estilo. Está ejecutando una distribución Debian mínima usando grub/kernel & initrd/systemd.
No hay acceso físico a la PC en cuestión: está ejecutando algún software de quiosco, con el cual se puede usar una herramienta patentada para enviar un tarball que contiene archivos binarios y un script de shell de actualización a la PC. Mi plan es utilizar este sistema de actualización para intentar reemplazar los rootfs.
Mis ideas básicamente se reducen a lo siguiente:
Reemplace initrd con una versión personalizada que no cambie_root al rootfs real sino que lo reemplace (probablemente usando dd para escribir una nueva imagen), luego reinicie en el nuevo sistema
(¡De alguna manera!) cambie_root del sistema en vivo a algún tipo de sistema de archivos temporal, luego haga lo anterior dd y reinicie
Como arriba, pero pivote_root el proceso de inicio a un nuevo fs temporal y haga lo anterior, o algo parecido...
No estoy familiarizado con las funciones pivot_root y switch_root y actualmente estoy jugando. Estoy seguro de que esto se ha hecho antes, pero busqué y no encontré una solución.
Respuesta1
Veresta respuesta de Stack Exchange. La respuesta aceptada apunta aeste enlace, que explica cómo usar pivot_root para crear un sistema de archivos raíz temporal en memoria, que le permite cambiar, redimensionar, reemplazar o de cualquier otra manera alterar su sistema de archivos raíz sin reiniciar.