프로세스에 작업 디렉터리나 루트 디렉터리가 있는 경우 파일 시스템을 마운트 해제하거나 다시 마운트할 수 있습니까?

프로세스에 작업 디렉터리나 루트 디렉터리가 있는 경우 파일 시스템을 마운트 해제하거나 다시 마운트할 수 있습니까?

현재 작업 디렉터리나 루트 디렉터리가 마운트된 파일 시스템에 있는 경우 파일 시스템을 마운트 해제/다시 마운트할 수 있습니까?

프로세스에 마운트된 파일 시스템에 읽기/쓰기 파일 설명자 또는 읽기/쓰기/공유 매핑된 파일이 있는 경우 파일 시스템을 읽기 전용으로 다시 마운트할 수 있습니까? 그렇다면 이러한 파일 설명자와 mmap에 쓸 때 어떤 일이 발생합니까?

답변1

프로세스의 작업 디렉터리와 루트 디렉터리는 열린 파일과 마찬가지로 파일 시스템에 대한 활성 참조로 간주됩니다. 따라서 파일 시스템이 마운트 해제되는 것을 방지합니다. 커널이 "사용 중" 오류를 반환합니다.

EBUSY 대상은 사용 중이므로 마운트 해제할 수 없습니다.

--man umount

쓰기 위해 열려 있는 파일이 없으면 파일 시스템을 읽기 전용으로 다시 마운트할 수 있습니다. 프로세스의 작업 디렉터리와 루트 디렉터리는 쓰기 위해 열린 파일로 간주되지 않으며 파일 시스템이 읽기 전용으로 다시 마운트되는 것을 방지하지 않습니다.

EBUSY 소스는 여전히 쓰기용으로 파일을 열어두기 때문에 읽기 전용 모드로 다시 마운트할 수 없습니다.

man mount

또 다른 경우가 있습니다. 적어도 일부 파일 시스템에서는 링크되지 않은 파일이 열린 경우 읽기용이라 할지라도 해당 파일을 읽기 전용으로 다시 마운트할 수 없습니다. 연결되지 않은 파일을 닫으면 공간을 확보할 수 있지만 이를 위해서는 디스크의 파일 시스템 메타데이터 블록을 업데이트해야 할 수도 있습니다.

이 명령 umount -l(사용 umount2(..., MNT_DETACH))은 마운트 트리에서 사용 중인 파일 시스템을 분리할 수 있습니다. 파일 시스템은 활성 상태로 유지됩니다. 마지막으로 열린 파일이 닫히면 닫힙니다. 문서에는 백그라운드에서 닫기가 발생하는지 또는 마지막 close() 호출이 반환된 후 파일 시스템이 완전히 닫히는지를 신뢰할 수 있는지 여부가 나와 있지 않습니다.

관련 정보