저는 Ext4 파일 시스템에서 작업 중이며 128바이트 inode 크기로 인해 혼란스럽습니다. 이는 그것이 저장하는 마지막 메타데이터 값(오프셋 156바이트에 있어야 함)과 충돌하는 것 같습니다.
이것에문서inode 길이가 128바이트라고 나와 있습니다. 마운트되지 않은 /dev/sdb1에서 dumpe2fs를 호출했습니다. dumpe2fs 결과는 inode 크기가 128임을 확인합니다.
그런데 이것 때문에 혼란스러워요문서inode에 저장된 메타데이터를 설명합니다. 각 메타데이터 항목에는 해당하는 물리적 오프셋이 있습니다. 마지막 항목은 프로젝트 ID입니다. 오프셋은 0x9c(정수 156)에 있습니다.
메타데이터 오프셋이 inode의 할당된 크기를 초과하는 것 같습니다. 내가 여기서 무엇을 오해하고 있습니까?
답변1
inode의 길이가 128바이트라고 나와 있습니다.
아니요. 그것은 다음과 같이 말합니다.
[...] 각 인덱스 노드가지다디스크 레코드 크기는 128바이트입니다. ext4부터 파일 시스템의 모든 inode에는 포맷 시 더 큰 디스크 inode가 할당되어 원래 ext2 inode의 끝을 넘어서는 공간을 제공할 수 있습니다. 디스크의 inode 레코드 크기는 슈퍼블록에 기록됩니다
s_inode_size
. struct ext4_inode 원래 128바이트 ext2 inode를 초과하여 사용된 실제 바이트 수는i_extra_isize
각 inode에 대한 필드에 기록됩니다. […] 기본적으로 ext4 inode는 256바이트로 기록되며, (2019년 8월 현재) inode struct는 다음과 같습니다. 160바이트(i_extra_isize = 32
).
귀하의 질문:
마지막 항목은 프로젝트 ID입니다. 오프셋은 0x9c(정수 156)에 있습니다. 메타데이터 오프셋이 inode의 할당된 크기를 초과하는 것 같습니다.
마지막 항목은 156에서 시작하여 4바이트( __le32
)를 차지합니다. 기본 160바이트 이내입니다.
파일 시스템의 inode 크기가 128이라고 표시 되면 dumpe2fs
파일 시스템이 원시 128바이트 ext2 inode를 사용한다는 의미입니다. 없음 i_extra_isize
(오프셋 0x80, 십진수 128에 있음) 또는 범위를 벗어난 항목입니다.