나는 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