관련된:슈퍼블록, 아이노드, 디렉토리 항목 및 파일이란 무엇입니까?
실제 파일 위치 데이터를 보유하는 잘 알려진 메타데이터 구조는 없습니다. Dentry는 파일에 대한 정보를 저장하는 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 문서만큼 완전하지는 않지만.