GPT(GUID Partition Table) - (1) 개요 및 구조
DFIR/File System

GPT(GUID Partition Table) - (1) 개요 및 구조

앞서 MBR을 다뤘을 때, MBR의 한계를 극복하기 위해 생긴 것이 GPT라고 했었습니다.

이번에는 GPT가 어떤 것인지, 어떻게 구성되어있는지에 대해 분석해보겠습니다.

 


 

GPT(GUID Partition Table)

 

GPT는 MBR의 파티션 테이블 용량 제약을 개선하기 위해서 생겼습니다.

MBR은 32bit 주소체계를 사용하고 있기 때문에 2TB의 용량 제한을 가지고 있습니다. (2^32 * 512)

GPT는 64bit 주소체계를 사용하기 때문에 이론적으로 8ZB의 용량까지 사용이 가능하나 18EB 정도로 제한을 두고 있다고 합니다. (2^64 * 512)

그래서 64bit 운영체제를 사용하고 있다면 MBR보다는 GPT를 사용하고 있을 가능성이 크겠습니다.

MBR에서는 주 파티션을 4개까지 생성이 가능하지만, GPT에서는 128개의 주 파티션을 생성할 수 있습니다.

또한 MBR은 백업본을 저장하지 않지만 GPT는 볼륨의 끝에 백업본을 저장하고 있기 때문에 백업본을 기반으로 한 복구가 가능합니다.

 

그리고 최신 컴퓨터에서는 BIOS 대신 EFI라는 것을 사용하는 추세인데요.

EFI는 Extensible Firmware Interface라고 해서 인텔에서 BIOS의 대체 수단으로 제안한 운영체제와 펌웨어 사이의 새로운 인터페이스 입니다.

초기에는 인텔에서 개발을 했으나 지금은 통합되어 UEFI라고 불리기도 합니다.

이 EFI에서 지원하는 파티션 테이블 형식이 GPT이며, EFI 화면은 컴퓨터 세팅을 다뤄보신 분들이라면 한 번 쯤은 보셨을 화면입니다.

 

BIOS(좌), UEFI(우)

 

예전에 키보드로만 조작을 해서 세팅을 하던 것이 BIOS이고, 최근에 마우스도 활용할 수 있는 GUI 형태를 가진 것이 UEFI라고 보시면 되겠습니다.

저는 디스크 부팅 순서를 변경할 때 사용했었던 기억이 나네요.

 

MBR과 GPT 비교

  MBR GPT
주 파티션 지원 개수 4개, 확장 파티션 존재할 경우 3개 128개
용량 제한 2TB 18EB(이론상 8ZB)
백업본 여부 X O
기타   UEFI 사용 가능, 64bit 주소 체계 사용 가능, CRC 기능

 


 

GPT 구조

 

GPT 구조

 

GPT를 논리적인 구조로 봤을 때 위와 같습니다.

GPT를 사용하더라도 호환성을 위해 0번 섹터에 MBR이 위치하게 됩니다.

그 다음 1번 섹터에 GPT Header 구조가 오고 2번 섹터에 파티션 테이블이 위치하게 됩니다.

그리고 볼륨의 마지막 섹터에 GPT Header의 백업본이 위치하고 LBA n-1의 위치에 파티션 테이블의 백업본이 위치합니다.

 

GPT 사용 볼륨의 MBR

 

GPT를 사용하는 볼륨의 0번 섹터를 보면 MBR이 위치하고 있는 것을 확인할 수 있습니다.

주목해야 할 점은 파티션 테이블의 값인데요, 파일 시스템 타입의 값이 0xEE 인데 이는 GPT를 사용하고 있다는 것을 의미합니다.

다음으로 LBA 시작주소 값이 0x01로 볼륨의 구조를 불러올 때 GPT Header가 위치한 1번 섹터로 이동하라는 것을 의미합니다.

파일 시스템 총 섹터 개수의 값은 0xFFFFFFFF로 유의미한 값은 아니며 GPT를 사용하고 있을 경우 해당 값을 가집니다.

 


 

GPT Header 구조

 

GPT Header

 

GPT 헤더는 논리적으로 1번 섹터에 위치를 하고 있으므로 0x200 오프셋부터 시작하게 됩니다.

