많은 사람들이 Linux는 바인드 마운트에 대한 정보를 보관하지 않으므로 바인드 마운트 목록과 출처를 얻을 수 있는 방법이 없다고 말합니다. 여기 몇 가지 예가 있어요.
~에서여기 댓글 중 하나:
IIRC 이 정보는 어디에도 저장되지 않습니다. 결국
mount --bind
두 사본은 모두 동일하며 어느 누구도 다른 사본보다 더 "원본"이 아닙니다. 결국 제거한 경우 원본을 가질 수 없습니다/mnt
.~에서이 사이트의 답변:
따라서 어떤 마운트가 바인드 마운트인지 기억하는 유일한 방법은 에 머무르는 것입니다
/etc/mtab
. 바인드 마운트 작업은 바인드 마운트 옵션으로 표시됩니다(이렇게 하면 파일 시스템 유형이 무시됩니다). 그러나 마운트에는 특정 옵션 세트로 마운트된 파일 시스템만 나열하는 옵션이 없습니다.~에서데비안 버그 보고:
이는 의도적인 것입니다. 두 마운트 지점은 모든 측면에서 완전히 동일하므로 커널은 이를 구별하기 위한 플래그를 유지하지 않습니다.
위의 내용은 모두 말도 안되는 내용이지만. 이 도구는 findmnt
바인드 마운트에 대한 소스 경로를 나열할 수 있습니다 device[source-path]
(오직장치 대신 소스 경로). Linux 커널이 바인드 마운트를 유지하려면 이 정보를 저장해야 합니다.어딘가에/home
그렇지 않으면 그것이 무엇인지 알 수 없습니다 /users
. 그럼 이 데이터는 어디에 있나요? RAM의 모호한 영역에 저장되어 있습니까? findmnt
어딘가에서 그것을 찾고 계십니까 /proc
?
답변1
두 개의 마운트 지점을 약간 오해했습니다.동일한권한, 플래그 등의 측면에서 바인딩은 액세스를 한 경로에서 다른 경로로 효과적으로 리디렉션하기 때문입니다. 하지만 그들은 아직도분명히.
살펴보면 /proc/self/mountinfo
프로세스의 마운트 세계에 대한 커널 보기를 볼 수 있습니다(네임스페이스는 상황을 더 복잡하게 만듭니다.하나설치 테이블 보기).
man 5 proc
파일 형식이 설명되지만 트리 계층 구조와 번들 마운트의 "상위" 위치를 볼 수 있습니다. 이것은 구문 분석된 파일입니다 findmnt
.
답변2
Linux는 다음 정보를 유지하지 않습니다.바인드 마운트는 어떤 마운트인가요?. 다음에 대한 정보를 유지합니다.고정 마운트를 포함한 모든 마운트.
이는 하드 링크와 매우 유사합니다. 파일 이름이 inode에 연결되는 것처럼 마운트는 파일 시스템에 연결됩니다. 유일한 차이점은 마운트에도 마운트 지점별 플래그가 있고 파일 시스템 루트가 아닌 대상 파일 시스템의 하위 디렉터리를 참조할 수 있다는 것입니다.
하드 링크를 생성할 때 파일 시스템은 어떤 파일 이름이 원본 파일 이름이고 어떤 파일 이름이 하드 링크인지 저장하지 않습니다. 둘 다 동일한 인덱스 노드를 참조합니다. 원본 파일의 연결을 해제하면 두 번째 파일 이름으로 직접 파일을 생성하는 것과 상황이 다르지 않습니다.
바인드 마운트로 돌아가서: 커널은 파일 시스템(주요:부 쌍으로 식별됨), 마운트 지점, 파일 시스템 루트에 대한 상대 경로 및 일부 플래그를 포함하는 테이블을 유지합니다. 을 보면 이 목록에 액세스할 수 있습니다 /proc/self/mountinfo
. (@stephen-harris가 언급한 것처럼 네임스페이스가 관련되면 상황이 더 복잡해집니다.) findmnt
이 목록을 분석해 보세요.
루트가 /dev/sda1
major:minor 8:1
이고 실행에 mount --bind /a /b
/proc/self/mountinfo
다음과 같은 줄이 포함되는 경우:
1 0 8:1 / / rw - ext4 /dev/sda1 rw,errors=remount-ro
2 1 8:1 /a /b rw - ext4 /dev/sda1 rw,errors=remount-ro
major:minor를 사용 /home
하고 실행하면 다음과 같습니다./dev/sda2
8:2
mount --bind /home /users
1 0 8:1 / / rw - ext4 /dev/sda1 rw,errors=remount-ro
2 1 8:2 / /home rw - ext4 /dev/sda2 rw
3 1 8:2 / /users rw - ext4 /dev/sda2 rw
귀하의 질문과 관련된 열은 세 번째, 네 번째, 다섯 번째 열입니다. 이는 파일 시스템 ID입니다(진짜파일 시스템 tmpfs와 같은 가상 파일 시스템의 경우 장치 major:minor와 동일합니다.카운터]), 마운트 지점에 바인딩된 파일 시스템의 루트에 대한 상대 경로(일반적으로/일반 마운트의 경우 바인드 마운트의 경우 무엇이든 가능) 및 마운트 지점입니다.
나머지 열의 의미는 다음을 참조하세요.리눅스 커널 문서.
findmnt
소스 경로는 파일 시스템 루트 "FSROOT"를 기준으로 합니다. 이것을 이용 findmnt -o TARGET,FSROOT
해서 얻을 수 있습니다. 절대 소스 경로를 원한다면 /proc/self/mountinfo
이를 직접 구문 분석하고 동일한 파일 시스템에 대한 마운트 정보와 결합해야 할 수도 있습니다.
자세한 내용은 다음을 참조하세요."번들 마운트만 나열"에 대한 나의 대답.