我其中有一个文件夹/tmp
安装为ramfs
.在我的脚本执行一些操作后,我使用以下命令删除所述文件夹内的所有内容:
rm -R -f "$tmp_dir"/{*,.*}
然后,我尝试卸载该目录,但第一次尝试时它不起作用,因为设备正忙。休眠0.5秒后,卸载成功。
我已通过以下命令验证没有进程正在使用该文件夹或该文件夹内的任何内容:
fuser -m "$tmp_dir"
fuser "$tmp_dir"
lsof +d "$tmp_dir"
lsof "$tmp_dir"
为什么设备在第一次尝试时会很忙?
编辑#1(9 月 30 日,18:32 UTC):
当我执行时find "$tmp_dir" -delete
,第一次卸载成功!
但随后find
指挥部抱怨说$tmp_dir
很忙。
编辑#2(9 月 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(UTC 时间 10 月 1 日 11:04):
我已将所有代码(单个文件)复制到:http://pastebin.com/RJP6eQiy(有效期1个月)
相关的umount
是cleanup
程序中的第 #346 行,即umount "$DEST_DIR"
.
答案1
我相信在卸载之前磁盘首先需要“同步”(以刷新/写入磁盘缓存)。在“rm”命令后添加同步(某些操作系统需要两个同步命令),然后卸载。您的“忙碌”消息应该会消失。