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
부족한 경우 볼륨에 용량이 남았는데도 불구하고 더이상 파일 쓰기가 불가능해질 수 있다.
'Computer Science > Operating System' 카테고리의 다른 글
[운영체제] Mechanism - Limited Direct Execution 간단정리 (0) | 2024.07.10 |
---|---|
Process API, 시스템콜을 알아보자 (0) | 2024.06.05 |
프로세스의 추상화 과정 (The Abstraction: A Process) (0) | 2024.06.05 |
[보호기법] Stack Canary 다시보기 (0) | 2024.05.20 |