umount не удалось: устройство занято

umount не удалось: устройство занято

У меня есть папка, /tmpкоторая смонтирована как ramfs. После некоторых действий, которые выполняет мой скрипт, я удаляю все внутри указанной папки с помощью команды:

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

Затем я пытаюсь размонтировать каталог, но с первой попытки это не срабатывает, потому что устройство занято. После сна в течение 0,5 сек размонтирование проходит успешно.

Я проверил, что ни один процесс не использует папку или что-либо внутри нее, с помощью любой из следующих команд:

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

Почему устройство оказалось занятым при первой попытке?


Редактирование №1 (30 сентября, 18:32 UTC):
Когда я запускаю find "$tmp_dir" -delete, размонтирование проходит успешно с первого раза!
Но затем findкоманда жалуется на $tmp_dirзанятость.


Редактирование №2 (30 сентября, 18:45 UTC):
Я statзаметил изменение размера папки до и после успешного размонтирования:

$ 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

Редактирование №3 (1 октября, 11:04 UTC):
Я скопировал весь код (одним файлом) в:http://pastebin.com/RJP6eQiy(Действителен в течение 1 месяца)

Соответствующее umountнаходится в cleanupпроцедуре, строка № 346, то есть umount "$DEST_DIR".

решение1

Я считаю, что диску сначала нужна 'sync' (чтобы очистить/записать кэш диска) перед размонтированием. Добавьте sync после команды 'rm' (некоторые ОС требуют двух команд синхронизации), а затем размонтирование. Ваше сообщение 'busy' должно исчезнуть.

Связанный контент