한희수 2025. 2. 4. 21:51

NTFS(New Technology File System)는 마이크로소프트에서 FAT의 한계를 개선하기 위한 새로운 시스템으로서 개발되었으며, Windows 2000, 2003, 2008, XP, 95, 98 등 Windows에서 표준 파일시스템으로 사용되고 있으며 유닉스에서도 지원하고 있다. NTFS는 모든 데이터를 데이터 영역에 파일 형태로 관리하고 있다.

 

1. NTFS 대표적 특징

USN Journal(Update Sequence Number Journal)

USN 저널은 NTFS의 메타데이터를 구성하는 파일로 NTFS 볼륨에 변경이 생길 때마다 저널 파일에 변경을 기록한다. 64비트에 USN, 파일 이름, 변경 등에 관한 정보가 기록된다.

 

ADS(Alternate Data Stream)

FAT에서 파일은 데이터 스트림 하나만 가진다. 그러나 NTFS에서 ADS는 부가적인 데이터 스트림이라는 뜻처럼 파일이 다중 데이터 스트림을 가질 수 있다. ADS는 NTFS의 특징으로 네트워크 등을 통해 다른 파일시스템으로 복사할 경우 원본 스트림만 복사된다.

 

Sparse 파일

파일이 거의 0인 경우 실제 데이터를 저장하지 않고 크기만 가지고 있는 특성이다. 크기만 가지고 실제 데이터는 저장하지 않아 저장장치의 효율이 높아진다.

 

파일 압축

NTFS에서는 시스템에서 파일 및 디렉터리를 선택한 뒤 압축하여 저장할 수 있는 기능을 제공한다.

 

VSS(Volume Shadow Copy Service)

VSS는 Windows 2003부터 지원되며 디렉터리와 파일들의 백업본을 생성시키는 기능이다. 비정상 종료 시에 부팅 과정에서 안전한 복구를 지원한다.

 

유니코드 지원

NTFS에 저장되는 스트림은 모두 유니코드를 지원하며 다국어 지원이 가능하다.

 

동적 배드 클러스터 재할당

NTFS는 배드 섹터가 생기면 자동적으로 다른 클러스터를 할당하고 데이터를 복사한다. 그리고 배드 섹터가 생긴 클러스터는 $BadClus에 기록되어 사용되지 않도록 한다.

 

2. NTFS 구조

NTFS는 아래 그림처럼 VBR, MFT, 데이터 영역 세 부분으로 나눌 수 있다.

 

VBR은 NTFS 구조 중 맨 앞부분에 존재하며 부트 섹터 + 추가적인 VBR 영역으로 구성되어 있다. 고정된 크기를 가지지 않고 클러스터 크기에 따라 512Byte(1 Sector), 1KB(2 Sector), 2KB(4 Sector), 4KB(8 Sector)를 가진다.

 

MFT는 파일과 디렉터리의 모든 정보가 존재하며 파일과 디렉터리는 반드시 MFT 테이블에 하나의 엔트리를 가지며 엔트리 크기는 1024Byte이다. 처음 포맷 시에는 일정 영역의 MFT 공간이 할당되고, 이 할당된 MFT 공간이 모두 채워지면 데이터 영역에 추가 MFT 공간이 할당되 사용된다.

 

1) VBR

VBR의 첫 번째 섹터는 부트 코드를 포함한 부트 섹터가 저장되어 있다.

VBR 크기가 1 섹터를 넘는 NTLDR(NT Loader)을 빠르게 로드하기 위해 NTLDR에 대한 정보가 저장된다.

 

해석상 중요한 부분은 Byte Per Sector, Sector Per Cluster, Start Cluster for $MFT, Total Sectors, Volume Serial Number 등이다.

