Tengo una carpeta /tmp
que 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 find
comando se queja de $tmp_dir
estar ocupado.
Edición n.º 2 (30 de septiembre, 18:45 UTC):
Noté stat
un 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 umount
está en el cleanup
procedimiento, 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.