본문 바로가기

디스크와 파티션

32GB 이상의 파티션을 FAT32 로 포맷하는 방법 - 왜? FAT32 로 포맷할 수 없나?

32GB 이상의 파티션을 FAT32 로 포맷하기 위해선?

1. FAT32 로의 포맷 거부

윈도우에서 32GB 를 초과하는 크기를 가진 파티션(볼륨)을 FAT32 로 포맷하려고 하면 다음과 같은 메시지들을 보이며 포맷을 거부하게 됩니다.




이것은 윈도우에 포함된 모든 포맷 기능에서 FAT32 는 32GB 용량 까지만 포맷할 수 있도록 자체적으로 제한해두었기 때문에 그렇습니다. 그렇기에 윈도우(에 포함된) 포맷 기능이 아닌 타사의 디스크 & 파티션 관리 유틸리티나 포맷 유틸리티를 사용하면 32GB 를 초과하는 파티션도 FAT32 로 포맷할 수 있습니다.



2. MiniTool Partition Wizard Home Edition 을 통해 포맷하기

가장 먼저 대표적인 무료 디스크 & 파티션 관리 프로그램인 MiniTool Partition Wizard 를 통해 32GB 가 넘는 파티션(볼륨)을 FAT32 로 포맷해보도록 하겠습니다. 일단은 아래의 글에서 MiniTool Partition Wizard 를 준비합니다.

  MiniTool Partition Wizard Home Edition 7.1 - 무료에 쉬운 파티션 관리 프로그램


MiniTool Partition Wizard 의 준비를 모두 마쳤다는 가정하에 바로 예제를 보도록 하죠.

예제1) D: 드라이브 볼륨파일 시스템 FAT32, 할당 단위 크기 16KB, 볼륨 레이블 없이 포맷합니다.



MiniTool Partition Wizard 프로그램을 실행한 후 다음의 과정을 진행합니다. 과정은 간단하기에 특별한 설명없이 스크린 샷을 차례로 보는 것으로 하겠습니다.








파티션의 포맷을 모두 마치고 난 후 디스크 관리와 DiskPart 에서 추가적으로 살펴본 모습입니다. FAT32 로 정상적으로 포맷된 것을 확인할 수 있습니다.







32GB 이상의 파티션을 FAT32 로 포맷하지 못하는 이유

1. FAT32 원래의 한계

일단 이것은 앞서서도 말했고 다른 글에서도 여러번 언급했듯이 FAT32 의 한계 때문이 아닙니다.

윈도우 7 의 파일 시스템 비교 - 등장 순
  FAT16 FAT32 NTFS exFAT(FAT64)
최대 볼륨 크기 2 GB
4 GB with 64 KB Cluster
2TB
16TB with 4 KB Sector
256 TB 512 TB

즉, 원래는 32GB(최대 2TB) 가 넘는 파티션일지라도 FAT32 로 포맷할 수 있는게 맞습니다. 근데 앞에서도 보았듯이 단순히 윈도우에 포함된 모든 포맷 기능에서는(기본 포맷, Format.exe, 디스크 관리, DiskPart) 이를 FAT32 로 포맷할 수 없도록 한 것 뿐이죠. 그래서 다음과 같은 생각이 드는 것은 어쩌면 당연한 것일 지도 모르겠습니다.



2. 아니 왜?

아니 그렇다면 왜? 윈도우는 FAT32 볼륨의 최대 크기를 원래의 지원 크기보다 더 작게 제한을 했을까요?

일단 첫 번째로 그것은 FAT32 의 특성 때문에 그렇습니다. FAT32 는 큰 단점이 하나 있는데 검색 성능이 떨어진다는 것입니다. 그래서 볼륨에서 관리해야 할 클러스터의 개수가 많아질 수록, 그리고 실제 저장된 파일의 개수가 많아질 수록, 특정 파일을 찾는데 오랜 시간이 걸리고 그로 인해 전체적인 성능이 크게 떨어지는 문제가 있습니다. 여기에 더해 또 하나의 단점이 있는데 클러스터의 공간 활용 능력도 떨어집니다. 그래서 클러스터의 크기가 커질수록 공간의 낭비가 심해지죠.

