본문 바로가기

File System

GPT(GUID Partition Table) Partition Structure Analysis

이번에 분석할 파티션은 MBR의 한계로 새로 만들어진 GPT 파티션 영역 입니다.

 

GPT 파티션은 MBR 파티션 테이블의 파티션 용량에 제약 및 좀 더 보완된 파티션 방식을 위해서 만들어 졌습니다.

MBR 파티션은 최대 크기로 2TB(0xFFFFFFFF)을 가지는데 GPT 파티션은 최대 크기로 8ZB(0xFFFFFFFFFFFFFFFF)을 가질 수 있습니다.

인텔에서 BIOS의 대체 수단으로 EFI(Extensible Firmware Interface)을 표준으로 제안했습니다.

개선된 EFI 펌웨어에서 지원하는 파티션 테이블 형식이 GPT 파티션 입니다.

 

MBR은 4개의 주 파티션을 생성할 수 있지만 GPT는 128개의 주 파티션을 생성 할 수 있습니다.

또한 GPT 파티션에서는 CRC(Cyclical Redundancy Check)를 이용해서 파티션 테이블을 보호가 가능합니다.

 

MBR 파티션 과 달리 GPT 파티션은 중요 데이터 구조는 볼륨의 끝에 복제본을 저장해서 장애가 발생 하면 복구가 가능합니다.

 

현재 모든 최신 개인용 

인텔에서 BIOS의 대체 수단으로 새로 등장한 EFI에 대해 알아 보겠습니다.

 

1. EFI(Extensible Firmware Interface)

 

운영체제와 하드웨어 펌웨어 사이의 새로운 인터 페이스로 BIOS(Basic Input/Output System)을 대체 하는 용도로 사용합니다.

주요 특징은 아래와 같습니다.

- GUI Interface

- 마우스 사용 가능

- Pre-OS 소프트웨어 구동 가능

└ 시스템 복구나 인터넷 브라우저 등을 사용 가능

- 네트워크 기능 사용 가능

- 한국어를 포함한 다국어 지원

 

2. GPT Support According to Operating System

 

Windows 운영체제가 아닌 그외의 운영체제에서의 GPT의 호환성 및 지원을 알아 보겠습니다.

GPT Support Non-Windows Operating System

이번에는 Windows 32비트 운영체제 에서의 GPT의 호환성 및 지원을 알아 보겠습니다.

GPT Support Windows 32bit Operating System

이번에는 Windows 64비트 운영체제 에서의 GPT의 호환성 및 지원을 알아 보겠습니다.

GPT Support Windows 64bit Operating System

3. GPT Structure

 

3.1 MBR Disk VS GPT Disk 

 

MBR Disk와 GPT Disk 를 구조 레이아웃으로 비교를 해보겠습니다.

MBR Disk Structure Brief Layout
GPT Disk Structure Brief Layout

구조 적으로도 차이가 발생 한것을 알 수 있고, 가장 눈에 띄는 것은 GPT Header 와 Partition Table이 2개씩 있다는 것입니다.

이는 앞 섹터에 존재 하는 GPT Header와 Partition Table이 손상이되면 백업 용도로 사용하려고 놔둔 것을 알 수 있습니다.

 

3.2 GPT Detail Structure

 

GPT 구조는 아래와 같이 되어 있습니다.

GPT Disk Structure Detail Layout

LBA 는 Sector 를 의미 하고, 위의 구조와 같이 값이 배치 되어 있습니다.

 

3.3 GPT Structure - Protective MBR

 

Protective MBR은 EFI 가 아닌 BIOS 서비스를 통한 GPT 기반 부팅을 진행할때 지원하는 운영체제에서 첫번째 섹터는 Boot 로더로서 사용하기 때문에 Protective MBR 이라는 이름으로 존재 합니다.

Protective MBR Hex Data in HxD

Protective MBR 0번 Sector에 위치

EFI를 지원하는 운영체제 일경우에 해당 위치를 접근하지 않고 EFI를 지원하지 않는 운영체제 일경우 EFI에서 BIOS 에뮬레이션을 하여 접근하는 부분

Hex 데이터를 보는 방법은 기존의 MBR과 동일 합니다.

 

