📁 파일 시스템 | |||||||
{{{#!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. 개요
New Technology File System, NTFSMicrosoft Windows의 파일 시스템으로, MS-DOS부터 쓰인 FAT를 대체하기 위해 1993년 Windows NT 3.1과 함께 발표했다. FAT에 비해 여러가지가 개선되었는데, 메타데이터의 지원, 고급 데이터 구조의 사용으로 인한 성능 개선, 신뢰성, 추가 확장 기능을 더한 디스크 공간 활용을 들 수 있다.
FAT 시스템에서 NTFS 시스템으로 변환하고 싶은 경우 명령 프롬프트를 관리자 권한으로 실행해서 convert (드라이브 할당문자): /fs:ntfs를 실행하면 된다. 파일이 사라지지 않지만, 몇 분에서 몇십 분 가량 기다려야 한다.
처음 나올 당시엔 매우 획기적이었다. 그러나 21세기 들어 오픈 소스 진영이 폭발적으로 발전하면서 NTFS와 비슷한 수준의 다양한 파일 시스템들을 선보였고, 썬 마이크로시스템즈의 ZFS 까지 등장하면서 현재는 평범한 파일 시스템이 되었다. 마이크로소프트는 뒤처지지 않기 위해 NTFS를 기반으로 하는 ReFS를 준비 중이다. 마이크로소프트의 ReFS 설명.
현재 쓰이고 있는 NTFS 3.1은 Windows XP부터 사용되었으며, 하위호환으로 Windows NT 4.0 서비스 팩 4부터 사용할 수 있다. (NT 4.0 서비스 팩 3 이전과는 호환 안 됨)
2. 기능과 제한
이밖에도 파일 암호화라든지 수많은 기능을 가지고 있지만 역시 유저들에게 와닿는 기능은 파일 용량 한계의 완화일 것이다. 특히 DVD의 보급으로 4GB가 넘는 ISO 파일을 FAT32에선 저장하질 못해[1], Windows 2000이 빠르게 소비자 시장에 퍼지게 된 원인이기도 하다.[2] 특히, Windows XP부터는 아예 하드나 이동식 디스크의 용량이 32GB가 넘으면 무조건 NTFS로 포맷하기 때문에, 구형 시스템에서 USB 메모리를 쓰기 위해 FAT32로 포맷하려면 다른 곳에서 만든 포맷 도구 프로그램을 써야만 했다.자체적으로 마운트를 지원한다. 드라이브를 포맷할 때 '비어 있는 NTFS 폴더에 탑재' 옵션을 선택하면 된다. VHD 파일을 만들어서 폴더에 탑재시킬 수도 있다.
NTFS를 사용해도 발생하는 제한은 있는데, 가장 큰 제한은 파일 이름 포함 최대 260자[3]로 제한된 경로 이름이다. 이것은 NTFS 자체의 제한은 아니며 원래 Windows의 NT 커널은 32,767자까지 지원할 수 있다. 다만, Win32 API의 레거시 방식 경로 문자와 관련이 있는 MAX_PATH가 260자로 제한된 것이 문제. 아직도 Win32 API를 레거시 방식으로 사용하고 있는 프로그램들이 상당히 많고, 더 웃픈 것은, 파일 탐색기에서 기본적인 복사 명령도 레거시 Win32 API를 사용하여 저런 제한에 딱 걸린다는 것이다. 게다가 과거에 만든 프로그램들의 경우 경로 버퍼를
char path[MAX_PATH];
와 같이 구현한 것들이 있다 보니 제한을 그냥 해제할 경우 버퍼 오버플로우 문제를 야기시킬 수 있다.덕분에 파일 탐색기의 네트워크 상에서 저런 제한이 없는 다른 운영 체제나 다른 파일 시스템에서 NTFS로 파일을 복사할 때 파일 경로 길이 제한 때문에 복사를 못한다는 메시지가 뜨는 경우가 있고[4], 이것을 NTFS 파일 시스템의 한계로 알고 있는 사람도 많다. 다른 복사 프로그램[5]을 사용하는 등 우회 방법이 있긴 한데, 많이 귀찮아서[6] 좀 불편해도 그냥 260자 안으로 파일 경로를 구성하는 사람들이 많다.
Windows 10 1607부터 드디어 시스템 MAX_PATH 인식 제한을 없애는 옵션이 생겼다. 다만 기본으로는 켜져 있지 않고 로컬 그룹 정책 설정[7]에 가서 옵션을 바꿔줘야 하는 문제가 있다.
또한, NTFS는 최대 264-1의 클러스터 수를 관리할 수 있다. 그러나 Windows XP에선 마스터 부트 레코드만 지원하는 관계로 부팅용 하드 디스크 드라이브는 약 2.2TB까지 지원한다. 그렇지 않은 것은 최대 64KB의 클러스터 용량을 지원해 약 256TB까지 저장할 수 있다. Windows Vista부터 GPT를 지원하기 시작하면서 부팅용 하드 디스크 드라이브의 2.2TB 제한이 사라졌다. Windows 10 1709부터는 최대 클러스터 용량을 2MB로 늘려 약 8PB까지 저장할 수 있다.
주의해야 할 점은, 파일 탐색기는 여전히 260글자보다 긴 파일 경로를 입력 받지 못하는 Win32 API를 사용하고 있으므로 폴더 창을 이용한 복사나 붙여넣기는 작동하지 않는다는 점이다. 참고로, NTFS의 압축 파티션 기능이 작동하려면 클러스터 용량은 반드시 4KB 이하가 되어야만 한다. 클러스터 용량이 이보다 커지면 압축 기능을 사용할 수 없다.
NTFS 시스템에는 색인 기능이 있는데 이를 적극적으로 활용하는 Windows Vista 이후부터는 컴퓨터를 깔자마자 며칠 동안은 하드 디스크 드라이브의 파일들을 색인 작업하느라 컴퓨터가 좀 느릴 수도 있다. 하지만 색인 작업이 끝나면 Windows XP보다 쾌적하게 이용할 수 있다. 제어판에 있는 색인 옵션 아이콘을 클릭하면 무슨 폴더를 색인할 지, 몇 개의 항목이 색인되었는지 등을 확인할 수 있으며, 색인을 초기화한다거나 색인하지 않는 파일 형식 등의 설정을 할 수 있다.
3. 지원
더블스페이스(드라이브 스페이스)는 지원하지 않는다. NTFS는 고유의 압축 기술이 있는데다가 Windows Me가 출시되기 전쯤부터 더블스페이스는 하드 디스크의 대용량화로 이미 사양길을 걷고 있었다. 따라서 오늘날 더블스페이스는 사실상 사장된 프로그램이므로 개의치 않아도 된다.Windows NT 전용 파일 시스템이라 FAT를 사용하는 MS-DOS나 이를 기반으로 하는 Windows 9x에서는 지원하지 않는다. DOS의 경우 NTFSDOS라는 상용 소프트웨어가 있긴 하다.
macOS는 읽기만 지원한다.[8] 그래서 macOS는 읽기·쓰기를 지원하는 타사 드라이버를 사용해야한다. 오픈 소스인 ntfs-3g와 이의 상용 버전인 Tuxera, Microsoft NTFS for Mac by Paragon Software 같은 것들이 있다. NTFS는 유닉스를 위해 설계된 파일 시스템이 아니며 독자적인 권한 설정을 갖기 때문에 메타데이터를 온전하게 저장하기 어렵다. 파일 이름이 한글을 비롯한 유니코드로 되어 있을 경우 글자가 풀어지거나 정렬이 제대로 되지 않는 문제가 발생할 수 있는데, 이는 macOS가 한국 표준의 유니코드 정규화 방식을 사용하지 않아 그렇다. 또한 Windows에서 사용 못하는 문자[9]가 포함되어 있을 경우는 Windows에서 읽어들였을 때 문제가 생긴다.
리눅스도 커널은 읽기만 지원했었다. 5.15부터 Paragon 사의 새로운 오픈 소스 드라이버인 NTFS3가 추가되어 유저 영역에서 FUSE 방식으로 작동하던 NTFS-3G에 비해 성능이 대폭 향상되었다. NTFS-3G는 마운트 옵션에 따라 쓰기 속도 차이가 난다. 빠른 쓰기를 위한 big_writes와 Windows와의 호환성을 위한 windows_names을 옵션에 넣기를 추천한다. 자세한건 링크 참고.
심지어 UEFI 규격에서도 선택 사항인 파일 시스템이라 2010년대 초중반까지의 일부 메인보드에서 USB 부팅을 하기 위해서는 USB 메모리가 NTFS로 포맷되지 않게 주의할 필요가 있다. Windows는 NTFS 파일 시스템을 채용한 저장 장치의 UEFI 부팅을 위해 약 100MB 정도의 파티션을 FAT32로 생성해 EFI 시스템 파티션으로 설정한 후 부트로더인 Windows 부팅 관리자(\\
EFI
\\Microsoft
\\Boot
\\bootmgfw.efi
)를 넣고 격리한다.오픈 소스 Windows 클론 운영체제인 ReactOS도 0.4.8 버전부터 NTFS를 지원하지만, 읽기만 지원하고 쓰기 기능은 비활성화되어 있다. 그래서 ReactOS 설치 과정에서 FAT32나 Btrfs 파일 시스템으로 디스크를 포맷하여 설치한다.
이처럼 Windows를 제외한 운영 체제에서 NTFS 읽기만 지원하는 이유는 NTFS가 마이크로소프트의 독점 기술이기 때문이다. 게다가 공개된 정보도 적다 보니 리버스 엔지니어링 등 구조를 분석하여 구현된 경우가 대부분이라 쓰기 작업시 호환성 문제가 발생할 수 있다. 대표적으로 Ubuntu 20.04에서 작성한 파일이 Windows 10에서 읽히지 않고 삭제되는 사례가 있다. 따라서 NTFS는 Windows 이외 환경에서는 읽기 전용으로 두는 것이 안전하다.
4. FAT과의 차이점
- 대부분의 파일 시스템은 파일 이름등을 따로 기록하고 있는데, 이를 FAT는 테이블 형태로 저장하고 NTFS는 B-트리로 저장해, NTFS의 탐색 속도가 훨씬 빠르다.
- NTFS에는 저널링 파일 시스템이 있는데, 파일을 기록하기 전에 '어디에 데이터 기록 예정'이라는 데이터를, 그리고 파일 기록이 끝난 다음에 '데이터 기록 완료'라는 데이터를 기록하는 곳이다. 이것은 파일 시스템의 오류를 줄이고 빠른 디스크 검사를 위한 것이다.
5. 버전
● | ○ | 숫자 | X |
기본 | 지원 | 자동으로 버전 업그레이드 | 미지원 |
버전 | 1.0 | 1.1 | 1.2 | 3.0 | 3.1 |
NT 3.1 | ● | X | X | X | X |
NT 3.5 | ● | ○ | X | X | X |
NT 3.51 | ○ | ● | X | X | X |
NT 4.0(~SP3) | ○ | ○ | ● | X | X |
NT 4.0(SP4~) | ○ | ○ | ● | ○ | ○ |
2000 | 3.0 | 3.0 | 3.0 | ● | ○ |
XP~11 | 3.1 | 3.1 | 3.1 | ○ | ● |
6. 최대 파티션 크기
- Windows 버전별
NT 3.x, 4.0(~SP5), 2000(~SP2), XP(RTM) | 128 GB |
NT 4.0(SP6~), 2000(SP3~), XP(SP1~) | 2 TB |
Vista~10 1703 | 256 TB |
10 1709~ | 8 PB |
- 클러스터 크기별
클러스터 크기 | 최대 용량 | 비고 |
512바이트 | 2 TB | |
1 kB | 4 TB | |
2 kB | 8 TB | |
4 kB | 16 TB | 압축기능을 지원하는 가장 큰 클러스터 크기 |
8 kB | 32 TB | |
16 kB | 64 TB | |
32 kB | 128 TB | |
64 kB | 256 TB | Windows 10 1703 버전까지의 한계 |
128 kB | 512 TB | |
256 kB | 1 PB | |
512 kB | 2 PB | |
1 MB | 4 PB | |
2 MB | 8 PB |
7. 관련 문서
[1]
하필이면 DVD의 용량이 4GB를 조금 넘어가는 4.37GB다.(단면 단층 기준)
[2]
Windows NT 3.51은
Windows 9x 계열과 드라이버 호환성이 상당히 떨어지기 때문.
[3]
드라이브 문자와
Null 문자를 제외하면 총 256자.
[4]
웹 페이지를 다운 받다보면 가끔 보게 된다. 특히 페이지 제목이 수십개의 태그들을 전부 나열하는 방식의 사이트라면 그럴 확률이 높다. Windows 10 1809버전 기준, 경고 메시지도 뜨지 않고 그대로 복사가 종료된다. 대용량 파일을 넣을 때 해당 파일 이름이 있을 경우 주의해야 한다.
[5]
예를 들어 주로 압축할 때 사용되는 프로그램인
7-Zip의 파일 관리자를 이용하는 방법이 있다.
[6]
레거시 네이밍 컨벤션이 아닌 UNC 경로를 사용해서 복사하는 것. 사실 개념도 간단하고 한두 번 하면 크게 귀찮을 것도 없지만, 딴짓 하다가 이름 긴 파일 하나 복사하려고 별도로 프로그램 띄우고 원본 경로 넣고 대상 경로 넣고 하는 것은 단순 드래그 & 드롭에 비하면 충분히 매우 귀찮은 일이다.
[7]
시작 → gpedit.msc 검색 및 실행 → 컴퓨터 구성 → 관리 및 템플릿 → 시스템 → 파일 시스템 → Win32 긴 경로 사용 항목을 "사용" 설정하면 된다. Home일 경우 레지스트리를 직접 수정. 레지스트리 편집기(regedit 검색)를 실행해
HKEY_LOCAL_MACHINE
\\SYSTEM
\\CurrentControlSet
\\Control
\\FileSystem
으로 가서 LongPathsEnabled
의 값을 1로 변경하면 된다.
[8]
쓰기 역시 내부적으로는 지원하나 막혀 있다.
[9]
대표적으로
\가 있다. Windows에서는 디렉토리 구분자로 사용되지만 macOS에서는 해당 용도로 /를 사용하기 때문이다. 이외에도 con, nul 등 특수 용도로 예약된 단어가 있다.로그가 누락된 본 문서의 기여자 내역은
다음과 같습니다.