Estou trabalhando em um aplicativo complexo enorme. Você conecta um disco, pressiona um botão e ele particiona e formata o disco, monta-o e copia alguns arquivos para ele.
Para testar este aplicativo, temos um sistema de teste que monta em loop uma imagem de disco e executa o mesmo processo. Exceto que mudamos a lógica do aplicativo e agora o sistema de teste não funciona. Se você der ao programa um disco real , tudo funciona bem. Mas se você der um dispositivo de loop, ele falhará.
Especificamente, o aplicativo particiona o disco, formata-o e depois reclama que não pode montar a partição. O comando exato é
mount /dev/vda /mnt --rw -o offset=111149056,sizelimit=314572800
(Aqui /dev/vda
é meramente um link simbólico para /dev/loop0
. Não faz diferença se eu me referir a loop0
diretamente).
Se eu executar o comando manualmente, obtenho isto:
root# mount /dev/vda /mnt --rw -o offset=111149056,sizelimit=314572800
FUSE exfat 1.0.1
ERROR: exFAT file system is not found.
root# echo $?
1
Eu posso executar este comando uma e outra vez, e isso simplesmente não funciona. Nenhuma razão, simplesmente não faz.
Aqui está a parte aterrorizante: Se eu executar cfdisk /dev/vda
e, em seguida, sair imediatamente sem alterar nada, agora ele é montado !!
O que o inferno faz cfdisk
fazer no disco que faz com que ele comece a funcionar de repente? E como posso remover a necessidade de chamar este programa?
(Eu tentei em vão chamar sfdisk -R /dev/vda
; ele apenas reclama de "parâmetro inválido" ou algo assim.)
Eu posso kludge o aplicativo para chamar cfdisk -Ps /dev/vda
ou algo assim, mas eu realmente prefiro não fazer isso. Eu quero descobrir por que nada disso é necessário. Antes de mudarmos a aplicação, tudo funcionou bem ...