파일 시스템 및 파일 --- 개념, 스토리지 구조, 액세스

참조 문서:

https://blog.csdn.net/github_37882837/article/details/90672881

http://c.biancheng.net/view/880.html

https://blog.csdn.net/qq_22613757/article/details/80853391

https://www.iteye.com/topic/816268

머리말

    인터넷에있는 파일과 파일 시스템의 내용은 상대적으로 조각화되어 있으며 이것은 단지 벽돌에 불과합니다. 다양한 위대한 신의 기사를 읽은 후 나중에 참조 할 수 있도록 이해하는 방식으로 게시하십시오. 

 

하나, 파일 시스템

 

1. 파일 시스템 개념

    파일 시스템은 장치에서 데이터와 메타 데이터를 구성하기위한 메커니즘입니다.

    각 운영 체제에서 사용하는 파일 시스템이 다릅니다. 예를 들어, WINDOWS98 이전의 Microsoft 운영 체제는 FAT (FAT16) 파일 시스템을 사용하고 WINDOWS 2000 이후 버전은 NTFS 파일 시스템을 사용합니다. Linux의 정통 파일 시스템은 EXT2입니다.

    하드 디스크를 포맷하면 하드 디스크의 데이터 만 지워지고 실제로는 그렇지 않습니다. 파일 시스템은 포맷 과정에서 하드 디스크에 기록됩니다. 운영 체제마다 시스템에서 파일을 관리하는 방법이 다르기 때문에 (파일에 대해 설정된 속성 및 권한이 정확히 같지 않음) 하드 디스크가 현재 시스템에 파일 데이터를 효과적으로 저장하려면 하드 디스크가 운영 체제와 동일한 (또는 가까운) 파일 시스템 형식을 사용하도록 포맷합니다.

 

2. 파일 시스템 수준

 

                                       

                                                                                그림 1 Linux 파일 시스템 계층

     위에서 아래로 주로 사용자 계층, VFS 계층, 파일 시스템 계층, 일반 블록 드라이버 계층, 드라이버 계층, 물리 계층으로 나뉩니다.

    1) 응용 프로그램 : 최상위 사용자 계층은 우리가 매일 사용하는 다양한 프로그램이며 필요한 인터페이스는 주로 파일 생성, 삭제, 열기, 닫기, 쓰기, 읽기 등입니다.

    2) SCI (System Call Interface) : 가상 파일 시스템에서 제공하는 인터페이스를 캡슐화합니다.

    3) VFS 계층 : 가상 파일 시스템, 다른 파일 시스템 추상화, 상위 레벨 애플리케이션을위한 통합 API 인터페이스 제공. 사용자 공간은 다른 파일 시스템의 다른 API에 대해 신경 쓸 필요가 없습니다. VFS에서 제공하는 통합 API가 시스템 호출 인터페이스에 의해 캡슐화되면 사용자는 SCI 시스템 호출을 사용하여 다른 파일 시스템을 작동 할 수 있습니다.

    4) 파일 시스템 계층 : 다른 파일 시스템은 VFS의 이러한 기능을 구현하고 포인터를 통해 VFS에 등록합니다. 따라서 사용자 작업은 VFS를 통해 다양한 파일 시스템으로 전송됩니다.

    5) 일반 블록 드라이버 계층 : 다른 하드웨어 장치의 세부 정보를 숨기고 커널에 대한 통합 IO 작업 인터페이스를 제공합니다.이 계층을 수정하면 ext3, ext4 또는 다른 파일 시스템이든 모든 파일 시스템에 영향을 미칩니다.

    6) 장치 드라이버 : 디스크 드라이버 계층, 디스크 드라이버는 디스크에 대한 읽기 및 쓰기 명령을 자체 프로토콜 또는 자체 하드웨어에서 인식 할 수있는 사용자 지정 명령으로 변환하여 디스크 컨트롤러로 보냅니다.

    7) 물리 디스크 : 디스크 물리 계층, 물리 데이터를 읽고 디스크 미디어에 씁니다.

 

