인덱스 노드란 무엇입니까? [복사]

인덱스 노드란 무엇입니까? [복사]

중복 가능성:
슈퍼블록, 아이노드, 디렉토리 항목 및 파일이란 무엇입니까?

Unix 파일 시스템에 대한 문서에는 "inode"라는 용어가 포함되는 경우가 많습니다. 그게 무엇이고 무슨 역할을 하나요? DOS/Windows 파일 시스템에 inode가 없는 이유는 무엇입니까?

답변1

"inode"는 Unix 파일 시스템이 단일 파일과 관련된 정보를 보관하기 위해 사용하는 디스크 데이터 블록을 가리키는 비공식적 용어입니다. 전통적으로 "inode"는 파일의 실제 내용을 보유하는 디스크 블록의 블록 번호를 보유합니다. 전통적으로 디렉토리 항목에는 파일 이름, 파일 유형 등이 포함됩니다. 이 두 가지 데이터는 별개입니다.

즉, 많은 Unixy 항목이 누락되었습니다. 전통적으로 파일 이름은 inode의 일부가 아닙니다. 파일 이름은 파일 이름과 inode 번호가 일치하는 파일(자체 inode 및 콘텐츠 포함)인 "디렉터리"에서 가져옵니다. C 전처리기 매크로를 사용하면 코드가 매우 적은 계산만으로 inode 번호에서 디스크 블록으로 이동할 수 있습니다.

따라서 여러 이름이 동일한 인덱스 노드를 참조할 수 있습니다. 여기에서 하드 링크가 생성됩니다. "."를 갖는 능력도 마찬가지입니다. 항상 스푸핑 없이 현재 디렉터리를 참조하세요. 디렉터리에는 항상 디렉터리 자체의 inode 번호와 디렉터리가 위치한 디렉터리에 해당하는 "." 및 ".." 파일 이름이 포함됩니다. "." 및 ".." 파일 이름은 각 디렉토리에 항목이 있습니다. 파일 시스템 코드에 실제로 데이터가 없는 특별한 경우는 아닙니다.

Unix 파일의 계층 구조는 inode에서 나옵니다. 디스크는 기본적으로 512바이트, 1KB, 4KB 등 특정 크기의 "블록"의 선형 배열입니다. Inode 0은 항상 지정된 디스크 블록에 위치하므로 Unix 커널은 파일 시스템의 루트를 찾기 위해 "inode 0"만 알면 되며 "/"를 inode 9와 연결할 수 있습니다. Inode 0도 디렉토리 파일입니다. "usr", "bin", "tmp", "dev" 등은 inode 0에 항목이 있습니다. 따라서 inode를 사용하면 디스크에 있는 데이터 블록의 선형 목록을 계층 구조로 매핑할 수 있습니다.

Inode는 디스크에 위치합니다. 원래 Unix 파일 시스템에서는 디스크의 첫 번째 1/3 또는 1/4이 inode였습니다. 나머지는 필요에 따라 파일에 할당되는 데이터 블록이며 디스크 블록 번호는 inode로 끝납니다. 수년에 걸쳐 다양한 파일 시스템(예: BSD FFS)은 inode 영역을 디스크의 다른 위치에 배치하여 디스크의 실제 물리적 구조를 설명하려고 시도했습니다.

Winodws NT "NTFS" 파일 시스템에는 inode와 직접적으로 유사한 항목, 즉 기본 파일 테이블의 항목이 있습니다. NTFS는 조상인 DEC VMS Files-11에서 이를 물려받은 것으로 보입니다. Files-11 "파일 헤더"는 $MFT의 항목과 거의 동일해 보입니다.

저는 다른 Windows/DOS 파일 시스템(FAT, FAT32 등)에 전혀 익숙하지 않지만 파일 할당 테이블의 레코드는 디렉토리 항목과 inode가 결합된 것과 유사한 것 같습니다. 내 생각에는 명명 및 계층 구조와 디스크 블록 데이터의 조합이 FAT 파일 시스템을 매우 취약하게 만드는 것 같습니다. 프로그램이 디스크의 개별 inode 데이터를 샅샅이 뒤져 찾은 파일을 "lost+found"에 넣을 수는 없습니다. 일단 파일 할당 테이블이 손상되면 파일 데이터의 블록 구성원도 손실됩니다. 파일의 파일 멤버십도 손실되기 때문입니다. 목차.

관련 정보