수퍼 블록, 아이 노드, 덴 트리 및 파일이란 무엇입니까?


125

M. Tim Jones 의 Linux 파일 시스템 분석 기사 에서 Linux 는 일반적인 객체 세트의 관점에서 모든 파일 시스템을보고 이러한 객체는 수퍼 블록 , inode , dentryfile 이라는 것을 읽었습니다 . 단락의 나머지 부분에서 위의 내용을 설명했지만 그 설명에 익숙하지 않았습니다.

누군가 나에게이 용어를 설명해 줄 수 있습니까?

답변:


136

우선, 나는 그것이 귀하의 질문의 용어 중 하나가 아니라는 것을 알고 있습니다 . 메타 데이터 를 이해해야 합니다 . 간결하게 위키피디아에서 도난당한 메타 데이터는 데이터에 대한 데이터입니다. 즉, 메타 데이터에는 데이터에 대한 정보가 포함되어 있습니다. 예를 들어, 자동차를 소유 한 경우 자동차에 대한 정보가 있지만 자동차 자체의 일부는 아닙니다. 등록 번호, 제조사, 모델, 제조년도, 보험 정보 등과 같은 정보. 이 모든 정보를 통칭하여 메타 데이터라고합니다. Linux 및 UNIX 파일 시스템에서는 메타 데이터가 여러 수준의 조직에 존재합니다.

수퍼 본질적 파일 시스템 메타 데이터이며 다른 메타 데이터 구조 (메타 데이터의 메타 데이터)에 대한 파일 시스템의 형태, 크기, 상태 등의 정보를 정의한다. 수퍼 블록은 파일 시스템에 매우 중요하므로 각 파일 시스템에 대해 여러 개의 중복 사본에 저장됩니다. 수퍼 블록은 파일 시스템을위한 매우 "높은 수준의"메타 데이터 구조입니다. 예를 들어, 파티션의 수퍼 블록 인 / var가 손상되면 운영 체제가 해당 파일 시스템 (/ var)을 마운트 할 수 없습니다. 일반적으로이 경우에는 다음을 실행해야합니다.fsck그러면 수퍼 블록의 대체 백업 사본이 자동으로 선택되고 파일 시스템 복구가 시도됩니다. 백업 사본 자체는 파일 시스템을 통해 분산 된 블록 그룹에 저장되며 첫 번째는 파티션 시작에서 1 블록 오프셋에 저장됩니다. 수동 복구가 필요한 경우에 중요합니다. dumpe2fs /dev/foo | grep -i superblock수동 복구 시도시 유용한 명령 을 사용하여 수퍼 블록 백업에 대한 정보를 볼 수 있습니다 . dumpe2fs 명령이 행을 출력한다고 가정 해 봅시다 Backup superblock at 163840, Group descriptors at 163841-163841. 이 수퍼 블록 백업을 사용하기 위해이 정보와 파일 시스템 구조에 대한 추가 지식을 사용할 수 있습니다 /sbin/fsck.ext3 -b 163840 -B 1024 /dev/foo. 이 예제에서는 1024 바이트의 블록 크기를 가정했습니다.

아이 노드는 존재, 또는에, 파일 시스템 및 파일에 대한 메타 데이터를 나타냅니다. 명확하게하기 위해 Linux 또는 UNIX 시스템의 모든 객체는 파일입니다. 실제 파일, 디렉토리, 장치 등 inode에 포함 된 메타 데이터 중에서 사람이 생각하는 파일 이름이 없으므로 나중에 중요 할 것입니다. inode에는 기본적으로 소유권 (사용자, 그룹), 액세스 모드 (읽기, 쓰기, 실행 권한) 및 파일 유형에 대한 정보가 포함됩니다.

dentry는 이름을 파일에 inode 번호를 관련하여 함께 아이 노드 및 파일을 보유하고있는 접착제이다. 또한 치과의 사는 디렉토리 캐싱에서 역할을 수행하는 것이 가장 이상적입니다. 가장 자주 사용하는 파일을보다 빨리 액세스 할 수 있도록 보관합니다. 파일 시스템 탐색은 디렉토리와 파일 간의 관계를 유지하므로 dentry의 또 다른 측면입니다.

파일은 일반적으로 단어를 제시 할 때 생각하는 인간이 무슨 일뿐만 아니라, 논리적으로 관련된 임의의 데이터의 정말 그냥 블록입니다. 그것들을 추적하기 위해 (위의) 모든 작업을 고려하면 비교적 무미합니다.

나는 몇 문장이 이러한 개념들에 대한 완전한 설명을 제공하지 않는다는 것을 완전히 알고 있으므로 필요할 때 언제 어디서나 추가 세부 사항을 요청하십시오.


@Tok : 다음과 같이 덤프합니다 (답변에 표시됨) : 163840의 백업 수퍼 블록, 163841-163841의 그룹 설명자 또는이 방법입니까 : 163840의 백업 수퍼 블록, 163841-163842의 그룹 설명자? 오타입니까? :-)
Sen

@TOK : 163840의 백업 수퍼 블록, 163841-163842의 그룹 설명자, 그룹 설명자는 어떤 정보를 전달합니까?
Sen

@Sen-이론적으로 그룹 디스크립터는 여러 블록에 걸쳐있을 수 있지만 대부분의 데스크탑 시스템에서는 단일 블록 만 사용하며 $ ((BackupBlock + 1))-$ ((BackupBlock + 1))
Tok

@ TOK : 내 시스템에서 좋아 $ ((BackupBlock + 1))-$ ((BackupBlock + 2))
Sen

@Sen-그룹 디스크립터는 블록 그룹을 설명합니다. 그게 무슨 뜻이야? 더 많은 메타 데이터. 기본적으로 그룹 디스크립터에는 블록 비트 맵 (블록 할당 비트 맵의 ​​블록 번호), 아이 노드 비트 맵 (동일하지만 동일), 아이 노드 테이블 (아이 노드 테이블의 시작 블록의 블록 번호), 사용 가능한 블록 및 아이 노드 수, 사용 된 디렉토리 수. 이것은 모두 ext2 파일 시스템을 기반으로합니다. 그룹 디스크립터는 적절한 파일 시스템 작동에 매우 중요하며 수퍼 블록과 함께 복제됩니다.
Tok

49

파일

파일은 특정 순서로 배열 된 많은 바이트를 의미합니다. 일반적인 사람들이 파일의 내용을 부르는 것입니다. Linux는 파일을 열면 파일 객체도 작성합니다. 파일 객체는 파일이 저장된 위치 및 사용중인 프로세스에 대한 데이터를 보유합니다. 파일이 닫히면 파일 객체 (파일 데이터 자체는 아님)가 삭제됩니다.

이노 드

inode ( "인덱스 노드"의 약자)는 Linux가 저장하는 파일에 대한 속성입니다. 각 파일마다 하나의 inode가 있습니다 (일부 파일 시스템에서는 정보가 파일 시스템에 분산되어 있기 때문에 Linux는 자체 inode를 만들어야합니다). inode는 파일을 소유 한 사람, 파일의 크기 및 파일을 열 수있는 사람과 같은 정보를 저장합니다. 각 inode에는 파일 시스템 파티션 고유의 숫자도 포함되어 있습니다. 이 inode에서 설명하는 파일의 일련 번호와 같습니다.

치과

dentry ( "디렉토리 항목"의 줄임말)는 Linux 커널이 디렉토리의 파일 계층을 추적하기 위해 사용하는 것입니다. 각 dentry는 inode 번호를 파일 이름과 상위 디렉토리에 맵핑합니다.

수퍼 블록

수퍼 블록은 파일 시스템의 고유 한 데이터 구조입니다 (손상을 방지하기 위해 여러 복사본이 존재하지만). 수퍼 블록은 파일 시스템에 대한 메타 데이터를 보유합니다.이 inode는 최상위 디렉토리이며 사용 된 파일 시스템 유형입니다.


11

수퍼 블록 , 인덱스 노드 (또는 inode ), 디렉토리 항목 (또는 dentry ) 및 마지막으로 파일 오브젝트는 가상 파일 시스템 (VFS) 또는 가상 파일 시스템 스위치의 일부 입니다. VFS의 목적은 클라이언트 응용 프로그램이 서로 다른 유형의 콘크리트 파일 시스템에 균일 한 방식으로 액세스 할 수 있도록하는 것입니다.

VFS에서 주요 객체의 관계

여기에 이미지 설명을 입력하십시오


