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

6

Estou tentando criar um método bash-scriptable de substituir o sistema de arquivos raiz em um PC em execução. O sistema usa um disco particionado MBR com um rootfs ext4 e uma partição swap, infelizmente ele não usa LVM / BTRFS ou qualquer coisa útil como essa. Ele está executando uma distribuição Debian mínima usando o 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 empurrar 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 resumem-se ao seguinte:

  • Substitua o initrd por uma versão personalizada que não alterne para o rootfs real, mas substitua-o (provavelmente usando o dd para gravar uma nova imagem) e, em seguida, reinicialize para o novo sistema

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

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

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

    
por Hygrinet 22.05.2015 / 10:40

1 resposta

4

Veja esta resposta do Stack Exchange . A resposta aceita aponta para este link , que explica como usar o 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 com o sistema de arquivos raiz sem reinicializar.

    
por 22.05.2015 / 12:54