GPT에서 MBR을 사용하는 이유는 MBR을 사용하는 BIOS에서 오작동을 일으키지 않도록 하기 위해서 사용합니다.

GPT 사용시 MBR의 Partition Type을 0xEE로 하여 전체 GPT Drive를 표시하여 OS에 해당 Drive가 GPT를 사용한다고 알림

 

3.4 GPT Structure - GPT Header

 

GPT Header을 한번 알아 보겠습니다.

GPT Header Hex Data in HxD

GPT Header는 1번 Sector 에 위치

일반적인 GPT Header는 92 Byte로 되어 있습니다.

GPT에 대한 대부분의 설정 정보를 담고 있고 있으며, 그외의 영역에는 NULL(0x00) Byte를 가지고 있습니다.

 

GPT Header Layout은 아래와 같습니다.

GPT Header Sturcture Layout

3.4.1 GPT Structure - GPT Header - Signature (0x200~0x207, 8 Byte)

 

GPT Header - Signature Hex Data in HxD

"EFI PART" 시그니처를 필수로 가지고 있다.

 

3.4.2 GPT Structure - GPT Header - Revision (0x208~0x20B, 4 Byte)

 

GPT Header - Revision Hex Data in HxD

Version 1.0을 의미한다.

 

3.4.3 GPT Structure - GPT Header - Header Size (0x20C~0x20F, 4 Byte)

 

GPT Header - Header Size Hex Data in HxD

GPT Header의 크기를 이야기 하는데 대부분 92Byte 이므로 0x5C값을 갖는다.

 

3.4.4 GPT Structure - GPT Header - CRC32 of Header (0x210~0x213, 4 Byte)

 

GPT Header - CRC32 of Header Hex Data in HxD

무결성 체크를 위한 CRC32 값

Header의 시작부터 끝나는 위치 까지만 체크하는 값

 

3.4.5 GPT Structure - GPT Header - Reserved (0x214~0x217, 4 Byte)

 

GPT Header - Reserved Hex Data in HxD

예약된 영역은 사용하지 않습니다.

 

3.4.6 GPT Structure - GPT Header - LBA of GPT Header (0x218~0x21F, 8 Byte)

 

GPT Header - LBA of GPT Header Hex Data in HxD

현재 LBA 주소를 나타내기 때문에 무조건 0x01을 띈다.

 

3.4.7 GPT Structure - GPT Header - LBA of Backup GPT Header (0x220~0x227, 8 Byte)

 

GPT Header - LBA of Backup GPT Header Hex Data in HxD

GPT Header 정보를 Backup한 Sector의 위치를 기록한 값

 

3.4.8 GPT Structure - GPT Header - Starting LBA for Partitions (0x228~0x22F, 8 Byte)

 

GPT Header - Starting LBA for Partitions Hex Data in HxD

파티션을 담을 수 있는 LBA 주소를 의미합니다.

Primary Partition  Table Last LBA+1 한 값 입니다.

 

3.4.9 GPT Structure - GPT Header - Ending LBA for Partitions (0x231~0x237, 8 Byte)

 

GPT Header - Endng LBA for Partitions Hex Data in HxD

파티션을 담을 수 있는 LBA의 끝 주소를 의미 합니다.

Secondary Partition Table First LBA-1 한값 입니다.

 

3.4.10 GPT Structure - GPT Header - Disk GUID (0x238~0x247, 16 Byte)

 

GPT Header - Signature Hex Data in HxD

Unix의 UUID(Universally Unique IDentifier)와 동일 합니다.

 

3.4.11 GPT Structure - GPT Header - Partition Table Entry Starting LBA (0x248~0x24F, 8 Byte)

 

GPT Header - Partition Table Entry Starting LBA Hex Data in HxD

Partition Table Entry의 시작 LBA 주소가 들어 있습니다.

 

3.4.12 GPT Structure - GPT Header - Number of Partition Entries (0x250~0x253, 4 Byte)

 

GPT Header - Number of Partition Entries Hex Data in HxD

지원하는 Partition Entry의 개수를 담고 있습니다.

기본적으로 최대 개수는 128개 이므로 0x80을 가집니다.

 

