ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Linux File System ( 2 / x )
    카테고리 없음 2016. 7. 20. 22:28




    그룹 디스크립터 테이블 (Group Descriptor Table)

    + 블록 그룹 안에서 슈퍼블록 다음에 위치한다.
    + Group Descriptor 라고 불리는 파일 시스템의 블록 그룹들에 대한 정보를 가지고 있다.
    + 그룹 디스크립터 테이블에 저장되는 주요 데이터는 Block Bitmap의 블록 번호, Inode Bitmap의 블록 번호, 첫 번째 Inode Table Block의 블록번호, 그룹 안에 있는 빈 블록 수, 그룹 안에 있는 Inode 수, 그룹 안에 있는 빈 디렉토리 수 등이다.
    + Group Descriptor 의 크기는 32Byte로, 블록 크기가 1KB라면 하나의 블록에 총 32개의 Group Descriptor가 기록될 수 있다.
    + 서로 연결되어 있어서 전체적으로는 하나의 Group Descriptor Table을 형성하며 파일 시스템이 Mount될 때, 커널은  Group 0에 들어있는 Group Descriptor Table을 읽는다.
    + 주요 Data이기 때문에 손상 될 경우를 대비하여 모든 Block Group에 사본이 저장되어 있어 Group Descriptor Table이 문제가 있을 시 다른 Block Group에 있는 Group Descriptor Table의 복사본을 이용할 수 있다.

    주요 저장 내용
    • Block Bitmap의 블록 번호
    • Inode Bitmap의 블록 번호
    • 첫 번째 Inode Table Block의 블록 번호
    • 그룹 안에 있는 빈 블록 수
    • 그룹 안에 있는 Inode 수
    • 그룹 안에 있는 빈 디렉토리 수 


    블록 비트맵 (Block Bitmap)

    + 블록 그룹에서 그룹 디스크립터 테이블 다음으로 위치하지만, 정확한 위치는 정해져있지 않다.
    + 그룹 디스크립터 테이블의 크기가 일정하지 않기 때문이다.
    + 블록 비트맵(Block Bitmap)은 블록의 사용현황을 bit 표현으로 나타낸다. 
    + 각 비트에 해당하는 블록이 사용중이면 1, 사용중이지 않으면 0 으로 나타낸다


    아이노드 비트맵 (Inode Bitmap)

    + Block Bitmap 처럼  bit 표현을 이용하여 Block Group이 관리하는 모든 Inode의 사용 현황을 나타낸다



    아이노드 테이블 (Inode Table)

    + 인접하는 연속된 블록으로 이루어져 있으며, 각 블록은 미리 정의된 Inode 개수를 포함한다.
    + Inode의 첫 번째 블록의 번호를 Group Descriptor Table에 저장한다. 
    + 모든 Inode의 크기는 128Byte로 동일하다. 1024Byte의 Inode Table Block은  Inode 8개를 가질 수 있으며 4096byte의 Inode Table Block은 32개의 Inode를 가진다.





    아이노드 (Inode)

    + Inode는 파일이나 디렉토리의 모든 정보를 가지고 있는 자료 구조를 말한다.
    + 파일 객체가 저장되는 곳이다.
    + Inode의 크기는 슈퍼 블록에서 정의된 크기로 고정된다.
    + 모든 파일들과 디렉토리들은 각각 1개의 Inode를 가지고 있으며, 모든 Inode들은 고유한 주소를 가지고 있다.
    + inode의 주소를 알고 있다면 해당 Inode가 속한 블록 그룹이 어디인지 계산하여 알아낼 수 있다.
    + 시스템 측면에서는 Inode 번호로 파일을 처리하는데 이는 파일 이름이 Inode 번호와 함께 디렉토리 안에 저장되어 있기 때문이다.
    + Inode 는 파일의 이름을 제외한 해당 파일의 모든 정보를 가지고 있으며,  Inode Table 에서 해당 파일이나 디렉터리의 Inode 번호를 찾게 되면 모든 정보를 알 수 있다.
    + File System을 처음 생성(초기화) 하면 지정된 개수만큼 Inode들이 생성되며, 생성된 Inode들의 개수는 그 파일 시스템이 갖고 있을 수 있는 최대 File의 수이다. 이 값은 파일 시스템을 다시 초기화하지 않는 이상 변경할 수 없다.

    + Innode 1번은 Super Block, 2번은 루트 디렉토리이며, 10번까지는 예약되어 있기 때문에 사용할 수 없다.



    • Ext2에 대한 커널 문서의 인용에 따르면 다음과 같다. “ 아이노드에서 파일의 데이터를 포함하는 첫 12블록의 포인터가 있다 ( 블록의 다음 세트에 포인터를 포함하는) 간접 블록에 대한 포인터, (간접 블록에 대한 포인터를 포함하는) 이중 간접 블록에 대한 포인터, 그리고 (이중 간접 블록에 대한 포인터를 포함하는) 삼중-간접 블록에 대한 포인터가 있다.

    + Ext2 내부는 15개의 포인터가 있는 구조며 그 중 처음부터 12번까지는 직접 블록을 위한 것이다.
    + 13번 포인터는 간접 블록을, 14번째 블록은 이중 간접 블록을, 그리고 15번째 포인터는 삼중 간접 블록을 가리킨다.

    + 만약 각 데이터  Block의 크기가 8KB이라면, 최대 파일 크기는 약 64TB이다. 
    + Direct Block Point = 8KB * 12개 = 96KB 
    + Indirect Block Pointer = 8KB * 2048개 = 16,384KB
    + Triple Indirect Pointer = 8KB * 2048개 * 2048개 = 33,554,432KB 
    + 그리고 데이터 Block의 크기가 4KB인 경우 최대 파일 크기는 약 4TB이다.






    주요 저장내용
    - Inode Number
    - 파일모드 : 파일과 관계된 접근과 실행 권한을 저장하는 16비트 플래그
      12-14비트 : 파일형식
      9-11비트 : 실행 플래그(setuid, setgid, stiky bit)
      8 : 소유자 읽기 허가
      7 : 소유자 쓰기 허가
      6 : 소유자 실행 허가
      5 : 그룹 읽기 허가
      4 : 그룹 쓰기 허가
      3 : 그룹 실행 허가
      2 : 다른 사용자 읽기 허가
      1 : 다른 사용자 쓰기 허가
      0 : 다른 사용자 실행 허가
    - 하드 링크 수 :  이 아이노드에 대한 디렉터리 참조 수
    - 소유자 ID : 파일의 개별 소유자
    - 파일 크기 : 파일의 바이트 수
    - 마지막 접근 : 마지막으로 파일에 접근한 시각
    - 마지막 수정 : 마지막으로 파일을 수정한 시각
    - Inode 수정 : 마지막으로 Inode를 수정한 시각
    - 데이터 Block 수 : 파일의 실제 데이터가 저장된 위치(Block 주소(번호))를 가리키는 15개의 포인터 배열 







    디렉토리 블록에서 아이노드 넘버를 통해 데이터를 찾아가는 절차






    데이터 블록 ( Data Block ) 

    + 파일에서 데이터를 저장하는 블록으로 일반 파일이나 디렉터리의 파일의 데이터가 존재한다.
    + Inode에 포함되어 있으며 Inode는 몇 개의 데이터 블록을 포함한다.




    디렉토리 블록 ( Directory Block ) 

    + ext2 파일 시스템에서 디렉토리는 파일 시스템 상에서 파일에 대한 접근 경로를 생성하고 저장하는 특별한 의미의 파일로 취급한다.
    + 각각의 디렉토리는 디렉토리 엔트리의 리스트로 나타낸다. 




    간접 블록 ( Indirection Block ) 

    + 추가적인 데이터 블록을 위한 포인터들이 사용할 동적으로 할당되는 공간이다.
    + Inode가 가지고 있는 데이터 블록보다 더 많은 데이터 블록이 필요한 경우 이를 지정하기 위해 포인터를 사용하는데, 그때 사용하기 위한 동적인 블록이다. 




    홀 ( Hole )

    + Inode 나 간접 블록 안의 데이터 블록의 주소로 특별한 값을 저장한다.
    + 파일 시스템에 의해서 파일 안에 자리하게 되며, 실질적으로 디스크 상에 공간은 할당 되지 않는다.
    + 단지 0byte가 파일 안에서 특정 공간을 차지하고 있다고 가정하는 것이다. 





Designed by Tistory.