위치 길이 이름 내용
0x00 - 0x02 3 Jump Boot Code 부트 코드로 점프하라는 명령어
0x03 - 0x0A 8 OEM Name OEM ID
0x0B - 0x0C 2 Byte Per Sector 섹터당 바이트 수
0x0D 1 Sector Per Cluster 클러스터당 섹터 수
0x15 1 Media Descriptor 0xF8이면 고정식 디스크
0x28 - 0x2F 8 Total Sectors 해당 볼륨이 가지는 총 섹터 수
0x30 - 0x37 8 Start Cluster for $MFT $MFT의 LBA 주소(클러스터 단위)
0x38 - 0x3F 8 Start Cluster for $MFTMirr $MFTMirr의 LBA 주소(클러스터 단위)
0x40 1 Cluster Per MFT Entry MFT Entry 크기
0x48 - 0x4F 8 Volume Serial Number 볼륨 시리얼 번호

 

OEM ID가 "er.NTFS"로 표시되면, MFT를 해석하여 올바른 클러스터로 이동했음을 확인할 수 있다.

  • Byte Per Sector = 0x200 = 512 Byte
  • Sector Per Cluster = 8
  • Total Sectors = 8E 82 0A 77 00 00 00 00 = 77 0A 82 8E (리틀 엔디안 변환) -> 1,997,177,486
  • Start of MFT = 00 00 0C 00 00 00 00 00 = 786,432
  • MFT 위치 = (Start of MFT * 섹터당 클러스터 수) + Boot Record 위치 = (786,432 * 8) + Boot Record 위치
  • Volume Serial Number = EA 3F 41 DE 65 41 DE 14

 

2) MFT

MFT는 NTFS의 핵심으로 파일 및 디렉터리의 변경 등 여러 정보가 기록되며 파일 레코드라고도 불린다.

 

MFT 영역은 각각 1024바이트인 여러 개의 MFT 엔트리로 이루어져 있다. MFT 엔트리는 파일이나 디렉터리가 생성될 때마다 생성되어 생성된 파일이나 디렉터리를 관리하기 위한 메타데이터를 저장하고 있다. 따라서 숨긴 파일을 찾거나, 파일의 복사, 삭제 등을 알아보거나 타임라인 분석 등 디지털 포렌식 조사에 있어 중요하다.

 

MFT 영역은 크기가 고정되어 있는 상태가 아니며 일반적으로 전체 볼륨의 대략 12.5%가 MFT 영역으로 할당되는 것으로 알려졌다. MFT Entry 0번에서 23번은 파일시스템 생성 시 파일시스템 자체의 메타데이터를 관리하기 위해 예약된 엔트리이다.

 

MFT 엔트리 0번부터 3번까지 살펴보면 MFT 엔트리 0번은 $MFT 파일로 MFT 영역의 크기, 위치, 할당 정보 등 MFT 영역 파일에 대한 MFT 엔트리이다.

 

MFT 엔트리 1번은 $MFTMirr으로 $MFT의 일부 백업본으로 $MFT의 0-3번의 엔트리를 복사, 저장하고 있다. $MFT가 손상이 되었을 때 이 $MFTMirr를 사용하여 복구하는 목적이다.

 

MFT 엔트리 2번은 $LogFile으로 파일의 생성, 변경, 삭제, 이름 변경 등 MFT 엔트리에 영향을 주는 사항을 기록해 두어서  트랜잭션이 정상 완료되지 못하는 경우 시스템 재부팅 시 복구에 도움을 준다.

 

아래 표에 MFT 엔트리의 간략한 기능에 대해 설명하였다.

