빠른 포맷 후의 NTFS 메타데이터: WinHex 분석

빠른 포맷 후의 NTFS 메타데이터는 새로 초기화된 파일 시스템을 나타내지만, 그 아래에는 이전 파일 시스템의 일부 레코드 및 파일 내용이 여전히 읽을 수 있는 상태로 남아 있을 수 있습니다. Windows는 새로운 마스터 파일 테이블(MFT)과 디렉터리 구조를 생성하며, 단순히 모든 기존 파일 이름을 숨기는 것은 아닙니다. 복구 작업은 충분한 양의 원본 메타데이터와 해당 메타데이터가 지칭하는 데이터가 보존되어 접근 가능한 상태일 때 성공합니다.
WinHex는 부트 섹터 필드, MFT 레코드 및 데이터 런 매핑을 표시함으로써 이러한 상황을 구분하는 데 도움을 줍니다. 이 기사에서는 NTFS에서 NTFS로 빠른 포맷을 수행한 사례와 별도의 MFT 조각 재구성 사례를 살펴봅니다. 이 계산은 모든 Windows 볼륨이 아닌, 기록된 레이아웃에 적용됩니다. SSD의 디스카드 동작과 그에 따른 쓰기 작업은 매우 다른 결과를 초래할 수 있습니다.
목차
1. NTFS에서 빠른 포맷 시 변경되는 사항
그리고 NTFS 파일 시스템 메타데이터 파일, 디렉터리 인덱스 및 클러스터 매핑을 통해 파일을 정리합니다. 빠른 포맷을 수행하면 이러한 구조의 새로운 인스턴스가 생성됩니다.
구조 | 빠른 포맷 후의 역할 | 회복에 미치는 영향 |
볼륨 부트 섹터 및 그 백업 | 새로 포맷된 볼륨에 대해 설명하십시오. | 현재 MFT 포인터로는 더 이상 이전 테이블을 찾을 수 없을 수도 있습니다. |
$MFT 및 루트 디렉터리 | 새로운 파일 시스템과 그 초기 객체들에 대해 설명하십시오. | 일반적인 탐색 시에는 기존 파일 이름과 디렉터리 관계가 사라집니다. |
| 새 MFT에 할당된 레코드를 추적합니다. | 해당 테이블 외부의 현존하는 기록은 목록에 포함하지 않습니다. |
$ 비트맵 | 새 볼륨에 할당된 클러스터를 추적합니다. | 이전에 사용되었던 클러스터는 재사용이 가능해질 수 있습니다 |
$MFTMirr 및 기타 시스템 메타데이터 | 새로 초기화된 파일 시스템을 지원합니다 | 이들의 쓰기 작업은 기존 메타데이터나 파일 내용을 덮어쓸 수 있습니다. |
이전 파일 데이터 저장 위치 | 덮어쓰기되거나 삭제된 범위 외부에 읽을 수 있는 콘텐츠가 남아 있을 수 있습니다. | 생존 여부는 단순히 가정하기보다는 반드시 확인해야 한다 |
그리고 마스터 파일 테이블 그 자체로 하나의 파일입니다. 이 파일의 이름이 지정되지 않은 $DATA 스트림에는 파일 레코드가 포함되어 있으며, 비트맵은 레코드 할당 정보를 설명합니다. 별도의 $Bitmap 파일은 볼륨 전체에 걸친 클러스터 할당 정보를 설명합니다. 이 두 비트맵을 혼동하면 어떤 데이터가 남아 있는지에 대해 잘못된 결론을 내리게 됩니다.
기존 파티션을 포맷하는 것도 파티션 테이블 항목을 삭제하는 것과는 다릅니다. 볼륨 포맷 작업은 선택한 볼륨 내부의 파일 시스템을 재구성하는 반면, 파티션 삭제는 그 외부의 디스크 레이아웃에 영향을 미칩니다.
2. WinHex에서 원본 부트 섹터를 읽기
NTFS 포맷 전후의 16진수 비교를 위해서는, 포맷 전에 섹터 이미지를 백업해 둔 다음, 포맷 후에 캡처한 이미지와 비교하십시오. 이미 포맷된 소스의 경우, 이미지 및 이용 가능한 이전 캡처 데이터를 바탕으로 분석하십시오. 사건을 재현하기 위해 포맷을 반복하지 마십시오.
그리고 볼륨 부트 레코드 클러스터 주소를 해석하는 데 필요한 매개변수를 제공합니다.

