硬盘分区艺术
安装器里的 /dev/nvme0n1p2、ext4、/home 经常挤在同一个界面里,看起来像一回事;其实它们分别属于设备、分区、文件系统和目录四层。先把这四层拆开,你才不会把“选择挂载点”误解成“给分区改标签”。
- 适合你:准备安装 Linux、规划新磁盘或想读懂
lsblk的读者。 - 读完能做到:区分整盘与分区;解释 GPT/MBR 结构、ESP 与 BIOS Boot Partition;按用途设计基础布局。
- 前置与安全条件:会使用终端。观察命令可在任意 Linux 运行;分区练习只能使用新建、可丢弃、没有数据的虚拟机附加盘,并先创建虚拟机快照。
- 适用范围:截至 2026-07,重点讨论常见 PC 本地块设备;硬件 RAID、SAN、ZFS、LVM/LUKS 仅提示层次,不在本篇展开。
- 预计用时:阅读 20 分钟;虚拟盘练习约 25 分钟。
- 完成证据:一张四层映射表,以及一次性虚拟盘修改前后的分区表转储。
1. 先建立四层模型
块设备(整盘) → 分区 → 文件系统 → 挂载点
/dev/nvme0n1 → p2 → ext4 → /- 块设备:内核提供的按块读写对象,例如整块 SATA 盘、NVMe 盘、虚拟盘或逻辑卷。
- 分区:分区表描述的整盘地址范围。分区本身还不是“可保存文件的文件夹”。
- 文件系统:把块空间组织成目录、文件和元数据的格式,例如 ext4、Btrfs、XFS 或 FAT。
- 挂载点:现有 Linux 目录树中的目录。挂载后,访问该目录会进入对应文件系统。
这个模型也有扩展:LUKS、软件 RAID、LVM 可以插在块设备与文件系统之间;Btrfs 子卷不是普通磁盘分区。下一篇会继续解释文件系统与挂载,本篇只负责物理/虚拟磁盘的分区边界。
2. 先认盘,不要先打开分区工具
不同总线的名称不同:SATA/SCSI 风格常见 /dev/sda,NVMe 常见 /dev/nvme0n1,虚拟机还可能出现 /dev/vda。字母与编号受探测顺序影响,不能从教程截图猜出自己的目标。
先只读列出整盘的容量、型号、序列号和连接方式:
lsblk -d -o NAME,PATH,SIZE,MODEL,SERIAL,TRAN,TYPE再展开分区、文件系统与挂载关系:
lsblk -o NAME,PATH,SIZE,TYPE,FSTYPE,FSVER,PTTYPE,PARTTYPENAME,MOUNTPOINTS
findmnt --real
sudo fdisk --list识别目标时至少同时核对:
TYPE=disk还是TYPE=part;- 容量是否与预期一致;
- 型号/序列号或虚拟机磁盘槽位;
- 是否有已挂载子分区;
- 是否承载当前
/、/home、/boot或 Swap。
只要目标盘包含当前根文件系统、重要数据、无法解释的分区,或容量/型号与预期有任何冲突,就不要进入写入模式。先备份数据并请另一个人复核目标。分区表备份不能代替文件级数据备份。
3. MBR 与 GPT 到底保存什么
分区表只是“哪些逻辑块属于哪个分区”的元数据,不会创建 ext4,也不会自动决定挂载点。
3.1 MBR:历史 PC 布局
经典 MBR 把启动代码、磁盘签名和 4 个分区项放在 LBA 0 的 512 字节扇区。传统工具把分区分为:
- 最多 4 个主分区表项;
- 可让其中一个成为扩展分区;
- 扩展分区内部再用链式记录描述多个逻辑分区。
当逻辑扇区为 512 字节且使用 32 位 LBA 时,常见可寻址上限约为 2 TiB。4Kn 等扇区尺寸会改变数值,但兼容性仍使 MBR 不适合作为现代大盘的首选。
3.2 GPT:带标识、校验与备份
GPT(GUID Partition Table)常见结构如下:
LBA 0:保护性 MBR
LBA 1:主 GPT Header(含自身与分区项数组的 CRC)
后续:主分区项数组
中间:各分区数据区域
磁盘末尾:备份分区项数组 + 备份 GPT Header保护性 MBR 用来提醒只认识 MBR 的旧工具“这块盘已被占用”。主、备 Header 和 CRC 能发现部分元数据损坏,但不是数据备份,也不保证损坏一定能自动恢复。GPT 规范允许大量分区;常见工具默认创建 128 个分区项,但这不是 GPT 对所有实现强制的固定上限。
| 选择 | 更适合 | 需要注意 |
|---|---|---|
| GPT | 现代 UEFI 安装、大容量磁盘、新系统 | 旧固件/旧工具兼容性需单独确认 |
| MBR | 必须兼容旧式 BIOS 与旧工具的既有系统 | 传统分区项与容量边界更紧,元数据冗余较弱 |
BIOS 可以配 GPT,UEFI 也不能简单等同于“只认 GPT”。在现代 PC 新装系统时选择 UEFI + GPT 是兼容性建议;固件路径与分区表的详细边界见 BIOS/UEFI 系统详解。
4. 启动相关的特殊分区
EFI System Partition(ESP)
ESP 带有专用分区类型标识,PC 上通常格式化为 FAT32,用于保存 UEFI 可执行文件。它可能挂载到 /boot/efi、/efi 或 /boot;挂载点不是 ESP 身份本身。
新装系统常为 ESP 预留约 512 MiB–1 GiB,足以容纳多个常见加载器;若内核和 initramfs 也放入 ESP,实际需求会更高。双系统机器已有 ESP 时,通常复用并保留其中所有厂商目录,不要格式化。先用 lsblk、findmnt 和分区类型确认。
BIOS Boot Partition
这是 GRUB 在 Legacy BIOS + GPT 场景可能需要的小分区,用于嵌入 core image。它没有普通文件系统,也不挂载为 /boot。不要把它与 ESP、单独的 /boot 文件系统混淆。
5. 按场景规划,而不是套容量公式
| 场景 | 可作为起点的布局 | 主要取舍 |
|---|---|---|
| 学习虚拟机 | ESP(UEFI 时)+ 单一 /;Swap 文件或发行版默认方案 | 简单、易快照;不必为练习切太多分区 |
| 普通桌面/笔记本 | ESP + /;按重装、配额、备份需求决定是否独立 /home | 单文件系统共享空间最灵活;独立 /home 隔离容量但也会固定边界 |
| 需要休眠的笔记本 | 在上述基础上为可用的 Swap 方案留足空间 | 需求取决于休眠时实际内存占用、压缩和实现,不应只套“内存 1–2 倍” |
| 快照型 Btrfs 桌面 | ESP + Btrfs 文件系统,以子卷分离 /、/home | 子卷共享容量,不等于分区;快照不等于异机备份 |
| 服务器/容器主机 | 按日志、数据库、容器数据与恢复策略划分文件系统或逻辑卷 | 容量隔离可限制故障范围,但扩容和监控更复杂 |
数字只能由工作负载决定。作为教学估算,轻量桌面根文件系统可以从 40–80 GiB 量级开始评估;大型 SDK、游戏、容器镜像或本地模型会迅速突破它。先列出软件、增长速度、快照保留和至少 15%–20% 的运行余量,再定最终大小。
独立 /home 不会保证重装零丢失:安装时仍可能选错格式化目标;用户 UID、旧配置与新版本应用也可能冲突。它只提供布局隔离,外部备份仍是必要条件。
6. 一次性虚拟盘分区练习
本节会重写目标盘分区表,目标盘上的分区和数据可能全部不可用。只允许使用虚拟机中新建的空白附加盘:先关机添加一块约 4 GiB 的新虚拟盘,创建快照,再启动。不要把宿主机磁盘、USB 备份盘或虚拟机系统盘传入练习。
6.1 探测并记录修改前状态
lsblk -d -o NAME,PATH,SIZE,MODEL,SERIAL,TRAN,TYPE
lsblk -o NAME,PATH,SIZE,TYPE,FSTYPE,PTTYPE,MOUNTPOINTS根据“新增容量 + 型号/槽位 + 没有挂载子分区”三项识别目标,再把占位符替换为真实整盘路径:
disk="/dev/<一次性虚拟整盘>"
lsblk -o NAME,PATH,SIZE,TYPE,FSTYPE,PTTYPE,MOUNTPOINTS "$disk"
sudo wipefs --no-act "$disk"
sudo sfdisk --dump "$disk" | tee "$HOME/partition-table-before.txt"wipefs --no-act 只探测签名,不擦除。全新空盘上的 sfdisk 子进程可能报告没有可识别分区表;这就是“修改前为空”的证据,不要为了消除报错选择别的盘。由于输出经过 tee,应以屏幕消息和保存文件为准,不要用整条管道的退出码判断空盘状态。
6.2 创建 GPT 与两个分区
再次确认 disk 不是系统盘,然后才启动交互工具:
sudo cfdisk "$disk"在界面中选择 gpt,创建一个约 1 GiB 分区和一个使用剩余空间的分区,检查列表后选择 Write 并输入确认文本,最后 Quit。cfdisk 的最终写入会改变分区表;在按 Write 之前仍可退出而不提交。
本篇不格式化、不挂载这两个分区:那属于下一篇的文件系统操作。
6.3 验证结果
lsblk -o NAME,PATH,SIZE,TYPE,FSTYPE,PTTYPE,PARTTYPENAME,MOUNTPOINTS "$disk"
sudo sfdisk --dump "$disk" | tee "$HOME/partition-table-after.txt"成功证据是整盘显示 PTTYPE=gpt,出现两个 TYPE=part 的子项,且 FSTYPE 仍为空。若目标没有变化,先记录 cfdisk 的退出信息;若出现意外文件系统或挂载点,立即停止,不要再次写入。
6.4 回滚
关闭虚拟机并恢复练习前快照,然后重新运行 lsblk,确认新增盘回到初始状态或被快照移除。恢复快照是本练习的可靠回滚;不要用 wipefs 冒充“恢复原数据”,它只能删除签名,不能还原内容。
7. 常见故障与下一步
| 症状 | 可能原因 | 只读诊断 | 下一步决策 |
|---|---|---|---|
| 无法判断哪块是新盘 | 名称随探测顺序变化、型号相似 | lsblk -d -o PATH,SIZE,MODEL,SERIAL,TRAN,对照虚拟机/硬件管理界面 | 无法唯一确认就停止,不启动写入工具 |
| 分区工具提示 device busy | 子分区已挂载、被用作 Swap/LVM/RAID | findmnt --source /dev/<分区>、swapon --show、lsblk | 查清使用者;系统盘或重要卷不要在线改分区 |
| 写入后内核仍显示旧分区 | 设备正在使用,内核无法重读表 | lsblk、journalctl -k -n 50 | 不重复写表;在可中断的测试环境卸载后重启再看 |
| UEFI 安装器说没有 ESP | 分区类型错误、未使用 FAT,或安装介质从 Legacy 启动 | lsblk 查看类型/文件系统,检查 /sys/firmware/efi | 先确认启动模式和真实 ESP,避免格式化已有 ESP |
| GPT 工具报告主/备 Header 不一致 | 磁盘克隆/扩容或元数据损坏 | sudo fdisk --list /dev/<整盘> 保存完整输出 | 停止改写;重要数据先做只读备份,再按专业恢复流程处理 |
8. 小结与下一站
你现在能沿着“块设备 → 分区 → 文件系统 → 挂载点”解释磁盘布局,能安全识别整盘,也知道 GPT/MBR 与 UEFI/BIOS 不是简单一一绑定。下一篇 文件系统基础 会从空分区继续讲格式、VFS、手动挂载与 /etc/fstab。
官方参考
- UEFI Specification 2.11:GPT Disk Layout
- GNU Parted Manual
- util-linux:sfdisk manual
- RHEL 10:Overview of available storage options