3-2) GPT(GUID Partition Table) 구조
Last updated
Last updated
MBR 파티션 테이블의 한계나 불편한 점을 개선하기 위해 GPT가 나왓습니다!
불편한점이 뭐였을까?
파티션 여러개 만들때 마다 확장파티션테이블을 저장할 섹터가 필요합니다.
전체 섹터 수 4 bytes(32bit) 다 보니 2T 넘는 파티션을 만들 수 없습니다. 이외에도 여러가지가있었을 것으로 예상됩니다.
간단히이런것을 보완하여 나온게 GUID Partition Table 입니다!
상세히 알고 싶은 분은 GPT 답변 + Wiki 백과를 참고(참고사항이니 필수는 아닙니다!)
새로 가상 디스크를 생성하여 봅시다. 이번엔 200MB 로 설정!
새로 생성한 가상디스크를 초기화 이때 GPT로 파티션 형식을 선택한다.
새 단순 볼륨으로 파티션 크기 20M 짜리 파티션을 2개
2개를 제대로 만들었다면 아래와 같이 표시될 것입니다.
관리자 권한으로 HxD를 실행 한 뒤 이번엔 디스크 열기 아이콘을 클릭 한 뒤 디스크를 열어봅시다.
먼저 0번섹터를 생긴것을 보면 우리가 기존에 알던 MBR의 모습을 가지고 있습니다. 1번 파티션테이블 정보를 한번 살펴보도록 합시다.
분석을 해보면..
파티션 타입 : EE -> GPT
파티션 시작 : 01 00 00 00 -> 00 00 00 01 (1번 섹터) 전체 섹터 수 : FF FF FF FF -> 4,294,967,295 섹터 (그러나.. 저장매체 자체가 200MB 뿐이라 큰 의미는 없다.) *즉, 1번 섹터에서 부터 GPT 파티션 테이블 관련 정보가 시작된다는 것입니다.
Active Disk Editor를 실행하여 봅시다.
가상디스크를 초기화한 디스크를 선택 한 뒤 [Edit]를 선택
[참고] 너무 어둡다고 생각한다면 전체적인 색깔 테마를 바꿀 수 있습니다. [Tool - Preferences] - Environment 에서 Application sytle 에서 원하는 색깔로 변경하도록 합시다.
먼저 Temples 에서 Partition Records - Master Boot Record를 선택 한 뒤 데이터 영역에서 가장 처음 부분을 클릭한 뒤 우클릭 - Set Template Position 을 선택해봅시다. 지금까지 우리가 공부했던 부분을 다른 도구로 확인 하는 것이라고 보면 될 것입니다.
위에서 분석한 것 처럼, 파티션 테이블 1번 부분에 파티션 타입이 EE 이고, 파티션 시작 세터가 1임을 동일하게 확인할 수 있습니다. 이와 같이 이 도구는 우리가 공부한 부분을 계산해서 보여주는 도구인 것을 알 수 있으며, GPT 부분을 한번 살펴보면
섹터의 이동은 Navigate -> Go to Sector 에서 Sector 영역에서 이동할 수 있습니다. 선택한 부분의 섹터 번호는 하단에서 확인할 수 있습니다.
1번 섹터(GPT 헤더) 시작 부분에 우클릭 - Set Template Position 을 선택 한 후 템블릿을 Templates - GUID Partition Table 을 선택하여 봅시다. 즉, 1번 섹터 시작 부분부터 GPT 파티션 구조로 분석하여 보는 것입니다.
이번 친해지기에서는 MBR 파티션 테이블에서 파티션 영역을 구분하였던 것처럼 파티션을 구분하는 부분에 대해서 집중해서 알아보도록 합시다. 먼저 GPT가 시작하는 1번 섹터 영역(GPT 헤더)에서 중요한 것만 우선 살펴봅시다. - 0-7 영역(Signature) : 시그니처로 고정된 값을 가짐 - 24-31 영역(Currnet LBA) : GPT 헤더가 위치한 섹터번호 - 32-39 영역(Backup LBA) : 백업 GPT 헤더 위치한 섹터번호 - 72-75 영역(Starting LBA of Entries) : 파티션 엔트리가 시작되는 섹터번호(일반적으로 2) - 84-87 영역(Entry size) : 각 파티션 엔트리의 크기(일반적으로 128 바이트 ) *잘 알겠지만, 데이터영역은 16진수 리틀엔디안으로 표시됨, 계산시 10진수로 변환해야 함.
구조를 살펴보면 GPT 헤더에서는 파티션 엔트리 처럼 바로 파티션 섹터 번호를 지정하는 것이 아니라 따로 파티션 엔트리를 저장하는 섹터번호를 가리키고 있습니다. Starting LBA of Entries가 2번 섹터를 가리키고 있으니 2번 섹터로 이동해봅시다.
GPT 헤더에서 확인한 것처럼 파티션 엔트리가 128 bytes 로 1섹터에 4개가 들어가는 크기입니다. 또한 GPT 헤더에 80-83 영역에 해당하는 파티션 엔트리 갯수(Number of entires)가 128로 파티션엔트리가 128개를 표시할 수 있다는 것은 파티션 128개를 나타낼 수 있다는 의미입니다.
우리가 파티션 2개를 생성하였는데 파티션이 3개가 있습니다. 우선 파티션 1번을 한번 간략히 파악해보자. 사실 중요한 것은 시작 섹터,마지막 섹터일 것입니다. 그렇다면 전체 섹터 수는 마지막 섹터 - 시작 섹터 + 1로 확인 할 수 있습니다. (예) 시작 섹터 5, 마지막 섹터 6 이라면, 총 2섹터를 사용 //6 (마지막 섹터) - 5(시작섹터)+1 = 2
도구를 이용해서 우리가 계산한게 맞는 지 확인해보도록 합시다. 추가로 Partition Type GUID, Parition name, Attribute flags 값 그리고 마지막 섹터번호가 추가된 것을 알 수 있다. (Attribute flags 는 추후에 더 상세히 알아보도록 하자.) 대신 전체섹터 수, CHS 값이 사라진 것을 알 수 있습니다.
파티션 영역을 한번 정리해보면.. - 파티션 1 : 34 - 32,767 섹터(총 32,734 섹터, 15MB) - 윈도우 자동생성 - 파티션 2 : 32,768 - 73,727 섹터(총 40,960 섹터, 20MB) - 우리가 직접생성 - 파티션 3 : 73,728 - 114,687 섹터(총 40,960 섹터, 20MB) - 우리가 직접생성
기본적인 GPT 파티션분석은 완료하였습니다. 자! GPT 헤더에서 새로 생긴 백업GPT 헤더를 나타내는 부분을 분석해봅시다. 이제 다시 1번 섹터 GPT 헤더의 Backup LBA 섹터를 가면 어떤것이 있는지 한 번 확인하여보자. Navigate - Go to Sector 를 선택한 뒤 백업 섹터 409,599로 가봅시다.
409,599 섹터를 보면 시그니처(EFI PART)를 확인할 수 있습니다. 다만 아쉽게도 이 도구에서는 기본 GPT Templates 에서는 백업 GPT 헤더 쪽은 구조분석을 해주지 않아서 항목별로 구분하여 보여주고 있지는 않습니다.
그렇다면 수동으로 중요한 부분만 값을 계산하여 봅시다. 1번 섹터의 GPT 헤더와 다른 부분만 살펴보도록 합시다. 다른 부분은 Current LBA와 Backup LBA값이 서로 반대의 값을 가지고 있습니다. 생각 해보면, 백업 GPT 해더 입장에서는 원래의 GPT 헤더가 백업본으로 볼 수 있어서 해논것으로 보이며, 파티션 엔트리가 시작하는 위치를 다른 값을 나타내고 있습니다. 실제로 계산을 해보도록 합시다. Starting LBA of Entires : DF 3F 06 -> 06 3F DF -> 409,567섹터
그렇다면 우리가 위에서 파악한 파티션 엔트리가 백업으로 된 영역이 따로 있는 것으로 보입니다. 해당로 섹터 409,567 로 이동하여 봅시다.
tip. 보통 GPT 헤더의 다음 섹터에 파티션 엔트리가 있습니다. 따라서 409,567 바로 전 섹터인 409,566 섹터를 GPT 템플릿 시작점(우클릭 Set Template Position)으로 지정하면 분석 가능합니다.
위의 실습을 천천히 따라오셧다면, 아래 GPT 파티션 구조 그림이 충분히 이해가 될 것입니다.
이제 다른 도구를 통해서 GPT 파티션 분석을 한 부분에 대해서 확인해보도록 합시다. FTK Imager를 실행 후 Add Evidence Item - Physical Drive 에서 우리가 연결한 디스크드라이브를 선택해 봅시다.
디스크를 인식 한 뒤 View - Properties에서 시작 섹터, 전체섹터, 그리고 해당 파티션의 가장 마지막 섹터번호가 우리가 계산한게 맞는지 확인해 봅시다.
추가로 파티션영역이 아닌 GPT 영역을 클릭하여보면 FTK Imager에서 주요 영역을 섹터 단위로 접근해서 볼 수 있도록 해두었습니다. Protective MBR을 보면, 0번 섹터를 가리키고 있다. 즉, 가장 시작 MBR 부분인 것을 알 수 있습니다.
이제 위에서 우리는 분석해봤기 때문에 해당영역이 어떤 값과 의미를 가지고 있는지, 그리고 해당 섹터번호를 어떻게 찾아갈 수 있는지 알 수 있습니다.
자! 이제 GPT 구조에 대해서 하나하나 확인해 보았으며, 해당 영역이 어떤 것인지 파악을 할 수 있었고, 다양한 도구들은 이러한 영역을 일일이 계산해서 보기 편하게 다양한 기능들을 넣어두었습니다.
이번 친해지기에서는 구조 파악을 목표로 하였으나 이후 파일시스템 분석 이후에 보다 파티션과 파일시스템 등과 관련된 여러가지 장난을 쳐보고 어떤 현상을 보이는지 확인해보도록 합시다.
이번에는GPT 구조를 파악할 때는 Active Disk Editor을 이용하여 분석하여 봅시다. 참고
[참고] Partition Type GUID는 윈도우에서 고유 식별자로 따로 지정한 고정한 GUID입니다. >