ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Linux] EXT 파일시스템 구조
    > Information Security/Linux 2013. 10. 15. 22:09

    리눅스(커널 2.6) 시스템에서는 기본적으로  EXT 파일 시스템을 사용한다. 

    1993년에는 EXT의 단점을 개선한 EXT2, XIA가 개발되었지만, 본 포스팅에서는 EXT 파일시스템에 대한 내용만을 다루기로 한다. 


    [EXT 파일시스템 구조]


    EXT 파일시스템은 부트섹터(Boot Sector)와 여러개의 블록그룹(Block Group)들로 이루어져 있다. 

    부트섹터(Boot Sector)는 부팅에 필요한 정보들이 담겨있고, 각 블록들은 윈도우로 따지면 클러스터(Cluster)와 비슷한 개념으로, 크기는 1K~4K까지 설정이 가능하다. 


    각 블록 그룹(Block Group)의 기본구조는 위와 같이 Super Block, Group Descript Table(GDT), Block Bitmap, Inode Bitmap, Inode Table, Data의 구조로 구성되어 있다.  각 구조에 대해 더욱 자세히 살펴보자.


    Super Block :

     NTFS, FAT의 Boot Record와 유사

    Super Block의 사본은 모든 Block Group의 첫번째 Block에 저장.


    Group Descript Table :

    총 32byte로 구성되어 있으며, 해당 파일시스템 내의 모든 블록그룹에 대한 정보를 저장한다. 

    크기는 가변적 (Block Group의 개수가 정해져있지 않기 때문에)


    GDT에서 눈여겨 볼 것은 bg_block_bitmap와 bg_inode_bitmap 필드이다. 


    bg_block_bitmap

    Block Bitmap 블록 번호

    bg_inode_bitmap

    Inode Bitmap 블록 번호




    예를 들어, EXT파일시스템을 사용하는 어떤 시스템의 GDT영역을 살펴보자. 표시된 각 4byte는 bg_block_bitmap영역과 bg_inode_bitmap 영역이다.

    우리는 bg_inode_bitmap필드를 통해 해당 파일의 Inode Bitmap의 블록번호를 알 수 있다.

    리틀엔디안 방식으로 표기 된 '0401 0000'은 104(hex)이고, 이를 십진수로 변경하면 260(dec)이다. 

    우리가 알고자 하는 아이노드의 정보가 담긴 블록은 '260'이고, 해당 블록으로 가보면 'FF07'로 표기된 아이노드 비트맵을 볼 수 있다.


    아이노드 비트맵에서는, 1의 개수로 inode를 알 수 있는데

    'FF07'을 2진수로 풀어보면 '1111 1111 0000 0111'로 총 11개의 '1'이 존재한다.

     이는 곧 Inode Number가 11임을 의미한다. 


    비슷한 방식으로 다른 파일의 Inode Bitmap은 0F로 표기되어 있었고, Inode Number는 '12'임을 알 수 있었다.



    ※ Inode 및 EXT관련 정보는 아래에서 좀 더 자세하게 확인할 수 있다.

    http://www.nongnu.org/ext2-doc/ext2.html#DEF-INODES(출처)




    Block / Inode Bitmap : 사용 현황을 bit로 map형태로 나타낸 것


    Inode Table

    아이노드와 관련된 정보를 테이블 형태로 나타낸 것. 자세한 Inode Structure는 아래와 같다.


    EXT 파일시스템에서 Inode Table구조를 살펴보면, inode가 가리키는 블록의 위치를 살펴볼 수 있다.




    [Inode Table의 구조]

    Inode Table에 존재하는 i_block은 4byte씩 총 15개로 나뉘어져 60byte를 차지한다.


    직접 블록을 참조하는 Directblock은 12개, 다시 간접적으로 포인터를 참조하는 방식의 InDirectBlock은 3개로 총 15개로 아래와 같다.




    Inode가 가리키는 정보와, Inode Block을 확인하기 위하여 'lde'를 통해 살펴보자.

    lde에 대한 정보는 아래에서 더욱 자세하게 볼 수 있다.



    lde에서는 b(블록) i(아이노드) 로 모드로 변경해 가며 상세한 내용을 확인할 수 있다.


    1. '12290byte' 크기의 파일을 하나 생성한 후, Direct Block을 확인한다.



    2. 해당 Block과 Direct Block의 Inode에 대한 정보를 확인할 수 있다.




    Data : 데이터 부분



    ※ 리눅스 시스템에서 하드디스크를 인식하는 약자는 다음과 같다.

    SCSI : sd#

    IDE : hd#




    728x90
    반응형

    '> Information Security > Linux' 카테고리의 다른 글

    [ubuntu] Unix 침해사고 분석-스케줄링(crontab)  (0) 2017.02.11
    파일시스템  (0) 2014.01.02
    [EXT] 디렉토리 엔트리  (0) 2013.10.15
    [EXT] 리눅스 시스템 - 아이노드  (0) 2013.10.15
    입출력 방향 변경  (0) 2010.11.15
Designed by Tistory.