Entry 번호 이름 설명
0 $MFT MFT에 대한 MFT Entry
1 $MFTMirr $MFT의 일부 백업본
2 $LogFile 메타데이터의 트랜잭션 저널 정보
3 $Volume 볼륨의 레이블, 식별자, 버전 등 정보
4 $AttrDef 속성의 식별자, 이름, 크기 등 정보
5 .(Root Directory) 디렉터리 구조의 파일을 빠르게 접근하기 위해 index 구조로 저장
6 $Bitmap 볼륨 클러스터 할당 정보
7 $Boot 부팅 가능한 볼륨인 경우 부트 섹터 정보
8 $badclus 배드 섹터를 가지는 클러스터 정보
9 $Secure 파일의 보안, 접근제어 관련 정보
10 $Upcase 모든 유니코드 문자의 대문자
11 $Extend  
12-15 사용 안함  
16-23 사용 안함  
- $ObjID 파일의 고유 ID 정보 저장
- $Quota 사용량 정보 저장
- $Reparse points, Reparse point에 대한 정보 저장
- $UsnJrnl, 파일이나 디렉터리 변경사항에 대한 정보 저장
24 이후 일반 파일 일반적인 파일이나 디렉터리 실제 저장 위치

 

- MFT 구조

MFT 엔트리는 아래 그림과 같은 구조를 가진다. MFT Entry Header / Fixup Array / Attributes / End Marker / Unused Space로 구분되며 End Marker 이후는 MFT Entry에서 사용되지 않는다. Attributes는 여러 개가 올 수 있으며 MFT 엔트리는 할당된 이후에 파일이 삭제되면 프리 리스트가 되고 이후 재사용될 수 있다. 만약 재사용 안 되는 경우 Free MFT 엔트리에 예전 파일 데이터가 존재할 수 있다.

 

- MFT 엔트리 헤더(MFT Entry Header)

MFT 엔트리 헤더는 모든 MFT 엔트리의 제일 첫 부분에 위치하며 크기는 42바이트이다.

 

아래 그림은 MFT 엔트리 헤더의 데이터 구조이다. MFT 엔트리의 시작은 "FILE"이라는 시그니처로 시작한다.

크기 위치 이름 내용
4 0x0 - 0x03 Signature MFT 엔트리 Signature
2 0x04 - 0x05 Offset to fixup array fixup array 시작 위치
2 0x06 - 0x07 Number to entries of fixup array fixup array에 포함되는 항목 수
8 0x08 - 0x0F $LogFile Sequence Number(LSN) $LogFile에 존재하는 해당 파일의 트랜잭션 위칫값
2 0x10 - 0x11 Sequence Number MFT 엔트리에 생성 후 할당/해제 시마다 1 증가
2 0x12 - 0x13 Hard Link Count MFT 엔트리에 연결된 Hard Link
2 0x14 - 0x15 Offset to First Attribute 해당 MFT 엔트리의 첫 번째 속성 위치
2 0x16 - 0x17 Flags MFT entry 속성
0x00(사용하지 못함)
0x01(사용 중)
0x03(사용 중인 디렉터리)
0x02(사용하지 않는 디렉터리)
4 0x18 - 0x1B Used size of MFT entry 실제 사용 중인 크기
4 0x1C - 0x1F Allocated size of MFT entry MFT에 할당된 크기
8 0x20 - 0x27 File Reference to base record Base record 주소값
2 0x28 - 0x29 Next Attribute ID 다음 속성 ID
2 0x2A - 0x2B Align to 4Byte boundary 예약 영역
4 0x2C - 0x2F Number of MFT Entry MFT 엔트리 넘버

 

실제 예를 가지고 MFT 엔트리 헤더를 해석해 보면 아래와 같다.

  • Signature: FILE이며 엔트리에 문제가 있으면 BADD 시그니처를 갖는다.
  • Offset to fixup array: fixup 배열의 시작 위치는 0x30이 된다.
  • Number of entries of fixup array: 3개임을 알 수 있다.
  • Sequence Number: 1로서 이 엔트리가 처음 사용되었음을 알 수 있다.
  • Hard Link Count: 파일은 같은 데이터를 가리키는 여러 개의 이름을 가질 수 있으나 여기서는 하드링크가 1로서 하나밖에 없음을 알 수 있다.
  • Offset to First Attribute: 속성 오프셋은 38이므로 38바이트 후 속성이 나타나고 MFT 헤더가 56바이트임을 알 수 있다.
  • Flags: 1이므로 할당된 파일임을 보여준다.
  • File Reference to base record: 파일이 하나 이상의 레코드가 필요하면 1024byte에 들어갈 수 없고 추가 레코드가 필요하다. 그 경우 베이스 레코드를 지정할 때 필요하나 여기서는 0이므로 추가 레코드가 없음을 알 수 있다. 
  •  Next Attribute ID: 7이므로 속성 ID가 1에서 6에 있다는 것을 알 수 있다.
  • MFT Entry Number: 0임을 알 수 있다. 즉 $MFT이다.

 

