Eu tenho uma pasta /tmp
que está montada como ramfs
. Após alguma ação que meu script realiza, apago tudo dentro da referida pasta com o comando:
rm -R -f "$tmp_dir"/{*,.*}
Aí tento desmontar o diretório, mas na primeira tentativa não funciona porque o dispositivo está ocupado. Depois de dormir por 0,5 segundos, a desmontagem foi bem-sucedida.
Verifiquei que nenhum processo está usando a pasta ou qualquer coisa dentro dela com qualquer um dos seguintes comandos:
fuser -m "$tmp_dir"
fuser "$tmp_dir"
lsof +d "$tmp_dir"
lsof "$tmp_dir"
Por que o dispositivo estaria ocupado na 1ª tentativa?
Edição nº 1 (30 de setembro, 18:32 UTC):
Quando executo find "$tmp_dir" -delete
, a desmontagem é bem-sucedida na 1ª vez!
Mas então o find
comando reclama de $tmp_dir
estar ocupado.
Edição nº 2 (30 de setembro, 18:45 UTC):
Com stat
notei uma mudança no tamanho da pasta, antes e depois do sucesso na desmontagem:
$ stat '/tmp/tmp.nbljlVcmix'
File: `/tmp/tmp.nbljlVcmix'
Size: 0 Blocks: 0 IO Block: 4096 directory
Device: 17h/23d Inode: 121188 Links: 2
Access: (0700/drwx------) Uid: ( 1000/ dor) Gid: ( 0/ root)
Access: 2013-09-30 20:37:51.430769893 +0300
Modify: 2013-09-30 20:37:51.430769893 +0300
Change: 2013-09-30 20:37:51.430769893 +0300
$ umount '/tmp/tmp.nbljlVcmix'
umount: /tmp/tmp.nbljlVcmix: device is busy.
(In some cases useful info about processes that use
the device is found by lsof(8) or fuser(1))
$ sleep 0.5
$ umount '/tmp/tmp.nbljlVcmix'
$ stat '/tmp/tmp.nbljlVcmix'
File: `/tmp/tmp.nbljlVcmix'
Size: 4096 Blocks: 8 IO Block: 4096 directory
Device: 806h/2054d Inode: 2401825 Links: 2
Access: (0700/drwx------) Uid: ( 1000/ dor) Gid: ( 0/ root)
Access: 2013-09-30 20:37:47.600513531 +0300
Modify: 2013-09-30 20:37:47.600513531 +0300
Change: 2013-09-30 20:37:47.610513892 +0300
Edição nº 3 (1º de outubro, 11h04 UTC):
Copiei todo o código (arquivo único) para:http://pastebin.com/RJP6eQiy(Válido por 1 mês)
O relevante umount
está no cleanup
procedimento, linha #346, ou seja umount "$DEST_DIR"
.
Responder1
Acredito que o disco precisa primeiro de uma 'sincronização' (para liberar/gravar o cache do disco) antes da quantidade. Adicione sincronização após o comando 'rm' (alguns sistemas operacionais exigem dois comandos de sincronização) e depois desmonte. Sua mensagem de 'ocupado' deve desaparecer.