当前位置:实例文章 » 其他实例» [文章]磁盘分区形式MBR与GPT介绍

磁盘分区形式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.

注:本文中的代码示例仅供参考,可能需要根据实际情况进行修改和调整。

相关标签:gpt
其他信息

其他资源

Top