- Fixup Array Values

Fixup Array는 MFT 엔트리의 신뢰성을 높이기 위해 도입되었다. "Fixup"은 "고치다"라는 뜻으로, MFT 엔트리의 데이터 오류를 감지하기 위한 역할을 한다. MFT 엔트리는 1024바이트(2개 섹터)를 사용하며, 각 섹터의 마지막 2바이트 값을 Fixup Array에 저장한다. 이후, 원래의 섹터 끝 값을 그다음 바이트에 기록하여, 섹터 데이터가 손상되었을 경우 이를 감지할 수 있도록 한다.

 

3. Attributes

속성은 파일의 메타정보를 가지고 있으며 Attribute Header와 Attribute Content로 구성되어 있다. 전체는 17개의 속성을 가지고 있으나 일반 파일은 $STANDARD_INFORMATION(0x10), $FILENAME(0x30), $DATA(0x80) 속성을 가진다. 크기에 따라 Resident 속성과 Non-Resident 속성으로 나누어지며 $STANDARD_INFORMATION, $FILENAME 등 대부분은 Resident 속성이고 $DATA 속성 중 680byte 이하면 Resident 속성이 되고 크기가 이보다 크면 Non-Resident 속성이 된다.

속성 식별값 이름 설명
0x10 $STANDARD_INFORMATION 파일의 생성, 접근, 수정 시간, 소유자 정보 등
0x20 $ATTRIBUTE_LIST 추가적 속성들에 대한 리스트
0x30 $FILE_NAME 파일 이름(유니코드), 생성, 접근, 수정 시간 등
0x40 $VOLUME_VERSION 볼륨 정보
0x40 $OBJECT_ID 파일 및 디렉터리의 16바이트 고유값
0x50 $SECURITY_DESCRIPTOR 파일의 접근제어와 보안 속성
0x60 $VOLUME_NAME 볼륨 이름
0x70 $VOLUME_INFORMATION 파일시스템 버전과 다양한 플래그 정보
0x80 $DATA 파일 내용
0x90 $INDEX_ROOT 인덱스 트리의 루트 노드 정보
0xA0 $INDEX_ALLOCATION 인덱스 트리의 루트와 연결된 하위 노드 정보
0xB0 $BITMAP $MFT의 할당 정보
0xC0 $SYMBOLIC_LINK 심볼릭 링크 정보
0xC0 $REPARSE_POINT 심볼릭 링크에서 사용하는 Resparse point 정보
0xD0 $EA_INFORMATION OS/2 응용프로그램과 호환성을 위해 존재(HPFS)
0xE0 $EA OS/2 응용프로그램과 호환성을 위해 존재(HPFS)
0xF0 $LOGGED_UTILITY_STREAM 암호화된 속성의 정보와 키 값

 

4. 공통 속성헤더

속성헤더는 속성마다 서로 다른 형식을 가지지만 헤더 시작 부분 16바이트는 동일한 구조를 가진다. 밑의 표는 공통 헤더의 구조이다.

