가끔 받았던 질문인데 이 글을 통해 정리해보고자 합니다.

똑같은 파티션인데 FAT32로 포맷하면 위 그림과 같은 증상이 나타나지 않지만, NTFS로 포맷하면 항상 사용 중인 공간이 조금 생깁니다. 분명 방금 전에 깨끗하게 포맷했는데도 말이죠. 안에 들어가봐도 아무 파일도 없습니다. 그런데도 사용 중인 공간은 있다고 나옵니다. 용량이야 얼마 되지 않지만 그래도 왠지 손해보는 느낌이 들죠?

해답은 바로 MFT에 있습니다. MFT(Master File Table)에 대한 기술적인 이해는 제가 공돌이가 아니다보니 잘 모르겠습니다. 사실 크게 관심도 없구요. 그리고 MFT를 이해하려면 NTFS 구조 전체를 이해하는게 좋습니다.

거두절미하고 이 글의 해답은 아래 MS 문서에 나와있습니다. 좀 오래된 자료네요.

http://support.microsoft.com/kb/174619/ko

NTFS 파일 시스템의 핵심에는 마스터 파일 테이블(MFT)이라는 파일이 포함되어 있습니다. MFT에는 MFT 파일 자체를 포함하여 NTFS 볼륨의 각 파일에 대한 항목이 최소한 하나 있습니다. 

NTFS 볼륨의 조각을 모으는 유틸리티는 MFT 항목을 이동할 수 없고 MFT의 과도한 조각화(Fragmentation)는 성능에 영향을 미치기 때문에 NTFS는 MFT의 크기가 증가할 때 가능하면 MFT가 연속되도록 하기 위해 MFT를 위한 공간을 예약합니다.


그러니까 한마디로 요약하자면 MFT가 과도하게 조각나지 않도록 하기 위해 미리 MFT 영역으로 사용될 공간을 예약해두기 때문에 NTFS로 포맷하면 항상 일정 공간이 사용중으로 나온다는 것입니다. MFT가 미리 찜해둔 영역이죠.

보통 디스크 조각모음 프로그램을 돌려보면 아래 그림처럼 이동할 수 없는 파일 영역이 표시됩니다. 아래 프로그램에선 보라색 영역이 MFT입니다.




이 내용과 직접적으로 관련은 없지만 uTorrent 프로그램도 비슷하게 작동합니다. 디스크가 과도하게 조각나는 문제를 방지하기 위해 uTorrent는 파일을 받기 전에 미리 그 파일의 크기만큼 공간을 할당해놓고 받습니다. uTorrent로 파일을 받아보신 분들은 한번쯤 경험해보셨을 듯 합니다. 다 받지도 않은 파일 크기가 초기에 이미 100% 크기로 표시되는 현상 말이죠. 공간을 미리 할당해두기 때문에 그렇습니다. 좋은 현상이지요. 예전에 uTorrent가 구버전일 때는 이 공간할당 작업에서 제로필을 했기 때문에 대용량 파일을 받는 경우 디스크 과부하 현상이 심하게 일어났습니다. 그래서 사람들이 diskio.sparse_files 옵션을 true로 변경해서 사용했는데, 그렇게 하다보니 디스크 단편화가 심해지는 문제점이 생겼습니다. 결국 나중에 diskio.no_zero 옵션이 등장했고 지금은 기본값으로 sparse_files가 false이고 no_zero가 true로 잡혀나옵니다. 따라서 단편화 문제와 과부하 문제가 동시에 해결된 것이지요.


디스크 조각모음 프로그램중에 디스크키퍼는 MFT 영역도 조각모음 할 수 있다고 들었는데 저는 예전에 한번 사용해봤다가 크게 당한 적이 있어서 그 후로 사용하지 않습니다. 그리고 조각모음 시간도 너무 오래 걸리더라구요. 그래서 그냥 간편히 위 프로그램을 사용하고 있습니다.