一、分区的核心目的
- 隔离系统文件与用户文件,避免系统盘被占满。
- 限制空间使用,提升诊断和备份效率。
- 单个分区损坏不影响其他分区数据。
- 支持创建交换分区,定制专属文件系统。
二、两种分区方案对比
2.1 MBR 分区方案(传统 BIOS 系统)
- 最大支持 2TiB 磁盘 / 分区,最多 4 个主分区(可通过扩展分区扩展至 15 个)。
- 逻辑分区可格式化,扩展分区不可格式化。
- 主引导扇区包含引导程序(446 字节)、分区表(64 字节)、结束标志(2 字节)。
2.2 GPT 分区方案(UEFI 系统)
- 最大支持 8ZiB 磁盘 / 分区,最多 128 个分区(实际建议不超过 120 个)。
- 提供分区表冗余备份,自带 CRC32 校验码,稳定性更高。
- 包含保护性 MBR,兼容老版本磁盘管理工具。
三、核心工具语法与代码全解析
3.1 fdisk 工具(MBR 分区专属)
语法格式
bash
fdisk [options] <disk> # 管理分区表
fdisk [options] -l <disk> # 查看分区表
fdisk -s <partition> # 查看分区大小(块单位)
关键选项
-b <size>:指定扇区大小(512/1024/2048/4096)。-u [=unit]:显示单位(柱面 cylinders / 扇区 sectors)。-l:查看分区表(最常用选项)。
代码解析(交互式操作)
- 查看分区表
bash
[root@centos7 ~]# fdisk -l /dev/sdb # 方法1:直接查看指定磁盘
# 输出解读:显示磁盘容量、扇区大小、分区表类型(dos=MBR)、分区详情
Disk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Disk label type: dos # 确认是MBR方案
/dev/sdb1 2048 41943039 20970496 83 Linux # 分区1:起始扇区/结束扇区/大小/类型
[root@centos7 ~]# fdisk /dev/sdb # 方法2:进入交互式管理
Command (m for help): m # 查看帮助
Command (m for help): p # 打印分区表(同fdisk -l效果)
Command (m for help): q # 不保存退出
- 创建分区
bash
[root@centos7 ~]# fdisk /dev/sdb
Command (m for help): n # 新建分区
Partition type: p(primary)/e(extended) # 选择分区类型,默认p(主分区)
Partition number (1-4, default 1): # 回车用默认分区号1
First sector (2048-41943039, default 2048): # 回车用默认起始扇区(1M位置)
Last sector, +sectors or +size{K,M,G}:+2G # 指定分区大小为2G
Command (m for help): p # 验证分区创建结果
Command (m for help): w # 保存更改并退出(q为不保存退出)
[root@centos7 ~]# partprobe # 通知内核更新分区表(未生效时执行)
- 删除分区
bash
[root@centos7 ~]# fdisk /dev/sdb
Command (m for help): p # 先查看分区表,确认要删除的分区号
Command (m for help): d # 执行删除
Selected partition 1 # 自动选中唯一分区(多分区需输入分区号)
Command (m for help): p # 验证分区已删除
Command (m for help): w # 保存退出
- 非交互方式(脚本化操作)
bash
# 1. 创建分区脚本
[root@centos7 ~]# vim fdisk-create.txt
n # 新建分区
p # 主分区
1 # 分区号
2048 # 起始扇区
+2G # 分区大小
p # 验证
w # 保存
# 执行脚本:fdisk /dev/sdb < fdisk-create.txt
# 2. 删除分区脚本
[root@centos7 ~]# vim fdisk-delete.txt
d # 删除分区
p # 验证
w # 保存
# 执行脚本:fdisk /dev/sdb < fdisk-delete.txt
3.2 gdisk 工具(GPT 分区专属)
语法格式
bash
gdisk [ -l ] device # 查看或管理GPT分区表
代码解析
- 转换 MBR 为 GPT 分区表
bash
[root@centos7 ~]# gdisk /dev/sdb
Command (? for help): o # 创建新GPT分区表(会删除原有分区)
Proceed? (Y/N): Y # 确认转换
Command (? for help): p # 验证分区表已改为GPT
Command (? for help): w # 保存退出(Y确认覆盖)
- 创建 GPT 分区
bash
[root@centos7 ~]# gdisk /dev/sdb
Command (? for help): n # 新建分区
Partition number (1-128, default 1): # 回车用默认分区号
First sector (34-41943006, default=2048): # 回车用默认起始扇区
Last sector or +size{KMGTP}: +2G # 分区大小2G
Hex code or GUID (L to show codes, Enter=8300): # 回车用默认类型(Linux filesystem)
Command (? for help): p # 验证分区
Command (? for help): w # 保存退出
- 修改分区名称与删除
bash
[root@centos7 ~]# gdisk /dev/sdb
Command (? for help): c # 修改分区名称
Using 1 # 选择分区1
Enter name: data01 # 新名称
Command (? for help): i # 查看分区详细信息(验证名称)
Command (? for help): d # 删除分区
Using 1 # 选择分区1
Command (? for help): w # 保存退出
3.3 wipefs 工具(清除分区表)
语法与代码
bash
[root@centos7 ~]# wipefs -a /dev/sdb # 安全清除分区表(需先卸载)
# 警告:-f选项为强制清除,可能损坏数据,禁止随意使用
3.4 parted 工具(MBR/GPT 通用)
核心语法(支持交互与非交互)
bash
parted [device] [command] # 非交互模式
parted /dev/sdb # 交互模式
关键命令
mklabel [msdos/gpt]:设置分区方案(msdos=MBR)。unit [MiB/GB]:设置单位(推荐 MiB,避免换算误差)。mkpart:创建分区。resizepart:调整分区大小。rm [分区号]:删除分区。
代码解析
- 交互式管理 MBR 分区
bash
[root@centos7 ~]# parted /dev/sdb
(parted) mklabel msdos # 设置为MBR方案(Y确认删除原有数据)
(parted) unit MiB # 单位设为MiB
(parted) mkpart # 新建分区
Partition type? primary/extended? primary # 主分区
File system type? [ext2]? xfs # 指定文件系统(实际需后续格式化)
Start? 1 # 起始位置1MiB
End? 2049 # 结束位置2049MiB(分区大小2048MiB=2G)
(parted) print # 验证分区
(parted) resizepart 1 4097 # 扩展分区1至4097MiB(4G)
(parted) rm 1 # 删除分区1
(parted) quit # 退出(parted操作即时生效,无需保存)
- 非交互管理 GPT 分区
bash
# 1. 设置GPT方案
[root@centos7 ~]# parted /dev/sdb mklabel gpt # Y确认
# 2. 创建2G分区(名称data01,文件系统xfs)
[root@centos7 ~]# parted /dev/sdb unit MiB mkpart data01 xfs 1 2049
# 3. 扩展分区至5G
[root@centos7 ~]# parted /dev/sdb unit MiB resizepart 1 5121
# 4. 删除分区
[root@centos7 ~]# parted /dev/sdb rm 1
四、文件系统格式化与持久化挂载
4.1 格式化分区(必须步骤)
bash
[root@centos7 ~]# mkfs.xfs /dev/sdb1 # 格式化为xfs文件系统
[root@centos7 ~]# mkfs.xfs -f /dev/sdb1 # 强制格式化(已有文件系统时使用)
[root@centos7 ~]# mkfs.ext4 /dev/sdb2 # 格式化为ext4文件系统
4.2 持久化挂载(重启不失效)
核心原理:修改 /etc/fstab 文件(6 个字段)
| 字段 1(设备) | 字段 2(挂载点) | 字段 3(文件系统) | 字段 4(挂载选项) | 字段 5(dump 备份) | 字段 6(fsck 检查) |
|---|---|---|---|---|---|
| UUID / 设备路径 | 自定义目录 | xfs/ext4 等 | defaults(默认) | 0(不备份) | 0(xfs 不检查) |
代码解析
bash
# 1. 获取分区UUID(更稳定,推荐使用)
[root@centos7 ~]# blkid /dev/sdb1
/dev/sdb1: UUID="f5c35f10-0274-45af-b044-73694989fe01" TYPE="xfs"
# 2. 创建挂载点目录
[root@centos7 ~]# mkdir /data01
# 3. 编辑/etc/fstab
[root@centos7 ~]# vim /etc/fstab
# 添加以下行(字段用空格分隔)
UUID="f5c35f10-0274-45af-b044-73694989fe01" /data01 xfs defaults 0 0
# 4. 立即挂载(无需重启)
[root@centos7 ~]# mount /data01 # 或mount /dev/sdb1
# 5. 验证挂载
[root@centos7 ~]# df -h /data01 # 查看挂载状态和空间使用
# 6. 取消持久化挂载:删除/etc/fstab中对应行即可
五、综合案例:文件系统空间不足解决
5.1 大文件占用空间
bash
# 1. 查找大于100M的文件
[root@centos7 ~]# find /myapp-1/ -size +100M
# 2. 按大小排序查找
[root@centos7 ~]# du -s /myapp-1/* | sort -n | tail -2
# 3. 删除大文件
[root@centos7 ~]# rm -f /myapp-1/etc/bigfile
5.2 删除文件后空间未释放
bash
# 1. 查找占用已删除文件的进程
[root@centos7 ~]# lsof | grep delete | grep /myapp-1
# 2. 终止进程(PID为进程号)
[root@centos7 ~]# kill 1654
# 建议:先清空文件内容再删除:> /myapp-1/etc/bigfile && rm -f 该文件
5.3 大量小文件占用 inode
bash
# 1. 查看inode使用情况
[root@centos7 ~]# df -hi /myapp-2
# 2. 解决方法1:删除小文件
[root@centos7 ~]# rm -f /myapp-2/file-0*
# 3. 解决方法2:合并小文件
[root@centos7 ~]# cat /myapp-2/file-{00001..10000} > /backup/all-files
六、硬盘数据彻底擦除
- 逻辑擦除:
dd if=/dev/zero of=/dev/sdb(用 0 填充所有扇区)。 - 物理擦除:通过专业消磁设备处理(适用于敏感数据场景)