예약된 영역 바로 다음에 FAT(File Allocation Table) 영역이 온다. FAT 영역은 원문 그대로 파일 할당 테이블이다. 다시 말해, 데이터 영역에 저장된 파일들의 할당 관계를 표시해주는 테이블이다. FAT 영역은 다음과 같이 다시 두개로 나누어지는데 두 번째 FAT 영역은 첫 번재 테이블 영역이 손실되었을 경우 사용하기 위한 백업본이다. 따라서, 두 테이블 영역은 동일한 값이 저장되게 된다. 

다음은 EnCase를 통해 살펴본 FAT 영역이다. 

빨간색으로 표시된 부분은 예약된 영역을 의미하고 뒤에 숫자로 표시된 부분이 FAT 영역이다. 숫자를 살펴보면 일정 영역은 1로 표시되어 있고, 다음은 2로 표시되어 있다. 1로 표시된 부분이 첫 번째 FAT 영역(FAT #1)이고, 2는 백업본(FAT #2)이다. 이처럼 FAT 영역은 예약된 영역에 연속되어 위치하게 된다. 

FAT 영역의 목적은 데이터 영역(Data Area)에 저장된 파일의 클러스터 할당 관계를 테이블 형태로 보여주는 것이다. FAT12/16은 2 바이트, FAT32는 4 바이트를 통해 데이터 영역의 시작 클러스터부터 마지막 클러스터까지 할당 관계를 표시한다. 다시 말해, 클러스터가 만약 4KB 크기를 가진다고 하면, FAT32에서는 각 클러스터가 FAT 영역의 4 바이트에 대응된다는 것이다.

FAT32에서 4 바이트씩 클러스터를 표현하므로 각 섹터(512 바이트)에는 128개의 클러스터를 표현할 수 있다. 만약, FAT 영역이 100개의 섹터 크기를 가지고, 클러스터 크기가 4KB라면 데이터 영역의 총 크기는 50MB(128 X 100 X 4096 바이트)가 된다. 그리고 데이터 영역에 저장된 파일은 연속적인 클러스터에 저장될 수도 있지만, 조각나 저장될 수도 있을 것이다. FAT 영역은 이러한 조각난 클러스터의 연결 상태까지도 표현해 준다. 따라서, 할당 상태와 클러스터 연결 상태를 표현하는 방법에 대해 살펴볼 것이다.

 

FAT 엔트리(Entry)

앞서 살펴본 클러스터에 대응되는 FAT 영역의 각 바이트(2:FAT12/16, 4:FAT32)는 FAT 엔트리라는 용어로 부른다. 각 FAT 엔트리는 데이터 영역의 각 클러스터에 대응된다. 다음은 FAT 영역을 좀 더 자세히 살펴본 것이다.

위의 4 바이트씩 표현된 부분이 FAT32에서 데이터 영역의 각 클러스터를 표현하는 FAT 엔트리이다. 하지만, 특이한 점은  데이터 영역의 클러스터가 0 부터 시작하는 것이 아닌 2 부터 시작한다는 점이다. 이러한 이유는 FAT 영역의 1,2 FAT 엔트리는 별도의 용도로 예약되어 있는데, 첫 번째 FAT 엔트리는 해당 미디어의 타입을 나타내고, 두 번째 FAT 엔트리는 파티션의 상태를 나타낸다.

FAT 엔트리는 다음과 같은 특별한 값을 가질 수 있다. 표에 나타나지 않은 값은 다음 클러스터의 값을 가르킨다.

FAT12 FAT16 FAT32 설명
 0×000  0×0000  0×00000000  해당 클러스터가 사용이 가능하다는 의미로, 비할당 상태를 나타낸다. 파일 시스템을 새롭게 포맷하거나 파일을 삭제할 경우에 나타나는 값으로, 파일을 할당하고자 할 경우 FAT 영역을 검색하여 0×00000000 인 클러스터에 할당하게 된다. 물론 할당은 각 파일시스템에서 사용하는 할당 정책(First Fit, Best Fit, Next Available..)에 의존한다.
 0xFF8  0xFFF8  0x?FFFFFF8  파일의 끝(End-Of-Maker)을 나타낸다. 즉, 파일에 할당된 마지막 클러스터를 의미한다.
 0xFF7  0xFFF7  0x?FFFFFF7  배드 클러스터를 나타낸다. 클러스터 내에 한 개 이상의 배드 섹터가 발생하여 해당 클러스터에 데이터를 저장할 수 없음을 나타낸다.

다음은 FAT 영역의 첫 섹터를 덤프한 결과이다. 0, 1번째 FAT 엔트리는 예약되어 있으므로 무시하고, 두 번재 엔트리부터 살펴보자. FAT Entry 2의 값이 0x0FFFFFFF 값을 가지므로 해당 클러스터는 파일의 끝을 의미한다. 따라서, 데이터 영역의 첫 클러스터(클러스터 2)를 가지는 파일은 하나의 클러스터를 사용한다. 다시 말해, 클러스터가 4KB라고 했을 때 파일 크기가 4KB보다 작다는 의미이다. FAT Entry 3번 역시 같은 의미이다.

하지만 FAT Entry 4번은 0×05 값을 가진다. 즉, FAT Entry 5번을 가르킨다. FAT Entry 5는 다시 0×06 값으로 FAT Entry 6을 가르킨다. 이렇게 따라가보면 FAT Entry 8번이 마지막 엔트리가 된다. 따라서 데이터 영역의 3번째 클러스터부터 할당된 파일은 총 5개의 클러스터를 사용한다. 즉, 16 ~ 20 KB 사이의 크기를 가진다는 의미이다. 파일시스템이 포맷 한 후 처음 할당되어진 파일들이고, 그 크기가 작기 때문에 연속적으로 할당되어 있지만 파일의 할당, 삭제가 빈번히 이루어진 후 (오래 사용하게 되면)라면 파일이 항상 연속적으로 저장되어 있다고 보기는 어렵다. 

결과적으로 FAT 영역은 FAT Entry를 통해 데이터 영역의 클러스터 할당 상태 및 연결 상태를 표현해 준다. 파일의 정확한 크기 및 이름, 확장자, 시간정보 등을 얻고 싶다면 이후에 살펴본 데이터 영역의 디렉터리 엔트기(Directory Entry) 구조를 확인해야 한다.

만약, 파일을 저장 한 후에 삭제하면 해당 파일이 저장된 클러스터에 대응되는 FAT Entry는 모두 0×00으로 초기화된다. 그리고 이후에 살펴본 디렉터리 엔트리에 삭제 플래그를 기록하게 된다. 하지만 데이터가 저장된 데이터 영역의 데이터는 접근하지 않기 때문에 삭제한 파일도 복구할 수 있다.

하지만, FAT 영역의 각 Entry의 연결상태가 사라져버리기 때문에 조각나 저장되었던 파일을 삭제한 경우라면 파일을 완벽하게 복구하기는 매우 어렵다.
 

Tagged with: