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?
- dd a partição atualizada para
/dev/sdX
, qual é a raiz montada atualmente (somente leitura)? - mova a raiz atual usando
pivot_root
para um tmpfs conforme discutidoaqui? - 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.