3. 파일 시스템 저장 구조

    EXT4 파일 시스템을 예로 들어 보면, EXT4 파일 시스템은 주로 블록 그룹 0의 슈퍼 블록과 블록 그룹 디스크립터 테이블을 사용하며, 다른 특정 블록 그룹에는 슈퍼 블록과 블록 그룹 디스크립터 테이블의 중복 백업이 있습니다. 블록 그룹에 중복 백업이없는 경우 블록 그룹은 데이터 블록 비트 맵으로 시작됩니다. 포맷 된 디스크가 Ext4 파일 시스템이되면 mkfs는 향후 파일 시스템 확장을 위해 블록 그룹 설명자 테이블 뒤에 예약 된 GDT 테이블 데이터 블록 ( "Reserve GDT 블록")을 할당합니다. 예약 된 GDT 테이블 데이터 블록이 데이터 블록 비트 맵과 inode 테이블 비트 맵 인 직후,이 두 비트 맵은 각각 inode 테이블 데이터 블록 다음에 블록 그룹에서 데이터 블록 및 inode 테이블의 사용을 나타냅니다. 파일을 저장하는 데이터 블록입니다. 이러한 다양한 블록 중 슈퍼 블록, GDT, 블록 비트 맵, 인덱스 노드 비트 맵은 전체 파일 시스템의 메타 데이터입니다. 물론 inode 테이블도 파일 시스템의 메타 데이터이지만 inode 노드 테이블은 파일과 관련이 있습니다. 일대일 대응의 경우 인덱스 노드를 파일의 메타 데이터로 취급하는 것을 선호합니다. 파일 시스템이 실제로 포맷 될 때 이미 사용 된 10 개 정도를 제외하고는 다른 inode 테이블에 실제로 데이터가 없기 때문입니다. 해당 파일이 생성 될 때까지 할당되지 않는 inode 테이블이며 파일 시스템은 해당 파일과 관련된 inode 정보를 inode 테이블에 기록합니다.

 

                                 

                                                                           그림 2 EXT4 파일 시스템의 표준 디스크 레이아웃

    1) 슈퍼 블록 : 파일 시스템의 첫 번째 블록을 슈퍼 블록 (전체 파일 시스템의 정보 기록)이라고하며이 블록은 파일 시스템 자체의 구조 정보를 저장합니다. 예를 들어, 수퍼 블록은 데이터 블록 수, inode 수, 사용되지 않은 블록 수, 지원되는 기능 및 관리 정보를 기록합니다.

    2) 빠른 그룹 디스크립터 : 각 블록 그룹에는 해당 그룹 디스크립터가 있으며, 모든 그룹 디스크립터는 여러 데이터 블록을 차지할 수있는 그룹 디스크립터 테이블을 구성합니다. 그룹 디스크립터는 각 블록 그룹의 수퍼 블록에 해당하며 그룹 디스크립터가 소멸되면 전체 블록 그룹을 사용할 수 없게되므로 그룹 디스크립터 테이블도 수퍼 블록처럼 각 블록 그룹에 백업됩니다. 손상을 방지합니다. 그룹 디스크립터 테이블이 차지하는 블록은 사용 중에 블록 캐시로 전송되는 일반 데이터 블록과 동일합니다.

    3) 데이터 블록 비트 맵 및 아이 노드 비트 맵 : 데이터 블록 비트 맵은 블록 그룹에서 데이터 블록의 사용을 추적합니다. Inode 비트 맵은 블록 그룹에서 Inode의 사용을 추적합니다. 각 비트 맵에는 데이터 블록이 있으며 각 비트는 0 또는 1을 사용하여 블록 그룹의 데이터 블록 또는 inode 테이블의 inode 사용을 나타냅니다. 데이터 블록의 크기가 4KB이면 해당 비트 맵 블록은 4 * 1024 * 8 데이터 블록의 사용량을 나타낼 수 있으며 이는 단일 블록 그룹의 최대 데이터 블록 수이기도합니다. 블록 그룹의 크기는 128MB라고 계산할 수 있습니다. 물론 비트 맵 블록은 4 * 1024 * 8 inode의 사용을 나타낼 수도 있지만 실제로는 블록 그룹이 파일로 가득 차 있어도 실제 시스템에는 기본적으로 inode가 없기 때문에 많은 inode가 사용되지 않습니다. 모든 파일 크기는 1 데이터 블록의 크기보다 작거나 같습니다. 사실, 블록 그룹의 inode 수는 블록 그룹 디스크립터에서 결정됩니다.이 값은 파일 시스템 포맷 프로세스 중에도 표시됩니다. 올바르게 기억하면 데이터가 4 개 또는 8 개일 것입니다. 블록은 inode 공간을 할당합니다.

    4) 노드 테이블에는 해당 파일 시스템의 모든 inode 번호를 나열하는 목록이 있습니다. 사용자가 파일을 검색하거나 액세스 할 때 Linux 시스템은 inode 테이블을 통해 올바른 inode 번호를 검색합니다. inode 번호를 찾은 후 관련 명령은 inode에 액세스하여 적절하게 변경할 수 있습니다.

 

