Linux硬盘分区
一、 核心概念与工具
1.1 启动模式检测:UEFI vs BIOS
在开始分区前,需确定系统的启动模式,这将决定分区表类型。
1 | # 检查是否为 UEFI 启动 |
- 目录存在:系统以 UEFI 模式启动,必须使用 GPT 分区表。
- 目录不存在:系统以传统 BIOS/CSM 模式启动,通常使用 MBR 分区表。
1.2 分区工具选择
fdisk:传统工具,简单易用,但不支持 GPT 分区表,无法处理大于 2TB 的磁盘。1
2fdisk -l # 查看所有分区
# 常用交互命令:p(显示), n(新建), d(删除), t(改类型), w(写入), q(退出)parted:功能强大的现代化工具,支持 GPT 和 MBR,可处理任意大小的磁盘,支持脚本化。
1.3 parted 命令详解
基本语法:parted [选项] <设备> [命令]
- 常用选项:
-l:列出所有设备的分区信息。-s:脚本模式,不提示用户。-i:交互模式(默认)。
交互模式常用命令:
| 命令 | 说明 |
|---|---|
print |
打印当前磁盘的分区表。 |
mklabel <类型> |
创建新的磁盘标签(分区表),如 gpt 或 msdos (MBR)。 |
mkpart <类型> [文件系统] 起点 终点 |
创建分区。类型:primary(主), extended(扩展), logical(逻辑)。 |
rm <分区号> |
删除指定编号的分区。 |
set <分区号> <标志> on/off |
设置分区标志,如 boot, lvm。 |
unit <单位> |
设置显示单位,如 GB, MB, s(扇区), %(百分比)。 |
quit |
退出。 |
示例:创建 GPT 分区表并分区
1 | parted /dev/sda |
1.4 GPT 分区表简介
对于 UEFI 系统或大容量磁盘(>2TB),推荐使用 **GPT (GUID Partition Table)**。
- 优点:
- 支持超过 2TB 的磁盘。
- 最多支持 128 个主分区。
- 包含冗余的备份分区表,更健壮。
- 使用全局唯一标识符 (GUID)。
- 结构:包含一个保护性 MBR (LBA 0)、GPT 头 (LBA 1) 和分区表项 (LBA 2-33)。备份结构位于磁盘末尾。
二、 实战分区流程(以 Arch Linux 安装为例)
2.1 环境检查与规划
- 检查启动模式(见 1.1)。
- 规划分区方案(示例):
| 挂载点 | 设备 | 大小 | 文件系统 | 说明 |
|---|---|---|---|---|
/boot/efi (UEFI) 或 /boot (BIOS) |
/dev/sda1 |
512 MiB | FAT32 | EFI 系统分区 (ESP) 或 BIOS 启动分区。 |
[SWAP] |
/dev/sda2 |
8 GiB | swap | 交换空间。 |
/ |
/dev/sda3 |
200 GiB | ext4 | 根分区。 |
/home |
/dev/sda4 |
剩余空间 | ext4 | 用户家目录。 |
2.2 执行分区操作
使用 parted 或 fdisk 按规划创建分区。以下是 parted 的 UEFI+GPT 方案示例:
1 | parted /dev/sda |
2.3 格式化分区
1 | # UEFI: 格式化 ESP 分区为 FAT32 |
2.4 挂载分区
1 | # 挂载根分区 |
2.5 生成引导(GRUB 示例)
- BIOS 系统:
1
2
3pacman -S grub os-prober
grub-install --target=i386-pc --recheck /dev/sda # 注意是磁盘 (sda),不是分区 (sda1)
grub-mkconfig -o /boot/grub/grub.cfg - UEFI 系统:
1
2
3pacman -S grub efibootmgr
grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=GRUB
grub-mkconfig -o /boot/grub/grub.cfg
三、 高级案例与脚本
3.1 故障处理:坏盘更换与重建
案例:在 RAID 卡(如 MegaRAID)环境下更换故障硬盘并重建。
1 | # 1. 清除控制器上保留的缓存(如果之前有虚拟磁盘丢失) |
之后,对新磁盘 (/dev/sdk) 进行分区、格式化、更新 /etc/fstab 并挂载。
注意:如果 mount -a 失败,尝试执行 systemctl daemon-reload 后重试。
3.2 自动化分区脚本
以下脚本用于将单块磁盘快速分区为单个 GPT 分区并格式化为 ext4。
1 |
|
使用方式:sh fenqu.sh /dev/sdb
3.3 批量分区与挂载
在多磁盘环境中(如 Hadoop 数据节点),可以结合循环和 blkid 实现批量操作。
1 | # 1. 批量分区格式化(排除系统盘 sda 和特定盘 sdb) |
四、 关键注意事项与技巧
- 分区对齐:使用
parted时,建议起点从1MiB(2048扇区) 开始,以获得最佳性能,避免“未对齐”警告。 - 谨慎操作:
parted命令在交互模式下立即生效,没有类似fdisk的“写入”确认步骤。删除或格式化前务必确认设备名。 - 低格填零:如需彻底清空磁盘(如安全擦除),可使用
dd,但极其耗时且伤盘。1
dd if=/dev/zero of=/dev/sda bs=16M status=progress
- 文件系统选择:
ext4:稳定、兼容性好,通用选择。xfs:擅长处理大文件和高并发,适合数据存储。btrfs:支持快照、压缩等高级特性,但相对年轻。
- **
/etc/fstab**:使用UUID=而非/dev/sdX来标识分区,避免设备名变化导致启动失败。使用blkid命令获取 UUID。