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.