음이상의

inode

inode(인덱스 노드)는 파일이나 디렉토리와 같은 파일 시스템 객체를 설명하는 Unix 형식의 파일 시스템데이터 구조다.각 inode는 객체 데이터의 속성 및 디스크 블록 위치를 저장한다.[1]파일 시스템 개체 속성은 메타데이터(마지막 변경,[2] 액세스, 수정 횟수)뿐만 아니라 소유자 및 권한 데이터도 포함할 수 있다.[3]

디렉토리는 할당된 이름을 가진 inode의 목록이다.이 목록에는 자신, 부모 및 자녀 각각에 대한 항목이 포함되어 있다.

어원

리눅스 커널 메일링 리스트에는 "inode"의 "i"의 이유에 대한 불확실성이 있었다.2002년에는 유닉스의 선구자 데니스 리치에게 이 문제가 제기되었는데, 그는 다음과 같이 대답했다.[4]

사실 나도 몰라.우리가 쓰기 시작한 용어에 불과했다."인덱스"는 내가 추측하기에 가장 좋은 추측인데, 이것과는 별도로 모든 계층적 디렉토리 정보가 살아 있는 디스크의 평평한 배열로 파일에 대한 액세스 정보를 저장하는 약간 특이한 파일 시스템 구조 때문이다.따라서 i-number는 이 어레이의 인덱스, i-node는 어레이의 선택된 요소다.("i-" 표기법은 제1판 매뉴얼에서 사용되었으며, 하이픈은 점차 삭제되었다.)

1978년 리치와 켄 톰슨의 논문은 "인덱스"가 인노드의 어원론적 기원이라는 개념을 뒷받침한다.그들은 다음과 같이 썼다.[5]

[…] 디렉토리 항목은 관련 파일의 이름과 파일 자체에 대한 포인터만 포함한다.이 포인터는 파일의 i-숫자(인덱스 번호)라고 불리는 정수다.파일에 액세스할 때 파일의 i 번호는 디렉터리가 있는 장치의 알려진 부분에 저장된 시스템 테이블(i-list)에 인덱스로 사용된다.이에 따라 발견된 항목(파일의 i-노드)에는 파일에 대한 설명이 포함되어 있다.

또한, Maurice J. Bach는 inode가 "인덱스 노드라는 용어의 수축이며 UNIX 시스템에 관한 문헌에서 일반적으로 사용되고 있다"고 썼다.[6]

세부 사항

Unix의[7] 파일 설명자, 파일 테이블 및 inode 테이블

파일 시스템은 파일의 내용과 반대로 파일에 대한 데이터 구조에 의존한다.전자를 메타데이터라고 한다. 즉, 데이터를 기술하는 데이터.각 파일은 정수로 식별되는 inode와 연관되며, 종종 i-number 또는 inode number라고 불린다.

inode는 파일 소유권, 액세스 모드(읽기, 쓰기, 실행 권한) 및 파일 형식과 같은 파일 및 디렉토리(폴더)에 대한 정보를 저장한다.많은 이전 파일 시스템 구현에서 최대 inode 수는 파일 시스템 생성 시 고정되어 파일 시스템이 보유할 수 있는 최대 파일 수를 제한한다.파일 시스템의 inode에 대한 일반적인 할당 경험적 접근법은 파일 시스템에 포함된 2K 바이트마다 하나의 inode이다.[8]

inode 번호는 장치의 알려진 위치에 있는 inode 테이블을 인덱싱한다.inode 번호에서 커널의 파일 시스템 드라이버는 파일의 위치를 포함한 inode 컨텐츠에 접근할 수 있어 파일에 대한 액세스가 가능하다.파일의 inode 번호는 다음을 사용하여 찾을 수 있다.ls -i명령하다ls -i명령어는 보고서의 첫 번째 열에 i-노드 번호를 인쇄한다.

ZFS, OpenZFS, ReiserFS, btrFS, APFS와 같은 일부 유닉스 스타일의 파일 시스템은 고정 크기 인노드 테이블을 생략하지만 동등한 기능을 제공하기 위해서는 동등한 데이터를 저장해야 한다.데이터를 통계 데이터라고 할 수 있는데, 이 데이터는stat 프로그램에 데이터를 제공하는 시스템 호출.고정 크기 표의 일반적인 대안으로는 B-tree와 파생 B+ 나무가 있다.

파일 이름 및 디렉터리 관련 내용:

  • 이노드는 하드링크 이름을 포함하지 않고 다른 파일 메타데이터만 포함하고 있다.
  • Unix 디렉토리는 연결 구조의 목록이며, 각 디렉토리에는 하나의 파일 이름과 하나의 inode 번호가 포함되어 있다.
  • 파일 시스템 드라이버는 특정 파일 이름을 찾는 디렉토리를 검색한 다음 파일 이름을 올바른 인노드 번호로 변환해야 한다.

운영 체제 커널의 이 데이터 메모리 내 표현은struct inode리눅스로BSD에서 파생된 시스템은 이 용어를 사용한다.vnode("v"는 커널의 가상 파일 시스템 계층을 가리킨다.)

