디렉토리의 inode가 ext4 파일 시스템에 파일 이름을 저장하는 이유는 무엇입니까?

디렉토리의 inode가 ext4 파일 시스템에 파일 이름을 저장하는 이유는 무엇입니까?

내 이해는 디렉토리 inode가 일반 파일 inode와 근본적으로 다르지 않다는 것입니다.Ext4 디스크 레이아웃그게 다야 :

디렉토리 항목: 따라서 디렉토리는 일련의 데이터 블록이며 각 블록은 디렉토리 항목의 선형 배열을 포함한다고 말하는 것이 더 정확합니다.

디렉터리 항목은 파일 이름과 해당 인덱스 노드에 대한 포인터를 저장합니다. 그렇다면 문서에 각 블록에 디렉터리 항목이 포함되어 있다고 나와 있는데 debugfs디렉터리 inode에 저장된 파일 이름과 다른 내용을 보고하는 이유는 무엇입니까? 이것은 ext4 형식의 플래시 드라이브에 대한 디버깅 세션입니다.

debugfs:  cat /sub
 .
  ..�
     spam�spam2�spam3��spam4

이러한 파일 이름을 저장하는 것은 불가능하다고 생각하여 inode_i_block크기가 60바이트가 넘는 매우 긴 파일 이름으로 파일을 만들었습니다. catinode에서 실행하면 debugfs파일 이름도 표시되므로 긴 파일 이름이 inode에 다시 나타납니다!

콘텐츠inode.i_block:

inode.i_block60바이트의 저장 공간은 inode에서 설명하는 파일 유형에 따라 다양한 방식으로 사용될 수 있습니다. 일반적으로 일반 파일과 디렉터리에서는 파일 블록 인덱스 정보로 사용하고, 특수 파일에서는 특별한 목적으로 사용합니다.

또한 파일 이름이 저장된 inode에 대한 참조가 없습니다. 해시 트리 디렉토리 이것은 최신 구현 부분입니다. 해당 파일에 뭔가 빠진 것 같은 느낌이 듭니다.

주요 질문은 디렉토리의 inode에 파일 이름이 포함되어 있으면 해당 데이터 블록에 무엇을 저장하는가입니다.

답변1

inode.i_block디렉토리 항목은 데이터 블록 에 저장됩니다 . 링크한 문서의 "인라인 데이터" 및 "인라인 목차"를 참조하세요.

답변2

cat결과물 파일콘텐츠즉, 데이터 블록입니다. 처럼 /bin/cat.

cat이 명령은 inode 구조의 바이트를 터미널에 쓰는 경우에는 아무 소용이 없습니다. 비교 inode_dump하고 stat.

일부 문서에서는 역사적으로 UNIX가 이 데이터 읽기를 허용했다고 알려줍니다 /bin/cat. 이는 사용자 공간에서 디렉토리 항목을 나열하는 원래 방법이었습니다. 목차와 항목 ls이 열리고 설명 read()됩니다. 사용법과 달리 readdir()커널은 기본 파일 시스템 형식에 관계없이 표준 형식으로 항목을 제공합니다.

답변3

디렉토리 데이터에는 다음이 포함됩니다.dirent기입. 각 디렉토리 항목에는 파일 이름과바늘인덱스 노드로. 효율성을 위해 ext4 inode에는 작은 파일의 데이터 내용이 포함될 수 있으므로 다른 블록 읽기를 수행할 필요가 없습니다.

이것"작은" 값파일 속성의 경우 60바이트, 확장 파일 속성을 사용하지 않는 경우 최대 160바이트일 수 있습니다.

답변4

나는 맨 페이지의 언어가 혼란스럽다고 생각하지만 debugfs cat 명령이 inode 자체의 내용을 표시하지 않는다고 생각합니다. 많은 곳에서 매뉴얼 페이지에 "inode filespec"이 언급되어 있는데, 이는 독자에게 파일 사양이 경로 이름이나 inode 번호가 될 수 있음을 상기시키는 중복 방법이라고 생각합니다. 매뉴얼 페이지에서 발췌한 다음 내용을 비교해 보세요.

고양이 문서 사양- inode의 내용을 덤프합니다.문서 사양표준 출력으로.

통계자료 문서 사양- inode 구조의 내용을 표시합니다.문서 사양.

나는 cat이 inode filespec의 내용을 표시하는 대신 "inode filespec"의 내용을 표시한다고 생각합니다. 파일 이름은 inode가 아닌 데이터 블록에 확실히 나열되어 있습니다.

관련 정보