그리하여 대용량의 볼륨(파티션)에서 FAT32 를 사용하기 위해 클러스터의 크기를 너무 작게 잡으면 느린 검색 속도로 성능이 떨어지는 문제가 발생하고, 클러스터의 크기를 너무 크게 잡으면 공간의 낭비가 심해지는 문제가 발생하게 됩니다.

그래서 윈도우에서는 FAT32 의 기본 클러스터 크기로 4KB~16KB 를 설정하고 32GB 이상의 대용량 볼륨에서는 아예 FAT32 를 사용하지 못하도록 포함된 포맷 기능들에서 이를 제한하게 된 것입니다. 일단 일차적인 이유는 그렇습니다.



3. 왜 하필 32GB 인가?

그렇다면 왜 하필 32GB 일까요? 분명 앞서 설명한 문제가 있다 하더라도 사실 32GB 라는 제한 크기는 FAT32 의 원래 지원 크기에 비하면 너무 작은 것 아닌가 하는 생각이 드는 것도 사실입니다. 32GB 를 넘어가더라도 위와 같은 원인으로 성능 저하나 심각한 공간 낭비를 겪으려면 많은 개수의 자잘한 파일들을 좀 과격하다 싶을 정도로 왕창 저장하거나, 복잡한 폴더 트리 구조를 가지고 있어야 하는데, 일반적인 데이터 저장용 폴더에선 이게 사실 좀 힘들잖아요? 물론 윈도우 설치 파티션에선 윈도우 폴더와 프로그램 폴더로 인해 좀 일찍 겪을 수도 있습니다. 서버 프로그램이 설치되어 있으면 더 그럴 수도 있고... 아무튼 그래도 32GB 는 좀 너무 작은 거 아닌가라는 의문은 변함이 없는 것이 사실입니다.

일단 먼저 알아두셔야 할 게 지금부터 하는 이야기는 어디 기술 문서에 나온 이야기는 아니고 제가 알고 있는 여러 가지 정보들을 취합하여 얻은 결론이란 것을 미리 밝힙니다.


"우선 결론부터 내리자면 그것은(32GB 라는 용량은) NTFS 파일 시스템으로의 변환을 염두한 것이 아닌가 싶습니다."


분명 FAT32 가 본격적으로 사용되기 시작하였다고 볼 수 있는 윈도우 98 시절에는 윈도우에 내장된 포맷 기능에 FAT32 의 32GB 제한 따위는 없었습니다.(그럴만한 용량의 디스크도 없었지만 ^^;) 하지만 윈도우 XP 로 넘어오면서 이러한 제한이 생기기 시작했죠. 여기서 알아야 할게 윈도우 XP 는(사실 2000 은) 윈도우의 역사에 있어서 굉장히 중요한 전환점 중에 하나라는 사실입니다.

윈도우 XP(NT 5.1) 시대는 윈도우 2000(NT 5.0) 부터 시작된, 가정용 윈도우 9x 와 서버용 윈도우 NT 라는 두 가지의 전혀 다른 성향의 윈도우 제품군을 NT 커널 하나로 대동단결하던 대통합의 시대입니다. 이후 9x 커널은 ME 라는 희대의 삽질을 선보인 후 종말하였고, 서버용이었던 NT 커널은 윈도우 XP 라는 희대의 풍운아를 등장시키며 가정용 윈도우의 새로운 주역이 된 것이죠. 

이러한 윈도우 NT 의 기본 파일 시스템은 NTFS 였습니다. NTFS 는 서버용으로 설계된 만큼, 그리고 더 최신의 파일 시스템인 만큼, 기존의 FAT32 에 비해 한층 진보된 기능과 성능, 보안성을 갖추고 있었죠. 이제 마이크로소프트는 기존까지 가정용 윈도우에서 사용되던 낡고 취약한 FAT32 파일 시스템을 버려야 할 필요가 생겼습니다.

그리하여 마이크로소프트사는 여러 가지 다양한 홍보를 통해 FAT32 보다 NTFS 가 월등히 좋다고 선전하기 시작하였습니다. 여기에 더해 윈도우에 포함된 포맷 기능 자체내에서 32GB 를 초과하는 파티션(볼륨)은 FAT32 로 포맷할 수 없게 제한을 시켜버립니다. 즉, 32GB 이상의 파티션을 사용하려면 울며 겨자먹기로 NTFS 를 사용할 수 밖에 없게 만든 것이죠.