WinHex 사건 기록에서 발췌한 원본 부트 섹터의 16진수 데이터입니다. 빨간색 상자 안에는 섹터 크기, 클러스터 크기 및 MFT 위치 필드가 표시되어 있습니다.
부트 섹터 오프셋 | 기록된 바이트 수 | 해석 |
|
| 논리 섹터당 512바이트 |
|
| 클러스터당 8개 섹터 |
|
| $MFT는 LCN 175,724,968에서 시작됩니다. |
|
| $MFTMirr는 LCN 167,336,228에서 시작됩니다. |
|
| 부호 있는 값 −10: 레코드 크기는 2¹⁰ = 1,024 바이트입니다. |
다바이트 정수는 리틀 엔디안 바이트 순서를 사용합니다. 이 할당 단위 크기 따라서 다음과 같습니다:
- 클러스터당 512 × 8 = 4,096 바이트
LCN은 볼륨을 기준으로 한 클러스터 번호를 의미합니다. 따라서:
- 원본 MFT의 볼륨 상대 섹터 = 175,724,968 × 8
- = 1,405,799,744
- 원본 MFT의 볼륨 상대 바이트 오프셋 = 175,724,968 × 4,096
- = 719,769,468,928
전체 디스크 이미지를 분석할 때는 볼륨의 시작 바이트 오프셋을 더해야 합니다. 볼륨만 포함된 이미지를 분석할 때는 이를 다시 더하지 마십시오. WinHex에 표시되는 주소 지정 컨텍스트는 이 계산 결과와 일치해야 합니다.
부트 섹터는 첫 번째 MFT 익스텐트를 식별합니다. 이 섹터는 테이블의 모든 조각을 상세히 기술하지는 않습니다.
3. 원본 MFT의 비거주자 데이터 해독
원본 MFT 위치에서 레코드 0을 확인하고, 이름이 지정되지 않은 $DATA 속성을 찾아 다음을 입력하십시오. 0x80. 비거주자 속성은 레코드 내부의 전체 내용이 아닌 매핑 정보를 저장합니다.
사건 기록에 따르면 이 속성은 레코드 오프셋 위치에 있습니다. 0x100. 그 결과 해당 폼 바이트가 0x108; 값 01 ‘비거주자’를 의미합니다. 이러한 절대 오프셋은 이 레코드에 속합니다. 다른 레코드에서는 이 속성을 다른 위치에 배치할 수 있습니다.
다른 레코드를 해석할 때는 속성 시작 지점을 기준으로 한 상대적 오프셋을 사용하십시오:
상대적 오프셋 | 필드 |
| 거주자/비거주자 양식 |
| 최소 가상 클러스터 번호(VCN) |
| VCN 최고치, 포함 |
| 매핑 쌍 배열에 대한 오프셋 |
| 할당된 길이 |
| 논리적 파일 크기 |
| 유효 데이터 길이 |
세 가지 크기 필드를 각각 따로 살펴보세요. 할당된 길이는 저장 공간을 확보하는 데 사용되며, 논리적 크기는 스트림의 길이를 정의하고, 유효 데이터 길이는 초기화된 데이터의 길이를 나타냅니다. 이 세 값이 반드시 같을 필요는 없습니다.

