我其中有一個資料夾/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”命令後添加同步(某些作業系統需要兩個同步命令),然後卸載。您的「忙碌」訊息應該會消失。