마운트 지점이 아닌 경우에만 디렉토리를 삭제하는 것이 안전합니다.

마운트 지점이 아닌 경우에만 디렉토리를 삭제하는 것이 안전합니다.

안타깝게도 네트워크 볼륨의 자동 마운트 및 마운트 해제를 매우 제대로 처리하지 못하는 소프트웨어를 사용해야 했습니다. 마운트 지점이 있는 디렉터리를 그대로 두는 경향이 있지만 나중에 볼륨을 다시 마운트하면 이 상황을 처리할 수 없습니다. 정확하게는 (그렇습니다~해야 한다정리하지만 정리하지 않는 경우가 많습니다).

물론 개발자에게 수정을 요청하겠지만 그동안 마운트 지점을 정리하기 위해 직접 뭔가를 해야 합니다.

따라서 본질적으로 제가 해야 할 일은 해당 디렉토리를 삭제하는 것입니다.아니요현재는 마운트 지점입니다(실수로 볼륨 내용을 삭제하고 싶지 않기 때문에).

이제 디렉터리의 장치 ID를 쉽게 가져와 이를 루트의 장치 ID와 비교할 수 있지만 이러한 비교를 사용하면 경쟁 조건이 발생할 수 있습니다. 즉, 장치 ID를 확인하고 Telephone 을 누르는 사이에 볼륨이 마운트된 경우입니다 rm -r /mnt/point.

find다른 옵션이 있나요? command options 의 사용 가능성에 관심이 있지만 대상과 해당 내용이 동일한 장치이기 -xdev때문에 실제로 비교 지점을 제공하는 방법을 잘 모르겠습니다 find /mnt/point -xdev. 그래서 작동하지 않습니다.

또한 rmdir나머지 폴더가 항상 비어 있다는 가정을 사용하는 것은 신뢰할 수 없는 것처럼 보입니다. 예를 들어 macOS는 마운트 지점 내부에 파일이 있을 수 있기 때문입니다 .autodiskmounted. 내가할 수 있다그러한 상황의 목록을 작성하고 가능하다면 이를 처리하여 향후 참조를 위한 보다 일반적인 솔루션을 확보하는 것이 좋을 것입니다(그리고 다른 사람들에게도 유용할 수 있기를 바랍니다).

답변1

디렉터리가 탑재 지점이면 사용 중이므로 이름을 바꿀 수 없습니다.

$ sudo mv /mnt /mnt.old
mv: cannot move '/mnt' to '/mnt.old': Device or resource busy

일반 디렉토리라면 이름을 바꿀 수 있어야 합니다.

$ sudo mv /mnt /mnt.old

이동이 성공하면 마운트 디렉터리를 다시 생성하고 이름이 바뀐 디렉터리를 삭제합니다. 또는 이름이 바뀐 디렉토리가 삭제하기 전에 예상하는 파일 시스템의 일부인지 확인할 수 있습니다.

답변2

리눅스를 사용하는 경우

다음 명령을 사용하여 디렉터리가 마운트 지점인지 테스트할 수 있습니다.mountpoint.

테스트 사이에 마운트 지점이 나타나거나 사라지는 것을 방지하려면 rm -r별도의 디렉터리에서 스크립트를 실행해야 합니다.마운트 네임스페이스그리고비공개 하위 트리(마운트는 새 네임스페이스에서 /로 전파되지 않습니다.) 이는 다음을 통해 수행할 수 있습니다.unshare.

unshare -m --propagation private -- "<delete script>"

모든 것이 동일한 스크립트에 있습니다.

#!/bin/sh

unshare -m --propagation private -- sh -e <<EOF

if ! mountpoint -q "<path>"; then
    rm -r "<path>"
fi

EOF

답변3

rmdir비어 있지 않은 디렉터리나 탑재 지점 디렉터리는 사용할 수 없습니다 . 따라서 이것은 귀하의 요구 사항을 충족합니다.

rm -f mountpoint/.autodiskmounted    # MacOS cookie
rmdir mountpoint 2>/dev/null

스크립트에서 실행하는 경우오류 발생 시 종료설정이 완료되면 사용할 수 있습니다 rmdir ... || true. ( --ignore-fail-on-non-empty마운트 지점을 삭제하려고 할 때 잡히지 않는 오류가 발생하므로 이는 거의 쓸모가 없습니다.)

Mac 시스템에 대한 액세스 권한이 없기 때문에 .autodiskmounted파일 시스템이 실제로 마운트될 때 파일이 존재하는지 또는 파일 시스템이 마운트 해제될 때 자리 표시자인지 테스트할 수 없다는 점을 지적해야 합니다.

관련 정보