4. 하드 링크와 소프트 링크의 연결 및 차이점

    하드 링크 및 소프트 링크 (심볼 링크, 소프트 링크 또는 기호 링크라고도 함). 링크는 Linux 시스템의 파일 공유를 해결하고 파일 경로 숨기기, 권한 보안 강화 및 스토리지 절약과 같은 이점을 제공합니다.

    하나의 inode 번호가 여러 파일 이름에 해당하는 경우 이러한 파일을 하드 링크라고합니다. 즉, 하드 링크는 동일한 파일에 여러 별칭을 사용하는 것입니다 ( 그림 3   참조 별칭 하드 링크는 파일이며 공통 inode를 가짐). 하드 링크는 명령 링크 또는 ln으로 만들 수 있습니다. 다음은 oldfile 파일에 대한 하드 링크를 만드는 것입니다.

    링크 oldfile newfile 或

    ln oldfile newfile

하드 링크는 inode 번호는 같지만 파일 이름이 다른 파일이므로 하드 링크는 다음과 같은 특성을 갖습니다.

    1) 파일은 동일한 inode 및 데이터 블록을 가지고 있습니다.

    2) 기존 파일 만 생성 할 수 있습니다.

    3) 파일 시스템간에 하드 링크를 생성 할 수 없습니다.

    4) 디렉토리를 만들 수없고 파일 만 만들 수 있습니다.

    5) 하드 링크 된 파일을 삭제해도 동일한 inode 번호를 가진 다른 파일에는 영향을주지 않습니다.

    소프트 링크는 하드 링크와 다르며, 파일의 사용자 데이터 블록에 저장된 내용이 다른 파일의 경로 이름으로 가리키면 해당 파일은 소프트 링크입니다. 소프트 링크는 일반 파일이지만 데이터 블록의 내용은 약간 특별합니다. 소프트 링크에는 자체 inode 번호와 사용자 데이터 블록이 있습니다 ( 그림 3 참조 ). 따라서 소프트 링크의 생성 및 사용에는 하드 링크와 유사한 제한 사항이 많지 않습니다.

    1) 소프트 링크에는 자체 파일 속성과 권한이 있습니다.

    2) 존재하지 않는 파일 또는 디렉토리에 대한 소프트 링크를 만듭니다.

    3) 소프트 링크는 파일 시스템을 교차 할 수 있습니다.

    4) 파일 또는 디렉토리에 대해 소프트 링크를 만들 수 있습니다.

    5) 소프트 링크를 생성 할 때 링크 수 i_nlink는 증가하지 않습니다.

    6) 소프트 링크를 삭제해도 포인팅 된 파일에는 영향을주지 않지만, 지정한 원본 파일이 삭제되면 관련 소프트 링크를 데드 링크라고합니다. 즉, 포인팅 된 경로 파일을 다시 생성하면 데드 링크를 복원 할 수 있습니다. 정상적인 소프트 링크입니다).

                                                                           

                                                                                     그림 3 소프트 링크 액세스 

    소프트 링크 만들기 : ln -s oldfile newfile.soft

    inode에서 파일 복사, 파일 이동 및 파일 삭제의 영향 :

    1) 파일 복사는 파일을 생성하고 Inode 및 Block을 설명하는 것입니다.

파일 생성 프로세스는 다음과 같습니다. 먼저 빈 Inode를 찾고, 새 Inode 테이블을 작성하고, 디렉토리를 만들고, 파일 이름에 해당하고, 파일 내용을 블록에 기록합니다.

    2) 파일 이동에는 두 가지 상황이 있습니다.

    동일한 파일 시스템에서 파일을 이동하고 새 파일 이름과 inode 대응을 생성합니다. 즉, Directory에 정보를 쓴 다음 Directory에서 이전 정보를 삭제하고 CTIME (파일 시간)을 업데이트하고 inode와 같은 기타 정보를 업데이트합니다. 영향 없음;

    다른 파일 시스템에서 파일을 이동할 때 먼저 빈 inode를 찾고, 새 inode 테이블에 쓰고, Directory에 대응을 만들고, 파일 내용을 블록에 쓰고, 동시에 CTIME을 변경합니다.

    3) 파일 삭제는 본질적으로 링크 수를 줄입니다. 링크 수가 0이면 inode를 사용할 수 있고 블록이 쓰기 가능으로 표시되지만 사용할 새 데이터가 없으면 블록의 데이터가 제거되지 않습니다. 이 블록.

 

5. Linux에서 지원하는 공통 파일 시스템

    

    장치에서 현재 Linux 시스템이 지원하는 파일 시스템 유형보기 : cat / proc / filesystems

 

2. 문서

