장치 파일은 파일 자체가 아닙니다. Unix 계열 운영 체제에서 사용되는 장치의 I/O 인터페이스입니다. 디스크 공간을 사용하지 않지만 다음 명령으로 보고된 inode를 계속 사용합니다 stat
.
$ 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
장치 파일 사용 여부물리적파일 시스템의 inode와 왜 필요한가요?
답변1
간단히 말해서, 백업할 물리적 파일 시스템이 있는 경우에만 작동합니다 /dev
(최신 Linux 배포판을 사용하는 경우 작동하지 않을 수 있음).
긴 대답은 다음과 같습니다.
이 모든 것은 원래 UNIX 철학으로 거슬러 올라갑니다. 모든 것이 파일입니다. 이 아이디어는 UNIX가 다재다능한 이유 중 하나입니다. 애플리케이션에서 특수 코드를 사용하여 물리적 하드웨어와 직접 통신할 필요 없이 사용자 공간에서 직접 장치와 상호 작용할 수 있기 때문입니다.
원래는 /dev
장치 파일이 위치한 잘 알려진 이름을 가진 또 다른 디렉터리였습니다. 일부 UNIX 시스템은 여전히 이 작업을 수행하며(OpenBSD는 여전히 수행한다고 생각합니다) 시스템이 실제로 가지고 있지 않은 많은 장치에 대한 장치 파일을 가지기 때문에 시스템이 이런 방식인지 일반적으로 알 수 있습니다(예: 각 시스템의 파일 ) 디스크의 가능한 모든 파티션에서). 이는 메모리 공간과 부팅 시간을 절약하지만 더 많은 디스크 공간을 사용하는 비용이 듭니다. 이는 일반적으로 메모리가 매우 제한되어 있고 속도가 그리 빠르지 않기 때문에 초기 시스템에 대한 좋은 절충안입니다. 이를 종종 static 이라고 합니다 /dev
.
최신 Linux 시스템(FreeBSD 및 아마도 최신 버전의 Solaris도 있다고 생각합니다)에는 /dev
커널(또는 Systemd를 사용하는 경우 udev)에 의해 채워지는 임시 메모리 파일 시스템이 있습니다. 왜냐하면 거의 모든 작업을 수행하는 커널을 신뢰하지 않기 때문입니다. ). 이렇게 하면 일부 디스크 공간이 절약되지만 일부 메모리(보통 몇 MB 미만)가 소비되고 처리 오버헤드가 거의 발생하지 않습니다. 또한 다른 많은 장점도 있는데, 가장 큰 장점 중 하나는 핫플러그 가능한 하드웨어를 더 쉽게 감지할 수 있다는 점입니다. 이는 흔히 동적이라고 합니다 /dev
.
그러나 두 경우 모두 장치 노드는 일반 VFS 계층을 통해 액세스됩니다. 이는 정의에 따라 실제처럼 작동하려면 inode(방금 존재하는 가상 inode인 경우에도)가 있어야 함을 의미합니다 stat()
. 이는 /dev
단순히 inode를 메모리에 저장하거나 필요에 따라 생성하기 때문에 Dynamic을 사용하는 시스템에는 아무런 영향을 주지 않는 반면, /dev
static은 inode가 거의 0의 디스크 공간을 차지하므로 거의 영향을 미치지 않으며 대부분의 파일 시스템은 이를 제한하지 않거나 더 많은 것을 제공하지 않습니다. 누구에게나 필요한 것보다.
답변2
장치 파일에도 권한이 있으며 이러한 권한은 inode에 저장됩니다.
답변3
디렉토리는 파일 이름에서 inode로의 매핑일 뿐이므로 이름이 참조하는 모든 것(파일, 심볼릭 링크, 장치, FIFO, 소켓)은 inode에 있어야 하며 이를 넣을 다른 장소는 없습니다.
장치에 대한 정보는 inode에 저장됩니다. 권한, 타임스탬프 등과 마찬가지로 주요 및 보조 장치 번호가 있습니다. 유형 필드는 해당 장치에 저장된 일반 파일이 아닌 블록 또는 문자 장치인지 여부를 나타냅니다.
장치의 inode는 파일 블록 매핑이 포함된 필드를 전혀 사용하지 않습니다.
답변4
inode가 없으면 장치에 대한 모든 정보를 담을 수 있는 파일 이름만 갖게 됩니다. 이는 "좋은" 장치 이름이 /dev/sda
불가능하다는 것을 의미합니다. 특정 드라이버와 연결될 수 있는 이름이 필요합니다 /dev/ohci/sda
.
또한 inode에 의존하는 모든 도구(예: stat
등 )를 수정하여 기본 경로를 특별한 방식으로 처리 ls
해야 합니다 . /dev
이는 현재 상황에 비해 뚜렷한 이점이 없는 엄청난 양의 작업이 될 것입니다.