예약 영역은 FAT 파일 시스템에서 가장 앞에 위치하는 구조로 여러 개의 섹터를 포함
예약 영역의 크기는 FAT 12/16는 1개의 sector를 FAT 32는 32개의 sector를 사용
FAT32에서는, 예약 영역을 다시 부트 sector/ FSINFO sector/ 추가적인 sector로 구분
FAT32 부트 sector에서는 부트 sector 백업본의 sector 주소, 주/부 버전 번호 같은 추가 데이터가 포함되어 있음
부트 sector가 손상될 것을 대비하여 6번째 sector에 내용을 백업해두기 때문에 파티션 복구 도구들의 경우 부트 sector가 정상적이지 않을 경우 백업되어 있는 부트 sector를 복사하여 사용하여 복구함
FSINFO (FAT32)
FSINFO(File System INFOrmation)는 일반적으로 1번째 sector(부트 sector 다음)에 저장되는 구조로 7번째 sector에 내용을 백업해둠
FSINFO에는 다음 할당 가능한 클러스터 위치, 전체 크기에 대한 정보를 포함하고 있으며 해당 데이터는 운영체제에게 안내하기 위한 목적으로 존재하기 때문에 정확성을 보장하지는 않음
FSINFO 구조의 용도는 운영체제에게 첫 비할당 클러스터의 위치와 전체 비할당 클러스터의 수를 알려줘 저장할 데이터를 빠르게 할당할 수 있도록 도와주는 것
추가 예약 영역 (FAT32)
부트 섹터는 0, 6번 sector를 FSINFO는 1, 7번째 sector를 사용
이 외, 2번 sector는 부트 sector의 부트 코드 영역이 부족할 경우 추가적으로 사용할 수 있는 sector이고, 해당 내용을 8번 sector에 백업해둠
이처럼 FAT 32는 0, 1, 2, 6, 7, 8번의 sector를 사용
결과적으로 총 32 sector 중 6개 sector만 사용하고 나머지 sector는 만약을 대비해 예약되어 있음
FAT 영역은 데이터 영역에 저장된 파일의 클러스터 할당 관계를 표시해주는 테이블
또다른 FAT 영역은 첫번째 테이블 영역이 손실되었을 경우, 사용하기 위한 백업본
두 테이블 영역은 동일한 값이 저장됨
또한, 해당 영역은 FAT 구조체 수와 크기에 따라 달라짐
위 그림에서, 빨간색 표시 부분은 예약 영역, 뒤에 숫자로 표시된 부분은 FAT 영역
FAT 영역을 보면, 1 또는 2로 표기되어 있는데 1은 첫번째 FAT 영역(FAT #1)이고, 2는(FAT #2) 백업본을 의미
FAT12/16은 2byte, FAT32는 4byte를 통해 데이터 영역의 시작 클러스터부터 마지막 클러스터까지 할당 관계를 표시
FAT32에서는 4byte씩 클러스터를 표현하므로 각 sector(512byte)에는 128개의 클러스터를 표현할 수 있음
만약 FAT 영역이 100개의 sector 크기를 가지고 클러스터 크기가 4kb라면 데이터 영역의 총 크기는 50mb(128 x 100 x 4096 byte)가 됨
그리고 데이터 영역에 저장된 파일은 연속적인 클러스터에 저장될 수도 있지만 조각나 저장될 수도 있는데 FAT 영역은 조각난 클러스터의 연결 상태까지도 표현해줌
각각의 FAT 엔트리의 값은 파일 시스템에서 데이터 영역의 각 클러스터가 사용되고 있는지를 나타내고, 특정 파일이 점유하고 있는 클러스터의 위치를 나타냄
1) 비할당 상태일 경우, 0x00의 값을 가짐.
따라서 운영체제는 새로운 파일 및 디렉터리를 저장하고자 할 경우 FAT 영역에서 FAT Entry 값이 0x00인 클러스터를 찾아 할당함
2) 할당 상태일 경우, FAT Entry의 값은 그 클러스터를 점유하고 있는 파일의 다음 데이터가 있는 클러스터를 가리킴
3) 파일의 마지막 데이터가 있는 클러스터이면 마지막을 나타내는 특정 값을 사용
4) 만약 bad sector가 포함된 클러스터가 발견될 경우, FAT12는 0xFF7, FAT16은 0xFFF7, FAT32는 0x0FFF FFF7값을 사용해 표시하고 표시된 클러스터는 이후에 사용되지 않음
FAT 영역은 FAT Entry를 통해 데이터 영역의 클러스터 할당 상태 및 연결 상태를 표현할 뿐이므로 파일의 정확한 크기 및 이름, 확장자, 시간정보 등을 얻고 싶으면 데이터 영역의 디렉터리 엔트리 구조를 확인해야 함
데이터 영역에 저장되는 데이터는 크게 파일의 메타 정보(파일 이름, 크기, 타입, 시간 정보, 시작 클러스터 위치 등)을 저장하고 있는 디레터리 엔트리 구조와 실제 파일 데이터로 나눠볼 수 있음
FAT12/16의 경우, 루트 디렉터리는 FAT 영역에 바로 따라옴
FAT32는 그 위치가 고정되어 있지는 않고 예약 영역 부트 sector 내부의 BPB 값을 통해 그 위치를 나타냄
하지만 FAT32도 일반적으로 FAT 영역에 따라 나옴
루트 디렉터리가 FAT 영역 다음의 첫 클러스터에 오지만 FAT 엔트리 0, 1번이 예약되어 사용되지 않기 때문에 첫 클러스터의 번호는 FAT 영역을 기준으로 했을 때 2번이 됨
루트 디렉터리는 우리가 탐색기로 루트(C:)를 클릭했을 경우 나타나는 폴더 및 파일의 정보를 담고 있음
루트 디렉터리에 위치한 특정 파일이나 폴더에 접근하고자 하는 경우 루트 디렉터리의 디렉터리 엔트리를 검색하면서 해당 파일 이름을 찾음
파일 이름을 가진 디렉터리 엔트리를 찾았다면, 시작 클러스터 정보를 얻어 해당 위치부터 파일 크기만큼 파일을 획득
하지만 파일은 항상 데이터 영역의 연속된 클러스터로 표현되지 않고 조각날 수 있기 때문에 이런 조각난 파일 정보는 FAT 영역에서 시작 클러스터부터 따라가면서 원하는 클러스터만큼 획득하면 됨
파일 크기에 해당하는 클러스터를 획득한 경우 마지막 클러스터에는 파일 슬랙이 존재할 수 있으므로 정확한 파일 데이터만 얻고자 한다면 파일 크기만큼만 떼어내면 됨
하위 디렉터리를 탐색하고자 할 경우, 파일과 마찬가지로 하위 디렉터리 이름을 가진 디렉터리 엔트리를 얻어 하위 디렉터리가 위치한 클러스터로 이동
이동하게 되면 다시 그 클러스터에는 하위 디렉터리의 폴더 및 파일 정보를 담고 있는 32byte의 디렉터리 엔트리가 연속적으로 나올 것임