우수 답변
요약
각 파일 시스템에는 다음과 같은 파일 시스템에 대한 정보가 포함 된 수퍼 블록이 있습니다.
- 파일 시스템 유형
- 크기
- 상태
- 다른 메타 데이터 구조에 대한 정보
자세히
수퍼 블록 파일 시스템을 나타내는 구조입니다. 작업 중 파일 시스템을 관리하는 데 필요한 정보가 포함되어 있습니다. 여기에는 파일 시스템 이름 (예 : ext4), 파일 시스템의 크기 및 해당 상태, 블록 장치에 대한 참조, 메타 데이터 정보 (예 : 사용 가능한 목록 등)가 포함됩니다. 수퍼 블록은 일반적으로 저장 매체에 저장되지만 존재하지 않는 경우 실시간으로 생성 할 수 있습니다. 수퍼 블록 구조는 ./linux/include/linux/fs.h에서 찾을 수 있습니다.
One 수퍼 블록의 중요한 요소는 수퍼 블록 작업의 정의입니다.이 구조는 파일 시스템 내에서 inode를 관리하기위한 기능 세트를 정의합니다. 예를 들어 inode는 alloc\_inode
로 할당하거나 삭제할 수 있습니다. destroy\_inode
. read\_inode
및 write\_inode
를 사용하여 inode를 읽고 쓸 수 있습니다. 또는 파일을 동기화 할 수 있습니다. sync\_fs
가있는 시스템. ./linux/include/linux/fs.h에서 super\_operations
구조를 찾을 수 있습니다. 각 파일 시스템은 작업을 구현하고 VFS 계층에 공통 추상화를 제공하는 자체 inode 메서드입니다.
물리적 구조
Ext2 파일 시스템의 물리적 구조는 레이아웃의 영향을 많이 받았습니다. BSD 파일 시스템의. 파일 시스템은 블록 그룹으로 구성됩니다. 블록 그룹은 BSD FFS의 실린더 그룹과 유사합니다. 그러나 최신 드라이브는 순차 액세스를 위해 최적화되고 운영 체제에 대한 물리적 구조를 숨기는 경향이 있기 때문에 블록 그룹은 디스크에있는 블록의 물리적 레이아웃과 관련이 없습니다.
,---------+---------+---------+---------+---------,
| Boot | Block | Block | ... | Block |
| sector | group 1 | group 2 | | group n |
`---------+---------+---------+---------+---------"
각 블록 그룹에는 중요한 파일 시스템 제어 정보 (수퍼 블록 및 파일 시스템 설명자) 및 파일 시스템의 일부 (블록 비트 맵, inode 비트 맵, inode 테이블의 일부 및 데이터 블록)도 포함합니다. 블록 그룹의 구조는 다음 테이블에 표시됩니다.
,---------+---------+---------+---------+---------+---------,
| Super | FS | Block | Inode | Inode | Data |
| block | desc. | bitmap | bitmap | table | blocks |
`---------+---------+---------+---------+---------+---------"
블록 그룹을 사용하면 안정성 측면에서 큰 이점이 있습니다. 제어 구조가 각 블록 그룹에 복제되기 때문에 전자 수퍼 블록이 손상된 파일 시스템에서 복구 할 수 있습니다. 이 구조는 또한 좋은 성능을 얻는 데 도움이됩니다. inode 테이블과 데이터 블록 사이의 거리를 줄임으로써 파일에 대한 I / O 중에 디스크 헤드 탐색을 줄일 수 있습니다.
참조 :- 확장 파일 시스템 (Ext, Ext2, Ext3)
Answer
Linux의 파일 시스템은 여러 계층에서 작동합니다. A) a 장치 (예 : 드라이버)와 상호 작용하는 기본 루틴 세트, B) 파일이라고 부르는 디스크에있는 레코드 세트, C) inodes 라고하는 각 파일에 대한 메타 데이터 정보이며 각 파일에 대해 1 개의 inode가 있습니다. 이 inode는 파일 속성이 무엇인지, 파일에 대한 읽기 / 쓰기가 정의되는 방법 등과 같은 것들을 추적합니다.
이것은 단지 불완전한 그림이라는 것을 알게됩니다. 각 종류의 파일 시스템이 디스크에서 원하는 방식으로 inode를 배열하기 전입니다. 디스크상의 inode 표현도 파일 시스템에 따라 다를 수 있습니다. 중요한 것은 보기 VFS가 제공하는 inode 구조에 동의합니다. 따라서 Linux는 “파일 시스템의 개별 파일 / inode에 액세스 할 수있는 방법 자체가 없습니다.
문제는 struct file\_system 및 struct를 사용하여 깔끔하게 처리됩니다. super\_block 유형. 후자는 디스크에 살고 전자는 메모리에만 살고 있습니다. say를 사용하여 파일 시스템을 마운트 할 때
mount -t ext4 / dev / usb1 / mnt / usb1
ext4 유형을 정의하는 file\_system 객체에는 mount () 루틴은 디스크에서 수퍼 블록 객체를 읽는 방법을 지정합니다. 이 수퍼 블록 객체는 장치의 inode에 액세스 (할당, 삭제, 읽기, 권한 부여, 장치와 메모리 간 동기화 등)하는 데 필요한 모든 것을 지정합니다.이 수퍼 블록 객체를 메모리로 가져 오면 lookup () 작업을 사용하여 디스크에서 메모리로 inode를 읽습니다. 그런 다음 이러한 inode를 차례로 사용하여 파일 시스템에 도달합니다. 계층 적이며 실제로 매우 깔끔합니다!