지금에서야 이렇게 쉽게 말하지만 그 때는 그게 상당한 혼란거리 중에 하나였습니다. '아니 써글 왜 FAT32 로 포맷이 안 되냐고?' 라는 질문이 쏟아지고, 어떻게든 좀 더 쉽게 FAT32 로 포맷하기 위해 고스트의 백업과 복원을 통해 대용량의(그리고 윈도우에서 포맷할 수 없는) 파티션을 FAT32 로 빠르게 포맷하는 방법이 인기있는 팁 중에 하나였을 정도니까요.(그런 GHO 파일은 필수로 가지고 다녀야 할 아이템 중에 하나였죠.) 아무튼 뭐 그랬습니다.


이제 이러한 제한에 더해 마이크로소프트사는 FAT32 -> NTFS 로의 주도권 이전 작업을 좀 더 원활하게 진행하기 위한 일환으로 FAT32 를 바로 NTFS 로 전환할 수 있는 Convert 라는 명령을 기본적으로 제공하게 됩니다. 제가 생각하기엔 이게 왜 하필 32GB 라는 용량으로 제한했을까란 물음의 핵심이 아닐까 생각합니다. 왜 이것이 핵심이냐?

제가 Convert 를 통해 FAT32 -> NTFS 로 전환하는 방법을 설명한 글에서 CVTAREA 라는 매개 변수에 대해서 이야기를 드렸었습니다. 기억하시나요? 아무튼 그 이야기를 다시 해보도록 하죠. 


NTFS 에는 NTFS 의 목숨과도 같은 데이터가 존재하는데 그것이 바로 MFT 라는 녀석입니다. SSD 가 주력인 지금에야 MFT 의 단편화가 아무런 문제가 되지 않지만, HDD 에서는 그 때에도, 지금도 이 MFT 의 단편화는 매우 중요한 문제 중에 하나입니다.

MFT 는 NTFS 의 모든 것이라고 할 수 있습니다. MFT 는 해당 볼륨에 기록된 모든 파일에 대한 정보가 기록되어있는 NTFS 의 거대한 데이터베이스이고, 그래서 이건 절대적으로 (HDD 에선) 단편화가 되면 안 되는 녀석입니다. 왜? 이게 단편화가 되기 시작하면 파일의 검색 속도가 느려지고(HDD 는 단편화에 취약합니다.), 이는 곧 NTFS 의 종말이라고 할 수 있을 정도로 성능이 진짜 말 그대로 처참하게 뚝뚝 떨어지기 때문이죠.

그래서 NTFS 는 포맷될 당시 무조건 볼륨(파티션) 공간의 12.5% 를 이러한 MFT 의 전용 공간으로 예약을 합니다. 즉, 해당 볼륨의 공간이 부족해지기 전까지는 절대 일반 파일은 이 12.5% 의 공간에 파일을 기록하지 못하게 함으로써 MFT 의 단편화를 막고자 하는 것이죠.

물론 이러한 MFT 예약 공간이 영원한 것은 아닙니다. MFT 예약 공간이든 나머지 일반 데이터 공간이든 종국엔 둘 중에 하나는 먼저 가득 찰 수 밖에 없죠. 보통은 MFT 영역보단 일반 데이터 공간이 먼저 찹니다. 그래서 보통 해당 볼륨의 여유 공간이 12.5% 이하로 떨어지면 일반 파일이 이 MFT 영역에 기록되기 시작하고, 그래서 MFT 의 단편화는 시작되고, 결과적으로 NTFS 는 눈에 띄게 느려지기 시작합니다. 이러한 이유로 드라이브를 사용할 때는 최소한 여유 공간으로 15% 정도는 쓰지 말고 남겨두라는 말이 나온 것도 이 때문입니다.

아무튼 이 MFT 를 위한 12.5% 의 예약 공간이란 녀석은 NTFS 에겐 매우 중요한 겁니다. 그래서 최초에 NTFS 파일 시스템이 구축될 때 즉, 아무런 파일도 기록되지 않은 시점에 적절한 위치에 가장 먼저 이 MFT 예약 공간이 할당이 되는 것이죠. 12.5% 기억해 두세요.


