Substituindo o root do Linux (somente leitura) do sistema em execução

Substituindo o root do Linux (somente leitura) do sistema em execução

Este parece ser um problema muito genérico para mim. Eu tenho um sistema embarcado rodando Linux a partir de uma raiz somente leitura. Existe um daemon atualizador que instala novas imagens de software quando disponíveis, substituindo partições inteiras. Minha pergunta é: Qual é a melhor abordagem para fazer isso em um sistema em execução?

  1. dd a partição atualizada para /dev/sdX, qual é a raiz montada atualmente (somente leitura)?
  2. mova a raiz atual usando pivot_rootpara um tmpfs conforme discutidoaqui?
  3. usar 2 partições raiz e alternar a "ativa" após cada atualização?

As desvantagens de 2 e 3 são que preciso de muita RAM (para 2) ou espaço em disco (para 3). Existe uma maneira segura de substituir a partição raiz somente leitura de um sistema em execução e reinicializar no sistema atualizado?

Responder1

Então o que fiz foi seguir a abordagem 1. e tive muitos problemas onde o sistema não estava mais estável devido a problemas no sistema de arquivos. Acho que substituir uma partição montada não é uma boa ideia (embora não seja uma grande surpresa). Para corrigir isso, tentei a ideia 2. (pivot_root) que funciona, mas tem algumas desvantagens. Uma delas é: você deve interromper a maioria dos processos em execução e/ou reinicializar o mais rápido possível após a conclusão da atualização. Por fim, experimentei a ideia 3. e a única desvantagem é o "desperdício" de espaço em disco. Todo o resto funciona muito bem.

informação relacionada