reference: https://pages.cs.wisc.edu/~remzi/OSTEP/, 시스템 프로그래밍, 운영체제 수업(최종무 교수님)
리눅스의 기본 파일시스템인 ext 계열 파일시스템은 inode 구조를 채택한다.
ext2_inode 구조
- i_blocks: 파일이 몇 개의 데이터 블록을 가지고 있는지 나타냄.
- i_mode: 이 inode가 관리하는 파일의 속성 및 접근 제어 정보 유지
- i_links_count: 이 inode를 가리키고 있는 파일 수(또는 링크 수)를 의미. (파일 이름 -- inode)
- i_uid, i_gid: 파일을 생성한 소유자의 userID, groupID 의미.
- i_atime, i_ctime, imtime: 파일의 접근 시간, 생성 시간, 수정 시간 의미.
- i_block[15]: 파일에 속한 디스크 블록들의 위치를 관리.
i_mode는 16비트로 구성되며, 상위 4비트는 파일 유형을 의미한다.
파일 유형: 정규 파일, 디렉터리, 문자 장치 파일, 블록 장치 파일, 링크 파일, 파이프, 소켓 등.
(유닉스 계역 시스템에서 모든 것은 '파일'로 취급. 모니터, 키보드와 같은 디바이스도 파일이다. 다만 파일시스템을 통해 디스크에 저장되어 있는 파일을 '정규파일'이라 한다.
i_block[15]에는 총 15개의 엔드리 존재. 12개의 직접 블록 포인터, 3개의 간접 블럭 포인터(단일 간접 블록 포인터, 이중 간접 블록 포인터, 삼중 간접 블록 포인터).
(단일 간접 블록은 하나의 인덱스 블록을, 이중 간접 블록은 인덱스 블록 2단계를 가진다.)
inode -(연결)- 데이터 블록
파일 이름 -(연결)- inode : by 디렉터리 엔트리
ext2 디렉터리 엔트리 구조
struct ext2_dir_entry { _le32 inode; // inode 번호 _le16 rec_len; // 디렉터리 엔트리 길이 _le16 name_len; // name rlfdl char name[]; // 파일 이름 };
ext2 에서는 모든 파일에게 고유한 inode 번호 부여. 파일시스템이 관리하는 파티션 앞부분에 위치한 inode 테이블에서의 번호.
FAT 파일시스템 또한 디렉터리 엔트리를 유지하지만 ext2와의 차이점은 ext2에서는 디렉터리 엔트리에 파일 이름과 inode 번호와 같은 간단한 정보를 유지하고, 실제 데이터 블록 인덱싱과 세부적인 정보는 inode 번호를 가지고 찾을 수 있는 inode 자료구조를 유지한다는 것이다.