/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(10월 1일, 11:04 UTC):
모든 코드(단일 파일)를 다음 위치에 복사했습니다.http://pastebin.com/RJP6eQiy(1개월간 유효)
관련 내용은 절차의 #346행, 즉 에 umount
있습니다 .cleanup
umount "$DEST_DIR"
답변1
마운트 해제 전에 디스크에 먼저 (디스크 캐시를 플러시/쓰기 위해) '동기화'가 필요하다고 생각합니다. 'rm' 명령 뒤에 동기화를 추가한 다음(일부 OS에서는 두 개의 동기화 명령이 필요함) 마운트를 해제하세요. '바쁨' 메시지가 사라져야 합니다.