본문 바로가기

IT 이야기/Software Engineering

i-node의 개요 및 구조

Ⅰ. i-node의 개요

  1. i-node 정의

- 각 파일에 대한 정보를 기억하는 약 120byte 고정된 크기의 구조체

- 일반 파일, 디렉토리 파일 i-node -> 파일의 디스크 블록 위치

- 특수 파일의 i-node -> 주변 장치를 식별 정보

  1. i-node 정보

- 파일의 유형(정규형, 디렉토리형, 특수형 파일), 파일의 허가권, 소유자와 그룹. 하드 링크 개수,

  마지막 수정과 마지막 접근 시간, 블록의 위치, 특수 파일이라면 주와 보조 장치 번호, 만약

  심볼릭 링크라면 심볼릭 링크의 값

 

Ⅱ. i-node 구조

구성 요소     설   명 비 고
Mode 파일과 관계된 접근과 실행권한을 저장하는 플래그 16비트 플래그
Owner 파일과 관계된 개별 소유자, 그룹 소유자  
TimeStamp 마지막 접근, 마지막 수정 시각  
Size Block 파일의 바이트수  
Count 파일시스템의 브록크기를 바이트 단위로 표시  
Direct 직접데이타 블록을 가리키는 포인터로 구성 
12개 Points Array 로 구성
Block이 8,192Byte일 경우 96KB
Single Indirect Index block을 가리킴, 이 인덱스 블록은 실제 데이터 블록을 가리키는 포인터로 구성 96KB ~ 16MB
Double Indirect Index block이 2개의 레이어로 구성, 첫번째 인덱스 블록은 두번째 인덱스 블록을 가리키는 포인터로 두번째 인덱스 블록은 실제 데이터 블록을 가리킴 16MB ~ 32GB
Triple Indirect Index block이 3개의 레이어로 구성, 첫번째, 두번째 인덱스 블록은 다른 인덱스 블록을 가리키는 포인터
센번째 인덱스 블록은 실제 데이터블록을 가리키는 포인터로 구성
70TB

 

 

[참고 - 세부설명]

i-node

  • Unix File System의 각 file은 시스템 내부에서 i-node로 표현된다.
  • 각 i-node는 서로 구별되는 i-node number를 갖는다.
  • ‘ls –i’명령을 사용하여 i-node number를 확인할 수 있다.
  • stat() 함수를 사용하여 ‘struct stat’의 ‘st_ino’값을 읽음으로써 i-node number를 얻을 수 있다.

#include <sys/types.h>

#include <sys/stat.h>

int stat(const char *path, struct stat *buf);

  • 어느 한 file이나 directory가 만들어 질 경우 그에 해당되는 하나의 i-node가 만들어 지고, i-node list에 등록된다.
  • I-node는 64 byte 크기이며 root directory의 i-node number는 1이다.
  • I-node에 담겨진 내용 (SunOS의 경우)

참조: “Advanced Programming in the Unix Environment,” by W. Richard Stevens

 

  • File의 최대 크기 (SunOS의 경우)

 

data / directory blocks

  • File은 연속된 block (regular file의 경우 data block, 혹은 directory file의 경우 directory block)으로 구성된다.
  • I-node에 file을 구성하는 block에 대한 정보 (pointer 집합)가 들어 있다.
  • Block의 크기는 보통 512 bytes이다. (SunOS의 경우 8192 bytes)
  • Data block은 regular file의 내용을 담는다.
  • Directory block은 directory에 있는 subdirectory들과 file들의 정보를 담는다.
  • Directory의 내용을 읽을 때는 opendir(), readdir(), closedir() 함수들을 사용하며 directory의 내용은 ‘dirent’ structure에 담겨진다.
  • Directory file은 추가적으로 두 개의 entity를 더 담고 있는데, directory tree를 탐색할 때에는 이 두 개의 entity를 무시해야 한다.

참조: “Advanced Programming in the Unix Environment,” by W. Richard Stevens