연재 순서
Creative Commons License

첫번째 글: NTFS 파일 시스템

두번째 글: NTFS 파일 시스템 partition data 1

세번째 글: NTFS 파일 시스템 partition data 2

네번째 글: 드라이브 내 파일 탐색

1. 파티션에 저장된 파일 정보

각 파티션마다 별도의 시스템을 사용할 수 있다. 현재 사용중인 컴퓨터는 윈도우 10 Pro 인데, 내부 Partition 중 하나는 FAT 시스템을 사용중이다. 아래의 <그림 2-1>에는 OEM Name이 NTFS가 아니라 MSDOS라고 표시되어 있는 것을 통해 FAT 시스템으로 설정된 것을 확인 할 수 있다.

<그림 2-1> Partition 1 의 정보

1.1 Logical Sector / Physical Sector

Partition 내부의 정보들은 모두 LBA로 위치를 표시할 수 있다. 그런데, 해당 Partition의 위치가 0이 아니기 때문에, 내부의 정보들은 Partition의 위치 + Partition 내부의 위치로 정보를 표기하게 된다. 이럴 경우 규칙성을 파악하기도 불편해 지고, 불필요한 표기가 많아지기 때문에, 해당 파티션 $Boot 의 위치를 0으로 하는 Logical Sector를 새로 사용할 수 있다. Partition 3의 경우 Start LBA가 1261568 이기 때문에,

Logical Sector No + 1261568 = Physical Sector No

가 된다. 이후 사용하는 LBA 번호는 Logical Sector 번호를 기본값으로 한다.

1.2 파티션 기본 정보

다음의 <그림 2-2>는 Partition 3의 기본 데이터이다.

<그림 2-2> LBA 1261568 Data. Partition 3

NTFS의 경우 Boot파일은 아래의 표3에 있는 데이터를 통해 각 의미를 파악 할 수 있다.

<표 1> NTFS Boot file

위의 <표 1>을 통해 해당 섹터를 확인하면 아래의 <그림 2-3>과 같은 결과를 확인할 수 있다.

<그림 2-3> <그림 2-2>의 LBA 1261568을 표 3의 정보들을 통해 분석한 결과

OEM Name을 통해 NTFS인 것을 확인 할 수 있고, Bytes per Sector, Sector Per Cluster, Start $MFT, Start $MFT Mirror, Cluster Per MFT Record 등을 확인할 수 있다. Bytes per Sector를 통해 1개 LBA sector는 512 Bytes이고, Sector Per Cluster를 통해 1개 Cluster는 4096 Bytes임을 알 수 있다. Start $MFT는 Partition 3의 $MFT 파일의 위치(Cluster, not LBA)를 알 수 있다. Cluster per MFT Record 값은 음수가 나올 수 있는데, 이는 Cluster에 비해 MFT Record가 작기 때문이다. 이런 경우 계산은 아래와 같이 할 수 있다.

Value = Cluster per MFT Record = 0xF6(HEX) / -10(DEC) MFT Record size = 2^(-1 * Value) = 1024 Bytes

Cluster Per MFT Record 값이 1024 Bytes이므로, 1개 MFT Record는 2개의 LBA로 이루어져 있고, 1개 Cluster에 4개의 MFT Record가 들어있는 것을 확인할 수 있다.

위에서 확인 한 기본 크기들을 통해, 이후에 각 파일이 가지고 있는 Address 값을 계산하여 $MFT를 기준으로 몇 번째 LBA에 존재하는지 등을 확인하는 것이기 때문에, 각 Partition이 가지고 있는 기본 설정값들을 확인 하는 것은 중요하다. 내부의 $MFT는 위의 Start $MFT 항목에 786432라는 값을 통해 접근할 수 있는데, 이는 Cluster 번호이다. MFT는 매우 큰 파일이기 때문에, 대량의 Cluster를 할당해야하기 때문이다. 위의 값을 이용해 Cluster 786432 / LBA 3221225472 / Offset C0000000(HEX)로 이동할 수 있다.

1.3 $MFT

$MFT는 Master File Table의 약자로, 메타 데이터파일(Meta Data File)과 일반 파일/디렉토리의 정보를 저장하고 있는 MFT Entry로 구성되어 있다. 특이하게도, $MFT라는 것은 고유번호 0번의 파일로 존재하지만, 동시에 파일들에 대한 정보를 가지고 있는 Entry의 역할을 가지고 있다. 각 Entry는 시작할 때 File(b’\x46\x49\x4C\x45’)이라는 $MFT Entry Signature로 시작한다.

1개의 파일마다 2개의 LBA를 할당하여 정보를 저장하고, 해당 파일의 종류에 따라 Run List 등을 확인하여 해당 파일의 실제 정보에 접근할 수 있다. 각 파일에 부여된 Address 값을 통해 $MFT의 위치를 기준으로 하여 접근하게 된다. 아래의 표4는 고유 번호에 따른 Meta Data File의 명칭과 그 기능이다. 고유번호는 $MFT를 0번으로 하여 배치된 순서를 알려주는 값으로, 고유번호 혹은 Address 값에 2를 곱하고, $MFT위치의 값을 더하면 해당 파일의 $MFT 내부의 위치를 얻을 수 있다. 우선은 $MFT 위치로 이동한다.

1.3.1 $MFT Record의 분류

<표 2> NTFS Boot file

기본적으로 $MFT Record는 위의 표에 있는 것처럼 기본 역할을 수행하는 파일들을 가지고 있고, 사용자가 생성하는 디렉토리나 파일들은 Address 24번 이후로 생성되어 각자 고유한 번호를 가지게 된다. Partition 내부의 파일을 확인하기 위해서는 고유번호 5번인 Root Directory를 확인해야 한다.

1.3.2 Attribute Type에 따른 분류

<표 2> $MFT 속성 정보에 따른 기능 분류

<표 2>의 속성번호는 이후에 나올 각각의 Attribute가 가진 데이터 중 첫 4 Bytes 값이다. 이를 확인하여 해당 Attribute가 어떤 속성을 가지는지 확인할 수 있다.

1.3.3 Resident / Non Resident의 차이점

Resident와 Non Resident은 해당 파일의 용량에 따라 구분된다. Resident Type의 경우 데이터의 크기가 700 Byte 이하인 경우 Attribute Header 바로 뒤에 내용을 모두 담아둔다. Non Resident의 경우 Attribute의 내용이 MFT Entry에 담을 수 없을 정도로 커서 따로 속성 내용이 존재하는 클러스터 위치 값을 나열하는 형태이다.

크리에이티브 커먼즈 라이선스
Creative Commons License
이 저작물은 크리에이티브 커먼즈 저작자표시-비영리-변경금지 4.0 국제 라이선스에 따라 이용할 수 있습니다.
Gyu-Hwi Park's profile image

Gyu-Hwi Park

2022-12-08 09:00

Read more posts by this author