Shine's dev log

ext4 파일 시스템_2 (삭제된 파일 복구) 본문

운영체제

ext4 파일 시스템_2 (삭제된 파일 복구)

dong1 2020. 11. 29. 20:43

0. ext4 파일 시스템

 

지난번에 ext4 파일 시스템의 전체적인 구조에 대하여 살펴보았다.

 

ext4는 전체 파티션을 여러개의 블록그룹으로 나누고, 각각의 블록그룹에는 슈퍼블록, 그룹 디스크립터 테이블, 데이터블록 비트맵, 아이노드 비트맵, 아이노드 테이블, 데이터 영역이 존재한다고 하였다.

 

또한, ext3 부터는 파일의 변경사항 추적을 위해 저널링(Journaling) 기능이 생겼다는 것도 알 수 있었다.

 

이번에는 이 저널링 기능을 통해 삭제된 파일을 복구하는 방법을 알아보자.

 

 

1. 저널영역 (Journal Area)

 

우선, 저널영역의 위치를 알아야 하는데, 이는 inode 8번에 저장되어 있다. inode 8번 파일에는 저널 영역에 대한 주소값이 저장되어 있다.

 

Journal Area

 

저널영역은 위의 그림과 같이 하나의 슈퍼블록 (Super Block)과 여러개의 트랜잭션(Transaction)으로 구성되어 있다.

 

저널의 슈퍼블록에는 저널의 블록 타입, 블록 사이즈, 저널 영역의 총 블록 수 등 저널의 전체적인 정보에 대한 명세가 기록되어 있다.

 

Transaction

 

저널 영역의 슈퍼블록 다음에는 여러 트랜잭션으로 이루어져 있다. 각 트랜잭션은 디스크립터 블록(Descriptor Block) 이나 revocation Block으로 시작하여, 실제 데이터가 담긴 저널 데이터 블록(Journal Data Block) 이후, 트랜잭션의 끝을 알리는 커밋 블록(Commit Block)으로 이루어져 있다.

 

1) 저널 디스크립터 블록

 

이 블록에는 바로 뒤에 이어질 데이터에 대한 정보를 담고 있다. 이를 저널 태그(Journal Tag)라고 부르는데, 하나의 디스크립터 블록에는 여러개의 저널 태그가 포함되어 있다.

 

저널 태그에 적힌 주소값을 통해, 해당 주소값의 삭제 이전 데이터를 디스크립터 블록 이후에 나오는 저널 데이터 영역에서 확인할 수 있다.

 

2) 저널 데이터 영역

 

저널 태그에 해당하는 위치의 수정되기 이전 데이터 값을 담고 있는 영역이다. 이 영역을 통해 삭제된 파일을 복구할 수 있다.

 

3) 저널 커밋 블록

 

하나의 트랜잭션의 끝을 나타내는 블록이다. 커밋된 시각 정보가 담겨져 있다.

 

 

2. 삭제된 파일의 복구

 

이제 ext4에서 삭제된 파일을 복구하는 방법에 대해 알아보자.

 

우선, 파일이 삭제될 때 파일의 실제 데이터가 삭제되는 것이 아니라, inode 파일의 주소값이 0으로 초기화 되는 것이다. 즉 inode 파일과 실제 데이터 사이의 연결이 끊어진다고 생각하면 된다.

 

따라서 삭제된 파일을 복구하기 위해서는, 끊어진 inode 파일과 실제 데이터를 다시 연결시켜주면 된다. 실제 데이터의 위치는 앞서 다룬 저널영역을 통해 찾으면 된다.

 

1) 삭제된 파일의 inode 파일을 찾는다. (inode 파일이 가리키는 데이터의 주소값은 0으로 초기화된 상태일 것이다.)

2) inode 파일의 위치에 해당하는 주소값과 일치하는 저널영역의 저널 태그를 찾는다.

3) 저널 태그를 따라 저널 데이터 영역을 찾아보면, 삭제되기 이전의 inode 파일 정보가 담겨있다.

4) 삭제되기 이전의 inode 파일 정보에서 inode 파일이 가리키는 데이터 주소값을 확인한다.

5) 확인한 파일의 주소값으로 이동하여 실제 파일의 데이터를 추출한다.

 

물론, 삭제된 파일의 데이터 영역에 다른 데이터가 덮혀씌워진다면 복구가 어려울 것이다. 하지만 그렇지 않는 이상, 위의 방법을 통해 ext4 파일 시스템에서 삭제된 파일의 복구를 수행할 수 있다.

 

 

 

오늘 배운 내용을 정리해보면,

 

1. ext4 파일 시스템에는, 변경된 파일 정보를 추적하기 위한 저널 영역이 존재한다.

 

2. 저널영역은 슈퍼블록과 여러개의 트랜잭션으로 이루어진다.

 

3. 트랜잭션은 저널 디스크립터 블록 + 저널 데이터 블록 + 저널 커밋 블록 으로 이루어져 있다.

 

4. 저널 영역을 통해 삭제된 파일을 복구할 수 있다.

 

위 내용은 공부하며 정리한 것으로, 오류가 있을 수 있습니다.