And Brain said,

inode, Linux 파일 시스템의 보이지 않는 인덱스 본문

IT/Linux

inode, Linux 파일 시스템의 보이지 않는 인덱스

The Man 2025. 3. 4. 11:10
반응형

1. 개요

공항에서 짐을 부칠 때, 승객은 자신의 가방을 컨베이어 벨트에 올려놓습니다. 하지만 공항 시스템은 단순히 "김아무개의 가방"이라는 이름으로 짐을 관리하지 않는 대신, 각 가방에 고유한 바코드(태그)를 붙이고, 이 바코드를 기반으로 가방을 추적하게 됩니다.

이와 비슷하게 리눅스 파일 시스템에서는 파일을 관리할 때 단순히 이름만 사용하는 것이 아니라, 파일마다 고유한 식별자인 inode 번호가 부여됩니다. 파일을 열거나 이동할 때, 시스템은 먼저 디렉터리(공항의 승객 정보 시스템)에서 파일 이름과 연결된 inode 번호(바코드)를 찾은 뒤, 이를 기반으로 실제 데이터 블록(가방이 보관된 장소)을 찾아갑니다.

이러한 구조 덕분에 파일 이름이 변경되어도 inode는 유지되며, 여러 개의 파일 이름이 동일한 inode를 가리킬 수도 있습니다(하드 링크). 또한, 파일이 삭제되었더라도 사용 중인 경우, 데이터가 유지되는 것도 같은 원리입니다.

 

inode는 리눅스 파일 시스템에서 파일을 찾고 관리하는 핵심 개념이며, 파일 시스템이 파일을 어떻게 추적하고 저장하는지를 결정하는 중요한 요소입니다. 이를 이해하면 리눅스 파일 시스템의 내부 구조를 더 깊이 파악할 수 있습니다.


2. inode의 구조

2.1. inode란 무엇인가?

inode(Index Node)는 리눅스 파일 시스템에서 파일의 메타데이터(속성 정보)를 저장하는 자료 구조입니다. 파일이 저장되는 실제 블록의 주소를 포함하여 파일 시스템이 파일을 관리할 수 있도록 합니다. 이를 통해 파일 이름과 파일 데이터를 분리하여 운영체제가 효율적으로 파일을 관리할 수 있습니다.

2.2. inode에 저장되는 정보

inode는 다음과 같은 중요한 정보를 포함합니다.

 

  • inode 번호: 파일 시스템 내에서 파일을 고유하게 식별하는 번호

  • 파일 유형: 일반 파일, 디렉터리, 심볼릭 링크, 소켓 등

  • 파일 크기: 바이트 단위 파일 크기

  • 퍼미션(권한 정보): 소유자, 그룹, 기타 사용자에 대한 읽기/쓰기/실행 권한

  • 하드 링크 수: 같은 inode를 공유하는 파일 개수

  • 타임스탬프:

     

    • Access Time (atime): 마지막 접근 시간

    • Modify Time (mtime): 마지막 수정 시간

    • Change Time (ctime): 마지막 메타데이터 변경 시간

  • 데이터 블록 주소: 파일이 저장된 실제 디스크 블록 위치

  • 소유자 및 그룹 ID: 파일의 소유자를 나타내는 사용자 ID(UID)와 그룹 ID(GID)

  • 파일 크기 제한 및 블록 수: 파일이 차지하는 블록 수와 허용 가능한 최대 크기

2.3. inode 블록 구조

파일 시스템은 파일을 효율적으로 저장하고 검색하기 위해 계층적인 블록 구조를 사용합니다. inode는 파일의 데이터 블록 주소를 포함하는데, 이 구조는 다음과 같이 나뉩니다.

 

  1. 직접 블록 (Direct Block): 작은 파일은 이곳에 직접 데이터 블록 주소가 저장됨 (최대 12개 블록)

  2. 간접 블록 (Indirect Block): 파일이 커지면 추가적인 주소 테이블이 필요함

  3. 이중 간접 블록 (Double Indirect Block): 더 큰 파일을 위해 주소 테이블을 참조하는 또 다른 블록

  4. 삼중 간접 블록 (Triple Indirect Block): 초대형 파일을 위한 블록 체계

inode → 직접 블록 (최대 12개) → 간접 블록 → 이중 간접 블록 → 삼중 간접 블록

이러한 구조 덕분에 작은 파일은 바로 직접 블록을 통해 접근이 가능하며, 큰 파일도 단계적으로 블록을 확장하며 저장될 수 있습니다.


3. inode 확인하는 방법

3.1. 파일의 inode 번호 확인

ls -i example.txt

출력 예시:

131072 example.txt

3.2. inode 상세 정보 확인

stat example.txt

출력 예시:

  File: example.txt
  Size: 1234       Blocks: 8          IO Block: 4096   regular file
Device: 802h/2050d Inode: 131072       Links: 1
Access: 2025-03-01 12:00:00.000000000 +0900
Modify: 2025-03-01 11:59:59.000000000 +0900
Change: 2025-03-01 11:58:58.000000000 +0900
 Birth: -

3.3. 특정 inode를 가진 파일 찾기

find . -inum 131072

이 명령어는 특정 inode 번호를 가진 파일을 찾을 때 유용하게 사용됩니다.


4. inode와 파일 시스템 동작 원리

4.1. 파일 삭제와 inode

파일을 삭제(rm example.txt)하면 파일이 완전히 사라지는 것이 아니라 inode만 해제됩니다.

touch testfile
ls -i testfile  # inode 번호 확인
rm testfile  # 삭제
df -i  # inode 개수 확인

이 때문에 파일을 지웠는데도 공간이 줄어들지 않는 경우가 발생할 수 있습니다. 예를 들어, 파일이 열려 있는 상태에서 삭제되면 inode는 삭제되지만, 데이터 블록은 여전히 점유 중입니다.

4.2. 하드 링크와 inode

하드 링크는 inode를 공유하는 또 다른 파일 이름을 만드는 것입니다.

touch original.txt
ln original.txt hardlink.txt
ls -i original.txt hardlink.txt

출력 예시:

131072 original.txt
131072 hardlink.txt

→ 같은 inode를 공유하고 있으므로 하나가 삭제되어도 다른 파일은 여전히 존재합니다.

4.3. 소프트 링크와 inode

반면, 심볼릭 링크(소프트 링크)는 별도의 inode를 가집니다.

ln -s original.txt symlink.txt
ls -i original.txt symlink.txt

출력 예시:

131072 original.txt
131073 symlink.txt

→ symlink.txt는 별도의 inode를 가지며, 원본 파일의 inode를 참조할 뿐입니다.


6. 결론

inode는 리눅스 파일 시스템에서 파일을 찾고, 관리하고, 저장하는 핵심 요소입니다. 파일이 단순히 이름으로 관리되는 것이 아니라, 실제로는 inode 번호를 통해 시스템에서 추적된다는 점이 중요합니다.

반응형
Comments