헤더의 구조에 대한 설명은 아래와 같습니다.

  • Signature : GPT Header의 시그니처 값으로 "EFI PART" 문자열입니다.
  • Revision : Version 값입니다.
  • Header Size : GPT Header의 크기입니다. (보통 0x5C의 값을 지님)
  • Header Checksum : GPT Header의 체크섬입니다.
  • Reserved : 예약 영역으로 사용하지 않고 있습니다.
  • LBA of GPT Header : GPT Header의 논리적 주소입니다. (0x01의 값을 지님)
  • LBA of backup GPT Header : GPT Header의 백업본 위치입니다.
  • Starting LBA for partitions : 파티션의 논리적 시작 주소입니다.
  • Ending LBA for partitions : 파티션의 논리적 끝 주소입니다.
  • GUID for entire disk : 디스크의 GUID 값입니다.
  • Starting LBA of partition table : 파티션 테이블의 논리적 시작 주소입니다. (0x02의 값을 지님)
  • Number of partition entries : 파티션 엔트리의 개수입니다. (0x80의 값을 지님)
  • Size of each entry : GPT entry의 크기입니다. (0x80의 값을 지님)
  • Partition table Checksum : 파티션테이블의 체크섬입니다.

 


 

GPT Partition Entry 구조

 

GPT Partition Entry

 

1개의 GPT Partition Entry는 128byte이며 하나의 섹터에 4개의 엔트리가 저장될 수 있습니다.

GPT 파티션 엔트리 구조에 대한 설명은 아래와 같습니다.

 

  • Partition type GUID : 각 파티션에는 파티션 유형을 식별하는 파티션 타입 GUID가 있습니다. 동일한 유형의 파티션은 동일한 파티션 타입 GUID를 갖습니다. 
  • Partition GUID : 파티션의 고유한 GUID 값을 의미합니다.
  • Partition starting LBA : 파티션이 시작하는 첫 위치에 대한 논리적 시작 주소입니다.
  • Partition ending LBA : 파티션이 끝나는 마지막 위치에 대한 논리적 끝 주소입니다.
  • Partition attributes : 파티션 속성에 대한 값입니다.
  • Partition Name : 파티션 이름입니다.

 

Partition type GUID의 일부 정보는 https://en.wikipedia.org/wiki/GUID_Partition_Table#Partition_type_GUIDs 에서 확인할 수 있습니다.

 

 

MSR(Microsoft Reserved Partition)

 

MRP

 

GPT Partition Entry의 값을 보면 MSR이라고 해서 생성하지 않은 파티션이 자동으로 생성되어 있는 것을 확인할 수 있습니다. 위 그림에서는 초록색 네모 영역이 MSR에 대한 Entry 정보입니다.

MSR은 마이크로소프트의 예약 파티션으로 Windows 운영체제에서 나중에 사용할 수 있도록 디스크 공간의 일부를 예약하기 위해 생성하는 약 16MB 크기의 파티션입니다.

위치는 부팅 가능한 Windows 운영체제의 기본 파티션 앞에 위치한다고 합니다. 그래서 제일 앞에 있는 것 같네요.

Microsoft는 MSR이 모든 GPT 디스크에 있을 것으로 예상하며 디스크에 파티션이 생성될 때 MSR을 생성할 것을 권장하고 있다고 합니다.

해당 파티션에 의미있는 데이터는 저장되지 않으며 GUID type 값은 E3C9E316-0B5C-4DB8-817D-F92DF00215AE 입니다.

제가 사용하고 있는 시스템은 GUID type 값과 약간 다른 E3C9E35C-0BB8-4D81-7DF9-2DF00215AE 인것 같은데...

알려진 값과 다른 값이 있는 이유는 잘 모르겠습니다. MS측에서 업데이트 한 값인걸까요? 혹시나 아시는 분이 계신다면 댓글에 작성해주시면 감사하겠습니다.

 

 

이번 포스팅에서는 GPT와 GPT Header, GPT Partition Entry 구조에 대해서 살펴보았습니다.

다음 포스팅에서는 손상된 GPT를 복구하는 내용에 대해 다뤄보도록 하겠습니다.