inode는 유닉스 / 리눅스 파일 시스템의 데이터 구조입니다. inode는 일반 파일, 디렉토리 또는 기타 파일 시스템 객체에 대한 메타 데이터를 저장합니다. Inode는 파일과 데이터 간의 인터페이스 역할을합니다. inode는 파일이나 디렉토리 또는 다른 객체에 대한 심볼릭 링크를 나타낼 수 있습니다. 여기에는 고유 번호 (i- 번호), 이름, 날짜, 크기 및 읽기 / 쓰기 권한을 포함한 파일 속성 및 파일 위치에 대한 포인터가 포함됩니다. DOS / Windows 환경에서 FAT 테이블에 대응합니다.

프로그램, 서비스, 텍스트, 이미지 등은 모두 파일 입니다. 시스템에 따르면 입력 및 출력 장치와 일반적으로 모든 장치는 파일 로 간주됩니다 .

수퍼 블록은 파일 시스템에 대한 높은 수준의 메타 데이터에 대한 컨테이너입니다. 수퍼 블록은 디스크 (실제로 중복성을 위해 디스크의 여러 위치)와 메모리에 존재하는 구조입니다. 파일 시스템의 관리 매개 변수 (예 : 총 블록 수, 사용 가능한 블록, 루트 색인 노드)를 정의하므로 디스크상의 파일 시스템을 처리하기위한 기초를 제공합니다.

Dentry는 파일과 Inode 간의 인터페이스입니다. 또한 치과의 사는 디렉토리 캐싱에서 역할을 수행하는 것이 가장 이상적입니다. 가장 자주 사용하는 파일을보다 빨리 액세스 할 수 있도록 보관합니다.

출처


5

간단하게 dentry와 inode는 파일이나 디렉토리의 추상화와 동일합니다. dentry와 inode의 차이점은 dentry는 디렉토리 별 작업을 용이하게하는 데 사용되고 inode는 파일 또는 디렉토리에 대한 메타 데이터의 모음 일뿐입니다. 수퍼 블록은 파일 시스템의 추상화입니다.

struct file리눅스 커널에서 다른 많은 것들 (예 :)로 잘못 이름이 붙여졌고 struct address_space실제 "파일"(예 : / etc / passwd)의 추상화가 아닙니다. 열린 "파일"또는 디렉토리를 나타냅니다. 커널에 struct file의해 생성 sys_open되므로 프로세스는 struct file동일한 파일에 대해 많은 것을 가질 수 있습니다 .

왜 치과 의사가 필요합니까? 경로 이름 (예 : / etc / passwd)에서 inode 로의 변환 속도를 높이는 데 사용됩니다. Linux 커널은 inode를 사용하여 이름이 아닌 "파일"또는 디렉토리를 조작합니다.


4

이 용어는 Linux에만 국한된 것이 아니라 파일 시스템에 따라 다릅니다. 현재 Unix 및 Unix와 같은 시스템에서 사용되는 대부분의 파일 시스템은 수퍼 블록 및 inode 관용구를 정의한 원래 Unix 파일 시스템에서 파생되거나 영감을 얻습니다. 리눅스는 또한 수퍼 블록 및 / 또는 아이 노드 (inode)라는 개념이없는 여러 파일 시스템을 마운트 할 수 있으며, 가장 일반적인 것은 FAT입니다. 또 다른 ZFS는 수퍼 블록을 사용하지 않고 위버 블록을 사용합니다.


오랜 시간이 지난 후에이 의견을 읽으시기 바랍니다. VFS에는 EXT2의 inode 및 수퍼 블록과 관련이없는 inode 및 수퍼 블록이 있습니다. VFS를 가지고있는 모든 리눅스 덕분에, 여러분은 모두 inode와 수퍼 블록을 사용해야한다는 것을 오해하지 말아야합니다.
CuriousKimchi

1
@CuriousKimchi 여기에 동일한 이름이 있음에도 불구하고 디스크 (수퍼 블록 / 아이 노드)에 저장된 정보와 커널이 파일 시스템 및 파일에 액세스하는 데 사용하는 구조를 혼동해서는 안됩니다. 모든 파일 시스템에는 파일 시스템 특성을 설명하는 디스크에 일부 메타 데이터가 있으며이 메타 데이터는 Linux VFS 수퍼 블록 구조를 채우는 데 사용됩니다. 마찬가지로 파일은 VFS에서 커널 inode 구조를 갖습니다. 기본 파일 시스템에 inode 개념이 없으면이 구조에는 운영 체제에서 생성 한 가짜 inode 번호가 포함됩니다.
jlliagre
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.