磁盘分区形式MBR与GPT介绍
发布人:shili8
发布时间:2025-02-06 02:47
阅读次数:0
**磁盘分区形式:MBR与GPT**
在计算机领域,磁盘分区是指将一个物理磁盘划分为多个逻辑分区,以便于操作系统和应用程序存储数据。磁盘分区形式有两种主要类型:Master Boot Record(MBR)和GUID Partition Table(GPT)。本文将介绍这两种磁盘分区形式的基本原理、优缺点以及代码示例。
**1. Master Boot Record (MBR)**MBR是最早使用的磁盘分区形式,最初由IBM开发。它使用一个固定大小的扇区(通常为512字节)来存储分区表和引导记录。在MBR中,每个分区都有一个唯一的ID号和起始扇区号。
**MBR结构**
| Offset | Size | Description |
| --- | --- | --- |
|0-446 |446 bytes | 分区表(4个分区) |
|447-510 |64 bytes | 引导记录 |
**MBR代码示例**
c// MBR结构定义struct MBR { uint32_t magic; //0x55AA uint16_t head; uint8_t unused[10]; struct PartitionTable { uint8_t id[4]; // 分区ID uint8_t type[2]; // 分区类型 uint32_t startSector; // 起始扇区号 uint32_t size; // 分区大小(扇区) } partitions[4]; }; //读取MBR结构void readMBR(struct MBR* mbr) { FILE* file = fopen("/dev/hda1", "rb"); if (file == NULL) { printf("Error: Unable to open device "); return; } fread(mbr, sizeof(struct MBR),1, file); fclose(file); } // 打印MBR结构void printMBR(struct MBR* mbr) { printf("MBR Magic:0x%x ", mbr->magic); printf("Head: %d ", mbr->head); for (int i =0; i < 4; i++) { struct PartitionTable* partition = &mbr->partitions[i]; printf("Partition %d: ", i +1); printf("ID: %s ", partition->id); printf("Type: %s ", partition->type); printf("Start Sector: %d ", partition->startSector); printf("Size: %d sectors ", partition->size); } }
**2. GUID Partition Table (GPT)**GPT是MBR的替代品,最初由Intel开发。它使用一个固定大小的扇区(通常为16字节)来存储分区表和引导记录。在GPT中,每个分区都有一个唯一的GUID号和起始扇区号。
**GPT结构**
| Offset | Size | Description |
| --- | --- | --- |
|0-15 |16 bytes | 分区表(256个分区) |
|16-31 |16 bytes | 引导记录 |
**GPT代码示例**
c// GPT结构定义struct GPT { uint32_t magic; //0x545241524544 (EFI) uint16_t revision; struct PartitionEntry { uint8_t type[4]; // 分区类型 uint64_t startSector; // 起始扇区号 uint64_t size; // 分区大小(扇区) uint32_t attributeFlags; // 特性标志 uint32_t uniqueID[16]; // GUID号 } partitions[256]; }; //读取GPT结构void readGPT(struct GPT* gpt) { FILE* file = fopen("/dev/hda1", "rb"); if (file == NULL) { printf("Error: Unable to open device "); return; } fread(gpt, sizeof(struct GPT),1, file); fclose(file); } // 打印GPT结构void printGPT(struct GPT* gpt) { printf("GPT Magic:0x%x ", gpt->magic); printf("Revision: %d ", gpt->revision); for (int i =0; i < 256; i++) { struct PartitionEntry* partition = &gpt->partitions[i]; printf("Partition %d: ", i +1); printf("Type: %s ", partition->type); printf("Start Sector: %llu ", partition->startSector); printf("Size: %llu sectors ", partition->size); printf("Attribute Flags:0x%x ", partition->attributeFlags); printf("Unique ID: "); for (int j =0; j < 16; j++) { printf("%02x ", partition->uniqueID[j]); } printf(" "); } }
**结论**
MBR和GPT是两种主要的磁盘分区形式。MBR使用一个固定大小的扇区来存储分区表和引导记录,而GPT使用一个固定大小的扇区来存储分区表和引导记录。两者都有优缺点,选择哪一种取决于具体需求。
**参考**
* IBM. (1983). PC Magazine.
* Intel Corporation. (1998). GPT Specification.
* Microsoft Corporation. (2006). Windows Vista: A Guide to the New Features and Technologies.
注:本文中的代码示例仅供参考,可能需要根据实际情况进行修改和调整。