각 파일에는 inode 블록이 있습니다.

각 파일에는 inode 블록이 있습니다.

한 강사가 우리에게 질문을 했습니다.

파일 크기가 54KB이고 블록 크기가 4KB인 경우 inode를 사용하여 EXT4 파일 시스템의 모든 데이터를 수집하는 데 필요한 데이터 블록 수는 얼마입니까?

답: 15

내가 찾을 수 있는 유일한 설명은 54/4 = 13.5입니다. 이는 최대 14개의 데이터 블록으로 반올림되고 1개의 inode 블록을 추가하므로 총 15개의 블록이 됩니다. 나를 혼란스럽게 하는 것은 질문이 inode 블록이 아니라 데이터 블록에 대해 명시적으로 묻는다는 것입니다. 이것은 inode 블록이 데이터 블록과 동일하다는 것을 의미합니까? 어쨌든 그 진술은각 파일에는 inode 블록이 있습니다.예, 이는 EXT4 파일 시스템에만 적용됩니까?

강사님께 설명을 듣지도 못하고 온라인에서도 찾을 수가 없어서 여기에 질문드립니다. 이곳에 문의하는 것이 적절하지 않다면 알려주시기 바랍니다.

귀하의 답변에 미리 감사드립니다.

답변1

특히 그들이 "FS의 모든 데이터"(단지 하나의 파일이 아님)에 대해 이야기하고 "inode 사용"(복수형)을 언급하기 때문에 그들이 무엇을 생각하고 있는지 정확히 아는 것은 어렵습니다(물어보아야 합니다).

그러나 그들이 언급할 수 있는 것 중 하나는 기본 블록 주소 지정입니다. 이는 inode에서 직접 처음 12개 데이터 블록의 주소를 지정한 다음 다음 1024개 데이터 블록의 주소를 포함하기 위해 추가 블록을 할당합니다(일반적으로 4개의 데이터 블록을 가정) kB 파일 시스템 블록 크기). 14개 데이터 블록의 경우 inode 자체 외에 총 15개 데이터 블록에 대해 1개의 간접 블록이 필요합니다.

그러나 AFAIK ext4는 이제 일반적으로 범위 기반 매핑을 사용하므로 이는 약간 오래된 것입니다. 즉, 각 연속 데이터 블록에 대해 하나의 항목만 저장한다는 의미입니다. 즉, 필요한 메타데이터의 양은 파일이 얼마나 조각화되어 있는지에 따라 다르지만 일반적인 경우에는 몇 가지 확장만 필요하고 inode에 직접 저장할 수 있다고 가정합니다.

익스텐트 트리의 루트 노드는 inode.i_block에 저장되어 추가 메타데이터 블록을 사용하지 않고도 처음 4개의 익스텐트를 기록할 수 있습니다.

바라보다"inode.i_block의 내용"wiki.kernel.org의 Ext4 디스크 레이아웃 문서에 있습니다.

답변2

기본적으로 ext4 파일 시스템은 현재 512바이트 inode로 포맷되어 있으므로 각 4KB 블록에는 8개의 inode가 공유됩니다. 그러나 inode는 데이터 블록과 달리 포맷 시 정적으로 할당됩니다.

관련 정보