이런 저런 이유로 FAT32 를 NTFS 로 변환하는데에는 필연적으로 하나의 문제가 발생하게 됩니다. 바로 이 중요한 MFT 예약 공간을 미리 선점하지 못하였다는 것이죠. 디스크에 파일은 차곡 차곡 순서대로 쌓이는 게 아닙니다. 사용하다보면 어쩔 수 없이 파일은 물론 공간에도 단편화가 발생할 수 밖에 없습니다. 그렇기에 이미 해당 볼륨에 데이터들이 들어찬 시점에서(FAT32 를 사용 중이던 상황에서) 나중에 MFT 예약 공간을 만들려다보니까 이미 단편화된 공간으로 인해 MFT 가 시작부터 쪼개지는 환장할 일이 발생하게 되는 것이죠.

"나중에 쪼개져도 머리 아픈데 시작부터 종말을 보자고? 어쩌자고? 정신줄 놓고 시작할까? 그걸 원해?"

그래서 이러한 최악의 사태를 방지하기 위해 Convert 는 하나의 연속된 공간에 씌여진 빈 파일을 지정해주면 즉, 단편화가 전혀 안 된 완전한 파일을 루트에 하나 생성하고 이를 /CVTAREA 로 지정해주면, 해당 파일이 사용하던 공간을 MFT 의 예약 공간으로 사용하는 꼼수를 부리게 됩니다. 적절한 공간에 완벽하게 위치하진 않았지만 어쨌든 MFT 의 단편화는 막을 수 있는 매우 훌륭한 꼼수죠.


자 이제부터 중요합니다. 원래 MFT 예약 공간은 해당 볼륨의 몇 % 라고 했죠? 12.5% 라고 했습니다. 그래서 /CVTAREA 를 통해 지정해줄 MFT 예약 공간용 파일도 그 크기에 맞춰 준비해주는 게 좋습니다.

근데 여기엔 결정적인 문제가 하나 있습니다. 그것은 바로 미리 MFT 예약 공간용 파일을 준비해야 하는 FAT32 파일 시스템의 한계라는 녀석입니다. 자 생각을 해보자고요. FAT32 에서 저장할 수 있는(기록할 수 있는) 단일 파일의 최대 크기는 얼마였죠? 바로 4GB 입니다. 이건 죽었다 깨어나도 벗어날 수 없는 FAT32 의 운명의 굴레입니다. 요건 요래요래 조래조래 해서 극~뽁~ 요따위의 꼼수 나부랭이로 어떻게 해결할 수 있는 문제가 아니거든요.

즉, 완전한 FAT32 -> NTFS 변환을 위한 MFT 예약 공간용 파일을 만들어야 하는데, 그 파일의 최대 크기가 고작 4GB 뿐이란 것이죠.


그럼 우리 이 사실을 가지고 간단한 1차 방정식 하나를 계산해보도록 하죠.

"XGB 의 크기를 가지는 볼륨의 12.5% 는 4GB 이다. 그럼 넌 이 XGB 가 얼마라고 생각하냐?"

X  x  0.125 = 4
X = 4 / 0.125
X = 32

32GB 네요. 어디서 많이 본 용량이죠. 즉, 32GB 는 윈도우의 Convert (/CVTAREA) 명령을 통해 이상적으로 변환할 수 있는 FAT32 볼륨의 최대 크기가 되는 겁니다.


이러한 이유로 32GB 를 초과하는 크기를 가진 FAT32 볼륨을 NTFS 로 변환하기 위해선 앞서 이야기한 두 가지 최악의 상황을 감수한 채 변환해야 한다는 말이 됩니다.

  1. 그냥 /CVTAREA 매개 변수없이 바로 변환해서 단편화된 채로 MFT 예약 공간을 시작하든가?
  2. 단편화된 채로 시작하진 않겠지만 원래 적정 용량인 12.5% 보다 적은 용량으로 MFT 예약 공간으로 시작하든가?

