Preciso atualizar uma partição UBI bruta com uma nova imagem UBIFS do espaço de usuário do Linux com direitos de superusuário, no entanto, estou recebendo EBUSY
o erro (Dispositivo ou recurso ocupado) sempre que tento abrir meu correspondente /dev/ubiX_Y
para gravação, mesmo se o sistema de arquivos atual estiver presente nele é montado como somente leitura. Suspeito que uma partição de bloco comum com, por exemplo, um sistema de arquivos ext4, possa ser aberta para gravação quando montada como somente leitura, visto que utilitários como zerofree e ext4magic funcionam dessa maneira. Esse não parece ser o caso das partições UBI.
Teoricamente, eu poderia encerrar os processos usando a partição ou anexá-los e fechar à força todos os arquivos antes de desmontar a partição completamente, mas parece que não posso fazer nada com o init
processo do busybox que mantém constantemente /etc/inittab
aberto. /
E sim, a partição em questão é uma partição montada na raiz .
Eu também poderia implementar um módulo de kernel que faria o trabalho sujo, mas gostaria de manter o máximo de compatibilidade binária para o meu utilitário de atualização e basicamente mantê-lo o máximo possível da versão do kernel agnóstico, resolvendo-o dessa maneira é altamente indesejável. Existe alguma outra maneira de fazer isso?
Se houver uma linha
/etc/inittab
como:Então, se você enviar SIGQUIT
init
, ele será substituído por /tmp/updater_stage2. Para recarregar/etc/inittab
após alterá-lo envie SIGHUP. Você pode substituir/etc/inittab
por uma montagem de encadernação:Se não houver
/etc/inittab
ou suporte parainittab
in não compilado eminit
será executadoinit
, então você terá que substituir/sbin/init
como:Você pode então usar
pivot_root
echroot
para substituir o sistema de arquivos raiz, que você poderá desmontar (depois de mover/tmp
,/proc
etc).