이름이 지정되지 않은 / 장치가 아닌 마운트 (주 번호 0)에 부 장치 번호는 어떻게 할당됩니까?

genericuser99

나는 일반적으로 전체 주 / 부 장치 번호가 주어진 장치에 대해 어떻게 작동하는지 (하지만 여기에서 벗어나면 수정하십시오) 주 장치 번호가 본질적으로 장치 클래스와 어떻게 관련되는지 (블록 장치가 될 수 있음) 또는 문자 장치 / 특수 문자), 부 번호는 해당 장치의 특정 유형과 관련됩니다. 이 숫자를 통해 커널은 해당 장치와 상호 작용하는 데 사용해야하는 장치 드라이버를 확인할 수 있습니다. 파일 시스템 수준에서 장치 번호는 inode stat 구조체 내에 저장되므로 파일을 사용자로 stat하면 장치 ID를 2 바이트 값으로 반환합니다. 여기서 상위 및 하위 바이트는 주요 및 각각 소수. stat 구조체에는 st_dev 및 st_rdev 형식으로 장치 ID를 지정하는 2 개의 멤버가 있습니다.

그러나 파일이 비 디바이스 마운트, 문자 특수 등의 경우 st_dev의 주 번호가 0으로 설정되고 부 번호가 무언가 로 설정 되고 대신 st_rdev가 채워질 수도 있고 채워지지 않을 수도 있습니다. 장치 유형 (각 파일 시스템이이를 구현하는지 여부에 따라 다름) 그래서 내 질문은 이 경우 부 장치 번호를 채우는 것은 무엇 이며 사용할 값을 어떻게 알 수 있습니까 / 왜 값을 사용합니까?

예 :

stat /etc/passwd
=> 장치 : 801h, "장치 유형"이 설정되지 않음-예상되는 주 번호 8은 SCSI 장치와 관련되고 부 번호 1은이 파일의 첫 번째 파티션 (sda1)과 관련됩니다.

stat /dev/sda1
=> 장치 : 6h, 장치 유형 : 8,1-여기서 장치 (st_dev)의 주 번호는 0 (예상)이고 부 번호는 6입니다. 왜 6입니까?

stat /dev/null -다시 말하지만 6의 부 버전

stat /proc/version -4의 부 버전

내가 무엇을 놓치고 있습니까?

나는 여기서 구조체를 참조하고 있다는 사실을 알고 있으며이 질문은 스택 오버플로에 배치하는 것이 더 나을 수 있지만 명시 적으로 개발자 질문이 아닌 저수준 Linux 질문 인 것처럼 느껴집니다.

일 카츄

내 시스템에, /proc이다 6h, 그리고 /dev이다 5h.

빠른 테스트 :

# for x in a b c d e f g h i j; do mkdir $x; mount -t tmpfs tmpfs $x; done
# stat */.

번호를주었습니다 33h3dh35h(그것에서 사용 된 중간에서 누락 /run/user/1000/gvfs). 마운트 시간에 사용되는 첫 번째 여유 번호가있는 동적 할당처럼 보입니다.

숫자는 재사용되므로 최소한이 경우 st_dev특정 경로의 파일 시스템이 변경되었는지 감지 하는 안정적으로 사용할 수 없습니다 .

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관