장치 파일은 파일 자체가 아닙니다. Unix와 같은 운영 체제에서 장치를 사용하기위한 I / O 인터페이스입니다. 디스크에는 공간을 사용하지 않지만 stat
명령에 의해보고 된대로 여전히 inode를 사용합니다 .
$ stat /dev/sda
File: /dev/sda
Size: 0 Blocks: 0 IO Block: 4096 block special file
Device: 6h/6d Inode: 14628 Links: 1 Device type: 8,0
장치 파일 이 파일 시스템에서 물리적 아이 노드를 사용 하고 왜 필요한가?
답변
짧은 대답은 실제 파일 시스템 백업이있는 경우에만 수행된다는 것입니다 /dev
(현대 Linux 배포판을 사용하는 경우에는 그렇지 않습니다).
긴 대답은 다음과 같습니다.
이 모든 것이 모든 것이 파일이라는 원래의 UNIX 철학으로 돌아갑니다. 이 철학은 UNIX를 다용도로 만든 것의 일부입니다. 응용 프로그램에 물리적 코드와 직접 통신하기 위해 응용 프로그램에 특별한 코드가 없어도 사용자 공간의 장치와 직접 상호 작용할 수 있기 때문입니다.
원래 /dev
는 장치 파일을 넣는 잘 알려진 이름의 다른 디렉토리 일뿐입니다. 일부 UNIX 시스템은 여전히이 접근법을 취합니다 (OpenBSD는 여전히 그렇게 생각합니다). 시스템에 실제로없는 장치 (예 : 모든 파일)가 많은 장치 파일이 있기 때문에 일반적으로 시스템이 이와 같은지 알 수 있습니다 가능한 모든 디스크에서 가능한 파티션). 이렇게하면 약간의 디스크 공간을 사용하는 비용으로 부팅시 메모리 공간과 시간을 절약 할 수 있습니다. 이는 초기 메모리와 비교하면 메모리가 매우 제한적이고 빠르지 않기 때문에 초기 시스템과의 균형이 맞습니다. 이것을 일반적으로 static이라고합니다 /dev
.
현대 리눅스 시스템에서 (그리고 FreeBSD와 아마도 최신 버전의 Solaris라고 생각합니다), /dev
커널에 의해 채워지는 임시 메모리 내 파일 시스템입니다. . 이렇게하면 일부 메모리 (일반적으로 몇 MB 미만)와 매우 작은 처리 오버 헤드로 일부 디스크 공간이 절약됩니다. 또한 다른 많은 장점이 있으며, 가장 큰 장점 중 하나는 핫 플러그 된 하드웨어를 쉽게 감지 할 수 있다는 것입니다. 이를 일반적으로 동적이라고합니다 /dev
.
두 경우 모두 디바이스 노드는 일반 VFS 계층을 통해 액세스됩니다. 즉, 정의 상으로는 노드가 존재 stat()
해야하는 가상 노드 일지라도 inode를 가져야한다는 것을 의미 합니다. 이것은 /dev
inode를 메모리에 저장하거나 필요에 따라 생성하기 때문에 동적을 사용하는 시스템에 영향을 미치지 않으며 /dev
inode가 디스크에서 거의 0 공간을 차지하고 대부분의 파일 시스템에 대한 상한이 없기 때문에 정적 위치에 거의 영향을 미치지 않습니다. 그 어느 누구보다 필요할 것입니다.
답변
장치 파일도 권한을 가지며 inode에 저장됩니다.
답변
디렉토리는 단순히 파일 이름에서 inode 로의 매핑이므로 이름이 참조하는 것 (파일, 심볼릭 링크, 장치, FIFO, 소켓)에 관한 모든 것이 inode에 있어야합니다.
장치에 대한 정보는 inode에 저장됩니다. 주 장치 번호와 부 장치 번호가 있으며 권한, 타임 스탬프 등도 있습니다. 일반 파일이 아닌 블록 또는 문자 장치라는 유형 필드가 저장됩니다.
장치의 inode는 단순히 파일의 블록 맵을 포함하는 필드를 사용하지 않습니다.
답변
inode가 없으면 해당 장치에 대한 모든 정보를 담을 파일 이름 만 갖습니다. 이것은 “좋은”장치 이름 /dev/sda
은 의문의 여지가 없다는 것을 의미합니다. 같은 특정 드라이버에 연결될 수있는 이름이 필요합니다 /dev/ohci/sda
.
더욱 중요한 것은 inode에 의존하는 모든 툴 (예 stat
: ls
등)을 경로를 /dev
특수한 방식으로 처리하도록 수정해야한다는 것입니다. 그것은 현재 상황과 비교할 때 명백한 이익이없는 엄청나게 많은 양의 일입니다.