VCN 0~98,431을 포함하는 범위에서 클러스터 수는 98,431이 아니라 98,432입니다. 기록된 2회 실행 레이아웃은 다음과 같습니다:
실행 | 클러스터 수 | LCN 델타 서명됨 | LCN 시작하기 | 각각 1,024바이트 크기의 논리 레코드 슬롯 |
1 | 75,096 | +175,724,968 | 175,724,968 | 0–300,383 |
2 | 23,336 | +83,118,309 | 258,843,277 | 300,384–393,727 |
두 번째 주소는 이전 실행의 시작 LCN:
- 175,724,968 + 83,118,309 = 258,843,277
- (75,096 + 23,336) × 4,096 = 403,177,472 바이트
- 403,177,472 ÷ 1,024 = 393,728개의 레코드 슬롯
이는 주소 지정 가능한 슬롯일 뿐, 활성 파일의 개수를 나타내는 것이 아닙니다. 일부 레코드는 사용되지 않을 수 있으며, 하나의 파일에 여러 개의 레코드가 필요할 수도 있습니다.
기록된 실행 헤더 43 그리고 42 필드 너비를 설명합니다. 예를 들어, 43, 길이는 3바이트를 차지하고 LCN 델타는 4바이트를 차지하며; 42, 길이는 2바이트를 차지하고 델타는 4바이트를 차지합니다. LCN 델타는 부호 있는 값으로 해석해야 합니다. 왜냐하면 후속 프래그먼트가 볼륨에서 더 앞쪽에 위치할 수 있기 때문입니다.
그 결과 영역 길이는 384.5 MiB입니다. “385 MB”로 반올림하여 표시된 것만으로는 다른 할당 크기를 독립적으로 입증하거나 추가 클러스터가 예약되었다는 사실을 증명할 수 없습니다.
4. 새로운 MFT와 기존 레이아웃을 비교해 보세요
사건 기록에는 LCN 786,432부터 시작하며 180클러스터의 범위를 갖는 포맷 후 MFT가 기록되어 있습니다. 기록된 클러스터 크기가 4,096바이트라고 가정할 때:
- 새로운 MFT 시작 바이트 오프셋 = 786,432 × 4,096
- = 3,221,225,472
- 새로운 범위 크기 = 180 × 4,096 = 737,280 바이트
새로운 시작 지점은 볼륨의 3 GiB 지점입니다. 이 주소는 본 사례에서 확인된 사항일 뿐, NTFS에서 반드시 준수해야 하는 위치는 아닙니다.

속성 | 원본 레이아웃 | 메모에 기록된 게시물 형식 레이아웃 |
MFT LCN 시작 | 175,724,968 | 786,432 |
기록된 MFT 익스텐트 | 두 | 하나 |
보장 범위 | 98,432개의 클러스터 | 180개 클러스터 |
기록된 레코드 크기에 따른 용량 | 393,728개 슬롯 | 720개 슬롯 |
이 메모에는 레코드 0~717에 대해서도 언급되어 있습니다. 이는 718개의 레코드, 즉 735,232바이트에 해당합니다. 이는 720개의 슬롯을 수용할 수 있을 만큼 충분한 할당량과 일치하지만, 718이 논리적 길이, 초기화된 길이, 아니면 검사된 레코드 수를 나타내는지 여부는 명확하지 않습니다. 이러한 필드에는 기본 속성 바이트가 필요합니다.
중요한 변화는 이제 Windows가 새로운 테이블을 따르게 되었다는 점입니다. 새로운 MFT의 크기가 더 작아졌기 때문에 not 이는 기존 테이블이 그 자리에서 물리적으로 잘려나갔음을 의미합니다. 해당 테이블이 이전에 있던 위치는 별도로 점검해야 합니다.
포맷 과정에서 NTFS MFT가 덮어쓰여졌는지 확인하려면, 원래 MFT 익스텐트와 새로 기록된 모든 메타데이터 및 그 이후의 할당 내역을 비교해야 합니다. 포인터가 변경되었다는 사실은 참조가 변경되었음을 증명하며, 바이트 단위 비교를 통해 특정 위치에서 덮어쓰기가 발생했음을 확인할 수 있습니다. 위치 변경만으로는 데이터가 완전히 보존되었는지, 아니면 완전히 손실되었는지를 단정할 수 없습니다.
5. 남아 있는 기록을 바탕으로 파편화된 MFT 재구성하기
테이블이 커지고 연속된 공간이 부족해지면 MFT 조각화가 발생합니다. NTFS는 조각화를 줄이기 위해 MFT 영역을 예약하지만, 이것이 단일 익스텐트를 보장하는 것은 아닙니다. 테이블이 커지면 현재 익스텐트 앞이나 뒤에 조각들이 할당될 수 있습니다.
사례 자료에 수록된 또 다른 재구성 예시는 이 3단 레이아웃을 보여줍니다. 이 예시는 앞서 소개된 2단 레이아웃 사례와 마치 둘 다 동일한 표를 설명하는 것처럼 혼동해서는 안 됩니다.
실행 | 논리적 레코드 슬롯 | LCN 시작하기 | 이전 실행 시작 시점부터의 델타 | 클러스터 |
1 | 0–204,927 | 786,432 | +786,432 | 51,232 |
2 | 204,928–248,587 | 9,274,281 | +8,487,849 | 10,915 |
3 | 248,588–376,391 | 8,858,108 | −416,173 | 31,951 |

