-
[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