Inode

Violet_Evgadn·2023년 4월 26일
0

Linux

목록 보기
11/34

Indode

Inode란?

Inode는 OS에서 사용하는 파일 시스템의 하나로써 Linux에서 사용된다.

Inode의 기본 구조는 File System을 대표하는 Super Block, 파일의 상세정보를 저장하고 있는 Inode Block, 실제 데이터를 담은 Data Block으로 되어 있다.

여기에서 "Block"이란 파일 시스템의 단위를 의미하며 하나의 파일에는 다수의 데이터 블록들이 존재할 수 있다.

그림으로 보는 Block 구조

Super Block

슈퍼 블록은 Linux File System 전체를 대표하는 Block으로 File System 전체 정보 및 Partition에 대한 정보를 포함하고 있다.

이전에 "df" 명령어를 통해 전체 Linux System에 대한 상태를 확인할 수 있었는데 이 때 확인하는 것이 "Super Block" 정보이다.

Super Block은 Linux File System 그 자체에 대한 Meta Data라 생각하면 되며 File System별로 다르게 구현되어 있다.

Super Block에는 File System의 유형 및 크기, 상태, Inode Block 같은 Sub-File System Metadata 구조체 등의 정보가 저장되어 있으며 매우 중요한 데이터이므로 복사본을 여러 곳에 저장해 놓기도 한다.

Inode Block

Super Block이 파일 시스템 전반에 걸친 메타데이터를 저장했다면 Inode Block은 파일 개별의 메타데이터를 저장하고 있다.

Inode는 고유한 Inode 번호, 파일 주인(User, Group), 파일 권한, 파일 Type, 실제 데이터를 저장하고 있는 Data Block 주소 등 파일에 관련된 다양한 정보를 저장하고 있는 Index Node이다.

Super Block은 Inode Block에 대한 정보를 가지고 있고 Inode Block은 각 파일에 대한 정보를 가지고 있으므로 Super Block이 Inode Block에 저장된 데이터를 읽는 형식으로 실제 파일을 파악할 수 있다.

우리가 Linux를 활용할 때는 파일 이름을 사용하지만 Linux 내부적으로는 파일 이름이 아닌 고유한 값의 파일 Inode 번호를 활용하여 모든 Process를 처리한다.

이는 Process에 대한 정보를 저장하고 있는 PCB와 유사하다 볼 수 있는데 PCB는 Process가 종료되면 제거되지만 Inode는 해당 파일이 삭제되지 않는 이상 반영구적으로 남아 있다.

또한 파일이 생성될 때 파일에 대한 Inode 번호 및 Inode 블록이 할당되고 해당 공간에 파일에 대한 Meta Data가 저장된다.

Inode 구조에서 특별한 것이 있다면 Single/Double/Triple Indirect일 것이다.

출처 : https://wiki.kldp.org/Translations/html/The_Linux_Kernel-KLDP/tlk9.html
위 사진은 EXT2 Inode Block을 도식화한 것이다.

실제 Data는 Direct Blocks에 저장된다. 문제는 저장되는 파일 용량이 너무 클 경우 Direct Block에 모든 데이터를 저장할 수 없을 수도 있다는 것이다.

만약 큰 파일 용량을 대비하여 Direct Block 크기를 크게 할 경우 작은 용량을 가진 파일들의 Inode에는 빈 공간이 너무 많이 생기기 때문에 비효율적으로 메모리를 사용하게 된다.

이런 문제를 해결하기 위해 사용하는 것이 "Indirect"이다.

Indirect에는 Data Block, 혹은 다른 Indirect의 주솟값을 저장할 수 있다.

1개의 Indirect는 4KB의 크기를 가지며 주솟값의 크기는 4Byte이므로 1개 Indirect에는 총 1024개의 주솟값이 들어갈 수 있다.

Single Indirect는 Data Block의 주솟값을 저장하고 있다. 즉, 1024개의 Data Block에 접근할 수 있는 것이다.

Double Indirect는 Single Indirect의 주솟값을 저장하고 있다. 즉, 1024 X 1024 Data Block에 접근할 수 있는 것이다.

Triple Indirect는 Double Indirect의 주솟값을 저장하고 있다. 즉, 1024 X 1024 X 1024 Data Block에 접근할 수 있는 것이다.

물론 Indirect를 사용하면 주솟값으로 이동해야 하는 시간이 필요하기 때문에 시간적으로 약간의 손해를 볼 수는 있겠으나 공간적으로 큰 이득을 볼 수 있기 때문에 효율적인 구조라 할 수 있겠다.

이런 구조를 통해 1개 Inode Block에 전체 데이터를 저장하는 것이 아닌 여러 개의 Data Block으로 쪼개 파일 전체 내용을 저장할 수 있는 것이다.

Data Block(Disk Block)

실제 데이터가 저장되는 Block이다. 1개 File은 여러 개의 Data Block으로 구성 될 수 있다.

profile
혹시 틀린 내용이 있다면 언제든 말씀해주세요!

0개의 댓글