내가 알고있는 가장 정확한 방법은 lstat () 시스템 호출의 출력을 사용하는 것입니다. 구체적으로 st_dev 필드입니다. 이 정보를 보는 데 사용할 수있는 명령 줄 유틸리티 인 stat (1)이 있습니다. 예를 들어, 내 노트북에서 "stat / etc / issue"의 출력은 다음과 같습니다.
File: ‘/etc/issue’
Size: 65 Blocks: 8 IO Block: 4096 regular file
Device: 801h/2049d Inode: 1610916043 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
세 번째 줄인 첫 번째 필드 인 "장치"에 주목하십시오. 여기에 801h가 나열됩니다. 이 값은 8과 1의 두 바이트로 분리 될 수 있습니다. 첫 번째 바이트는 주 번호로, 두 번째 바이트는 부 번호입니다. 다음 단계는 8 번 장치, 1 번 장치가 어떤 장치인지 알아내는 것입니다.
컨설팅 / proc / partitions가 가장 빠릅니다. 제 경우에는 / proc / partitions에 내용이 있습니다 :
major minor #blocks name
8 16 234431064 sdb
8 17 33554432 sdb1
8 18 200875608 sdb2
8 0 500107608 sda
8 1 500106584 sda1
메이저 8, 마이너 1은 sda1이라는 것이 그 결과에서 분명합니다. 이것을 ls -l / dev / sda1로 확인할 수 있습니다
brw-rw---- 1 root disk 8, 1 May 8 05:33 /dev/sda1
날짜 소인 전에 8, 1을 확인하십시오.
/ dev / sda1과 같은 장치 파일 이름은 레이블 일뿐임을 이해하고 기억해야합니다. 주 번호와 부 번호는 장치 파일의 중요하고 중요한 값입니다. 궁금한 점이 있으면 장치 파일을 만드는 데 사용 된 mknod (1) 유틸리티를 확인하십시오. 다음 구문으로 메이저 8, 마이너 18을 사용하여 aardvark라는 새로운 / dev 항목을 만들 수 있습니다.
mknod /dev/aardvark b 8 18
그런 다음 쉽게 마운트 할 수 있습니다.
mount /dev/aardvark /mnt
그리고 mount 명령의 출력이나 / proc / mounts의 내용을 보면 다음과 같습니다.
/dev/aardvark on /mnt type xfs (rw,relatime,attr2,inode64,noquota)
df -h는 다음을 보여줍니다.
/dev/aardvark 192G 154G 38G 81% /mnt
... 어쨌든,이 모든 점은 블록 장치를 식별하기위한 중요한 세부 사항은 장치 파일 레이블이 아니라 주 및 부 번호이며 lstat () 시스템 호출을 사용하는 것이 가장 좋은 방법임을 설명하는 것입니다. 해당 값을 쿼리하십시오.
마지막 의견으로, 나는 당신의 질문에 다시 대답하고 있는지 확인하기 위해 바인드 마운트를 위해 어떤 소스 장치 레이블이 / proc / mounts에 나타날지 묻는 것을 깨달았습니다. 이는 바인드 마운트에 대한 파일 시스템 마운트 포인트 소스에 대한 원래 mount (2) 호출에서 사용 된 것과 동일한 소스 장치 레이블입니다. 아마도 예제가 도움이 될 것입니다.
/ dev / sdb2 및 / dev / aardvark (위와 동일)가 있습니다. 둘 다 메이저 8, 마이너 18입니다. 참고, 동일한 파일 시스템을 두 번 마운트합니다. 나는 다음을한다 :
mkdir /mnt1 /mnt2 /foo
mount /dev/aardvark /mnt1
mount /dev/sdb2 /mnt2
/ mnt1에 디렉토리를 somedir로 만듭니다. 그러나 / mnt1과 / mnt2에는 동일한 파일 시스템이 마운트되어 있기 때문에 / dirnt를 통해 somedir에도 접근 할 수 있습니다.
mkdir /mnt1/somedir
mkdir /foo/left /foo/right
mount -o bind /mnt1/somedir /foo/left
mount -o bind /mnt2/somedir /foo/right
이제 / proc / mounts를 확인하면 다음을 볼 수 있습니다.
/dev/aardvark /mnt1 xfs rw,relatime,attr2,inode64,noquota 0 0
/dev/sdb2 /mnt2 xfs rw,relatime,attr2,inode64,noquota 0 0
/dev/aardvark /foo/left xfs rw,relatime,attr2,inode64,noquota 0 0
/dev/sdb2 /foo/right xfs rw,relatime,attr2,inode64,noquota 0 0
/ foo / ... 바인드 마운트의 소스 장치 레이블은 파일 시스템 mount (2) 호출에서 원래 제공된 값과 동일합니다. 필자의 예제에서 / dev / aardvark와 / dev / sdb2는 동일한 장치입니다.
나는 방금 소설을 타이핑하고 상반기가 실제로 귀하의 질문에 전혀 대답하지는 않는다는 것을 알고 있지만 그것을 삭제하는 것은 낭비처럼 보입니다. 아마도 다른 사람을 도울 것입니다.
행운을 빕니다.
추신 일부 파일 시스템은 NFS 또는 CIFS와 같은 네트워크 기반이거나 가상 또는 procfs 또는 sysfs와 같으며 소스 블록 장치가 없습니다. stat 출력에서 장치로 무엇이 반환 될지 알 수 없으며 가치가 있습니다.
$PWD
(I 장착하고있는 무슨이다)이 심볼릭 링크, 바인드 마운트 등의 시리즈에 묻혀 나는 재귀 적으로 마운트 지점에 대한 경로를 조사해야합니다.