FAT
FAT 파일시스템은 도스 시절부터 사용되고 있는 대표적 파일시스템으로 가장 많은 운영체제를 지원한다. 다른 파일시스템에 비해 구조가 비교적 단순하여 호환성이 좋으나 배드 섹터 처리와 파일 보안 기능이 취약하다.
파일시스템 역사[편집]
FAT 파일시스템은 1976년에 빌 게이츠가 자신의 회사 제품인 BASIC에서 플로피 디스크를 관리하기 위해서 구현하였다. 이 FAT 파일시스템이 1980년대 초 Tim Paterson이 개발한 QDOS라는 운영체제의 파일시스템으로 선택되면서 PC 환경에서 널리 쓰이게 되었고 이때의 FAT 파일시스템을 최초 버전인 FAT12라고 부른다.
이후 HDD 기술이 발달하면서 HDD에서 사용할 파일시스템으로 1988년에 Microsoft에서 FAT12의 다음 버전인 FAT16을 발표한다. FAT12와 FAT16은 구조적으로 거의 동일하지만 FAT16에서는 클러스터를 표현하는 비트수가 12개에서 16개로 늘어났다.
1995년 Microsoft는 Windows 95에 FAT 파일시스템을 탑재하면서 그 기능을 향상시켰다. 이 버전을 VFAT(Virtual FAT) 이라고 부른다. VFAT의 가장 큰 특징은 LFNs(Long File Names)를 지원한다는 것이다. 기존에는 8.3 File Naming을 사용해 파일명은 최대 8Byte, 확장명은 최대 3Byte만 지원하였는데 이러한 단점을 개선하기 위해 Microsoft에서 LFNs를 개발하였다. LFNs 방식은 최대 255자까지 파일명을 적을 수 있다.
1996년에는 고용량 하드디스크를 지원하기 위해 클러스터를 표현하는 bit를 32개로 늘린 FAT32가 등장했다. 예약 영역으로 사용하는 최상위 4bit를 제외한 나머지 28bit를 이용하여 클러스터를 표현하게 된다. 이론상 더 큰 용량까지 지원하지만 Windows에서는 FAT32의 최대 용량을 32GB로 제한하고 있다. 이후 이전 버전의 FAT과 NTFS의 문제를 보완하기 위해 exFAT이 등장했다. 주로 휴대용 모바일 기기나 메모리에 사용된다.
FAT 12 | FAT 16 | FAT 32 | exFAT | |
최대 볼륨 크기 | 32MB | 2GB | 8TB | 16EB |
최대 파일 크기 | 32MB | 2GB | 4GB | 128PB |
고장 저항력 (Fault Tolerance) |
No | No | No | Yes |
객체 권한 (Object Permissions) |
No | No | No | Yes |
파일 이름 최대 길이 | 255 | 255 | 256 | 255 Unicode |
아래 표에서확인 할 수 있듯이 가장 호환성이 좋은 파일시스템은 FAT12와 FAT16이다. FAT12는 플로피디스크용이므로 고려 대상에서 제외하면 FAT16이 가장 호환성이 좋은 파일시스템이다. 따라서 FAT16으로 파일시스템을 구현하면 운영체제에 구애받지 않아도 되는 장점이 있지만 지원하는 용량이 작다는 단점이 있다.
운영체제 | FAT 12 | FAT 16 | FAT 32 | exFAT |
MS-DOS | ● | ● | ||
Windows 95 | ● | ● | ||
Windows 95 OS R2 | ● | ● | ● | |
Windows 98 | ● | ● | ● | |
Windows ME | ● | ● | ● | |
Windows NT 4.0 | ● | ● | ||
Windows 2000 | ● | ● | ● | |
Windows XP | ● | ● | ● | ○ |
Windows Vista | ● | ● | ○ | |
Windows 7 | ● | ● | ● |
exFAT은 Windows XP부터 호환된다. 하지만 Windows XP (Service Pack 2 or 3)의 경우에는exFAT패치 업데이트가 필요하고 Window Vista의 경우 Service Pack 1 혹은 2 업데이트가 필요하다.
파일시스템 특징[편집]
FAT 파일시스템은 도스 시절부터 사용한 파일시스템으로 다양한 OS에서 사용 가능하고 NTFS에 비해 단순하며 많은 메모리를 필요로 하지 않는다. 또한 FAT 파일시스템은 매우 적은 오버헤드로 시작한다는 단순성 때문에 저용량 볼륨에서는 최신 파일시스템보다 성능 면에서 우수하다는 장점이 있는 반면 FAT 파일시스템은 파일에 대한 접근을 제어할 수 있는 내장된 방지 기능이 없어 보안 기능이 떨어진다. 또한 볼륨에서 많은 파일을 사용할 경우 성능이 저하돼 매우 느려지기 때문에 대용량 볼륨에서는 디스크 공간 이용이 비효율적이다.
구조분석[편집]
FAT 파일시스템은 종류에 따라 차이가 있으나 전체적인 구조는 아래 그림과 같다. FAT 파일시스템은 클러스터 단위로 구성되고 이것들을 Linked List의 형태로 보관한다. 부트 섹터에 클러스터 크기 등 전체적인 파일시스템에 대한 정보가 있고 클러스터들을 관리하는 테이블은 FAT 영역에 있다. 데이터 영역에는 디렉터리 및 파일이 저장된다.
FAT16과 FAT32는 기본적인 구조에서 거의 비슷하나 루트 디렉터리 영역에서 차이가 있다. 아래 그림과 같이 보듯이 FAT16은 루트 디렉터리 영역이 따로 존재하지만 FAT32는 루트 디렉터리를 일반 디렉터리 중의 하나로 간주한다. 따라서 FAT16에서는 루트 디렉터리 영역이 반드시 FAT #2 영역 뒤에 와야 하지만 FAT32는 데이터 영역 어디에 오든지 상관이 없다.
메타데이터[편집]
대부분의 파일시스템은 디렉터리 표현을 위해 트리 구조를 사용한다. FAT 파일시스템 역시 트리 형태로 표현되는데 가장 중요한 요소가 최상위 루트 디렉터리이다.
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F | |
0x00 | Name | Extension | Attribute | Reserved | Create Time Tenths |
Created Time | ||||||||||
0x10 | Created Date | Last Accessed Date |
Starting Cluster Hi |
Last Written Time |
Last Writen Data |
Starting Cluster Low |
File Size |
Directory Entry 구조에 의하면 파일 이름을 기록하는 데 8바이트만 사용할 수 있다. FAT 파일시스템에서는 8바이트보다 긴 파일 이름을 표현하기 위해 LFN(Long File Name) Entry라는 추가적인 구조를 사용하는데 이때 이름은 모두 유니코드(Unicode)로 표현된다.
파일 추출 기법[편집]
파일을 추출하기 위해서는 존재하는 파일 리스트와 각 파일의 실제 데이터가 어디에 존재하는지를 파악해야 한다. 따라서 가장 먼저 메타데이터를 확인 해볼 필요가 있다.
데이터 복구[편집]
FAT 파일시스템은 파일의 메타정보를 유지하기 위해 FAT 영역과 Directory Entry를 사용한다. 파일이 삭제될 경우 FAT 영역에서는 파일에 할당되었던 클러스터에 대응되는 FAT Entry가 0x00으로 초기화된다. 그리고 해당 파일의 Directory Entry의 오프셋 0x00의 값이 삭제를 나타내는 0xE5 값으로 변경된다. 이 경우 파일에 할당되었던 클러스터에는 파일의 내용이 그대로 남아 있게 된다. 따라서 해당 클러스터가 새로운 파일에 사용되지 않는다면 삭제 표시된 Directory Entry에 파일 크기와 시작 클러스터 정보를 통해 비교적 쉽게 파일을 복구할 수 있다.
은폐 대응[편집]
파일 은폐 대응은 컴퓨터 사용자가 운영체제의 기본적인 숨긴 설정된 시스템 파일 이외에 의도적으로 데이터를 은닉하고자 한 가능성을 열어두고 그에 대한 꼼꼼한 분석을 하자는 데 그 의의가 있다.