2012-01-03 3 views
4

주어진 경로가 바인드 마운트 포인트 (Linux에서)인지 확인하는 방법을 찾고 있습니다. 정기적 인 마운트 지점을 탐지하는 표준 기술은 작동하지 않는 것 같습니다. 심지어 mountpoint 명령은 바인드 마운트를 감지하지 못합니다.리눅스에서 바인드 마운트를 감지했습니다.

+0

정말 그런 질문을하는 이유를 이해하고 싶습니다. –

+0

나는 그것이 내가 필요하다고 생각한 것으로서 시작했고, 이제는 "나는 단지 알고있다"는 이상으로 발전했다. 원래의 이유는 내가 포괄적 인 파일 시스템 워커/스캐너를 작성했기 때문입니다. – Shamless

+0

그런 다음 이미 방문한 inode를 기억해보십시오. –

답변

6

바인드 마운트가 마운트 공간에서 일종의 "하드 링크"(파일 계층 구조가 아님) 때문에 이해할 수 없습니다 (어쩌면 /etc/mtab 또는 /etc/fstab 제외).), 소스 마운트 지점과 목표 마운트 지점을 구별 할 수있는 방법은 없습니다 (일단 바인드 마운트가 발생하면).

왜 그런 질문을합니까? 바인드 마운트 (IMHO)보기의 응용 프로그램의 관점에서 그런 일이

그리고 mountpoint (그렇지 않으면 당신은 그들이 디렉토리에 대한 possible-있는 드문 경우에 심볼릭 링크 - 또는 심지어 하드 링크를 사용하는 것) 숨기기에 주로 유용하는

% grep /home /etc/fstab 
UUID=000008-0003-000c-9ecd-0f1a /home   ext3 defaults  0  2 
% grep /usr/src /etc/fstab 
/home/Src /usr/src none bind 0 0 
% mountpoint /usr/src 
/usr/src is a mountpoint 
% mountpoint /home/Src 
/home/Src is not a mountpoint 

stracemountpoint을 -ing으로 내가 찾아 그것을 /usr/src &같은 디렉토리에 lstat, statfstat 콜을하고 있음 : 귀하의 질문에 뭔가를 볼 것에 그냥 감사를 발견3210


(11 월 (2016) :

/proc/mounts 예를 들어, 참조 추가 난 당신이 원하는 일에 대해 매우 명확하지 않다 proc(5)nftw(3)

+3

마운트 포인트가 사용하는 기술은 l/stat path와 path/..를 찾은 다음 다른 장치 ID 나 동일한 inode를 찾는 것입니다. fstat 호출에 대해서는 확실하지 않지만 마운트 포인트 검사와 직접 관련이 없을 수도 있습니다. '이유'에 관해서. 당신은 그들이 사용되는 것에 대해 좋은 지적을하고 있으며 일반 장치와 동일한 장치 내에서 링크 마운트를 고려하기로 결정했습니다. 그것이 말하게되면서, 나는 사람이 그들을 발견하는 방법에 관해서 아직도 흥미있다. 현재 내가 찾은 최선의 방법은/proc/mounts 및/etc/mtab을 검사하여 정보를 얻는 것입니다. – Shamless

-3
$ mount | grep bind 

,이 명령은 사용자의 필요에 맞게입니까?

+1

이것은 작동하지 않습니다. –

0

경로의 장치 ID와 부모의 장치 ID를 검사하여 경로가 마운트 지점인지 여부를 감지 할 수 있습니다 (마운트 된 파일 시스템이 상위 디렉토리의 장치 ID와 다른 경우). 디렉토리 자체에!). 그 중 하나는 바인드 마운트입니다

$ cut -d ' ' -f2 /proc/mounts | xargs stat -c '%d %n' 
18 /sys 
4 /proc 
6 /dev 
19 /dev/pts 
20 /run 
2049/
7 /sys/kernel/security 
21 /dev/shm 
22 /run/lock 
23 /sys/fs/cgroup 
24 /sys/fs/cgroup/unified 
25 /sys/fs/cgroup/systemd 
26 /sys/fs/pstore 
27 /sys/fs/cgroup/perf_event 
28 /sys/fs/cgroup/cpu,cpuacct 
29 /sys/fs/cgroup/pids 
30 /sys/fs/cgroup/blkio 
31 /sys/fs/cgroup/memory 
32 /sys/fs/cgroup/cpuset 
33 /sys/fs/cgroup/net_cls,net_prio 
34 /sys/fs/cgroup/devices 
35 /sys/fs/cgroup/freezer 
39 /proc/sys/fs/binfmt_misc 
17 /dev/mqueue 
8 /sys/kernel/debug 
37 /dev/hugepages 
2066 /home 
39 /proc/sys/fs/binfmt_misc 
44 /run/user/1000 
45 /sys/fs/fuse/connections 
2049 /run/schroot/mount/my-chroot-cb43935e-0812-45ea-af4f-965a1e2de91d 
4 /run/schroot/mount/my-chroot-cb43935e-0812-45ea-af4f-965a1e2de91d/proc 
18 /run/schroot/mount/my-chroot-cb43935e-0812-45ea-af4f-965a1e2de91d/sys 
6 /run/schroot/mount/my-chroot-cb43935e-0812-45ea-af4f-965a1e2de91d/dev 
19 /run/schroot/mount/my-chroot-cb43935e-0812-45ea-af4f-965a1e2de91d/dev/pts 
2066 /run/schroot/mount/my-chroot-cb43935e-0812-45ea-af4f-965a1e2de91d/home 
2049 /run/schroot/mount/my-chroot-cb43935e-0812-45ea-af4f-965a1e2de91d/tmp 

당신이 장치 ID가 /proc/mounts에서 여러 항목에 commont 경우 그 다음, 마운트 지점 알고 후에는 가정 할 수 있습니다 : 여기

빠른 명령 줄 데모입니다 . 어느 쪽이 묶는 지 그리고 묶여있는 지 알아내는 것은 아직도이 대답에서 누락 된 부분입니다.

+0

'stat'에서 장치 번호가 아닌 inode 번호를 왜 나열합니까? –

+0

@Steve - 음,'-f' 인수가 필요한 것을보기에 충분히주의 깊게 맨 페이지를 읽지 않았기 때문에. 나는 바보 야. –

관련 문제