1 번은 시작부터 문제죠. 2 번은 너무 작은 MFT 예약 공간으로 인해 데이터 공간보다 먼저 MFT 영역이 꽉 차버리는 사태가 발생할 가능성이 매우 크고, 이로 인해 또 역시나 빠르게 MFT 가 단편화될 가능성이 있는 것이죠. (HDD 만 존재하던 그 때 당시의 상황으로는, 누차 이야기하지만 SSD 는 단편화의 영향을 받지 않습니다. 그래서 조각 모음도 안 하는 겁니다.)


"...... 어라? 이거 어쩌지? 이러면 Convert 를 준비해뒀어도 FAT32 를 NTFS 로 변환하면 망하는 거잖아?"

"야~ 야~ 그냥 FAT32 로는 32GB 까지만 사용할 수 있게 제한해버려~"

"올~"

"올~"

프로그래머가 Format 명령의 32GB 제한을 시전합니다.

프로그래머가 좋아합니다.

빌 게이츠가 좋아합니다.

사용자가 당황합니다.


뭐... 제가 알고 있는 정보들을 종합해 본 결과 이런 스토리가 아니었나 생각합니다. 아니면 어쩔 수 없고요. -_-; 누가 관련된 문서 좀 던져주시던지요. 저도 좀 읽어보게요.(영문 자료라면 제 실력이 개판이니 번역까지 해주시면 아주 좋습니다. -_-)

흠... 지금까지 매우 지루하고 살아가는데 전혀 도움 안 되는 쓸데없는 잡담이었습니다. 이상입니다. ^^;;


http://technet.microsoft.com/en-us/library/bb457112.aspx
http://en.wikipedia.org/wiki/File_Allocation_Table

한 가지, 이번에 이 글을 정리하면서 예전 자료들을 다시 한 번 살펴보았는데요. FAT32 볼륨의 최대 지원 크기에 대해선 마이크로소프트 테크넷의 자료에선 32KB 클러스터를 사용하는 경우 이론적으론 8TB 이지만 실질적으론 2TB 라고 설명이 되어 있고, 위키피디아의 자료에선 클러스터의 크기가 8KB 인 경우부터 64KB 인 경우까지 모두 2TB 로 설명이 되어 있더군요.

또한 위키피디아에선 Advanced Format 으로 불리우는 4KB 섹터를 지원하는 디스크에서 4KB 섹터를 바로 사용할 경우 16TB 까지 지원을 한다고 표기가 되어 있습니다.

그리하여 이론적인 것은 어디까지나 이론일 뿐이고, 4KB 섹터라는 것은 특수한 환경이라고 할 수 있으니, 일반적으로 FAT32 의 최대 볼륨 지원 크기는 우선은 2TB 로 보는 것이 옳을 듯 싶습니다.


아무튼 제가 지금까지는 FAT32 의 최대 볼륨 지원 크기가 2TB(8KB)~16TB(64KB) 라고 설명을 했었는데요.(그 때는 위키의 정보가 지금처럼 이렇게 방대하지 않았는데... 뭔가 괴리감이) 정리 당시 많은 자료들을 참고했었고 이를 취합하면서 약간의 혼란이 발생했던 듯 싶습니다. 이런 이유로 FAT32 의 최대 볼륨 지원 크기를 언급했던 제 글들에서 이에 대한 정보를 기존의 2TB(8KB) ~ 16TB(64KB) 에서 2TB(8KB~64KB) ~ 16TB(4KB Sector) 로 모두 수정하였습니다.



테스트

VMware 를 통해 2TB ~ 16TB 의 스트라이프 볼륨을 준비하고 이를 Partition Wizard Professional 을 통해 FAT32 로 포맷을 시도해보았습니다. 결과는 2TB 까지는 포맷이 가능했지만 2TB 를 넘어서면 FAT32 로는 포맷이 불가능하더군요. 단순히 Partition Wizard 하나의 결과지만 아무래도 FAT32 의 최대 볼륨 크기 제한은 클러스터 크기에 상관없이 2TB 가 맞는 듯 합니다. 32KB 클러스터일 때 8TB 라는 것은 마소 테크넷의 설명대로 이론상 수치일 뿐이고 파일 시스템 자체적으로 실제 적용에는 제한을 두는 듯 합니다.