1. 파일 저장 구조

    Linux orthodox 파일 시스템 (예 : ext2, ext3) 파일은 디렉토리 항목, inode 및 데이터 블록으로 구성됩니다.

    디렉토리 항목 : 파일 이름 및 inode 노드 번호 포함.

    Inode : 파일 인덱스 노드라고도하며 파일 기본 정보의 저장 위치와 데이터 블록 포인터의 저장 위치입니다.

    데이터 블록 : 파일의 특정 콘텐츠가 저장되는 위치입니다.

    정통 Linux 파일 시스템 (예 : ext2, 3, 4 등)은 하드 디스크를 디렉토리 블록, inode 테이블 블록 및 데이터 블록으로 분할합니다. 파일은 디렉토리 항목, inode 및 데이터 영역 블록으로 구성됩니다. Inode에는 파일의 속성 (예 : 읽기 및 쓰기 속성, 소유자, 데이터 블록에 대한 포인터)이 포함되며 데이터 영역 블록은 파일 내용입니다. 파일을 볼 때 먼저 inode 테이블에서 파일 속성과 데이터 저장 지점을 찾은 다음 데이터 블록에서 데이터를 읽습니다.

     파일 저장 구조는 대략 다음과 같습니다.

                                                      

                                                                                  그림 4 파일 저장 구조

     디렉토리 항목의 구조는 다음과 같습니다 (각 파일의 디렉토리 항목은 변경된 파일이 속한 디렉토리의 파일 내용에 저장됩니다).

                                                                         
                                                                                   그림 5 디렉터리 항목 구조

     파일의 inode 구조는 다음과 같습니다. inode에 포함 된 파일 정보는 stat filename을 통해 볼 수 있습니다.

                                               

                                                                                          그림 6 inode 구조

    위의 내용은 일반적인 구조를 반영 할 뿐이며 Linux 파일 시스템 자체는 지속적으로 발전하고 있습니다. 그러나 위의 개념은 기본적으로 변경되지 않습니다. 그리고 ext2, ext3, ext4 파일 시스템 간에도 큰 차이가 있는데 이해하고 싶다면 특수 파일 시스템의 도입을 확인할 수 있습니다.

 

2. 파일 시스템이 파일에 액세스하는 방법

    1) 파일 이름에 따라 Directory에서 해당 관계를 통해 파일에 해당하는 inode 번호 (inode 노드 번호)를 찾습니다.

    2) Inode 테이블을 검색하고 inode 번호에 해당하는 inode 노드를 찾습니다 (노드는 해당 데이터 블록의 주소를 저장합니다).

    3) inode 노드의 데이터 블록 포인터에 따라 해당 데이터 블록을 읽습니다.

참고 :

    1) 여기에 중요한 내용 인 Directory가 있는데, 일반적으로 말하는 디렉토리가 아니라 파일 / 디렉토리 이름에 해당하는 Inode 번호를 기록한 목록입니다.

    2) inode 노드는 파일 이름이 파일이 위치한 디렉토리의 데이터이므로 파일 이름을 저장하지 않으므로 상위 디렉토리의 데이터 블록에 저장됩니다.

 

3. 파일 유형

    Linux의 주요 파일 유형은 다음과 같습니다.

    1) 일반 파일 : C 언어 메타 코드, SHELL 스크립트, 바이너리 실행 파일 등 일반 텍스트와 바이너리로 나뉩니다.

    2) 디렉토리 파일 : 디렉토리, 파일을 저장하는 유일한 장소.

    3) 링크 된 파일 : 동일한 파일 또는 디렉토리를 가리키는 파일.

    4) 특수 파일 : 일반적으로 / dev 아래에있는 시스템 주변 장치와 관련된 파일입니다. 블록 디바이스와 캐릭터 디바이스로 구분됩니다.

    ls -l, file, stat 명령을 사용하여 파일 유형 및 기타 관련 정보를 볼 수 있습니다.

     a : 일반 파일, 즉 f :

    d : 디렉토리, 디렉토리 파일

    b : 블록 장치, 블록 장치 파일, 블록 단위의 랜덤 액세스 지원

    c : 문자 장치, 문자 장치 파일, 문자 단위로 액세스 지원

    주요 번호 : 주요 장치 번호, 장치 모델을 표시하고로드 할 드라이버를 결정하는 데 사용됩니다.

    부 번호 : 동일한 유형의 다른 장치를 식별하는 데 사용되는 부 장치 번호

    l : 심볼릭 링크, 심볼릭 링크 파일

    p : 파이프, 명명 된 파이프

    s : 소켓, 소켓 파일

추천

출처blog.csdn.net/the_wan/article/details/108554957