개요

전산학에서 아이노드(inode)는 UFS와 같은 전통적인 유닉스 계통 파일 시스템에서 사용하는 자료구조이다. 아이노드는 정규 파일, 디렉터리 등 파일 시스템에 관한 정보를 가지고 있다. 파일들은 각자 1개의 아이노드를 가지고 있으며, 아이노드는 소유자 그룹, 접근 모드(읽기, 쓰기, 실행 권한), 파일 형태, 아이노드 숫자(inode number, i-number, 아이넘버) 등 해당 파일에 관한 정보를 가지고 있다. 파일시스템 내의 파일들은 고유한 아이노드 숫자를 통해 식별 가능하다. 일반적으로 파일 시스템을 생성할 때 전체 공간의 약 1퍼센트를 아이노드를 위해 할당한다. 아이노드를 위한 공간이 한정되어 있는 만큼 파일시스템이 가질 수 있는 파일의 최대 개수도 한정되어 있다. 그러나 대부분의 경우, 사용자가 느끼기에 거의 무한 개에 가까운 파일을 생성하고 관리할 수 있다.

아이노드는 파일을 기술하는 디스크 상의 데이터 구조로서, 파일의 데이터 블록이 디스크 상의 어디에 위치하고 있는지와 같은 파일에 위치에 대한 정보와 파일의 소유자와 같은 파일 접근을 위해서 필요한 정보를 가지고 있다. 커널은 디스크에 존재하는 아이노드를 메모리에 저장하여 파일에 대해서 적절한 작업을 수행한다.

아이노드와 같이 파일에 대한 메타데이터를 기술하는 디스크내의 자료구조를 윈도우 운영체제에서는 FAT (File Access Table)이라고 부른다. 이러한 아이노드는 후에 File Descriptor에 저장되어서 적절하게 사용되어 진다.

구조

아이노드 모드 비트

비트 내용
12-15 파일 형식(일반, 디렉터리, 문자 또는 블록 특별, 선입선출 파이프)
9-11 실행 플래그
8 소유자 읽기 허가
7 소유자 쓰기 허가
6 소유자 실행 허가
5 그룹 읽기 허가
4 그룹 쓰기 허가
3 그룹 실행 허가
2 다른 사용자 읽기 허가
1 다른 사용자 쓰기 허가
0 다른 사용자 실행 허가
  • 파일 모드 : 파일과 관계된 접근과 실행 권한을 저장하는 16비트 플래그
  • 링크 수 : 이 아이노드에 대한 디렉터리 참조 수
  • 소유자 아이디 : 파일의 소유자
  • 그룹 아이디 : 이 파일과 관계된 그룹 소유자
  • 파일 크기 : 파일의 바이트 수
  • 파일 주소 : 주소 정보(39바이트)
  • 마지막 접근 : 마지막으로 파일에 접근한 시각
  • 마지막 수정 : 마지막으로 파일을 수정한 시각
  • 아이노드 수정 : 마지막으로 아이노드를 수정한 시각

아이노드는 파일로 향하는 스스로의 경로를 저장하지 않는다. 즉 파일로 향하는 아이노드의 위치에 대한 정보는 디렉토리 정보를 저장하는 다른 아이노드에 의해서 처리되거나, 디스크의 메타정보로써 기록되게 된다.

Direct, Indirect Blocks

Inode Table.png

아이노드에서 데이터를 저장하기 위해서, 파일이 작을 경우에는 direct포인트만 가지고서도 파일의 전체를 지정할 수 있다. 그러나 파일이 커진다면 direct point만 가지고서 파일의 전체를 지정할 수 없기 때문에 indirect point를 사용하여 아이노드 자체의 크기가 커지는 것을 방지한다. 또한 Indirect point는 single, double, triple로 구성되어 점차 큰 파일을 지정할 수 있도록 한다. single은 객체의 포인터가 하나만 있는 것을 말하고, triple은 객체의 포인터가 3번 연결된 것을 말한다. System V UNIX에서는 하나의 블락이 1024바이트로 구성되어 있다. 또한 10개의 직접 참조와 3개의 간접참조로 13개의 entry로 구성된다. 1개의 간접 참조 엔트리는 256개의 다른 블락을 가르킬 수 있다. (1024바이트/4바이트 32-비트 시스템 에서) 따라서 single indirect block은 256K Bytes, double은 256*256=64M Bytes, triple은 64M*256=16GB을 저장할 수 있다. 커널은 file descriptor에서 주어진 byte offset을 bmap알고리즘을 사용하여 적절한 disk block으로 변환한다.

변종

4.2 BSD File System

1Block의 크기를 8KB까지 증가시켜서 속도의 향상과, 최대 저장 크기의 증가를 고려하였다. 그러나 이 방식은 1KB방식보다 내부 단편화가 심해져 낭비되는 공간이 증가한다는 단점이 있다. 그러나 증가하는 스토리지메모리공간을 고려하였을 경우 이와같이 하나의 블락의 크기를 증가시키는 것이 현실적이다.

또한 블락 전체가 하나의 아이노드를 저장하고, 나머지 공간은 데이터까지 저장시켜서, 아이노드에 접근하고 블락에 접근하는 즉 두번 메모리 접근을 요구하는 것을 줄였다.