각 4,096바이트 클러스터에는 1,024바이트 슬롯이 4개 들어갑니다. 이것이 두 경계를 모두 설명해 줍니다:
- 51,232 × 4 = 204,928 슬롯
- 204,928 + (10,915 × 4) = 248,588
- 9,274,281 − 416,173 = 8,858,108
이 실행 결과들을 합치면 총 94,098개의 클러스터, 즉 385,425,408바이트를 차지합니다. 최종 VCN 값은 94,097입니다.
후보자 기록 찾기 및 검증
복원 기록에는 기록 번호 204,928을 검색한 과정, 한 후보를 유효하지 않은 것으로 배제하고, 다른 후보를 유효한 것으로 인정하여 찾아낸 과정이 기술되어 있습니다. 일치하는 번호 또는 파일 서명만으로는 충분하지 않습니다.
읽기 전용 이미지에서:
- 검색
파일현재 MFT 외부의 위치를 포함한 시그니처. 새 테이블로만 범위를 제한한 스캔은 분리된 레코드를 놓치게 됩니다. - 레코드 경계, 레코드 길이, 속성 오프셋 및 속성 길이를 확인하십시오.
- 보호된 레코드 바이트를 해석하기 전에 업데이트 시퀀스 배열의 유효성을 확인하십시오. 기록된 1,024바이트 레코드에서, 이 검사는 두 개의 512바이트 스트라이드 끝부분을 모두 포함합니다.
- 해당 경계를 가로질러 속성을 구문 분석하기 전에, 파서 메모리에 저장된 트레일러 단어를 복원하십시오. 증거 이미지는 수정하지 마십시오.
- 인접한 레코드를 비교하고, 있는 경우 레코드 번호, 이름, 상위 레코드 참조 및 순서 번호를 확인하십시오. 타당하지 않거나 오래된 관계는 제외하십시오.
존재하는 오래된 레코드 0이 유효한 런리스트를 제공하는 경우, 해당 매핑을 사용한다. 만약 레코드가 누락된 경우, 레코드 시퀀스를 통해 익스텐트를 재구성하는 것은 추가 검증이 필요한 가설에 불과하다. 특정 영역에 빈 레코드가 있다고 해서 그 이후에 오는 조각이 존재하지 않는다는 것을 단독으로 증명할 수는 없다.
논리 테이블을 별도로 재조립하십시오
검증된 익스텐트를 VCN 순서대로 별도의 분석 파일에 복사하십시오. LCN이 증가하는 순서대로 정렬하지 마십시오. 위에서 언급한 세 번째 실행은 디스크 상에서는 두 번째 실행보다 앞서 있지만, 논리적으로는 그 뒤를 잇습니다.
기록 번호 n, 레코드 크기 R, 그리고 클러스터 크기 C:
- VCN = floor(n × R ÷ C)
- 클러스터 내 오프셋 = (n × R) mod C
- LCN = 해당 실행의 시작 LCN + (VCN − 해당 실행의 시작 VCN)
3회 실행 예제의 레코드 204,929의 경우, VCN은 51,232이며 클러스터 내 오프셋은 1,024바이트입니다. 따라서 이 레코드의 볼륨 상대 주소는 다음과 같습니다:
- 9,274,281 × 4,096 + 1,024 = 37,987,456,000 바이트
이 매핑은 파일이 아닌 주소를 복원합니다. 해당 레코드와 그 레코드가 참조하는 데이터는 여전히 유효성 검증이 필요합니다.
6. 기존 속성을 통해 파일 내용 복구하기
남아 있는 파일 레코드를 파악한 후에는, 해당 레코드의 $DATA 속성에 따라 추출 방법이 결정됩니다.
거주자 정보: 속성의 값 오프셋과 길이를 읽은 다음, 유효성 검증을 거쳐 수정 작업이 복원된 레코드에서 해당 값을 내보냅니다. 작은 파일의 경우, 파일 내용이 MFT 레코드에 저장되어 있기 때문에 MFT 레코드가 덮어쓰여지면 내용이 손실될 수 있습니다.
일반 비거주자 데이터: 파일 자체의 런리스트를 디코딩하고, 원본 볼륨 이미지에서 각 익스텐트를 읽어온 다음, 바이트를 VCN 순서대로 조합하고, 출력을 논리적 파일 크기로 잘라냅니다. MFT 런리스트는 파일 레코드의 위치를 파악할 뿐, 각 사용자의 파일-데이터 매핑을 대체하지는 않습니다.
속성이 다른 레코드로 확장되는 경우 $ATTRIBUTE_LIST 참조를 따르십시오. 스파스 및 압축 스트림의 경우 각각에 해당하는 디코딩 규칙이 필요합니다. 암호화된 콘텐츠의 경우 여전히 해당 복호화 자료가 필요합니다. 이러한 경우에는 단순한 연결만으로는 충분하지 않습니다.
디렉터리 복구에는 각별한 주의가 필요합니다. 상위 디렉터리가 사라져도 파일 이름은 그대로 남아 있을 수 있습니다. 참조와 순서 번호가 일치하는 경우에만 경로를 재구성하고, 그렇지 않은 경우에는 폴더 관계를 임의로 만들어내기보다는 고아 파일을 그대로 유지해야 합니다.
추출된 파일을 다른 물리적 장치에 저장하십시오. 새로운 부트 섹터를 수정하여 기존 MFT를 가리키게 하는 것은 파일을 복구하는 것과 같지 않습니다. 할당 맵, 인덱스, 시스템 레코드 및 기타 메타데이터는 서로 다른 파일 시스템 인스턴스에 속할 수 있기 때문입니다.
7. 회복이 성공할 수 있는 이유—그리고 실패할 수 있는 이유
메타데이터 기반 복구가 성공할 수 있는 이유는, 오래된 레코드가 파일의 식별 정보, 논리적 크기 및 데이터 매핑 정보를 유지하며, 매핑된 내용은 여전히 읽을 수 있기 때문입니다. Windows가 더 이상 이러한 정보를 활성 네임스페이스에 포함하지 않더라도, 복구 도구는 이러한 관계를 추적할 수 있습니다.
레코드가 누락된 경우, 서명 기반 카빙을 통해 파일 내용을 직접 식별할 수 있는 경우도 있습니다. 이 방법은 대개 원래의 파일 이름과 디렉터리 구조를 잃어버리며, 조각난 파일의 경우 신뢰도가 떨어집니다. X-Ways는 이러한 서로 다른 복구 방법을 반영하여, 현재 MFT 외부에서 NTFS 레코드를 검색하는 작업을 파일 헤더 검색과 별도로 처리합니다.
새로운 메타데이터가 원본 레코드와 겹치거나, 이후 파일이 기존 클러스터를 재사용하거나, 조각화 매핑 정보가 누락된 경우 복구 작업은 더욱 어려워집니다. 유효한 파일 이름이 있다고 해서 내용이 온전하다는 것을 보장하지는 않으며, 식별 가능한 첫 페이지나 비디오 헤더가 있다고 해서 이후의 조각들이 보존되었다고 단정할 수 없습니다.
SSD의 경우 또 다른 조건이 있습니다. Windows에서 포맷을 수행하면 TRIM/삭제 알림이 전송될 수 있으며, 마이크로소프트의 형식 문서에는 다음이 포함됩니다. /NoTrim 이를 숨기기 위함입니다. 이는 서식 지정 옵션일 뿐, 데이터 손실 후의 해결책이 아닙니다. 장치 및 저장 경로에 따라, 삭제된 영역은 WinHex에서 확인되는 일반적인 덮어쓰기 흔적이 없더라도 원래의 바이트를 더 이상 반환하지 않을 수 있습니다. 따라서 빠른 포맷이 데이터 복구 가능성을 보장하는 것은 아닙니다.
8. 디스크를 재사용하기 전에 추출된 데이터를 확인하십시오.
검증이 완료될 때까지 원본 이미지와 범위 지도를 보관하십시오. 실용적인 스캔 및 내보내기 워크플로에 대해서는 다음을 참조하십시오. 포맷된 하드 드라이브에서 파일 복구하기.
가능한 경우, 복구된 파일을 포맷 전의 목록과 대조하십시오. 파일 이름, 크기, 폴더 구조 및 해시 값을 알려진 원본 파일과 비교하십시오. 기준 해시 값이 없는 경우에는 문서를 열어 페이지를 확인하고, 압축 파일을 테스트하며, 이미지를 최대 해상도로 확인하고, 동영상 파일을 전체 길이로 재생해 보십시오.
손상되거나 누락된 파일은 검증된 파일과 별도로 기록하십시오. 구문 분석 오류 없이 재구성된 MFT는 읽을 수 있는 메타데이터를 확보하며, 사용 가능한 내보낸 콘텐츠는 파일 복구를 입증합니다. 완전한 복구를 위해서는 예상되는 데이터 세트를 고려해야 합니다.
자주 묻는 질문
빠른 포맷을 하면 NTFS MFT 전체가 덮어쓰어지나요?
MFT 레코드가 사라져도 파일은 그대로 남아 있을 수 있나요?
MFT 미러가 모든 파일 레코드를 복원할 수 있나요?
새 볼륨 비트맵에 0 비트가 있으면 기존 데이터가 지워진다는 뜻인가요?
오래된 MFT 레코드에도 여전히 ‘사용 중’ 플래그가 설정되어 있을 수 있나요?
이전 부트 섹터를 복원하면 포맷이 취소되나요?
Jason는 15년 이상의 실무 경험을 갖춘 데이터 복구 및 기술 지원 전문가입니다. 그는 현장 사용자와 폭넓게 협력하며, 까다로운 데이터 손실 사례를 해결하고, 실수로 인한 삭제, 드라이브 포맷, 파일 시스템 손상, 파티션 손실, 시스템 장애 및 기타 긴급 복구 상황에 대한 실용적인 복구 솔루션을 제공해 왔습니다. 또한 백업 및 복원, 파일 복구, 재해 복구 분야에서도 전문성을 갖추고 있으며, 안전하고 신뢰할 수 있으며 기술적으로 정확한 지침을 제공하는 데 중점을 두고 있습니다.