크기 위치 이름 내용
4 0x00 - 0x03 Attribute Type ID Attribute 타입 식별자
4 0x04 - 0x07 Length of Attribute Attribute 길이
1 0x08 Non Resident Flag 1이면 Non-resident
1 0x09 Length of Name Attribute 이름 길이
2 0x0A - 0x0B Offset to Name Attribute 이름 시작 위치
2 0x0C - 0x0D Flag 상태 플래그
0x0001(읽기 전용)
0x4000(암호화)
0x8000(Sparse 속성)
2 0x0E - 0x0F Attribute ID Attribute의 고유 식별자로 MFT 엔트리에 같은 Attribute가 복수 개일 경우 다른 값을 가짐

 

- Resident Header

크기 위치 이름 내용
4 0x10 - 0x13 Size of Content Attribute Content 크기
2 0x14 - 0x15 Offset to Content Attribute Content 시작 위치
1 0x16 Indexed Flag 1이면 index 정보로 사용
1 0x17 Unused  
8 0x18 - 0x1F Attribute Name Attribute Name이 있을 경우 존재하며 없는 경우 바로 Attribute Content가 옴

 

5. $STANDARD_INFORMATION

모든 파일에 기본적으로 존재하는 기본적인 속성으로 시간 정보, 파일 특성, 소유자, 보안 ID 등을 표시하며  Attribute Type이 0x10일 경우 해당 속성을 의미한다.

크기 위치 이름 내용
8 0x00 - 0x07 Create Time 파일이 생성된 시간
8 0x08 - 0x0F Modified Time $DATA나 $INDEX 내용의 마지막 수정 시간
8 0x10 - 0x17 MFT Modified Time MFT 엔트리가 마지막으로 수정된 시간
8 0x18 - 0x1F Last Accessed Time 파일에 마지막으로 접근한 시간
4 0x20 - 0x23 Flag 파일 속성
4 0x24 - 0x27 Maximum number of version 파일에서 최대로 허용된 버전 값
4 0x28 - 0x2B Version Number 파일의 버전 번호 
4 0x2C - 0x2F Class ID 클래스 ID
4 0x30 - 0x33 Owner ID 소유자 ID($Quota에서 인덱스로 사용)
8 0x34 - 0x37 Security ID $Secure에서 인덱스로 사용
8 0x38 - 0x3F Quota Charged 사용자 할당량 중 해당 파일이 할당된 크기
8 0x40 - 0x47 Update Sequence $UsnJrnl에서 사용하는 파일의 USN 값
Flag 설명 Flag 설명
0x0001 읽기 전용 0x0002 숨긴 파일
0x0004 시스템 0x0020 Archive
0x0040 Device 0x0080 일반
0x0100 임시 0x0200 Sparse 파일
0x0400 Reparse Point 0x0800 압축
0x1000 오프라인 0x2000 인덱스 되지 않음
0x4000 암호화    

 

6. $FILE_NAME

모든 파일에 기본적으로 존재하는 속성으로 파일 이름을 저장하기 위해 사용되며 Attribute Type이 0x30인 경우 해당 속성을 의미한다.

파일 이름 외에도 다양한 부가 정보가 함께 저장되며, NTFS에서 빠른 탐색을 위해 구축된 인덱스 구조인 $I30에도 기록된다. 또한, 파일 이름의 크기가 가변적이므로 $FILE_NAME 속성의 크기는 68바이트 이상이 될 수 있다.

$STANDARD_INFORMATION에 4개의 시간 정보가 있으나 $FILE_NAME에도 4개의 시간 정보가 존재한다.

크기 위치 이름 내용
8 0x00 - 0x07 File Reference of parent directory 부모 디렉터리 파일 참조 주소
8 0x08 - 0x0F Creation Time 생성 시간
8 0x10 - 0x17 Modified Time 수정 시간
8 0x18 - 0x1F MFT Modified Time MFT 레코드 업데이트 시간
8 0x20 - 0x27 Last Accessed Time 접근 시간
8 0x28 - 0x2F Allocated size of file 해당 파일이 할당된 클러스터 크기
8 0x30 - 0x37 Real size of file 해당 파일 실제 크기
4 0x38 - 0x3B Flags 파일 속성
$STANDARD_INFORMATION 파일 속성과 거의 같지만 아래 속성이 추가됨
0x10000000 디렉터리
0x20000000 인덱스 뷰
4 0x3C - 0x3F Reparse value 해당 속성의 Reparse point
1 0x40 Length of name 이름 길이
1 0x41 Namespace 이름 표현 방식
0(POSIX)
1(WIN32)
2(DOS 3)
3(WIN32 & DOS)
- 0x42 - Name 유니코드(UTF-16)로 인코딩된 이름

 

