umount falhou: dispositivo ocupado

4

Eu tenho uma pasta em /tmp montada como ramfs . Depois de alguma ação que meu script faz, eu apago tudo dentro da pasta com o comando:

rm -R -f "$tmp_dir"/{*,.*}

Depois, tento desmontar o diretório, mas na primeira tentativa ele não funciona porque o dispositivo está ocupado. Depois de dormir por 0,5s, a desmontagem é bem-sucedida.

Eu verifiquei que nenhum processo está usando a pasta ou qualquer item dentro dessa pasta 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 primeira tentativa?

Editar # 1 (30 de setembro, 18:32 UTC):
Quando executo find "$tmp_dir" -delete , a desmontagem é bem-sucedida na primeira vez!
Mas o comando find reclama que $tmp_dir está ocupado.

Editar # 2 (30 de setembro, 18:45 UTC):
Com stat notei uma alteração no tamanho da pasta, antes de um após o 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

Editar # 3 (1 de outubro, 11h04 UTC):
Copiei todo o código (arquivo único) para: link (válido por 1 mês)

O umount relevante está no procedimento cleanup , linha 346, que é umount "$DEST_DIR" .

    
por Dor 30.09.2013 / 19:01

1 resposta

2

Eu acredito que o disco precisa de um 'sync' primeiro (para liberar / gravar o cache de disco) antes do umount. Adicione a sincronização após o seu comando 'rm' (alguns sistemas operacionais requerem dois comandos de sincronização) e, em seguida, desmonte. Sua mensagem "ocupada" deve desaparecer.

    
por 30.09.2013 / 20:53