一、分区概念与MBR:从零开始理解磁盘分区
大家好,我是你们的讲师。今天咱们聊聊分区这件事。说实话,分区这个概念,很多搞了几年运维的人都不一定完全吃透。我见过太多人把分区和卷搞混,也见过有人因为分区表损坏丢了整个盘的数据。嗯,这节课咱们就把分区这事儿彻底讲明白。
1.1 什么是分区?
分区,说白了就是把一块物理硬盘,逻辑上切成几块独立的区域。你想想看,一块500GB的硬盘,你可以把它分成C盘100GB、D盘200GB、E盘200GB。每个盘就像独立的小硬盘一样,互不干扰。
为什么要分区?我个人习惯,至少分两个区:一个系统区,一个数据区。为什么?因为系统崩了重装系统,数据区的东西还在。我在项目中遇到过,有人把所有文件都放在C盘,结果系统崩溃,数据全没了——那叫一个惨。
核心要点:分区是逻辑上的划分,不是物理上的切割。分区表就是记录这些划分信息的"目录"。
1.2 MBR分区表结构
MBR,全称Master Boot Record,主引导记录。它位于硬盘的第一个扇区,也就是0号扇区。这个扇区只有512字节,却承载着整个硬盘的"户口本"。
MBR的结构是这样的:
| 偏移地址 | 长度 | 内容 |
|---|---|---|
| 0x000 - 0x1BD | 446字节 | 引导代码(Boot Code) |
| 0x1BE - 0x1FD | 64字节 | 分区表(4个分区项,每项16字节) |
| 0x1FE - 0x1FF | 2字节 | 魔数 0x55AA(结束标志) |
看到没?分区表只有64字节,每个分区项占16字节,所以最多只能记录4个分区。这就是MBR最大的限制——最多4个主分区。
每个分区项16字节的结构是这样的:
字节0:引导标志(0x80表示可引导)
字节1-3:起始CHS地址
字节4:分区类型(0x07=NTFS, 0x83=Linux ext, 0x0C=FAT32等)
字节5-7:结束CHS地址
字节8-11:起始LBA地址(4字节,小端序)
字节12-15:分区大小(4字节,扇区数)
这里有个坑,我必须要说。CHS地址是早期硬盘的寻址方式,现在基本都用LBA了。但MBR结构里还保留着CHS字段。我曾经遇到过一块老硬盘,CHS值写错了,导致系统死活认不出分区——折腾了我一整天。
1.3 主分区与扩展分区
MBR只能有4个分区项,那我想分5个区怎么办?这时候就需要扩展分区了。
简单来说:
- 主分区:可以直接使用的分区,最多4个。可以安装操作系统。
- 扩展分区:不能直接使用,它是一个"容器",里面可以再划分逻辑分区。
- 逻辑分区:在扩展分区内部划分出来的分区,数量不限。
举个例子:
硬盘500GB
├── 主分区1: 100GB (C盘,装系统)
├── 主分区2: 100GB (D盘,数据)
├── 扩展分区: 300GB
│ ├── 逻辑分区1: 100GB (E盘)
│ ├── 逻辑分区2: 100GB (F盘)
│ └── 逻辑分区3: 100GB (G盘)
└── 主分区3: 0GB (未使用)
你看,这里用了3个主分区+1个扩展分区。扩展分区里又分了3个逻辑分区。总共7个"盘符",但MBR分区表里只占用了4个条目。
我的经验:建议最多用2个主分区,留1个给扩展分区。这样灵活性最大。我曾经见过有人把4个主分区全用了,后来想加个新分区,只能删掉一个——数据迁移那叫一个痛苦。
1.4 分区对齐基础概念
分区对齐,这个词听起来高大上,其实说白了就是:让分区的起始位置落在物理扇区的边界上。
为什么需要对齐?因为现代硬盘的物理扇区是4KB(4096字节),但操作系统一直用512字节的逻辑扇区。如果分区起始位置不是4KB的整数倍,读写一个4KB的物理扇区,就需要操作两个逻辑扇区——性能直接打对折。
我画个图帮你理解:
你看上面这张图。未对齐的情况下,分区起始位置在物理扇区0的中间。读写这个分区时,每次都要操作两个物理扇区——性能损失至少50%。
对齐就简单了,分区起始位置正好在物理扇区的边界上。读写一个扇区,就只操作一个物理扇区,干净利落。
注意:现在的主流操作系统(Windows 7以上、Linux 2.6以上)默认都会自动对齐。但如果你用老版本的fdisk或者某些第三方分区工具,可能会创建未对齐的分区。我曾经在维护一台老服务器时,发现磁盘性能只有正常的一半,查了半天才发现是分区没对齐——重新分区后性能直接翻倍。
1.5 分区对齐的实践建议
怎么检查分区是否对齐?很简单:
# Linux下查看分区起始扇区
sudo fdisk -l /dev/sda
# 输出示例
Device Boot Start End Sectors Size Id Type
/dev/sda1 * 2048 1026047 1024000 500M 83 Linux
/dev/sda2 1026048 976773167 975747120 465.3G 83 Linux
# 关键看Start列,2048是8的倍数(2048 * 512 = 1MB),说明对齐了
在Windows下,可以用msinfo32或者diskpart查看:
diskpart
list disk
select disk 0
list partition
我个人习惯,创建分区时起始扇区设置为2048(即1MB对齐)。这个值兼容性最好,不管是512字节扇区还是4KB扇区,都能完美对齐。
小技巧:如果你用fdisk创建分区,记得用-c -u参数(柱面模式关闭,扇区模式开启),这样能精确控制起始扇区。我刚开始用Linux时不知道这个参数,结果分区总是对不齐——后来查了文档才明白。
好了,这一节的内容就到这里。分区概念、MBR结构、主分区与扩展分区、分区对齐,这四个知识点是后续所有分区操作的基础。你把这些搞懂了,后面学GPT、UEFI、LVM什么的,就会轻松很多。