7. $DATA

모든 파일에 기본적으로 존재하는 속성으로 파일 데이터를 저장하기 위해 사용된다. Attribute Type이 0x80인 경우 해당 속성을 의미한다. 보통 MFT 엔트리는 $STANDARD_INFORMATION, $FILE_NAME, $DATA 3개의 속성을 가지고 있다. $STANDARD_INFORMATION, $FILE_NAME과 달리 680byte를 넘는 대부분의 파일은 Non-Resident 속성이며 Cluster Run 구조로 데이터를 가지고 있다. 680byte 이하의 내용을 갖는 파일은 Resident 속성으로 MFT 엔트리 내부에 데이터를 저장한다.

 

- Non-Resident Header

 

크기 위치 이름 내용
8 0x10 - 0x17 Start VCN of Runlist Runlist의 시작 VCN

VCN(Virtual Cluster Number)은 파일의 첫 번째 클러스터부터 순차적으로 부여한 번호
8 0x18 - 0x1F End VCN of Runlist Runlist의 끝 VCN
2 0x20 - 0x21 Offset of Runlist Runlist의 시작 위치
2 0x22 - 0x23 Compression until size 압축 단위 크기
4 0x24 - 0x27 Unused  
8 0x28 - 0x2F Allocated Size of Attribute Content Attribute Content가 할당된 클러스터 크기
8 0x30 - 0x37 Real Size of Attribute Content Attribute Content의 실제 클러스터 크기
8 0x38 - 0x3F Initialized Size of Attribute Content Attribute Content가 초기화된 클러스터 크기
8 0x40 - 0x47 Attribute Name Attribute Name이 있을 경우 존재하며 없는 경우 바로 Attribute Content가 옴

 

6. $BITMAP

MFT 엔트리 6번은 $BITMAP이며 MFT 엔트리 할당 상태를 관리한다. 바이트가 아닌 비트가 MFT 엔트리 할당 상태를 가리킨다. MFT 엔트리가 할당되면 비트가 1로 설정되며 비트가 0으로 설정되면 할당이 되지 않은 상태를 나타낸다.

 

7. $LogFile

$LogFile은 MFT 엔트리 2에 해당하며, 파일 및 디렉터리의 생성, 삭제, 이름 변경 등의 작업을 기록하는 로그 파일이다. 이는 시스템이 비정상적으로 종료되었을 때 롤백을 수행할 수 있도록 돕는다.

작업 기록은 LSN(Logfile Sequence Number)을 사용해 순차적으로 증가하는 숫자로 저장되며, 이를 통해 레코드들의 순서를 구분할 수 있다. 기본적으로 $LogFile의 크기는 약 65MB이며, 하루 8시간 사용한다고 가정하면 약 2~3시간 분량의 로그를 저장할 수 있는 용량이다.

로그 파일 크기는 chkdsk /L 명령어로 확인할 수 있으며, chkdsk /L:파일크기(KB) 명령어를 사용해 조정할 수 있다.

또한 $LogFile에는 변경된 정보(Redo)와 변경 전 정보(Undo)가 모두 저장되며, 이러한 레코드들이 모여 하나의 트랜잭션을 구성한다. NTFS는 모든 작업을 트랜잭션 단위로 관리하며, 시스템에 문제가 발생하면 트랜잭션 내의 Undo 정보를 활용해 변경 전 상태로 복구할 수 있다.

 

- $LogFile의 전체적인 구조