POSIX inode 설명

POSIX 표준은 기존의 UNIX 파일 시스템의 영향을 많이 받는 파일 시스템 동작을 의무화한다.inode는 파일의 파일당 시스템 고유 식별자로 정의되는 "파일 일련번호"라는 문구로 표시된다.[9]파일을 포함하는 장치의 장치 ID와 함께 해당 파일 일련 번호는 전체 시스템 내에서 파일을 고유하게 식별한다.[10]

POSIX 시스템 내에서 파일은 다음과 같은 속성을[10] 가지고 있으며, 이 속성은 에 의해 검색될 수 있다.stat시스템 호출:

  • 장치 ID(이것은 파일을 포함하는 장치, 즉 일련 번호의 고유성 범위를 식별한다).
  • 일련 번호를 입력하십시오.
  • 파일 형식과 파일 소유자, 그룹 및 기타 사용자가 파일에 액세스할 수 있는 방법을 결정하는 파일 모드.
  • 인노드를 가리키는 하드 링크 수를 나타내는 링크 수입니다.
  • 파일 소유자의 사용자 ID.
  • 파일의 그룹 ID.
  • 장치 파일인 경우 파일의 장치 ID.
  • 파일의 크기(바이트).
  • inode 자체를 마지막으로 수정한 시기를 나타내는 타임스탬프(Timestamps)ctime, inode 변경 시간), 파일 컨텐츠 최종 수정(mtime, modification time) 및 최종 액세스(attime, access time)
  • 선호하는 I/O 블록 크기.
  • 이 파일에 할당된 블록 수입니다.

시사점

inode로 설계된 파일 시스템은 다음과 같은 관리 특성을 갖는다.

  • 파일에는 여러 개의 이름이 있을 수 있다.여러 개의 이름이 동일한 inode에 연결되면 이름은 동일하다. 즉, 처음 생성되는 이름은 특별한 상태가 없다.이는 inode(숫자)가 아니라 원래 이름에 따라 달라지는 상징적 링크와는 다르다.
  • inode에는 링크가 없을 수 있다.연결되지 않은 파일은 디스크에서 제거되고 해당 리소스는 재할당을 위해 해제되지만 삭제는 열린 모든 프로세스가 해당 파일에 액세스할 때까지 기다려야 한다.여기에는 실행 중인 프로세스에 의해 암묵적으로 열려 있는 실행 파일이 포함된다.
  • 일반적으로 열린 파일에서 파일을 여는 데 사용된 파일 이름에 매핑할 수 없다.운영체제는 즉시 파일 이름을 inode 번호로 변환한 후 파일 이름을 삭제한다.getcwd()getwd() 라이브러리 함수는 작업 디렉토리와 일치하는 inode가 있는 파일을 찾기 위해 상위 디렉토리를 검색한 다음 루트 디렉토리에 도달할 때까지 해당 디렉토리의 상위 디렉토리를 검색하는 것이다.SVR4리눅스 시스템은 이를 가능하게 하기 위해 추가 정보를 유지한다.
  • 역사적으로 디렉토리를 하드 링크하는 것이 가능했다.이것은 디렉토리 구조를 지시된 순환 그래프와 반대로 임의의 지시된 그래프로 만들었다.디렉토리가 자신의 부모일 수도 있었다.근대의 시스템에서는 뿌리의 모체가 여전히 뿌리로 정의되어 있다는 점을 제외하고는 일반적으로 이러한 혼동 상태를 금지하고 있다.이러한 금지에 대한 가장 주목할 만한 예외는 슈퍼 유저에 의해 디렉토리의 하드 링크가 생성될 수 있는 Mac OS X(10.5 이상 버전)에서 찾을 수 있다.[11]
  • 파일의 inode 번호는 파일이 동일한 장치의 다른 디렉토리로 이동될 때 또는 디스크 조각 모음을 할 때 그대로 유지되며, 이로 인해 물리적 위치가 변경될 수 있으므로, 파일의 읽기와 쓰기를 방해하지 않고 파일을 이동하고 이름을 변경할 수 있다.이는 또한 파일의 디렉토리 항목과 데이터가 모두 이동될 때 이 비침습성을 저장할 방법이 없는 FAT와 그 하위 파일과 같은 많은 비유닉스 파일 시스템에서는 완전히 일치하는 inode 동작을 구현하는 것이 불가능하다는 것을 의미한다.
  • inode 파일 시스템을 사용하면 새 라이브러리의 설치가 간단하다.실행 중인 프로세스는 라이브러리 파일에 액세스할 수 있고, 다른 프로세스는 해당 파일을 대체하여 새로운 inode를 생성하고, 이후 라이브러리에 액세스하려는 시도가 새로운 버전을 얻을 수 있도록 새 파일에 대한 완전히 새로운 매핑이 존재할 것이다.이 시설은 현재 매핑된 라이브러리를 교체하기 위해 재부팅할 필요가 없다.
  • 장치에 inode가 고갈될 수 있다.이 경우 사용 가능한 공간이 있을 수 있지만 장치에 새 파일을 만들 수 없다.이것은 많은 작은 파일을 포함하는 메일 서버와 같은 사용 사례에서 가장 흔하다.파일 시스템(: JFS 또는 XFS)은 파일 시스템을 "증가"하거나 inode 수를 증가시킬 수 있는 범위 또는 동적 inode 할당을 통해 이러한 제한에서 벗어날 수 있다.

