Error de desmontaje: dispositivo ocupado

Error de desmontaje: dispositivo ocupado

Tengo una carpeta /tmpque está montada como ramfs. Después de alguna acción que realiza mi script, elimino todo lo que hay dentro de dicha carpeta con el comando:

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

Luego intento desmontar el directorio, pero en el primer intento no funciona porque el dispositivo está ocupado. Después de dormir durante 0,5 segundos, el desmontaje se realiza correctamente.

He verificado que ningún proceso está usando la carpeta ni nada dentro de esa carpeta con ninguno de los siguientes comandos:

fuser -m "$tmp_dir"
fuser "$tmp_dir"
lsof +d "$tmp_dir"
lsof "$tmp_dir"

¿Por qué el dispositivo estaría ocupado en el primer intento?


Edición n.º 1 (30 de septiembre, 18:32 UTC):
Cuando ejecuto find "$tmp_dir" -delete, ¡el desmontaje se realiza correctamente la primera vez!
Pero luego el findcomando se queja de $tmp_direstar ocupado.


Edición n.º 2 (30 de septiembre, 18:45 UTC):
Noté statun cambio en el tamaño de la carpeta, antes y después del éxito en el desmontaje:

$ 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

Edición n.º 3 (1 de octubre, 11:04 UTC):
Copié todo el código (un solo archivo) a:http://pastebin.com/RJP6eQiy(Válido por 1 mes)

Lo relevante umountestá en el cleanupprocedimiento, línea #346, es decir umount "$DEST_DIR".

Respuesta1

Creo que el disco necesita una "sincronización" primero (para vaciar/escribir la caché del disco) antes de desmontarlo. Agregue sincronización después de su comando 'rm' (algunos sistemas operativos requieren dos comandos de sincronización) y luego desmonte. Su mensaje de "ocupado" debería desaparecer.

información relacionada