디렉토리가 마운트 지점인지 확인하세요.

디렉토리가 마운트 지점인지 확인하세요.

저는 Python을 사용하여 Unix 설치 볼륨에서 파일을 검색한 다음 해당 파일의 존재 여부에 따라 데이터베이스에서 파일 이름을 추가하거나 지웁니다. 스캔 중인 볼륨이 어떤 이유로 마운트 해제되면 스캔에서는 해당 볼륨의 모든 파일 이름을 지워야 한다고 가정한다는 사실을 방금 깨달았습니다! 이런. 볼륨을 마운트하는 더 좋은 방법이나 제안 사항이 있습니까?

내가 생각할 수 있는 유일한 방법은 검사하기 전에 검사된 각 볼륨에 영구 더미 파일을 넣어서 더미 파일을 찾을 수 있는 경우에만 볼륨이 검사되도록 하는 것입니다.

답변1

이를 사용하여 mountpoint특정 디렉터리가 마운트 지점인지 확인할 수 있습니다. 예

mountpoint /mnt/foo; printf "$?\n"
/dev/foo is a mountpoint
0

mountpoint /mnt/bar; printf "$?\n"
/dev/bar is not a mountpoint
1

반환 값에서 알 수 있듯이 이는 if스크립트 문 내에서 쉽게 사용할 수 있습니다.

답변2

st_dev고전적인 대답은 필드가 반환된 경우 디렉터리가 마운트 지점이라는 것입니다.stat상위 또는 루트 디렉터리의 값과 다릅니다. 이는 대부분의 도구( find -xdev, rsync -x, du -x, …) 에서 사용되는 표준입니다 . 이것은 다음과 같다os.path.ismountPython의 함수.

이 접근 방식은 파일 시스템이 배열되는 여러 가지 복잡한 방식으로 인해 거짓 긍정과 거짓 부정이 모두 발생합니다. 예를 들어 Linux에서는 다음을 수행할 수 있습니다.바인드 마운트(의 일부) 하위 디렉토리에 있는 파일 시스템, 상위 디렉토리가 동일한 파일 시스템에 있는 마운트 지점을 생성합니다. 반대로 하위 볼륨(적어도 btrfs)이 있는 일부 파일 시스템은 st_dev각 하위 볼륨에 서로 다른 값을 제공하지만 하위 볼륨 루트는 마운트 지점이 아닙니다. 네트워크 파일 시스템은 클라이언트가 동일한 서버 디렉터리를 다른 경로에 탑재할 수 있고 가능하면 다른 내보내기를 통해 마운트할 수 있으므로 오탐 및 오탐이 발생할 수 있습니다.

디렉토리가 비어 있다고 해서 다른 때 마운트 지점이라는 의미는 아니기 때문에 이것은 직접적인 도움이 되지 않습니다. 마운트 지점을 감지하려면 인덱스 타임에 이를 수행해야 합니다. 별도의 인덱스에 별도의 마운트 지점을 유지하고 루트가 존재하고 비어 있지 않은 인덱스만 업데이트할 수 있습니다. 공통 파일 시스템이 마운트되지 않은 경우에도 다른 파일 시스템이 마운트되었거나 단순히 디렉토리에 파일이 있기 때문에 마운트 지점인 디렉토리가 비어 있지 않을 수 있습니다(디렉토리의 파일은 숨겨진) 해당 디렉토리는 마운트 지점입니다).

관련 정보