전체 파일 시스템에 대해 하나의 inode 테이블이 있습니까, 아니면 각 블록 그룹에 대해 하나가 있습니까?

전체 파일 시스템에 대해 하나의 inode 테이블이 있습니까, 아니면 각 블록 그룹에 대해 하나가 있습니까?

다음 이미지는 "실린더 그룹"(요즘은 일반적으로 블록 그룹이라고 하는 것 같습니다)의 레이아웃을 보여주며, 각 블록 그룹에는 자체 inode 테이블이 있음을 설명하는 것 같습니다.

실린더 그룹

그러나 이 책은리눅스 프로그래밍 인터페이스inode 테이블에 대해서는 다음과 같은 말이 있습니다.

파일 시스템의 inode 테이블에는 파일 시스템에 있는 각 파일에 대한 inode(인덱스 노드의 약어)가 포함되어 있습니다.

이는 각 블록 그룹마다 하나가 아닌 전체 파일 시스템에 대해 하나의 inode 테이블이 있음을 의미합니다.

거기에도 있습니다:

  • 전체 파일 시스템에 대한 inode 테이블
  • 해당 그룹의 inode만 추적하는 블록 그룹당 inode 테이블이 있습니다.
  • 전체 파일 시스템의 inode 테이블을 그룹에 백업합니다. (슈퍼 블록을 그룹 전체에 백업하는 것과 유사)
  • 다른 건 없어?

ext2/3과 ext4 사이에 내용이 약간 섞여 있을 수 있지만 온라인에서 읽은 내용에서 다루는 내용이 항상 명확하지는 않습니다.

감사해요.

답변1

이제 정식 ext4 문서를 사용할 수 있습니다커널 문서의 일부. 이를 참고하여 귀하의 질문에 대한 답변은 선택 2입니다.

해당 그룹의 inode만 추적하는 블록 그룹당 inode 테이블이 있습니다.

인덱스 노드 테이블 자체가 설명되어 있습니다.인덱스 노드 설명에서:

inode 테이블은 선형 배열입니다 struct ext4_inode. 테이블의 크기는 최소 sb.s_inode_size * sb.s_inodes_per_group바이트를 저장할 수 있을 만큼 충분한 블록이어야 합니다. 아이노드가 포함된 블록 그룹의 수는 로 계산할 수 있으며 (inode_number - 1) / sb.s_inodes_per_group, 그룹 테이블의 오프셋은 이다 (inode_number - 1) % sb.s_inodes_per_group. 인덱스 노드 0이 없습니다.

이는 각 inode 테이블이 해당 그룹의 inode를 설명함을 확인합니다.

블록 그룹의 전체 레이아웃은 다음과 같습니다.레이아웃 섹션. 이는 다이어그램과 일치하지만 예상대로 실제로 여러 블록 그룹이 있을 수 있으며 각 블록 그룹은 해당 내용(전체 ​​파일 시스템의 내용이 아닌)을 설명하는 자체 데이터 구조를 갖습니다.

ext4에는 추가적인 특징이 있습니다.유연한 블록 그룹. 이 기능이 활성화되면 여러 블록 그룹을 하나로 결합할 수 있으며 해당 inode 테이블은 모두 첫 번째 블록 그룹에 저장됩니다. 이는 블록 그룹의 inode 테이블(및 기타 데이터 구조)에 대한 포인터가 블록 그룹 외부를 가리킬 수 있음을 의미합니다.

관련 정보