$LogFile은 재시작 영역(Restart Area)과 로깅 영역(Logging Area) 두 부분으로 구성된다. 로깅 영역은 두 개의 페이지(각 4KB)로 이루어져 있으며, 두 번째 페이지는 첫 번째 페이지의 복사본이다. 이 영역은 마지막 작업 레코드의 정보를 저장하여 시스템 복구 시 중요한 역할을 한다.

 

NTFS는 디스크 복구를 위해 5초마다 체크포인트 레코드를 저장한다. 이를 통해 디스크 오류 발생 시, 복구를 어디서 시작해야 하는지 파악할 수 있다. 체크포인트 레코드는 특정 페이지에 기록되며, 이후 재시작 영역에 해당 LSN(Logfile Sequence Number) 번호를 저장한다. 이를 기반으로 시스템은 복구 작업을 시작할 위치를 결정할 수 있다.

 

- $LogFile 재시작 영역의 페이지 헤더

 

- $LogFile 일반 영역

로깅 영역은 다시 버퍼 페이지 영역과 일반 페이지 영역으로 나눌 수 있다.

 

버퍼 페이지도 두 페이지로 구성되어 있으며 두 번째 페이지는 첫 번째 페이지의 복사본이다. 버퍼 페이지는 마지막 작업 레코드의 정보를 기록하고 있고 일반 영역에 순차적으로 기록하고 용량이 다 차면 로깅 영역의 첫 위치로 다시 순환하면서 덮어쓰기를 한다.

 

모든 페이지는 헤더 하나와 여러 개의 작업 레코드들로 구성되어 있다.

 

- $LogFile 일반 영역의 페이지 헤더

 

 

- $LogFile 작업 레코드 구조

작업 레코드는 업데이트 레코드와 체크포인트 레코드로 구분되며, 업데이트 레코드는 Redo 정보와 Undo 정보를 포함한다.

 

Redo 정보는 트랜잭션이 커밋되었지만 아직 디스크에 기록되기 전에 시스템 오류가 발생한 경우, 해당 트랜잭션을 다시 적용하기 위해 사용된다. 반면, Undo 정보는 커밋되지 않은 트랜잭션이 수행 도중 시스템 오류로 중단된 경우, 이미 실행된 작업을 되돌리는 역할을 한다.

 

- $LogFile 페이지 작업 레코드 헤더

  • Current LSN: 현재 작업 레코드 LSN
  • Previous LSN: 이전 작업 레코드 LSN
  • Client Undo LSN: 복구 시 다음 Undo 작업의 LSN을 가지고 있는 레코드
  • Client Data Length: 레코드 크기(Redo Op 필드부터 레코드 끝)
  • Record Type: 0x02(체크포인트 Record), 0x01(그 외 레코드)
  • Flags: 0x01(레코드가 현재 페이지로 넘어감), 0x00(넘어가지 않음)
  • Redo Op: Redo 작업 코드
  • Undo Op: Undo 작업 코드
  • Redo Offset: Redo 오프셋
  • Redo Length: Redo 데이터 크기
  • Undo Offset: Undo 오프셋
  • Undo Length: Undo 데이터 크기
  • MFT Cluster Index: MFT 내 Redo/Undo data가 있는 클러스터
  • Target VCN: Redo/Undo된 데이터의 $MFT VCN(Virtual Cluster Number)
  • Target LCN: Redo/Undo된 데이터의 $MFT LCN(Logical Cluster Number)
NTFS Operation Hex Value(Op code)
Noop 0x00
Compensation Log Record 0x01
Initialize File Record Segment 0x02
Deallocate File Record Segment 0x03
Write End of File Record Segment 0x04
Create Attribute 0x05
Delete Attribute 0x06
Update Resident Value 0x07
Update Non Resident Value 0x08
Update Mapping Paris 0x09
Delete Dirty Clusters 0x0A
Set New Attribute Sizes 0x0B