와 연관되다:Superblock, Inode, Dentry 및 파일이란 무엇입니까?
유명한 메타데이터 구조 중 어느 것도 실제 파일의 위치 데이터를 유지하지 않습니다. Dentry는 이름을 inode에 매핑하고 inode는 파일에 대한 정보를 저장합니다. 시스템은 파일의 실제 데이터 비트가 디스크에서 어디에 있는지 어떻게 알 수 있습니까? inode 정수와 디스크 위치의 기본 매핑이 있습니까?
답변1
광범위한 파일 시스템 배열을 고려하면 예외가 존재한다고 확신하지만 전통적으로 inode에는 디스크 블록 번호 배열이 있었습니다.
예를 들어 에서는 /usr/include/linux/ext3_fs.h
의 정의를 볼 수 있습니다 struct ext3_inode
.
그 안에 struct ext3_inode
회원이 보입니다.i_block[EXT3_N_BLOCKS];/* Pointers to blocks */
파일 시스템마다 어떤 디스크 블록이 inode(파일의 데이터를 나타내는 디스크 상의 데이터 구조)에 속하는지 추적하는 방법이 다릅니다. 일부에는 블록 번호 배열이 있고 일부에는 런 또는 범위 배열이 있으며 개수와 연속 블록 실행의 시작 블록 번호가 있습니다. Berkeley FFS inode에는 블록 번호 배열과 블록 번호 배열이 있으며, 각 블록에는 데이터 블록 번호가 포함되어 있고 블록 번호에는 데이터 블록 번호가 포함된 블록 번호가 포함되어 있습니다.
"로그 구조 파일 시스템"의 경우 모든 것이 조금 더 이상해집니다. 그러나 이는 규칙이 아니라 예외입니다.
답변2
커널 소스(또는 커널 문서 패키지 또는 웹)를 보면 문서/파일 시스템을 보면 파일 시스템에 따라 다릅니다.
예를 들어, ext2를 사용하면 슈퍼블록에 저장된 정보를 사용하여 파티션의 특정 오프셋으로 inode 번호를 변환할 수 있습니다. 이는 ext2가 mkfs 시간에 고정된 수의 inode를 할당하는 이유 중 하나이며 이를 읽습니다. inode에는 실제 파일 데이터가 저장되는 위치를 알려주는 12개의 포인터를 포함하여 많은 메타데이터가 포함되어 있습니다. 12개 이상의 조각이 있는 경우 간접 블록(더 많이 저장함)에 대한 포인터가 있습니다. 간접 블록은 연결될 수 있습니다(각 블록에는 다음 간접 블록에 대한 포인터가 있음).
슈퍼블록은 파티션 시작 부분에서 고정된 오프셋에 저장되므로 쉽게 찾을 수 있습니다. (mkfs는 백업 슈퍼블록도 생성합니다)
당신은 다음에 관심이있을 수 있습니다btrfs 온디스크 형식, 심지어는영화, 해당 문서는 ext2 문서보다 덜 완전합니다.