Substituindo um sistema de arquivos raiz Linux em execução

Substituindo um sistema de arquivos raiz Linux em execução

Estou tentando criar um método bash-script para substituir o sistema de arquivos raiz em um PC em execução. O sistema usa um disco particionado MBR com rootfs ext4 e uma partição swap, infelizmente não usa LVM/BTRFS ou qualquer coisa útil assim. Ele está executando uma distribuição Debian mínima usando grub/kernel & initrd/systemd.

Não há acesso físico ao PC em questão - ele está executando algum software de quiosque, com o qual uma ferramenta proprietária pode ser usada para enviar um tarball contendo binários e um script de shell de atualização para o PC. Meu plano é usar este sistema de atualização para tentar substituir o rootfs.

Minhas ideias basicamente se resumem ao seguinte:

  • Substitua o initrd por uma versão personalizada que não mude_root para o rootfs real, mas o substitua (provavelmente usando dd para escrever uma nova imagem) e, em seguida, reinicie no novo sistema

  • (De alguma forma!) switch_root do sistema ativo para algum tipo de sistema de arquivos temporário, então faça o dd & reboot acima

  • Como acima, mas pivot_root o processo init para um novo fs temporário e faça o acima, ou algo parecido...

Não estou familiarizado com a funcionalidade pivot_root e switch_root e estou brincando - tenho certeza de que isso já foi feito antes, mas procurei e não encontrei uma solução!

Responder1

Veresta resposta do Stack Exchange. A resposta aceita aponta paraesse link, que explica como usar pivot_root para criar um sistema de arquivos raiz temporário na memória, que permite alterar, redimensionar, substituir ou de qualquer outra forma mexer em seu sistema de arquivos raiz sem reinicializar.

informação relacionada