inode pointer structure

inode 구조

전반적인 inode 구조는 다음과 같다.

 

 

inode pointer

inode에서 data block으로 참조해준다.

  • 직접 포인터(direct pointer) 12개
  • 단일 간접 포인터(singly indirect ') 1개
  • 이중 간접 포인터(doubly indirect ') 1개
  • 삼중 간접 포인터(triply indirect ') 1개

그중 그림상 direct blocks~triple indirect 부분을 설명할건데, ext2/ext3/ext4을 떠올리자.

이 셋의 파일 시스템 기본 data block의 크기는 4KB이며, 1KB, 2KB, 4KB, 8KB 등으로 설정이 가능하다.

 

  • 32비트 시스템의 경우 포인터의 크기는 4Bytes(32bit)
  • 64비트 시스템의 경우 포인터의 크기는 8Bytes(64bit)

 

data block

파일 시스템에서 파일의 실제 데이터가 저장되는 곳이다.

일반적인 크기는 4KB이며, 파일 시스템에 따라 512Bytes ~ 64KB까지 다양하다.

 

inode pointer 종류

직접 포인터

직접 포인터는 12개를 갖고 있으며, 말 그대로 data block에 직접적으로 포인팅하는 것이다. 

data block의 크기는 4KB이니, 총 12 * 4 -> 48KB를 참조할 수 있다.

 

단일 간접 포인터

1개를 갖고 있으며, data block을 pointer block으로 사용한다.

data block은 4KB 공간을 포인터 크기로 나누어서 다른 data block에 참조한다.

즉, 4KB / 4 Bytes -> 1024개의 포인터 저장하여 4MB까지 참조 가능하다.

  • 1024 * 4Kb = 4MB

* 4KB는 data block의 일반적인 크기, 4 Bytes는 32비트 기준 포인터의 크기

이중 간접 포인터

이 포인터는 1024개의 간접 포인터를 갖고 있는 포인터 블록을 가르키고, 그 포인트 블록도 각각 1024개의 데이터 블록을 가르키고 있다.

  • 1024 * 1024 * 4KB = 4GB

삼중 간접 포인터

1024개의 이중 간접 블록을 가르키고, 각 이중 간접 블록이 1024개의 간접 블록을, 또 그 간접 블록이 1024개의 간접 블록을 가르킨다.

  • 1024 * 1024 * 1024 * 4KB = 4TB

 

어려워 보이지만 그림을 제대로 보고 이해하면 쉽다.

 

이론상 inode 시스템에서 접근할 수 있는 최대 파일 크기는 다음과 같다.

48KB + 4MB + 4GB + 4TB

 

추가로 궁금해서 찾아본 것들

단편화

데이터 블록 크기가 4KB인 파일 시스템에서 4KB 미만의 작은 데이터를 계속 사용하면 내부 단편화가 쌓여 비효율적일 수 있다.

 

4TB 이상의 파일은 어떻게 접근하지?

이론상 접근 가능한 최대치 이상은 접근 못하는게 맞다.

 

사용하고 싶다면 그 이상을 지원하는 파일 시스템을 사용해야 한다.

  • XFS : 파일시스템 8EiB-1Bytes 지원, 볼륨 16EiB
  • Btrfs : 파일시스템, 볼륨 최대 16EiB 지원 가능
  • ext4(64 mode) : 파일 시스템 16TiB, 볼륨 1EiB
  • ZFS : 파일시스템 16EiB 지원, 볼륨 2^48EIB

 

메타데이터 영역이 가득 차면 어떻게 되는거지?

inode가 부족할 수도 있다. -> inode full issue

부족한 경우 볼륨에 용량이 남았는데도 불구하고 더이상 파일 쓰기가 불가능해질 수 있다.