3.4.13 GPT Structure - GPT Header - Size of Partition Table Entry (0x254~0x257, 4 Byte)

 

 

GPT Header - Size of Partition Table Entry Hex Data in HxD

GPT Partition Entry의 크기를 의미합니다.

대부분 128 byte를 사용합니다.

 

3.4.14 GPT Structure - GPT Header - CRC32 of Partition Table (0x258~0x25B, 4 Byte)

 

GPT Header - CRC32 of Partition Table Hex Data in HxD

Partition Table의 CRC32 값을 의미합니다.

 

3.4.15 GPT Structure - GPT Header - Reserved (0x25C~0x3FF, 420 Byte)

 

GPT Header - Reserved Hex Data in HxD

예약된 영역은 사용하지 않습니다.

 

3.5 GPT Structure - GPT Partition Entry

 

GPT Partition Entry를 한번 알아 보겠습니다.

GPT Partition Entry Hex Data in HxD

GPT Partition Entry는 2번 Sector 에 위치

일반적인 GPT Partition Entry는 128 Byte로 되어 있습니다.

각 파티션에 대한 대부분의 정보를 담고 있고 있으며, MBR의 파티션 테이블의 LBA 주소는 4Byte로 기록하지만 GPT는 8Byte로 기록합니다.

GUID를 이용해서 각 파티션의 정보를 확인할 수 있습니다.

 

GPT Partition Entry Layout은 아래와 같습니다.

GPT Partition Entry Sturcture Layout

3.5.1 GPT Structure - GPT Partition Entry - Partition Type GUID (0x400~0x40F, 16 Byte)

 

GPT Parition Entry - Partition Type GUID  Hex Data in HxD

파티션의 타입을 표현하는 고유 정보를 기록합니다.

파티션의 파일 시스템과 사용하는 운영체제 및 서비스 정보를 확인 가능 합니다.

파티션 GUID 값을 아래의 사이트에 있는 표에서 값을 찾아보면 어떤 파티션인지 알 수 있습니다.

https://en.wikipedia.org/wiki/GUID_Partition_Table#Partition_type_GUIDs

 

3.5.2 GPT Structure -  GPT Partition Entry - Unique Partition GUID (0x410~0x41F, 16 Byte)

 

GPT Parition Entry - Unique Partition GUID  Hex Data in HxD

파티션 마다 할당하는 고유 값을 저장 합니다.

 

3.5.3 GPT Structure -  GPT Partition Entry - Frist LBA (0x420~0x427, 8 Byte)

 

GPT Parition Entry - Frist LBA  Hex Data in HxD

파티션의 시작 주소를 리틀 엔디안으로 저장 됩니다.

 

3.5.4 GPT Structure -  GPT Partition Entry - Last LBA (0x428~0x42F, 8 Byte)

 

GPT Parition Entry - Last LBA  Hex Data in HxD

파티션의 끝 주소를 리틀 엔디안으로 저장 됩니다.

 

3.5.5 GPT Structure -  GPT Partition Entry - Attribute Flags (0x430~0x437, 8 Byte)

 

GPT Parition Entry - Attribute Flags  Hex Data in HxD

첫번째 파티션 테이블 엔트리에 값이 0x0000000000000000 이라고 되어 있어서 다음 엔트리값을 사용 하겠습니다.

파티션 테이블 엔트리의 속성 값이 저장 됩니다.

 

Partition Attribute 

└ 0 : System Partition

└ 1 : EFI Firmware

└ 2 : Legacy BIOS bootable(구 바이오스 부팅 방식)

└ 3~47 : Reserved

└ 48~63 : Individual Partition Type

└ 60 : Read Only

└ 61 : Shadow copy

└ 62 : Hidden

└ 63 : No Drive Letter

 

3.5.6 GPT Structure -  GPT Partition Entry - Partition Name (0x438~0x47F, 72 Byte)

 

GPT Parition Entry - Partition Name  Hex Data in HxD

첫번째 파티션 테이블 엔트리에 값이 0x0000000000000000 이라고 되어 있어서 다음 엔트리값을 사용 하겠습니다.

 

지정 되어 있는 파일 시스템 이름입니다. 

UTF-16(LE) code 사용 합니다.