Computer >> 컴퓨터 >  >> 시스템 >> Linux

리눅스 아이노드(Inode)란 무엇이며 어떻게 작동할까?

리눅스 아이노드(Inode)란 무엇이며 어떻게 작동할까?

리눅스를 오래 사용해 왔다면 '아이노드(inode)'라는 용어를 한 번쯤은 접했을 것입니다. 가끔 등장하지만 지금 하고 있는 작업에는 큰 영향을 주지 않아 그냥 지나치기 쉬운 개념입니다. 이 글에서는 아이노드가 정확히 무엇인지, 그리고 어떤 방식으로 동작하는지 차근차근 살펴보겠습니다.

아이노드(Inode)란 무엇인가?

도서관에서는 모든 책이 장르, 저자 이름, 독자 연령대별로 체계적으로 정리되어 있습니다. 'Bobby Daniels'가 쓴 스릴러 소설을 찾고 싶다면 스릴러 코너로 바로 걸어가 저자 이름이 'B'로 시작하는 책을 찾기만 하면 됩니다. 리눅스 시스템도 마찬가지입니다. 모든 파일이 효율적인 검색과 사용을 위해 체계적으로 정리되어 있는데, 이러한 파일 정리를 도와주는 핵심 개체가 바로 아이노드입니다.

파일 메타데이터(File Metadata)란?

'hello'라는 데이터를 담고 있는 sample.txt라는 파일이 있다고 가정해 보겠습니다.

리눅스 아이노드(Inode)란 무엇이며 어떻게 작동할까?

이 파일에는 실제 데이터 외에도 파일 크기, 권한(퍼미션), 사용자 및 그룹 소유권, 생성/접근/수정 타임스탬프, 링크 수 등 파일과 관련된 다양한 정보가 함께 존재합니다. 이러한 정보들을 통틀어 '파일 메타데이터'라고 부릅니다.

리눅스 아이노드(Inode)란 무엇이며 어떻게 작동할까?

파일 시스템(File System)이란?

하드 드라이브 같은 저장 장치에서 파티션은 파일 저장에 사용되기 전에 반드시 파일 시스템으로 포맷됩니다. 파일 시스템은 쉽게 말해 하드 드라이브의 '사서(librarian)' 역할을 합니다. 공식적으로 정의하면, 파일 시스템은 파티션 위에 파일을 체계적으로 저장하기 위해 서로 협력하여 작동하는 일련의 자료 구조와 알고리즘의 집합입니다.

리눅스 시스템의 파티션은 흔히 EXT4로 포맷됩니다. 이 외에도 B트리 파일 시스템(BTRFS), 라이저 파일 시스템(ReiserFS), ZFS 등 다양한 파일 시스템을 사용할 수 있습니다.

모든 개념을 하나로 연결하기

아이노드는 EXT4 파일 시스템에서 파일의 모든 메타데이터를 담고 있는 자료 구조입니다.

리눅스 아이노드(Inode)란 무엇이며 어떻게 작동할까?

물론 하나의 파일 시스템에는 수많은 파일이 존재합니다. 짐작하셨겠지만, 모든 파일은 각자 자신만의 아이노드를 가지며, 각 아이노드를 고유하게 식별하기 위해 번호가 부여됩니다.

아이노드 번호는 어떻게 매겨질까?

파일 시스템의 아이노드 번호는 1번부터 시작합니다. 처음 10개의 아이노드는 시스템 사용을 위해 예약되어 있으며, 사용자 파일의 메타데이터는 11번 아이노드부터 저장됩니다. 모든 아이노드는 아이노드 테이블(Inode Table)이라는 곳에 깔끔하게 정렬되어 쌓여 있습니다.

리눅스 아이노드(Inode)란 무엇이며 어떻게 작동할까?

아이노드 테이블의 한 항목(entry)은 256바이트 크기입니다. 즉, 리눅스는 파일의 모든 메타데이터를 단 256바이트 안에 지능적으로 정리하는 셈입니다. 또한 파일의 아이노드에는 해당 파일의 데이터가 파일 시스템상 어디에 위치하는지에 대한 정보도 포함되어 있습니다. 기억할 점은, 아이노드에는 오직 파일의 메타데이터만 저장된다는 사실입니다.

파일 시스템에 존재하는 아이노드의 총 개수는 사용 가능한 공간과 해당 파티션에 저장할 수 있는 파일 수에 따라 결정됩니다.

아이노드는 어떻게 할당되고 해제되는가?

새로 포맷된 파일 시스템에 사용자가 파일을 추가하면, 11번부터 시작하는 아이노드들이 순서대로 할당되어 파일 메타데이터를 담게 됩니다.

여기서 아이노드의 할당 상태를 추적하는 또 다른 자료 구조인 '아이노드 비트맵(Inode Bitmap)'이 등장합니다. 이것은 지도처럼 작동하는 비트(bit)들의 집합입니다.

예를 들어, 아이노드 비트맵의 8개 비트가 11번부터 18번까지 아이노드의 할당 상태를 나타낸다고 가정해 봅시다. 비트맵 값이 1이면 해당 아이노드가 할당되어 파일의 메타데이터를 보관 중이라는 의미이고, 0이면 현재 사용되지 않고 있다는 의미입니다. 아래 표에서는 17번 아이노드가 사용 중인 것을 확인할 수 있습니다.

리눅스 아이노드(Inode)란 무엇이며 어떻게 작동할까?

17번 아이노드에 메타데이터가 저장되어 있던 파일이 삭제되면, 해당 비트맵의 상태 값은 0으로 변경되어 다른 파일이 사용할 수 있음을 나타냅니다.

리눅스 아이노드(Inode)란 무엇이며 어떻게 작동할까?

파일의 아이노드 번호 확인 방법

파일의 아이노드 번호를 확인하는 방법은 두 가지가 있습니다.

첫 번째는 ls 명령어에 -i 옵션을 붙여 파일 이름과 함께 실행하는 것입니다. 출력 결과의 첫 번째 필드가 바로 sample.txt의 메타데이터를 담고 있는 아이노드 번호입니다.

리눅스 아이노드(Inode)란 무엇이며 어떻게 작동할까?

동일한 정보는 stat 명령어 뒤에 파일 이름을 입력해서도 얻을 수 있습니다.

리눅스 아이노드(Inode)란 무엇이며 어떻게 작동할까?

파티션에서 사용 가능한 아이노드의 총 개수를 확인하려면 df 명령어에 -i 옵션을 사용하면 됩니다.

리눅스 아이노드(Inode)란 무엇이며 어떻게 작동할까?

위 예시의 /dev/sda4 파티션에서는 총 404,754,480개의 아이노드를 사용할 수 있으며, 그중 실제로 사용 중인 아이노드는 359,044개뿐입니다.

마무리

아이노드 테이블은 본질적으로 모든 파일의 메타데이터를 아이노드에 꼼꼼하게 정리해 두고, 파일 데이터의 위치 정보까지 함께 관리합니다. 지금까지 살펴본 리눅스 아이노드에 대한 내용은 빙산의 일각에 불과합니다. 내부 동작 원리를 더 깊이 알고 싶다면 관련 문서와 링크를 참고해 보시기 바랍니다.