losetup -d nem sempre funciona

0

Meu sistema operacional é o Slackware 13.1 (2.6.33.4-smp).

Estou executando losetup -d $dev no meu script personalizado como a última linha para liberar algum dispositivo de loop criado nele. No entanto, nem sempre funciona dizendo que o dispositivo está ocupado, embora nada no meu script funcione mais com ele. Este script está sendo invocado muitas vezes um após o outro. Às vezes o dispositivo é liberado, às vezes não. Mas se eu colocar um "sleep 2" antes de losetup -d $dev , nenhum problema ocorrerá. Parece que "losetup" precisa de algum tempo ou smth ... (não posso mostrar a saída de losetup -a agora, não no trabalho agora)

Existe uma maneira de forçar a exclusão de algum dispositivo de loop? Você tem alguma ideia?

    
por John_Doe 03.05.2011 / 09:30

1 resposta

0

É possível que o acesso ao dispositivo seja assíncrono, de modo que os dados de seu dispositivo mount / dd / whatever-you-did-to-the-loop ainda estejam no cache e estejam prestes a serem liberados. Nesse caso, sync deve ajudar (mas pode desacelerar todo o sistema para um rastreamento se outras operações pesadas de E / S estiverem acontecendo).

Dependendo do seu caso de uso e ambiente, um loop while simples ( while ! losetup -d $dev; do sleep 2; done ) pode ser preferível (embora você deva adicionar uma condição de saída após algumas tentativas).

    
por 03.05.2011 / 09:55

Tags