- HOW TO: Establish and Boot to GPT Mirrors on 64-Bit Windows
초기 IA64 시스템에서 사용되던 GPT Partition Type이 x64에서도 사용가능하고, 점차 2TB 이상의 Storage를 요구하는 고객사가 많아지면서
점차 GPT는 많이 사용될 것으로 예상됩니다.
이에 아래와 같이 GPT 에 대한 Architecture를 정리하였습니다. 근데 이 x할 놈의 티스토리는 그림이 들어가질 않네요 쩝
- Volume은 Volume Manager라고 불리는 Device Driver에 의해서 Implemented 된다.
- 예를 들어, FtDisk Manager, Logical Disk Manager, VERITAS Logical Volume Manager가 있다.
- Volume Manager는 Physical Abstraction Layer와 RAID같은 Data Protection 그리고 Performance를 제공한다.
- Vista 이후로 OS의 Volume Management는 Volmgr.sys와 Volmgrx.sys 에 의해서 Service 된다.
Virtual Disk Service
- VDS는 Developer가 API를 사용해서 Disk를 관리할 수 있도록 해준다.
- VDS는 Disk Management Tool과 Disk Provider 사이에 추가된 Layer of Abstraction 이다.
- 과거에는 RAID Controller를 설정하기 위해서는 사용자가 Vendor-Specific Application을 사용해야만 했다. 그러나, VDS를 사용하게 되면 Vendor가 Hardware Provider를 작성해서 RAID Controller가 VDS를 통해서 Configured and Managed 되도록 할 수 있다.
- Disk Management 와 Diskpart는 VDS를 사용할 수 있도록 Rewritten 되었고, Windows Resource Kit에는 Diskraid라는 새로운 Command Line Tool이 추가되었다.
Overview of GPT Disks
- GPT Disk Format은 Extensible Firmware Interface(EFI) Specification의 Part 이다.
- 1983년 MS-DOS 2.0이 Release될 때, Harddisk Support의 일환으로, Disk의 MBR에 128 bit Partition table을 포함하는 4개의 Harddisk Partition을 정의하는 방법을 도입하였다.
- Disk에 의해 필요한 모든 정보가 Self-Contained 되어 있기 때문에 GPT Disk를 사용하기 위해서 꼭 EFI로 Booting 할 필요는 없다.
- GPT는 현재 Disk당 128개의 Partition을 지원한다.(MBR은 4개까지 지원)
- GPT는 8 ZettaBytes까지 사용가능하고, MS에서 구현한 것은 18exabytes이다.
- CHS 대신에 LBA(Logical Block Addressing)를 사용한다.
- 장치 관리자에서 아래와 같이 속성을 확인하여 GPT냐 MBR이냐를 확인할 수 있다.
- GPT와 MBR을 Convert 하기 위해서는 디스크 관리자에서 해당 디스크를 선택하고 우클릭하면 메뉴가 나온다.
- Disk에 Partition이 있는 상태에서는 불가능하다.
- Itanium System에서 Boot와 System Partition은 반드시 GPT disk에 Reside 하고 있어야 하며, 이는 변경할 수 없다.
- x86과 x64에서는 반대로 Boot와 System Partition은 반드시 MBR Disk에 있어야 한다.
- Removable Disk는 반드시 MBR을 사용해야 한다. GPT로 Convert할 수 없다.
- Diskpart에서 convert mbr/gpt 명령어를 통해서도 변경할 수 있다.
- 2003 SP2 이전에는 GPT 디스크가 Cluster 용도로 사용할 수 없었고, Hotfix를 설치하면 되며 2008부터 by default로 가능하다.
- GPT Disk의 Sector-by-sector cloning은 지원되지 않는다. 이는 Disk와 Partition의 GUID가 Unique 하지 않기 때문이다.
- 그러나 ImageX를 가지고 EUFI system을 Capture하고, ESP와 System Partition을 Capture 한다면 가능하다.
- 그러나 MSR은 Capture 할 수 없기 때문에 Target Computer에 Recreate 해야 한다.
- GPT Disk는 NTFS File System이 권고되며 UI 상으로는 FAT를 사용할 수 없지만, format.exe 를 통해서 /FS:FAT로 사용이 가능하다.
- 64bit System의 GPT Disk P2V는 지원되지 않는다.
- GPT Disk로 32bit system을 Boot할 수 없지만, BIOS가 지원한다면 x64에서 GPT Disk로 Booting 이 가능하다.(Vista 이후부터 사용 가능)
- 그러나, XP에서는 GPT disk를 Data 용도로만 사용할 수 있다.
Special Partition on GPT Disks
1. EFI System Partition(ESP)
- ESP는 모든 EFI 기반의 Computer에 Required 된다.
- 만약 Windows를 설치할 때 Computer에 EFI partition이 없다면, Setup이 ESP를 생성할 것이다.
- ESP의 주 목적은 boot loader program을 contain 하는 것이다.
- ESP는 Firmware에 의해서 읽어질 수 있어야 하기 때문에, 단순한 File System을 사용하는 것이 좋다. 따라서 FAT file system을 사용할 것이 요구된다.
- Windows가 EFI partition을 생성할 때, Physical Disk Size의 1%를 생성한다. 이는 100MB ~ 1GB 사이에서 조정된다.
- ESP에 접근하기 위해서 EFI Console로 Booting 하거나, Drive Letter를 아래와 같이 할당하여 접근할 수 잆다.
--> mountvol <x:> /s
- Boot loader code 는 ia64ldr.efi(Hidden, System, Read-Only File)로 불리고, 대게 \EFI\Microsoft\WINNT50 디렉토리 밑에 위치한다.
2. Microsoft Reserved Partition(MSR)
- MSR Partition은 Windows가 모든 GPT Disk에 생성하는 Special Partition 이다.
- MSR Partition에는 초기에 아무것도 저장되지 않는다. 이는 향후에 다양한 종류의 Metadata(LDM database 같은)를 저장하기 위한 용도로 쓰기 위해서 Space를 Reserve 해놓는 것이다.
- MSR Partition의 크기는 Disk 크기가 16G보다 작으면 32MB 크면 128MB 이다.
- MSR Partition은 Diskpart.exe를 통해서도 지워질 수 없고, 만약 제거 된다면 Booting 할 수 없게 된다.
--> "Windows Could not start because there was an error reading the boot settings from NVRAM."
Dynamic Disks and GPT
- GPT Disk 또한 MBR과 마찬가지로 Basic이나 Dynamic Disk를 사용할 수 있다.
- 하나의 Dynamic Disk Group은 GPT와 MBR Disk를 혼합하여 사용할 수 있지만, 두 Disk가 Address를 산정하는 방식이 다르기 때문에 향후에 문제가 생길 수 있다.
따라서 단일 Partitioning Style을 사용하여 Dynamic Disk를 구성하는 것이 권장된다.
- MBR Disk에서는 LDM Database로 Disk의 마지막 1MB를 사용했다. 그러나 만약 Disk가 unpartitioned space에 최소한 1MB도 가지고 있지 못하다면, Disk는 Dynamic으로 Converted 될 수 없다.
- GPT 에서는 Dynamic Disk가 사용하는 LDM Database를 MSR Partition에 저장하여 Handling 한다.
--> 따라서, Basic 에서 Dynamic으로 GPT Disk가 Converted 될 때, MSR Partition의 First 1MB가 Carved Off 되어, LDM Metadata Partition이 생성되게 된다.
- LDM Metadata Partition은 MSR Partition과 같이 Disk 관리도구에서 보이지 않고, Diskpart를 통해서 확인할 수 있다.
DISKPART> list partition
Partition ### Type Size Offset
------------- ---------------- ------- -------
Partition 1 Dynamic Reserved 1024 KB 17 KB
Partition 2 Reserved 31 MB 1041 KB
Partition 3 Dynamic Data 9 GB 32 MB
- Dynamic mirroring을 사용할 수 있으나, 만약 Primary Disk가 Fail 되면 Shadow Drive에 EFI Partition이 없기 때문에 Booting 할 수 없게 된다.
--> 이를 방지하기 위해서 Shadow Drive에 EFI Partition을 생성하는 가이드가 있다.
http://support.microsoft.com/default.aspx?scid=kb;en-us;814070
GPT On-Disk Format
- MBR에서는 모든 Disk의 첫 번째 Sector에 Master Boot Record를 가지고 있다. 대부분의 MBR은 실제 Boot Code로 구성되어 있으며, 기존 시스템은 Boot Process를 확인하여 다음에 Load 해야 할 적절한 Boot Sector를 찾는다.
- Offset 0x1BE에서는 64 Byte Structure가 있는데, 이는 Disk에 있는 4개의 Partition을 정의하고 있으며, 각 Partition이 16Byte로 정의되어 있다.
- 0x76C4E79C가 Disk Signature 이다.
Special Sectors Used on GPT Disks
- 알다시피, Master Boot Record는 하나의 512Byte Sector로 구성되어 있다.
Sector |
Contents |
0 |
Protective MBR |
1 |
GPT Header |
2 → 33 |
GPT Partition Entry Array (Partition Table) |
(Last Sector - 32) → (Last Sector - 1) |
Backup GPT Partition Entry Array |
Last Sector |
Alternate GPT Header |
1. Protective MBR
- 만약 GPT Disk에 MBR partition table이 없다면, 예상치 못한 결과가 발생할 수 있고, Disk가 Unpartitioned 상태로 보일 수 있다. 또한 이 문제로 Data의 손실이 유발될 수 있다.
- 이를 방지하기 위해서 GPT Specification은 Disk의 Sector 0에 Protective MGR이라는 것을 Devoting 한다.
- Protective MBR에서는 기존 MBR에서 Total Sector에 해당하는 부분인 4 Byte가 FF FF FF FF로 Maxed out 되어 있다.
- EFI System에서, Boot Code는 Computer의 Firmware에 저장된다.
- 0x01BE는 Boot Indicator로 반드시 00 값이 들어가 있어야 한다.
- 그 다음 00은 Starting Head, 그 다음 02는 Starting Sector, 그 다음 00은 Starting Cylinder인데, 이 값들은 GPT Partition의 LBA와 Matching 된다.
- 0x01C2의 EE는 System ID 값으로 반드시 EE 여야 한다.
- 0x01C3의 FF는 Ending Head, 그 다음 FF는 Ending Sector, 그 다음 FF는 Cylinder 이다.
- 0x01C6의 01 00 00 00 은 Starting LBA로 항상 1로 Set 되어 있으며, 이 값은 GPT Partition table 의 Header가 LBA1에 위치해 있음을 알려준다.
GPT Header
- GPT Disk의 Sector 1은 GPT Header로 Devoted 되어 있다.
- 0x0000은 Signature로써, 반드시 EFI PART 여야 한다.
- 0x0008은 Revision으로 현재 GPT Spec의 Version은 1.0 으로 0x00010000 으로 나타낸다.
- 0x000C는 Header Size로 현재 구현 버전에서는 반드시 0x5C여야 한다. 0x0000005C
- 0x0010은 Header의 CRC32로 Header의 Corruption 여부를 Check하기 위한 Field 이다. 0x1AA2FC24
- 0x0014는 Reserved 0x00000000
- 0x0018은 My LBA로 GPT Header가 위치한 LBA를 가리킨다. 따라서 0x0000000000000001 이다.
- 0x0020은 Alternate LBA로써 Alternate GPT Header의 LBA를 가리킨다.
- 0x0028은 First Usable LBA, Partition을 생성하기 위해 사용될 수 있는 Disk의 First LBA이다. 0x0000000000000022.
- 0x0030은 Last Usable LBA, 0x0000000000111C817
- 0x0038은 Disk GUID로 이 Disk의 Unique Identifier를 나타낸다. E0CB80E5-04D9-490B-A37A-360CDB92A976
- 0x0048은 Partition Entry LBA, Partition Entry Array의 beginning을 가리킨다. 0x0000000000000002
- 0x0050은 Number of Partition Entries, GPT에 있는 Partition Entry의 개수, 현재 Microsoft는 이 값으로 0x80(128)을 구현해놨다. 0x00000080
- 0x0054는 Size of Partition Entries, 각 Partition Entry에 할당되는 Size를 나타낸다. 현재 버전에서 이 값은 0x80(128 Byte)로 되어 있다. 0x00000080
- 0x0058 Partition Entry Array CRC32, 이 CRC32 값은 Partition Entry Array 자체의 값이다. Partition Entry Array에 Corruption이 있는지 확인한다. 0xAF02E16E
- 0x5C 420 Bytes Reserved Space
- Diskprobe.exe 툴을 통해서, 수동으로 Alternate GPT Header를 Main GPT Header로 Copy 할 수도 있다.
- Copy 후에 기존 Alternate GPT Header에서 My LBA 값과 Alternate LBA Field 값을 수정해야 한다.
GPT Partition Entry Array
- Windows에 의해서 초기화된 GPT Disk에서 GPT Partition Entry Array은 32 Sector 이다.
- Partition Entry 당 128 Byte 이므로, 한 Sector에(512Byte) 4개의 Partition Entry를 허용한다.
- 아래 화면은 GPT Partition Entry가 3개인 경우이다.
- 0x0000은 Partition Type GUID, Partition type이 무엇인지를 정의하는 GUID E3C9E316-0B5C-4DB8-817D-F92DF00215AE 이는 Microsoft Reserved Partition 임을 나타낸다.
- 0x0010은 Unique Partition GUID, 만들어진 모든 Partition은 Unique ID를 가진다. EBD0A0A2-B9E5-4433-87C0-68B6B72699C7
- 0x0020은 Starting LBA, Partition이 시작하는 LBA
- 0x0030은 0x0000000000000000 Attribute Bits 이다.
- 0x0038은 Partition Name으로 Partition Name의 Unicode String을 정의한다.
Mount Manager
- Automount feature가 enable 되어 있을 때, 새로운 Hard disk가 system에 added 되면, Mount Manager는 자동으로 Drive Letter를 할당하고 Disk를 Mount 한다.
- 2003부터는 이 Automount feature가 default로 turned off되어 있으며 대부분의 이슈는 Rebooting 후에 해결된다.
- 만약 automount를 turn on 하려면 아래와 같이 명령 프롬프트에서 수행하면 된다.
--> mountvol /E
'Windows > Storage' 카테고리의 다른 글
How to change the permission of NTFS (0) | 2014.08.05 |
---|---|
Performance Impact on a File server due to large number of files (0) | 2013.01.28 |
NTFS Misreports Free Space? (0) | 2012.03.13 |
[Windows] Windows Server Backup Powershell Script (0) | 2011.08.30 |
[Windows] Windows Server Backup 2008 Restore from Network Location (0) | 2011.08.18 |