У меня есть папка, /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' должно исчезнуть.