리눅스 아이노드의 작동 원리는 무엇인가요?

리눅스를 오랫동안 사용해왔다면 “아이노드(inodes)”라는 용어를 들어본 적이 있을 것입니다. 이는 가끔 나타나지만, 여러분이 하는 일에 영향을 미치지는 않습니다. 여기에서는 아이노드가 무엇인지, 그리고 어떻게 작동하는지 설명하겠습니다.
아이노드란 무엇인가요?
도서관에서는 모든 책이 장르, 저자 이름 또는 연령대에 따라 정리되어 있습니다. “Bobby Daniels”의 스릴러를 찾고 싶다면, 스릴러 섹션으로 직접 걸어가서 “B”로 시작하는 저자 이름을 찾기 시작할 것입니다. 도서관과 마찬가지로, 리눅스 시스템의 모든 파일은 효율적인 검색 및 사용을 위해 정리되어 있습니다. 아이노드는 리눅스 시스템 내에서 파일을 정리하는 데 도움을 주는 개체입니다.
파일 메타데이터란 무엇인가요?
“sample.txt”라는 파일이 있고, 그 안에 “hello”라는 데이터가 있다고 가정해봅시다.
이 파일에는 파일 크기, 권한, 사용자 및 그룹 소유권, 생성/접근/수정 타임스탬프, 링크 수 등과 같은 관련 데이터 및 정보가 포함되어 있습니다. 이러한 모든 정보는 집합적으로 파일 메타데이터라고 합니다.

파일 시스템이란 무엇인가요?
하드 드라이브와 같은 저장 장치에서 파티션은 파일 저장을 위해 사용되기 전에 파일 시스템으로 포맷됩니다. 파일 시스템은 하드 드라이브의 사서입니다. 공식적으로, 이는 파티션에 파일을 체계적으로 저장하기 위해 함께 작동하는 데이터 구조 및 알고리즘의 집합입니다.
리눅스 시스템의 파티션은 자주 EXT4로 포맷됩니다. B-Tree 파일 시스템(BTRFS), Reiser 파일 시스템, ZFS 등과 같은 다른 파일 시스템도 사용 가능합니다.
모두 연결하기
아이노드는 Ext4의 데이터 구조로, 파일에 대한 모든 메타데이터를 보유합니다.

물론 파일 시스템에는 수많은 파일이 있을 것입니다. 여러분이 추측한 대로, 각 파일은 고유한 아이노드를 가집니다. 아이노드를 고유하게 식별하기 위해 각 아이노드는 번호가 매겨집니다.
아이노드 번호는 어떻게 될까요?
파일 시스템의 아이노드 번호는 1부터 시작합니다. 처음 10개의 아이노드는 시스템 용도로 예약되어 있습니다. 사용자 파일의 메타데이터는 아이노드 11부터 저장됩니다. 모든 아이노드는 아이노드 테이블에 깔끔하게 쌓여 있습니다.
아이노드 테이블의 한 항목은 256바이트 크기입니다. 파일에 대해 리눅스는 모든 메타데이터를 256바이트 내에 지능적으로 정리합니다! 추가로, 파일의 아이노드는 파일 시스템 내에서 파일 데이터가 위치한 곳에 대한 정보도 포함합니다. 기억하세요 – 아이노드에는 파일의 메타데이터만 저장됩니다.
파일 시스템의 총 아이노드 수는 사용 가능한 공간과 파티션에 저장할 수 있는 파일 수에 따라 달라집니다.
아이노드는 어떻게 할당되고 해제되나요?
사용자가 새로 포맷된 파일 시스템에 파일을 추가하면, 아이노드 11부터 시작하여 파일 메타데이터를 보유하기 위해 아이노드가 할당됩니다.
아이노드의 할당 상태를 추적하기 위해 “아이노드 비트맵(Inode Bitmap)”이라는 또 다른 데이터 구조가 있습니다. 이는 맵 역할을 하는 비트의 집합입니다.
아래 표와 같이 아이노드 비트맵에서 8비트를 고려하여 아이노드 11에서 18까지의 할당 상태를 나타냅시다. 비트맵에서 값이 1이면 해당 아이노드가 할당되었음을 의미하며, 즉 파일의 메타데이터를 보유하는 데 사용됩니다. 비트맵에서 값이 0이면 해당 아이노드가 현재 사용되지 않고 있음을 의미합니다. 여기에서 아이노드 17이 사용 중임을 알 수 있습니다.

아이노드 17에 메타데이터가 있는 파일이 삭제되면, 해당 비트맵 상태는 0이 되어 다른 파일에서 사용할 수 있음을 나타냅니다.

파일의 아이노드 번호를 어떻게 볼 수 있나요?
이를 수행하는 방법은 두 가지가 있습니다.
첫 번째는 ls 명령어를 -i 스위치와 함께 사용하고, 그 뒤에 파일 이름을 입력하는 것입니다. 출력의 첫 번째 필드는 “sample.txt”의 메타데이터를 가진 아이노드 번호입니다.
같은 정보는 stat 명령어를 사용하고 파일 이름을 입력하여 얻을 수 있습니다.

파티션에 사용 가능한 총 아이노드 수를 보려면, df 명령어를 -i 스위치와 함께 사용할 수 있습니다.
“/dev/sda4” 파티션에는 사용 가능한 404754480개의 아이노드가 있으며, 그 중 359044개의 아이노드만 사용되고 있습니다.
결론
본질적으로 아이노드 테이블은 모든 파일의 메타데이터를 아이노드에 세심하게 쌓아두며, 파일 데이터의 위치에 대한 정보도 포함합니다. 우리가 리눅스 아이노드에 대해 논의한 모든 것은 단지 빙산의 일각에 불과합니다. 그 내부 작동에 대한 더 많은 정보를 원하신다면, 이 링크를 확인해 보세요.