제거 실패: 장치 사용 중

제거 실패: 장치 사용 중

스크립트가 일부 작업을 수행한 후 다음 명령을 사용하여 해당 폴더 내의 모든 항목을 삭제 합니다 /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입니다 .cleanupumount "$DEST_DIR"

답변1

마운트 해제하기 전에 먼저 디스크를 "동기화"(디스크 캐시 플러시/쓰기)해야 한다고 생각합니다. "rm" 명령 뒤에 sync를 추가한 다음(일부 운영 체제에서는 두 개의 sync 명령이 필요함) 제거합니다. "바쁨" 메시지가 사라져야 합니다.

관련 정보