스크립트가 일부 작업을 수행한 후 다음 명령을 사용하여 해당 폴더 내의 모든 항목을 삭제 합니다 /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" 명령 뒤에 sync를 추가한 다음(일부 운영 체제에서는 두 개의 sync 명령이 필요함) 제거합니다. "바쁨" 메시지가 사라져야 합니다.