MS가 Enterprise OS 시장을 공략하기 위해 개발된 Windows NT에 사용된 파일 시스템이다.
특징
서버 환경에서 사용될 것을 고려하여 설계되었기 때문에, 기존에 사용하던 FAT 파일 시스템과는 다른 기능들이 상당 수 존재한다.
- 데이터 복구 기능 : 데이터의 신뢰성을 높이기 위해, 수행되는 작업을 모두 기록한다. 문제가 발생했을 시, 기록들을 조사하여 작업을 되돌릴 수 있다.
- 압축 : 파일 시스템 레벨의 압축을 제공하나, 파일에 입력/출력할 때마다 압축을 풀어야 하므로 성능의 저하가 일어난다.
- Disk Quota : 다수의 사용자가 하나의 컴퓨터를 사용할 때, 사용자 마다 디스크의 사용량을 제한하는 기능이다.
- ADS (Alternate Data Stream) : 하나의 파일이 하나 이상의 데이터를 담을 수 있게 하는 기능이다.
- EFS (Encrypting File System) : 파일 시스템 레벨에서 파일의 암호화를 지원한다.
- Sparse : 파일의 내용이 대부분 0인 경우 이를 볼륨에 저장하지 않는다.
- 큰 용량 표현 : 약 16TB 까지 표현 가능하다.
- Unicode 지원 : 저장되는 모든 문자열을 유니코드로 저장하기 때문에 다국어 지원이 가능하다.
구조
NTFS의 가장 큰 특징은 모든 데이터를 파일의 형태로 관리한다는 것이다. 대부분의 파일 시스템은 볼륨을 여러 영역으로 나누어 각각의 영역에 다른 데이터를 저장하는 것에 비해, NTFS는 VBR영역을 제외한 모든 영역을 데이터 영역으로 설정하고 있다. 즉, 사용자의 데이터나 시스템 관리에 필요한 데이터 모두가 데이터 영역에 파일로 존재하고 있다.

Figure 1 - NTFS Layout
이론 상으로는 VBR 외의 파일들은 볼륨의 어디에 위치해도 상관없으나, 성능과 안정성을 위하여 Windows에서는 볼륨의 구조를 잡아놓았고, Figure 1은 그 모습이다.
NTFS의 볼륨은 크게 VBR, Master File Table, Data 영역으로 나누어지는데, 정확하게 말하면 Master File Table 영역은 Data 영역에 파일 형태로 존재하고 있다.
VBR
NTFS의 VBR은 FAT 의 VBR과 유사하게 Windows를 부팅시키기 위한 기계어 코드와 몇 가지 설정에 대한 값들이 존재한다. 이 영역을 분석하면 볼륨/클러스터의 크기, Master File Table의 시작 주소 등의 여러 중요한 정보들을 얻을 수 있다.
VBR의 실제 데이터 보다 많은 섹터가 VBR에 할당되어 있어 빈 공간이 존재하여, 사용자가 임의로 데이터를 숨길 수는 있으나 Windows가 부팅 시 VBR영역을 모두 초기화하여 데이터가 사라져버리게 된다.
NTFS는 볼륨을 여러 영역으로 나누지 않기 때문에 VBR에 담는 내용이 비교적 적은 편이다.
Master File Table, MFT
MFT는 볼륨에 존재하는 모든 파일, 디렉터리에 대한 정보를 가지고 있는 테이블로, NTFS에서 가장 중요한 영역이다. 이 영역의 크기는 파일/디렉터리의 수에 비례하여 점점 커지는데, 파일/디렉터리의 수가 줄어든다고 해서 이 영역의 크기가 다시 줄어들지는 않는다.
MFT Entry
MFT는 수 많은 MFT Entry들로 구성되어 있다. MFT Entry는 하나의 파일 혹은 디렉터리에 대한 정보를 담고 있으며, 모든 파일과 디렉터리는 최소한 1 개 이상의 MFT Entry에 자신의 정보를 저장하고 있어야 한다. 1개의 MFT Entry로 부족할 경우 여러 개를 사용할 수도 있다.

Figure 2 - MFT Entry Layout
모든 버전의 Windows에서 MFT Entry의 크기는 1KB 이다. 가장 앞의 MFT Entry Header 영역은 크기가42 Byte로 고정되어 있으며 해당 MFT Entry에 대한 정보와 상태를 나타낸다. MFT Entry Header를 제외한 영역에는 '속성'이 저장된다. 속성은 파일/디렉터리의 특정 정보를 나타낸다. Figure 2는 두 개의 속성을 갖는 MFT Entry를 나타낸 것이며, 실제로 하나의 MFT Entry가 가질 수 있는 속성의 수에는 제한이 없다. MFT Entry의 끝 부분에는 'FFFFFFFF'로 MFT Entry가 끝나는 것을 나타낸다.
Meta Data File
메타 데이터 파일은 NTFS가 볼륨을 관리하기 위해 사용하는 파일들로, Data 영역에 존재한다. 메타 데이터 파일들은 0번째부터 15번째 까지 총 16개의 MFT Entry에 존재한다.
Table 1 - Meta Data File 목록
Entry Number | File Name | Description |
0 | $MFT | MFT을 담고 있는 파일 |
1 | $MFTMirr | MFT의 일부를 백업해두고 있다. |
2 | $LogFile | 트랜잭션 저널 기록을 담고 있다. |
3 | $Volume | 볼륨에 대한 정보를 담고 있다. |
4 | $AttrDef | 여러 속성들에 대한 정보를 담고 있다. |
5 | . | 파일 시스템의 루트 디렉터리를 담고 있다. |
6 | $Bitmap | 파일 시스템의 클러스터 할당 관리 정보를 담고 있다. |
7 | $Boot | 부트 레코드 영역의 정보를 담고 있다. |
8 | $BadClus | 배드 클러스터에 대한 정보를 담고 있다. |
9 | $Secure | 파일들의 보안, 접근 권한에 대한 정보를 담고 있다. |
10 | $Upcase | 모든 유니코드 문자의 대문자를 담고 있다. |
11 | $Extend |
|
12 ~ 15 |
| 사용 중이라고 설정되어 있으나 비어 있다. |
16 ~ 23 |
| 미래를 위해 예약되어 있는 공간이다. |
Don't Care | $ObjId | 파일 고유의 ID정보를 담고 있다. |
Don't Care | $Quota | 사용량 정보를 담고 있다. |
Don't Care | $Reparse | Reparse Point에 대한 정보를 담고 있다. |
Don't Care | $UsnJrnl | 파일, 디렉터리에 변경이 있을 경우 그 기록을 담아 둔다. |
24 ~ | 일반 파일 | 사용자의 파일, 디렉터리는 여기서부터 저장된다. |
12 ~ 15번 MFT Entry들은 $MFT메타 데이터 파일의 내용이 매우 조각화 되어MFT Entry 하나에 정보를 담기 힘들어 진 경우에 사용한다.


덧글