Linux 硬盘分区管理

一、分区的核心目的

  • 隔离系统文件与用户文件,避免系统盘被占满。
  • 限制空间使用,提升诊断和备份效率。
  • 单个分区损坏不影响其他分区数据。
  • 支持创建交换分区,定制专属文件系统。

二、两种分区方案对比

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:查看分区表(最常用选项)。
代码解析(交互式操作)
  1. 查看分区表

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  # 不保存退出
  1. 创建分区

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  # 通知内核更新分区表(未生效时执行)
  1. 删除分区

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  # 保存退出
  1. 非交互方式(脚本化操作)

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分区表
代码解析
  1. 转换 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确认覆盖)
  1. 创建 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  # 保存退出
  1. 修改分区名称与删除

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 [分区号]:删除分区。
代码解析
  1. 交互式管理 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操作即时生效,无需保存)
  1. 非交互管理 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 填充所有扇区)。
  • 物理擦除:通过专业消磁设备处理(适用于敏感数据场景)
相关推荐
腻害兔8 小时前
【若依项目-产品经理视角】深度拆解 RuoYi-Vue-Pro 商城模块:从商品管理到交易引擎,50 张表撑起一整套电商系统
java·大数据·vue.js·产品经理·ai编程
Yana.nice9 小时前
Linux 只保留 30 天内日志(find命令删除日志文件)
linux·运维·chrome
码智社9 小时前
AES加密原理详解及Java实现加解密实战
java·开发语言
萧瑟余晖10 小时前
JDK 26 新特性详解
java·开发语言
马优晨10 小时前
Freemarker 完整讲解(后端 Java 模板引擎)
java·开发语言·freemarker·freemarker 完整讲解·freemarker模板引擎
andxe11 小时前
安科士 AndXe 技术博客:400G QSFP112 SR4 光模块|AI 算力与超算短距互联最优方案
网络·人工智能·光模块·光通信
shiyi.十一12 小时前
第2章:应用层 — 知识要点与架构
网络·计算机网络·架构
DFT计算杂谈12 小时前
无 Root 权限在 Tesla K80 零门槛部署 DeepSeek 大模型
linux·服务器·网络·数据库·机器学习
水境传感 李兆栋12 小时前
GNSS 位移监测站 :毫米级感知,筑牢安全监测防线
网络
维天说13 小时前
CLI-Switch 2026年3月版历史设计:Hook、TTY 隔离与 JSON 状态
java·服务器·json