인라이닝

매우 작은 파일을 inode 자체에 저장하여 공간(데이터 블록이 필요하지 않음)과 조회 시간(추가 디스크 액세스 필요 없음)을 모두 저장하는 것이 타당할 수 있다.이 파일 시스템 기능을 인라이닝이라고 한다.따라서 현대적인 파일 시스템을 사용할 때 더 이상 inode와 파일 데이터의 엄격한 분리를 가정할 수 없다.

파일의 데이터가 데이터 포인터를 위해 할당된 공간에 맞으면 이 공간을 편리하게 사용할 수 있다.예를 들어, ext2와 그 후계자는 데이터가 60바이트("빠른 심볼 링크")[12] 이하인 경우 이러한 방식으로 symlinks 데이터(일반적으로 파일 이름)를 저장한다.

Ext4에는 파일 시스템 옵션이 있으며inline_data파일 시스템 생성 중에 활성화된 경우 ext4가 인라이닝을 수행할 수 있는 기능.inode의 크기가 제한적이기 때문에, 이것은 매우 작은 파일에만 적용된다.[13]

비유닉스 시스템

  • NTFS에는 파일을 B-트리에 저장하는 마스터 파일 테이블(MFT)이 있다.각 항목에는 "파일"이 있다.inode 번호와 유사한 ID"는 이 항목을 고유하게 참조한다.[14]세 개의 타임스탬프, 장치 ID, 속성, 참조 수, 파일 크기 등이 항목에서 발견되지만, POSIX와 달리 권한은 다른 API를 통해 표현된다.[15]디스크 내 레이아웃은 더 복잡하다.[16]이전의 FAT 파일 시스템은 그러한 테이블을 가지고 있지 않았고 하드 링크를 만들 수 없었다.
    • NTFS는 또한 작은 파일을 MFT 항목에 삽입하는 개념을 가지고 있다.[17]
    • 파생된 ReFS는 동음이의 MFT를 가지고 있다. ReFS는 128비트 파일 ID를 가지고 있다. 이 확장자는 또한 원래 64비트 파일 ID를 가지고 있던 NTFS로 역포팅되었다.[15]
  • 클러스터 Shared VolumesSMB 3.0에서 동일한 stat-like GetFileInformationByHandle API를 사용할 수 있으므로 이러한 시스템들은 아마도 파일 ID와 유사한 개념을 가지고 있을 것이다.[15]

참고 항목

참조

  1. ^ Tanenbaum, Andrew S. Modern Operating Systems (3rd ed.). p. 279.
  2. ^ JVSANTEN. "Difference between mtime, ctime and atime - Linux Howtos and FAQs". Linux Howtos and FAQs.
  3. ^ "Anatomy of the Linux virtual file system switch". ibm.com.
  4. ^ 리눅스 커널 목록 아카이브.2011-01-12년에 검색됨
  5. ^ Ritchie, Dennis M.; Thompson, Ken (1978). "The UNIX Time-Sharing System". The Bell System Technical Journal. 57 (6): 1913–1914. Retrieved 19 December 2015.
  6. ^ Maurice J. Bach (1986). The Design of the UNIX Operating System. Prentice Hall. ISBN 978-0132017992.
  7. ^ Bach, Maurice J. (1986). The Design of the UNIX Operating System. Prentice Hall. p. 94. Bibcode:1986duos.book.....B.
  8. ^ "linfo". The Linux Information Project. Retrieved 11 March 2020.
  9. ^ "Definitions - 3.176 File Serial Number". The Open Group. Retrieved 10 January 2018.
  10. ^ a b "<sys/stat.h>". The Open Group. Retrieved 15 January 2018.
  11. ^ "What is the Unix command to create a hardlink to a directory in OS X?". Stack Overflow. 16 Jan 2011. Archived from the original on 5 January 2020. Retrieved 5 Jan 2020.
  12. ^ "The Linux kernel: Filesystems". tue.nl.
  13. ^ "Ext4 Disk Layout". kernel.org. Retrieved August 18, 2013.
  14. ^ "Does Windows have Inode Numbers like Linux?". Stack Overflow.
  15. ^ a b c "GetFileInformationByHandle function (fileapi.h) - Win32 apps". docs.microsoft.com.
  16. ^ "[MS-FSCC]: NTFS Attribute Types". docs.microsoft.com.
  17. ^ "Windows - Maximum size of file that can be stored entirely in NTFS Master File Table (MFT)".

외부 링크