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 填充所有扇区)。
  • 物理擦除:通过专业消磁设备处理(适用于敏感数据场景)
相关推荐
apple-mapping1 小时前
电脑有连接网络,但浏览器网页无法打开
网络
量子炒饭大师1 小时前
【一天一个计算机知识】—— 【编程百度】预处理指令
java·开发语言
q***51892 小时前
Spring Boot 条件注解:@ConditionalOnProperty 完全解析
java·spring boot·后端
任子菲阳2 小时前
学Java第四十四天——Map实现类的源码解析
java·开发语言
听风吟丶2 小时前
Java 11+ HttpClient 实战:从 HttpURLConnection 到现代 HTTP 客户端的全面升级
java·开发语言·http
Felix_XXXXL2 小时前
集成RabbitMQ+MQ常用操作
java·后端
hygge9992 小时前
JVM GC 垃圾回收体系完整讲解
java·开发语言·jvm·经验分享·面试
小草cys2 小时前
【解决】华为欧拉系统上遇到能 ping 通 IP 地址(如 8.8.8.8)但无法 ping 通域名(如 www.baidu.com)的情况
网络·网络协议·tcp/ip