파일 시스템과 저장 매체에 대해 읽고 있는데 블록 크기 파일을 만들 때 더 큰 파일보다 작은 inode를 가질 수 없는 이유를 이해할 수 없습니다. 운영 체제가 파일 크기에 따라 inode 크기를 동적으로 선택할 수 없습니까?
답변1
inode가 고정된 크기인 한 가지 이유는 전통적인 Unix 파일 시스템 형식(예: 여전히 매우 유사한 ext4)에서 inode가기본적으로 단일 테이블에 저장됨. 고정 크기 항목의 경우 색인 번호를 기준으로 항목을 찾는 것은 간단합니다. 다른 데이터 구조를 사용하려면 더 많은 작업이 필요하며, 더 중요한 것은 데이터 구조에서 더 많은 랜덤 액세스 읽기가 필요하다는 것입니다.
파일 자체의 크기는 일반적으로 처음 몇 개의 데이터 블록이 저장되는 inode 자체에 영향을 주지 않습니다. 더 긴 파일의 경우 시스템은 나머지 위치를 보관하기 위해 추가 블록(간접 블록)을 할당합니다. (보다위키피디아 페이지좋은 사진을 위해. )
예를 들어 ext4는 실제로 다르게 작동하고 심볼릭 링크의 내용을 inode 자체에 저장할 수 있기 때문에 "전통적"이라고 말합니다(보통 짧기 때문에 전체 블록을 할당하지 않는 것이 유용함).범위 트리즉, 여러 블록에 걸쳐 있습니다.
내가 아는 한, ext4에서 최소 크기보다 큰 inode를 지원하는 이유는 새 필드를 저장하고 확장 속성에 추가 공간을 사용할 수 있도록 하기 위한 것입니다. 첫 번째 링크의 테이블을 보면 ext4 inode의 원래 128바이트 위의 추가 필드는 주로 더 높은 정밀도의 타임스탬프를 저장합니다. SELinux 시스템에서 보안 레이블은 확장된 속성으로 구현되므로 이를 inode에 직접 저장할 수 있으면 유용할 수 있습니다.
최신 파일 시스템(예: btrfs, XFS 및 ZFS)은 정통 형식이 덜하고 작업을 다르게 수행할 수 있으며 BSD 시스템에서 사용되는 파일 시스템에 대해 잘 모릅니다.
답변2
inode 자체는 데이터가 아닌 파일 메타데이터를 보유합니다. 그러므로 크기가 작든 크든 상관이 없습니다. 또한 일반 파일 외에도 inode도 있습니다. 예를 들어 명명된 파이프의 경우 데이터가 전혀 없습니다.
즉, inode의 정확한 형식과 크기는 파일 시스템에 따라 다르며 파일 시스템 디자이너가 원하는 모든 종류의 동작을 가질 수 있습니다. Linux/Unix 시스템의 경우 파일 시스템은 inode에서 최소한의 정보 세트를 제공할 수 있어야 하지만 파일 시스템은 내부적으로 디스크와 메모리에 더 많은 정보를 저장할 수 있습니다.