큰 디렉토리는 어떻게 저장됩니까(하나의 inode 또는 여러 inode?)

큰 디렉토리는 어떻게 저장됩니까(하나의 inode 또는 여러 inode?)

나는 ext2 파일 시스템과 inode를 조사해 왔지만 몇 가지를 잘 이해하지 못합니다.

아이노드는 얼마나 큽니까? 내 시스템에서는 une2fs의 출력이 256으로 표시되는데 이것이 256인가요?

큰 디렉토리를 저장하는 방법은 무엇입니까? 내가 이해한 바로는 디렉토리는 파일 시스템에서 inode로 표시되며, 그 내용은 디렉토리의 내용을 나타내는 파일 이름과 inode 번호 목록입니다. 내용이 inode 자체에 저장되어 있습니까? 아니면 이 경우 파일 데이터가 저장되는 것과 같은 방식으로 "데이터"로 저장됩니까?

답변1

아이노드는 얼마나 큽니까?

Inode는 파일/디렉토리 등에 대한 정보를 포함하는 메타데이터입니다. 수정되지 않은 표준 커널에서 inode 구조의 크기는 inode당 128바이트입니다.

인덱스 노드 구조

내 시스템에서는 une2fs의 출력이 256으로 표시되는데 이것이 256인가요?

파일 시스템을 생성할 때 inode 크기를 변경할 수 있습니다. 일부 Linux 배포판은 이 값을 변경할 수 있으며 일부 ext2 생성 도구는 기본적으로 다른 inode 크기로 설정됩니다. 예를 들어 mke2fs의 기본값은 256입니다.

다음을 수동으로 수행할 수 있습니다.

mke2fs -I 128

128바이트 값을 가져옵니다. 이보다 더 적지는 않습니다. 이 값을 변경할 수 있습니다.-O resize_inode 사용

전체적으로: 최소 128바이트.

큰 디렉토리를 저장하는 방법은 무엇입니까? 내가 이해한 바로는 디렉토리는 파일 시스템에서 inode로 표시되며, 그 내용은 디렉토리의 내용을 나타내는 파일 이름과 inode 번호 목록입니다. 내용이 inode 자체에 저장되어 있습니까? 아니면 이 경우 파일 데이터가 저장되는 것과 같은 방식으로 "데이터"로 저장됩니까?

해당 디렉토리는 ext2 inode 구조의 첫 번째 값인 "i_mode"에 있는 디렉토리로 표시됩니다. 커널에서:

struct ext2_inode {
    __le16  i_mode;     /* File mode */

[커널의 fs/ext2/ext2.h가 모든 것을 설명합니다.]

변수는 다음 값을 사용할 수 있습니다.

/* inode: i_mode */
#define EXT2_S_IFMT 0xF000  /* format mask  */
#define EXT2_S_IFSOCK   0xC000  /* socket */
#define EXT2_S_IFLNK    0xA000  /* symbolic link */
#define EXT2_S_IFREG    0x8000  /* regular file */
#define EXT2_S_IFBLK    0x6000  /* block device */
#define EXT2_S_IFDIR    0x4000  /* directory */
#define EXT2_S_IFCHR    0x2000  /* character device */
#define EXT2_S_IFIFO    0x1000  /* fifo */

디렉토리 inode는 디렉토리 항목 구조 목록이 포함된 데이터 섹션의 목록을 가리킵니다. 각 구조에는 5개의 변수가 포함되어 있습니다.

  • inode -> 이 항목의 inode 번호입니다.
  • Rec_len -> 정렬에 사용됩니다.
  • file_type -> 파일 유형, 이전에 붙여넣은 유형과 거의 동일합니다 :D.
  • name_len -> 이름의 길이(바이트)입니다.
  • 이름 -> 최대 길이는 255바이트입니다.

이 구조는 디렉터리에 있는 파일 수만큼 반복됩니다.

문법 오류가 있으면 죄송합니다 :D

관련 정보