본문 바로가기

forensic/File System

Ext4 파일시스템구조와 Ext4에서 사용되는 inode에 관한 공부

inode는 유닉스계통 파일시스템에서 사용하는 자료구조이다.

 

inode는 크게 2개로 나뉜다.

1. 파일 정보 저장

2. 파일 내용 저장

 

1번의 경우 종류, 권한, 소유자, 접근 및 수정시간을 나타낸다. (리눅스 명령어 ls -l로 확인할때 나오는 정보들)

위와 같이 권한, 소유자, 위치, 접근 및 수정시간 등등의 정보가 나온다. 이것이 inode의 파일정보 저장부분이다.

 

inode가 데이터 블록의 주소를 저장하는 블록은 직접블록, 간접블록, 이중간접블록으로 나뉜다.

직접블록 : 데이터 브록에 대한 정보

간접블록 : 데이터블록에 대한 주소를 가지고 있는 블록에 대한 주소

이중간접블록 : 간접블록과 같음

 

데이터블록의 크기는 1KB~8KB이다.

 

그럼 이제 Ext4 파일시스템에 대해 정리해보자.

Ext4파일시스템은 크게 부트섹터와 블록그룹으로 나뉘어진다. 여기서 블록과 블록그룹을 설명해보면,

 

블록 : Ext4 파일시스템에서 기본적으로 데이터를 저장하는 단위이다.

         그와 동시에 저장장치에서 한번의 I/O과정에서 읽어들이는 단위이다.

 

블록그룹 : 블록들의 모임, 블록들을 여러그룹으로 나누어 파일시스템의 정보 및 데이터 저장한다.

               OS커널에서 같은 파일에 속하는 데이터 블록은 같은블록에 저장하려하기에

               블록그룹은 파일의 단편화를 줄인다.

 

다음은 블록그룹을 나타낸 것이다.

Ext4 파일시스템에서는 전체적인 정보를 저장하는 데이터 구조는 Super Block과 Group Descripto Table이다.

만약 Super Block이 Invalid할경우 다음 블록그룹의 Super Block을 복사하여 사용한다.

 

Super Block은 Ext4파일시스템에서 사용되는 주요 정보들이 들어있다. 위치는 맨 앞 고정이며 파일시스템의 설정에 의해블록의 크기가 달라져도 항상 맨 앞에 위치한다. 

주요 데이터는 블록의 크기(1,2,4KB), 총 블록의 개수, 블록 그룹의 개수, Inode의 개수, 그룹내의 블록이 있다.

 

Group Descriptor Table은 파일시스템 내의 모든 블록그룹에 대한 정보를 기록한다. 각각의 정보를 Group Descriptor라고 하며 이들이 모여 Group Descriptor Table을 만든다. 또한 위치가 가변성이다.

주요 데이터는 Inode Bitmap의 블록번호, Block Bitmap의 블록번호, First Inode Table Block의 블록 번호, 그룹안에 있는 빈블록수, 그룹안에 있는 Inode수, 그룹안에 있는 빈 디렉토리의 수 이다.

 

Block Bitmap은 Group Descriptor Table 뒤에 위치한다. 그러므로 위치 또한 가변성이며 Group Descriptor Table에 Block Bitmap의 주소가 들어있다. Block Bitmap은 블록 사용현황을 bit로 나타낸 것이다. 1byte는 8bit이고 bit를 블록으로 생각해 사용하는 블록은 1, 사용하지 않는 블록은 0으로 표시해 나타내고 이를 통해 새로운 블록을 할당할때 어느 곳에 할당해야 하는지 쉽게 알 수 있다.

블록의 크기는 1,2,4KB로 나뉘기 때문에 블록비트맵은 8192, 16384, 32768개로 나타낸다.

 

Inode Table은 Ext4파일시스템에서 파일 객체가 저장되는 데이터 구조이다. Inode의 크기는 Super block에 저장되어 있으며 모든 파일과 디렉토리들은 각각 1개의 Inode를 할당하고 있고 Inode는 각각 고유한 주소를 갖고 있다.

Inode는 Inode Table에 저장되어있고 Inode Table은 Group Descriptor Table에 주소가 저장되어 있다. 특정 Inode의 번호를 알고 있으면 해당 Inode가 속한 그룹을 알수있다.

ex) Inode의 번호가 8이라 했을때, Block group = (Inode8-1)/그룹에 속한 Inode수 이다. 여기서 1을 빼는 이유는 Inode의 index가 1부터 시작하기 때문이다.

 

File Data Block은 실제 데이터들이 저장되어 있는 곳이다. Block단위로 계산을해서 Inode에 들어있는 정보를 바탕으로 파일의 실제데이터 위치를 알 수 있다.

 

Inode Bitmap은 Block Bitmap과 비슷하게 1개의 Inode당 1개의 Bit로 대응되어 해당 블록 그룹이 관리하는 모든 Inode의 현황을 알게 해준다.

 

 

Ext4 파일시스템의 Journaling

Journaling기능은 파일시스템의 변경사항을 추적하기 위해 만들어진 기능이다. 이 기능을 통해 삭제된 파일을 복구할 수 있다.

 

자세한 내용은 https://ext4.wiki.kernel.org/index.php/Ext4_Disk_Layout