mir.pe (일반/밝은 화면)
최근 수정 시각 : 2024-08-09 13:07:05

FAT

파일 할당 테이블에서 넘어옴

파일:나무위키+유도.png  
은(는) 여기로 연결됩니다.
회계 분야 자격증에 대한 내용은 AT 자격시험 문서
번 문단을
부분을
, 몸의 구성 물질에 대한 내용은 지방(화학) 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
참고하십시오.
파일:Microsoft 로고.svg 파일:Microsoft 로고 화이트.svg
{{{#!wiki style="margin:0 -10px -5px; min-height:calc(1.5em + 5px); word-break:keep-all"
{{{#!folding [ 펼치기 · 접기 ]
{{{#!wiki style="margin:-6px -1px -11px"
<colbgcolor=#393939,#737373><colcolor=#fff>제품군
하드​웨어 Surface · Xbox · HoloLens · PixelSense · Zune · Pluton · IVAS
소프트​웨어 Windows · Office · Edge · Media Player · Hyper-V · Defender · Visual Studio Code · Visual Studio · Windows Terminal · Microsoft Store · Xbox App · PowerToys · Internet Explorer · MS-DOS · Windows Movie Maker · Autoruns · Clipchamp
서비스 Microsoft Azure · OneDrive · Microsoft Copilot · Bing · LinkedIn · Microsoft Docs · Skype · MSN · 정품인증 · Xbox Game Pass · Xbox Cloud Gaming · Xbox network
관련 기술 ASF · ASP · Blazor · COM · DCOM · DirectX · 파일 시스템( FAT · NTFS · ReFS) · MFC · .NET( .NET Core · .NET Standard · C# · F# · Visual Basic .NET · Windows Forms · WPF · UWP · .NET MAUI · ASP.NET · ML.NET) · OLE · Q# · Silverlight · Visual Basic · VBA · WASAPI · Windows 커널 · Windows 디자인 · Windows API · Windows Runtime( UWP · WinUI 3) · WMA · WMV · Xamarin · XNA · 하복 엔진 · SAMI · PowerShell · Windows Modern Standby
산하 계열사 및 사업부 GitHub · .NET Foundation · Microsoft Gaming · LinkedIn
관련 인물 빌 게이츠(은퇴) · 폴 앨런(은퇴) · 스티브 발머(퇴사) · 게이브 뉴웰(퇴사) · 마이크 이바라(퇴사)
사티아 나델라 · 필 스펜서 · 브래드 스미스
기타 제니맥스 미디어 인수 · 액티비전 블리자드 인수 · 시작 메뉴 · 빌 게이츠의 굴욕
관련 틀 365 제품군 · 하드웨어 제품군 · Surface 제품군 · Windows 제품군 }}}}}}}}}

📁 파일 시스템
{{{#!wiki style="margin: 0 -10px -5px; min-height: calc(1.5em + 5px);"
{{{#!folding [ 펼치기 · 접기 ]
{{{#!wiki style="margin: -6px -1px -11px"
<colbgcolor=#f1d592><colcolor=#000>마이크로소프트 FAT NTFS ReFS
애플 HFS HFS+ APFS
리눅스 / 유닉스 ext2 ext3 ext4
Btrfs F2FS XFS ZFS
}}}}}}}}} ||

1. 개요2. 종류
2.1. FAT122.2. FAT162.3. VFAT2.4. FAT32
2.4.1. FATX
2.5. exFAT2.6. TFAT2.7. RFS
3. 최대 파티션 크기4. 특성
4.1. 레거시 호환성4.2. 8.3 rule4.3. 복구율
5. 관련 문서

1. 개요

File Allocation Table, FAT

파일 할당 테이블. 보통명사 같지만 아니다. 그 특유의 간단한 디자인 덕택에 개인용 컴퓨터로 동작하는 운영 체제 가운데에서 FAT를 지원하지 않는 것이 없어서 파일 공유에 적합하다. 그에 따라 메모리 카드 USB 메모리 같은 많은 이동식 저장 장치에서 사용한다. 간단한 디자인이 이동성 측면에서는 장점이지만, 안정성 면에서는 단점으로 작용한다. 디스크 오류에 대비한 저널링과 같은 각종 현대적 안전 장치들이 FAT에는 미미하기 때문.

FAT라는 이름은 디스크를 포맷할 때 일괄적으로 색인표를 만들어 두는 데에서 기인한다. 간단하게 말해 ' 클러스터를 제어하는 것'이다. 클러스터 문서 참고.

리스트(자료구조) 중에서 단순 연결 리스트(Singly Linked List)를 이용해서 FAT를 구현했다.

2. 종류

MS-DOS Microsoft Windows 시리즈가 널리 사용되고 버전업을 함에 따라 발전되어 왔는데, 그 가운데에 유명한 것으로는 FAT12, FAT16, FAT32, exFAT 등이 있다.

물리적으로 디스크에 접근할 때의 최소 단위는 바이트나 킬로바이트 단위가 아니라 여러 바이트가 모여 있는 섹터 단위이다. 보통 한 섹터의 크기는 512바이트이며, 이보다 더 큰 섹터를 사용하는 경우도 있다. FAT에서는 여러 섹터를 하나로 묶은 논리 단위인 클러스터 단위로 디스크에 접근한다. 색인표에는 이 클러스터 번호가 기록되는데, 종류에 따라 이 번호를 기록할 공간의 비트 크기가 다르고 이 크기를 이름에 붙여서 서로를 구분한다.

macOS, 리눅스 등 타 운영체제에서는 exFAT를 제외하고 MS-DOS 파일 시스템이라고 부르는 경우가 많다.

2.1. FAT12

1980년, MS-DOS의 전신인 86-DOS에서 사용하기 위해 팀 패터슨이 CP/M의 FAT를 8비트에서 12비트로 확장하고 기타 정보를 추가하여 만든 것. 클러스터 번호가 12비트이기 때문에, 클러스터 숫자는 마스터 부트 레코드와 색인표를 위한 공간을 제외한 212-12=4,084개로 제한되지만, 전체 섹터의 수는 16비트로 계산되기 때문에 최대 32 MB까지 지원하였다. 16비트는 65,536개를 표현할 수 있으며, 섹터 하나의 크기는 512바이트인데, 둘을 곱하면 32 MB가 되기 때문. 그러나 저 당시 그런 대용량의 하드 디스크 드라이브가 대중화되지 않았을 뿐더러 이런 경우 클러스터 용량이 8,192바이트(8 KB)나 됐기 때문에 실용적으로 사용하지 못했다. 1980년대 당시 파일의 용량이 수십~수백 바이트 정도가 많아 용량 낭비가 심했기 때문이었다.

FAT16을 지원하기 시작한 MS-DOS 3.0부터는 최대 16 MB까지만 지원한다. macOS의 디스크 유틸리티나 diskutil, hdiutil 명령어로 포맷할 경우 5 MB 미만까지만 지원한다. 가상 플로피 이미지 파일을 만들 수 있는 VirtualFDD에서는 64 KB 클러스터일 때 255 MB까지 지원한다.

일반적인 플로피 디스크는 용량이 작아 FAT12로 충분하기 때문에 FAT16 같이 발전된 버전이 나온 이후에도 여전히 FAT12를 사용하지만 슈퍼디스크와 HiFD 같은 대형 플로피 디스크는 FAT12로는 부족하므로 FAT16을 이용한다.

현재는 32 MB 이하의 하드 디스크 드라이브를 찾는 것이 매우 힘들고 플로피 디스크도 거의 사용하지 않아서 거의 사용되지 않고, 홈브루 운영 체제 개발 같은 데서나 쓰인다. 그렇지만 최신 윈도우인 Windows 11이나 macOS에서도 지원하고 있다.

2.2. FAT16

1984년 IBM PC AT의 20MB 하드 디스크 드라이브를 지원하기 위해 마이크로소프트가 MS-DOS 3.0, IBM PC AT와 함께 등장했다. 16비트 클러스터를 사용한다. 사용할 수 있는 클러스터 수는 최대 216-12=65,524개.

처음에는 FAT12와 마찬가지로 하드 디스크 드라이브 크기가 32 MB로 제한되었다. 당시에는 큰 하드 디스크 드라이브도 거의 없었고 수십~수백 바이트 정도의 파일이 자주 사용되었으므로 섹터의 크기를 512 바이트보다 크게 할 필요성이 낮았기 때문이다. 그러다 하드 디스크 드라이브의 용량이 더욱 커졌고, 업계는 더 큰 용량을 지원하는 파일 시스템을 필요로 했다. 그래서 몇몇 업체는 MS-DOS를 개량해 지원할 수 있는 파티션 개수를 늘리거나, 실제 물리 섹터의 크기는 512 바이트 그대로 두고 여러 개를 하나의 논리 섹터로 묶어서 이용하기도 했다.

마이크로소프트가 40MB 하드 디스크 드라이브를 채용한 컴팩 컴퓨터를 지원하기 위해 내놓은 MS-DOS 3.31에서야 제대로 된 FAT16 파일 시스템을 지원하게 되었다. FAT16이 지원하는 섹터의 번호를 32비트로 늘린 것이다. 파티션 특정 위치에서의 플래그에 따라 기존의 FAT16처럼 섹터의 개수가 65,535 이하로 제한되는 파티션이거나 그보다 많은 파티션이거나가 결정되므로 호환성이 좋았다.

MS-DOS 4.0에서 클러스터 용량을 512 바이트에서 32 KB(NT 계열은 64 KB)까지 조절할 수 있게 되었고, 파티션의 크기 제한이 2 GB(NT 계열은 4 GB)로 증가했다. 하지만 클러스터 용량을 32 KB로 올려서 쓰면 파일의 크기가 1 바이트이더라도 32 KB를 차지하기 때문에 하드디스크 용량 낭비가 크다. 특히 1990년대 중반 들어 하드 디스크 드라이브의 용량이 GB대로 올라가면서 문제가 심각해졌다. 이로 말미암아 윈도우 98이 나온 1998년 이후부터는 하드 디스크 드라이브에 FAT16 파일 시스템을 사용하는 일이 드물어졌지만 2000년대 중후반까지만 하더라도 USB와 SD 카드에 많이 사용되었는데, 당시 USB, SD 카드의 용량은 2 GB 미만인 경우가 많았고, FAT32를 지원하지 않는 기기도 흔했기 때문이다.(SD 규격) 그러다가 USB와 SD 카드의 용량도 많이 커지고, SD 카드를 사용하는 많은 기기들도 FAT32를 지원하면서(SDHC 규격) 2010년대 이후로는 FAT12와 함께 거의 사용되지 않는다. 하지만 최신 윈도우인 Windows 11이나 macOS에서도 아직 지원하고 있다.

한 경로(폴더)에 파일 개수는 최대 16,384개(214개)이다. 크기 자체는 작아도 많은 파일을 한 폴더에 넣을 수 없기 때문에 이러한 제한에 걸릴 수 있다.

macOS의 디스크 유틸리티나 diskutil, hdiutil 명령어로 포맷할 경우 5~512 MB까지 지원한다. 이보다 작은 파티션은 FAT12, 큰 파티션은 FAT32로 포맷된다. # newfs_msdos 명령어를 사용하면 FAT12/16/32를 자유롭게 선택할 수 있다. #

2.3. VFAT

Windows 95와 함께 등장했다. 기존 MS-DOS의 파일 이름은 8자 이하[1], 확장자가 3자 이하(예: AUTOEXEC.BAT)로 길이가 제한되어 있었는데 최대 255자까지 지원하도록 했다. 기존 MS-DOS의 파일 이름이 시스템 의존적이었던 반면 VFAT은 UCS-2를 지원하였다. MS-DOS와 호환을 위해 실제로 루트 디렉터리 영역 및 서브 디렉터리 영역에는 8.3 형식으로 저장되지만 우회 공간을 두고 거기에 긴 파일 이름을 저장한다. 파일명이 8자가 넘어갈 때는 6자 뒷부분은 자르고 뒤에 "~1"을 붙인다. 같은 디렉터리 내에서 6자까지 글자가 완전히 같은 경우에는 "~2", "~3", ... 형식으로 숫자가 올라간다. 또한 띄어쓰기를 할 수 없는 FAT의 특성상 띄어쓰기는 모두 제거된 다음 ~1을 붙인다. 예를 들어, Namu Wiki.html → NAMUWI~1.HTM 이고, 한글은 한 글자가 완성형으로 2 바이트이기에 보통 세 글자까지만 표현된다. 나무 위키.html → 나무위~1.HTM 이는 어디까지나 VFAT를 지원하지 않는 프로그램에서도 자료를 읽을 수 있도록 지원하는 것이 목적이며, 구 버전의 파일 관리 도구를 이용하면 긴 파일 이름과의 링크가 파손되면서 문제가 되는 경우가 많았다.

Windows 95 이상의 FAT 파일 시스템들은 모두 이 방식을 사용한다.

2.4. FAT32

FAT16의 한계를 해결하기 위해 마이크로소프트에서 1996년, 윈도우 95 OSR2와 함께 등장한 파일 시스템이다. 클러스터 주소를 16비트에서 32비트로 개선했으나 4비트는 불량 클러스터 관리 등의 문제로 예약되어 있기 때문에 최대 228-12=268,435,444개의 클러스터를 관리할 수 있다. 그러나 실제로는 단편화나 입출력 성능 문제 때문에 운영 체제에서 하드 디스크 드라이브 용량에 따라 클러스터 용량을 키워 클러스터 수를 제한하고 있다.

클러스터 용량을 512 바이트에서 64[대부분기기]/256[네이티브4K섹터HDD] KB까지 지원하기 때문에 논리 파티션의 최대 크기는 대부분의 타 기기는 4 TB 까지, 네이티브 4K 섹터 HDD는 16 TB 까지 지원한다. 하지만 다양한 이유로 파티션 테이블을 마스터 부트 레코드(MBR)로 사용할 수밖에 없는 경우 이것의 한계로 2 TB까지만 사용할 수 있고, 2000 이후의 NT 계열 윈도우 자체 포맷 프로그램은 32 GB까지만 지원한다.[4] 파일 하나의 크기는 최대 4 GB[@]까지만 지원한다. 또한 한 폴더에 파일 개수가 16,384개(214개)를 넘기지 못하며, 이마저도 파일 이름이 길면 그 개수는 줄어든다. 크기 자체는 작아도 많은 파일을 한 폴더에 넣을 수 없기 때문에 4 GB[@]가 넘지 않아도 이러한 제한에 걸릴 수 있다.

윈도우 95 OSR2부터 지원한다. 그러나 윈도우 95 OSR2 출시 이후에 나온 윈도우 NT 4.0은 FAT32를 지원하지 않는다.[7] 윈도우 95 OSR2, 98, 윈도우 Me는 127.5 GB 크기의 파티션까지 지원한다. 윈도우 98에는 512 MB ~ 2 GB짜리 FAT16을 FAT32로 손실 없이 변환해 주는 '드라이브 변환기(FAT32)' 유틸리티를 넣어 주기도 했다. 물론 FAT16으로 되돌아 가려면 포맷해야만 했다.

애플에서는 Mac OS 8.1부터 지원한다.

NTFS보다 구조가 단순하기 때문에 읽고 쓰는 속도가 약간 더 빠르다는 장점이 있다. FAT의 구조가 단순하여 구현이 쉬운 장점 때문에 카메라, 카오디오 같은 PC 밖의 주변 기기에는 여전히 많이 쓰인다. 또한 범용성이 커 Windows 이외의 다른 운영 체제와 같이 사용하는 이동식 디스크용으로 자주 쓰인다. 플래시 메모리 USB 메모리 SD 카드 같은 저장 장치로 널리 보급되면서 FAT가 재조명되었는데, NTFS와 비교해 오버헤드가 없어 기본적으로 필요한 용량이 작고, 저널링 등이 없어 정보 기록 횟수가 적어 플래시 메모리에 적합하기 때문이다.

그러나 윈도우 XP 이후 사용자 운영 체제가 NT 계열로 넘어간데다 NTFS 같은 단편화를 최소화 시키는 파일 할당 기능도 없고 NTFS의 안정성과 보안 수준을 따라오진 못하기 때문에 운영 체제 로컬 디스크에서는 사실상 설 자리를 잃었다.

또한, 파일 최대 크기가 4 GB[@]가 한계라, 동영상 같은 대용량의 파일 저장이 매우 불편한 단점이 있다. 이에 따라 마이크로소프트는 아래에 서술한 exFAT 파일 시스템을 개발했다. 그래서 FAT32는 자리를 점점 잃고 있으며, 운영 체제 설치도 윈도우 XP까지만 지원하고 있으며, 윈도우 XP 지원이 종료된 시점 이후로는 상당히 입지가 좁아졌다. 하지만 8 GB 이하의 USB 메모리나 임베디드 시스템 등에서는 FAT32가 아직도 사용되고 있다. EFI를 이용하는 옛 PC 역시 EFI 시스템 파티션이 FAT32 형식이다. EFI 표준에 아예 FAT를 사용해야 한다고 못박아 두었기 때문이다.

음향 관련 종사자나 임베디드쪽에서 의외로 이 파일 시스템을 쓰는 모습을 종종 볼 수 있는데, 맥과 윈도우 그리고 리눅스 모두에서 호환된다. 모두 정상적으로 인식이 되면서도 안정적이기 때문이다.[9] 또한 음악 파일은 아무리 용량이 커도 대부분 1GB도 채 넘지 못한다는 걸 생각해보면 단점이 없다고 볼 수도 있다. SD카드하나로 여러 운영체제를 넘나들수있다는 사실.

위에 있듯이 윈도우 98은 FAT32로 127.5GB까지 파티션을 지원함에도 불구하고, 윈도우 2000/XP는 32GB를 초과하는 파티션을 포맷하는 옵션을 제공하지 않았다. 그 이상일 경우 NTFS를 권장하면서 의도적으로 불가능 메시지를 띄운다. 그러나 FAT32 파일 시스템의 제약은 아니었기 때문에 명령 프롬프트에서 FORMAT 명령어를 사용하거나 서드파티 프로그램을 이용하면 대부분 2 TB 까지 별 문제없이 포맷할 수 있다. 그러나 2 TB를 초과하는 경우 GPT를 사용해야 하는데, GPT를 지원하는 시스템은 NTFS, exFAT 등 신규 파일 시스템도 사용할 수 있어서 FAT32를 고집해야 할 이유가 없으므로 FAT32를 지원하는 경우가 매우 드물다. 80GB/120GB 대 HDD가 상당히 널리 보급되었었고, 이전 버전에서 지원하던 기능이 신규 윈도우에서 막혔기 때문에 윈도우 버전업을 한 많은 사람들이 당황하면서 'NT 기반 운영체제를 도입하면서 NTFS 사용을 늘리기 위해 고의로 제약을 건 것 아니냐' 라는 의혹이 퍼졌었다. 운영 체제 기본 포맷 프로그램을 만든 전직 마이크로소프트 프로그래머, 데이브 플러머가 '대용량으로 포맷할 수록 FAT방식의 공간 낭비가 심각해지므로 32GB정도가 합리적인 한계선이라고 생각해서 제한했다' 면서 유튜브에서 직접 자신의 과거 실수를 인정한 적이 있다. # 이후 X(SNS)에 작성하기를 # 윈도우의 포멧창은 본래는 '임시' 였는데 그것이 그냥 고정되어 지금까지 이어진것이며 32GB는 '임의'로 적당히 설정한것이라 비화를 밝혔다.

윈도우 비스타와 7은 FAT32로의 부팅을 지원하지만 FAT32에 윈도우를 바로 설치할 수는 없다. 윈도우를 FAT32에서 부팅하려면 먼저 윈도우를 NTFS에 설치하고 설치된 하드 디스크 드라이브를 외장으로 물리거나 Windows PE 등으로 부팅하여 운영 체제가 설치된 파일을 다른 곳에 복사한 다음에 기존 하드 디스크 드라이브를 FAT32로 포맷하고 다시 복사해야 부팅할 수 있다.

ipTIME 공유기의 USB 포트에서는 FAT12, FAT16은 지원하지 않고 FAT32부터 지원한다.

2.4.1. FATX

Xbox에 쓰이는 전용 파일 시스템이다. XBOX의 하드 디스크 드라이브와 메모리 카드에 사용되며, FAT32 파일 시스템을 개량했다. 파일 길이 42문자와 파일 용량 4 GB 제한이 있지만 게임기이기 때문에 일반인들이 신경 쓸 필요가 없다. Xbox 360은 XTAF라는 전용 파일 시스템을 사용하고, Xbox One에서는 NTFS를 개량한 파일 시스템을 사용한다.

2.5. exFAT

마이크로소프트에서 2006년에 개발한 파일 시스템이다. 가끔 'FAT64'라고도 한다. Windows CE 6.0에 최초로 도입되었으며 대용량, 고속의 플래시 메모리를 효율적으로 다루기 위해 개발되었다. 최대 232-11=4,294,964,285개의 클러스터를 관리할 수 있다.

최대 파일/파티션 크기는 권장 512 TB, 이론상 128 PB이다. 다만 이론상 용량의 경우 클러스터 용량이 무려 32 MB나 되기 때문에 실용적으로 쓸 수 없다. 권장 최대 용량인 512 TB의 경우에도 클러스터 용량이 무려 128 KB나 된다. 대신 용량을 많이 차지하는 동영상 파일 위주로 저장한다면 크게 문제되지는 않는다. 윈도우 10의 경우 32 GB를 초과하는 경우 해당 클러스터 용량으로 포맷하며 최대 256 TB까지 포맷을 지원하고 있다. 주로 대용량 micro SDXC, USB 메모리 같은 이동식 저장 장치에 쓰인다. 또 macOS와 Windows는 모두 exFAT의 읽기/쓰기를 지원하여 macOS와 Windows가 동시에 설치된 부트캠프 환경의 PC나 해킨토시 PC 등에서 파일 공유의 목적으로도 쓰인다.

FAT32 파일 시스템의 파일 크기는 4 GB[@]가 한계이다. 그리고 NTFS는 윈도우와 리눅스에만 사용할 수 있고 안드로이드, 맥에서는 사용할 수 없거나 읽기 전용으로만 사용할 수 밖에 없을 뿐더러, NTFS의 오버헤드로 인한 400MB 이하의 작은 용량 매체에서의 성능 저하, 저널링 기능으로 인한 잦은 쓰기 문제 때문에 플래시 메모리에는 불친절한 면도 있어 이동식 플래시 메모리 저장 장치에 잘 쓰이지 않는다. 그렇기 때문에 마이크로소프트에서 exFAT 파일 시스템을 내놓은 것이다. 즉, exFAT 파일 시스템으로 포맷하면 일부 모바일 기기(가령 DivX 플레이어)를 제외하곤 대용량 파일과 대용량 플래시 메모리를 사용할 수 있다.

대용량 파일을 다룰 수 있는 파일 시스템이라 대용량 하드디스크에 주로 쓰일 것이라고 생각하기 쉽지만, 실제로는 그렇지 않고 이종 운영 체제간 4GB 이상 파일을 교환할 때 주로 사용된다. 클러스터 용량이 너무 커 비효율적이기 때문이다. 예를 들어 NTFS의 경우 16TB까지는 파티션을 통째로 포맷하더라도 클러스터 용량을 4KB를 설정할 수 있어 효율성이 좋지만, exFAT는 256MB부터 32GB까지 기본 클러스터 용량이 32KB로 설정되어 아무리 작은 파일도 최소 32KB의 하드디스크 공간을 차지하기 때문이다. 게다가 위에서도 언급되었듯이 안정성도 떨어지기 때문에 공간을 낭비해 얻는 이득이 없다.

12TB 하드디스크를 포맷했더니 19MB의 파일이 NTFS에서는 30MB이지만 exFAT에서는 1.7GB(...)가 된다. 심지어 클러스터 용량을 4K로 설정한 exFAT에서도 아무 파일 없이 FAT 영역 데이터만으로 11GB 이상 공간을 차지하고 있다.(...) #

exFAT 파일 시스템의 단점은 FAT32보다 불안정하다는 것이다. FAT 파일 시스템들은 전통적으로 안정성을 위해 모든 클러스터 할당 상태를 파일 할당 테이블 영역에 두 군데에 중복 기록하지만, exFAT는 한 군데에만 기록하기 때문이다. 좀 더 자세히 말해 exFAT는 클러스터 할당 상태를 파일 할당 테이블 영역에 기록하지 않고, 데이터 영역에 할당 비트맵(Allocation Bitmap)으로 모든 클러스터 할당 상태를 관리하고 있다. 쉽게 말해 클러스터 관리하는 곳이 두 군데에서 한 군데로 줄은 것이다. 그렇기 때문에 exFAT 파일 시스템을 쓰는 저장 장치는 기기에서 지원하는 안전 제거 기능을 이용해 제거한 후(Unmount) 물리적으로 제거하는 것이 좋다.[11]

당연히 다른 FAT 파일 시스템과는 호환성이 없다.

exFAT 파일 시스템의 USB 메모리 부팅은 지원되지 않는 경우가 많다. USB 부팅을 위해 작업을 진행하다 보면 exFAT에서는 USB 부팅 디스크를 만드는 옵션이 비활성화되거나 강제로 NTFS 또는 FAT32 파일 시스템으로 바뀐다.

최초로 도입된 건 Windows CE 6.0이며, PC용 윈도우에서는 Windows XP SP2 이상 (KB955704 패치를 깔아야 지원), Windows Vista SP1 이상, Windows 7 이상만 지원된다. Windows XP KB955704 패치는 Windows XP 지원 종료로 마이크로소프트 홈페이지에서 사라졌다. 여기에서 영문판을 구할 수 있다. 한국어판은 여기.

윈도우 비스타부터 exFAT 파일 시스템의 저장 장치로 부팅을 지원한다. 그러나 부팅 속도가 매우 느리며 특정 프로그램을 설치하거나 윈도우 업데이트를 하려하면 오류가 발생한다. 더구나 exFAT는 기본 클러스터 용량이 큰 편이라 저장된 파일 개수가 많을 수록 용량 낭비가 커지고 작은 파일이 많을 수록 파일을 읽고 쓰는 속도가 기존 FAT32나 NTFS보다 월등히 느린 편이다.[12] 애초에 exFAT는 로컬 디스크 파일 시스템으로 만든 파일 시스템이 아니기 때문이다. 그리고 exFAT에 윈도우를 바로 설치할 수 없다. 윈도우를 exFAT에서 부팅하려면 먼저 윈도우를 NTFS에 설치하고 설치된 하드 디스크 드라이브를 외장으로 물리거나 Windows PE 등으로 부팅하여 운영 체제가 설치된 파일을 다른 곳에 복사한 다음에 기존 하드 디스크 드라이브를 exFAT로 포맷하고 다시 복사해야 부팅할 수 있다. Windows 11에서는 탐색기나 디스크 관리에서 내장형 드라이브를 포맷할 때 파일 시스템 목록에서 exFAT가 제외되고 NTFS만 표시된다. exFAT로 포맷하려면 FORMAT 명령을 이용하거나 서드파티 애플리케이션을 이용해야 한다. 외장형 드라이브나 USB 플래시 메모리는 여전히 exFAT로 포맷이 가능하다.

exFAT 파일 시스템은 마이크로소프트의 독자 기술이었기 때문에 마이크로소프트에게 특허료를 내야 했고, 그래서 한동안 이를 지원하는 장비는 그리 많지 않았다. 하지만 플래시 메모리 용량이나 파일 용량이 증가하면서 특히 동영상 촬영이 되는 기기들은 어쩔 수 없이 지원할 수 밖에 없었다. Windows 10 2020년 상반기 업데이트 이후, WSL(Windows Subsystem for Linux)에서 exFAT 파일 시스템 접근을 지원하기 시작했다. 이와 함께 마이크로소프트에서 exFAT 파일 시스템을 오픈 소스로 공개하고 #, 사양 문서 #도 발간했다. 다만 이 기술을 상용으로 사용하려면 여전히 마이크로소프트에게 특허료를 지불해야 한다. #

애플에서도 마이크로소프트에게 라이선스를 취득해 macOS 10.6.5 버전부터 exFAT를 지원한다. 다만, 경험자들의 말로는 맥에서 포맷한 경우에는 macOS과 윈도우 둘 다 읽기와 쓰기를 할 수 있지만, 윈도우에서 포맷한 경우에 macOS에서 쓰기를 하면 파티션 구조가 꼬여버린다고 한다. 맥에서 포맷한 경우에 디스크 오류가 뜨면 맥에서 디스크 권한 복구를 해주면 디스크가 다시 정상으로 돌아온다.

안드로이드 기기들은 4.0부터 제조사들이 마이크로소프트에게 라이선스를 받아 본격적으로 지원하기 시작했다. SD 카드를 exFAT 파일 시스템으로 포맷해 인식만 하고 마운트가 되지 않는 안드로이드 기기는 exFAT 파일 시스템 드라이버가 없기 때문이다. 다행히 2012년 이후에 출시한 대부분의 안드로이드 기기들은 exFAT 파일 시스템 드라이버를 넣어 마운트가 가능하지만, 한국에서 한국어로 번역하고 판매 중인 중국산 저가 제품들은 비용 절감을 위해 드라이버를 뺀 경우가 대부분이므로 유의해야 한다. 이 경우에 FAT32 파일 시스템만 이용하거나 루팅해 exFAT 파일 시스템을 지원하는 모듈을 로드하는 앱을 넣어 해결할 수 있다. 동일한 방법으로 대부분의 안드로이드 기기가 지원하지 않는 NTFS도 사용할 수 있다.

아직 마이크로소프트가 exFAT 파일 시스템을 오픈 소스화 하기 전인 2013년, 삼성전자에서 삼성 갤럭시를 내놓으면서 GPL을 준수하지 않고 소스를 공개하지 않아 저작권 위반 논란이 일자 소스를 공개하다가 실수로 리눅스용 exFAT 모듈 소스를 공개한 적이 있다. #

시놀로지 NAS 제품군의 경우, DSM의 패키지 센터에서 exFAT 액세스 지원(exFAT access) 앱을 따로 받아야 exFAT 저장장치가 인식된다. 해당 앱은 DSM 6.x 버전까지는 유료였으나, 7.0버전부터는 무료로 전환되었다.

삼성 TV에서는 2013년 기종부터, LG TV에서는 2022(읽기 전용)/2023년(쓰기 가능) 기종부터 지원하고 있다.

2.6. TFAT

"Transaction-safe FAT"의 준말로서, 파일 전송 중에 갑자기 메모리 카드를 뽑거나 전원이 꺼지는 사태에도 데이터가 망가지는 것을 막는 포맷이다. 그와는 별도로 장치는 망가질 수도 있다! 마이크로소프트의 윈도우 CE에서 종종 찾아볼 수 있다. 기존 FAT, exFAT 파일 시스템에 한꺼풀 씌우는 개념이다.

2.7. RFS

삼성전자에서 개발한 플래시 메모리용 파일 시스템으로 "Robust File System"의 줄임말이다. 이름만 보면 전혀 상관이 없는 것 같아 보이지만, FAT32를 기반으로 하여 플래시 메모리용 웨어 레벨링과 저널링을 추가한 파일 시스템이다. 갤럭시 S의 /system 및 /data 파티션이 이 형식으로 되어 있는데, 느린 성능으로 인하여 당시에 삼성이 삼적화 소리를 들으면서 욕을 먹게 된 원인 중 하나였다. 결국 삼성은 갤럭시 S2부터는 리눅스 파일 시스템 중 하나인 ext4를 사용하기 시작했다.[13] 실제로 컴퓨터에 연결시켜서 탐색기로 파일을 넣었다가 빼면 내부적으로 변환을 거쳤다가 돌아오기 때문에 파일 내용만 동일하고 생성/변경 시간 등의 파일 속성들은 초기화되는 것을 알 수 있다. 즉 복사를 하면 그대로 옮겨지는 게 아니라 새로운 파일을 생성해서 내용을 동기화하는 것. 삼성의 또 다른 플래시 메모리용 파일 시스템인 F2FS와는 관계가 없다.

3. 최대 파티션 크기

Default cluster size for NTFS, FAT, and exFAT
클러스터 용량 FAT12 FAT16 FAT32 exFAT
512B 2MB 32MB 32GB 2TB
1KB 4MB 64MB 64GB 4TB
2KB 8MB 128MB 128GB 8TB
4KB 16MB 256MB 256GB 16TB
8KB 32MB 512MB 512GB 32TB
16KB 64MB[C] 1GB 1TB 64TB
32KB[A] 128MB[C] 2GB 2TB 128TB
64KB 256MB[C] 4GB 4TB 256TB
128KB[B] - 8GB[C] 8TB[C] 512TB
256KB[B] - 16GB[C] 16TB[C] 1PB
512KB - - - 2PB
1MB - - - 4PB
2MB - - - 8PB
4MB - - - 16PB
8MB - - - 32PB
16MB - - - 64PB
32MB - - - 128PB

4. 특성

4.1. 레거시 호환성

현재는 오픈소스인 리눅스나 프리도스(FreeDOS)가 사실상 호환되는 최신이다. 예를 들면 8.3포멧인 FAT기준에서 64GB의 SDHC(고용량 고속 SD카드)의 포멧을 안정되게 지원한다. 윈도우 경우 기본으로 exFAT을 지원한다. 이둘은 서로 다르다. 또한 IBM DOS나 DR DOS와도 다르다.
한편 아두이노 SD카드 FAT포멧은 리눅스 FAT와도 호환된다.

4.2. 8.3 rule

구형 파일 시스템(FAT, ISO 9660 등) 또는 OS( MS DOS 등)에서는 파일명( 확장자) 길이 제한이 있다. 8.3 파일명 또는 SFN(Short FileName)이라고 하며, 그 반대는 LFN(Long FileName)이라고 한다. 대다수 확장자가 3글자로 되어 있거나, 옛날 파일 이름 끝에 "~1" 류의 글자가 붙는 이유이다. 현재는 굳이 준수할 필요가 없음에도 하위호환을 위해 8.3 rule을 준수하는 경우가 있다.

여담으로 Windows 에서 파일명(+경로명) 길이가 256자로 제한되는 것(MAX_PATH)과는 다른 문제다. 이는 파일시스템이 아니라 운영체제에서의 제한이다.

4.3. 복구율

파일을 지우면 파일이름의 첫 글자에 '0xE5'[24]를 써서 지운 파일이라고 표시만 하기 때문에 지운 파일 회복이 매우 간단하다. 이렇게 표시된 파일은 다른 파일이 같은 장소에 복사되면 그때 덮어 씌워지면서 지워진다. 도스 시절에 나온 undelete는 이 점을 이용해서 파일을 복구한다. 하지만 파일이 조각나 있으면(단편화) 정상적으로 복구될 확률이 급감하므로 너무 믿지 말자.

5. 관련 문서


[1] 8자보다 짧은 경우에는 남은 공간을 공백 문자(0x20)로 채운다. 그래서 MS-DOS에서는 파일 이름에 공백을 사용할 수 없었다. [대부분기기] [네이티브4K섹터HDD] 일부 서버용 HDD에서 사용 [4] 다만, PowerShell에서 format /FS:FAT32 (디스크 문자): 를 통하여 포맷할 수 있다. [@] 정확히는 (해당 용량) - 1 바이트(3.999...GB)이다. 2진법에서 네 자리로는 16(10000)이 아닌 15(1111)까지만 표현할 수 있는 것과 동일한 맥락. [@] [7] 공식적으로 지원은 안되나 FAT32를 인식시킬 수 있는 패치 프로그램이 있다. [@] [9] exFAT 파일 시스템도 둘다 인식이 되기는 하는데 FAT32보다는 훨씬 불안정하다. [@] [11] 기기의 전원을 완전히 끄고 저장장치를 물리적으로 제거하면 더욱 좋다. [12] 그래서 요즘 외장 하드디스크는 전부 NTFS로 포맷되어 나온다. [13] 이 때문에 S2부터는 휴대폰을 USB같은 외장형 저장장치로 인식시킬 수 없게 되었으며 가상의 파일시스템을 거쳐 사용자에게 비슷하게 보이도록 바뀌었다. [C] 사실상 비표준 [A] MS-DOS 4.0~8.0 및 Windows 9x가 지원하는 최대 클러스터 용량 [C] [C] [B] FAT16/32는 섹터 크기가 512B보다 큰 경우 가능하다. 단 일부 서버용으로 사용되는 4K native 섹터여야만 하며, 일반적으로 사용되는 512B 에뮬레이션 HDD인 경우는 제외. [C] [C] [B] [C] [C] [24] 확장 아스키 코드 그리스 문자 σ다.