Linux 存储管理实战:从 GPT 分区到 LVM 逻辑卷缩减

课堂笔记整理 | 涵盖 GPT 分区、RAID 存储、LVM 逻辑卷管理及文件系统扩缩容


目录


一、GPT 分区管理

1.1 GPT 分区方案

GPT(GUID Partition Table)是运行在 UEFI 固件系统上硬盘分区表的标准。

特性 MBR GPT
最大容量 2 TiB 18 ZiB
最大分区数 15 128
分区表冗余

GPT 分区表结构:

  • LBA0:保护性 MBR,存放第一阶段启动引导程序,标识 0xEE 表示 GPT 格式
  • LBA1:GPT 表头记录,记录分区表位置、大小、CRC32 校验码及备份位置
  • LBA2-33:记录分区信息,每 LBA 提供 4 组分区记录,默认共 128 组

⚠️ 注意:虽然 GPT 最大支持 128 个分区,但实际超过第 120 个可能出现无法格式化的情况。

1.2 gdisk 工具

gdisk 用于管理 GPT 分区方案的磁盘,主要用于超过 2T 的磁盘。

基本语法:

gdisk [ -l ] device

常用操作流程:

# 查看分区表
gdisk -l /dev/sdb

# 交互式管理
gdisk /dev/sdb

交互命令:

命令 功能
o 创建新的空 GPT 分区表
n 添加新分区
d 删除分区
c 更改分区名称
i 显示分区详细信息
p 打印分区表
w 保存并退出
q 不保存退出

创建分区示例:

gdisk /dev/sdb
# n → 回车(分区号) → 回车(起始扇区) → +2G(大小) → 回车(默认8300)
# c → 1 → data01 (修改分区名)
# p (查看)
# w → Y (保存)

1.3 wipefs 工具

用于查看和清除磁盘管理信息。

# 查看磁盘管理信息
wipefs /dev/sdb

# 清除未挂载磁盘的分区表
wipefs -a /dev/sdb

# 强制清除(谨慎使用)
wipefs -fa /dev/sdb

⚠️ 数据无价,操作需谨慎,最好提前备份。

1.4 parted 工具

parted 既可以管理 MBR 分区,也可以管理 GPT 分区,支持交互式非交互式操作。

交互式操作:

parted /dev/sdb

# 常用命令
(parted) help          # 查看帮助
(parted) print         # 查看分区表
(parted) unit MiB      # 设置单位为 MiB
(parted) mklabel msdos # 设置 MBR 分区表
(parted) mklabel gpt   # 设置 GPT 分区表
(parted) mkpart        # 创建分区
(parted) resizepart    # 调整分区大小
(parted) rm            # 删除分区

非交互式操作(推荐用于脚本):

# 设置 MBR 分区表
parted -s /dev/sdb mklabel msdos

# 创建主分区(MBR)
parted -s /dev/sdb unit MiB mkpart primary 1 2049

# 设置 GPT 分区表
parted -s /dev/sdb mklabel gpt

# 创建分区(GPT,带名称)
parted -s /dev/sdb unit MiB mkpart data01 xfs 1 2049

# 扩展分区
parted -s /dev/sdb unit MiB resizepart 1 5121

# 删除分区
parted -s /dev/sdb rm 1

# 查看分区表
parted -s /dev/sdb unit MiB print

二、文件系统持久化挂载

环境准备

parted -s /dev/sdb mklabel gpt
parted -s /dev/sdb unit MiB mkpart data01 xfs 1 2049
mkfs.xfs /dev/sdb1

/etc/fstab 配置

/etc/fstab 每行包含六个字段:

字段 说明
1 设备(UUID 或设备路径)
2 挂载点
3 文件系统类型(xfs/ext4)
4 挂载选项(defaults)
5 dump 备份标记
6 fsck 检查顺序(XFS 设为 0)

配置示例:

# 获取 UUID
blkid /dev/sdb1

# 编辑 /etc/fstab
vim /etc/fstab
# 添加:UUID="xxx" /data01 xfs defaults 0 0

# 立即挂载
mount /data01
# 或
mount /dev/sdb1

取消持久化挂载

删除 /etc/fstab 中对应条目即可。


三、综合案例:文件系统空间不足

情况1:大量大文件占用空间

# 查找大于 100M 的文件
find /myapp-1/ -size +100M

# 或按目录统计
du -sh /myapp-1/* | sort -n | tail -5

# 删除大文件
rm -f /myapp-1/etc/bigfile

情况2:删除文件后空间未释放

原因:被删除的文件仍有进程在使用。

# 查找被删除但仍被占用的文件
lsof | grep delete | grep /myapp-1

# 终止对应进程
kill <PID>

# 重新查看空间
 df -h /myapp-1/

💡 建议:清理大文件时,先使用重定向清空文件内容,再删除文件。

情况3:大量小文件耗尽 inode

原因:文件系统中 inode 使用完了。

# 查看 inode 使用情况
df -i /myapp-2

# 删除大量小文件
rm -f /myapp-2/file-0*

# 或合并为小文件
cat /myapp-2/file-{00001..10000} > file-00001

四、Linux RAID 存储技术

4.1 RAID 技术概述

RAID(Redundant Array of Independent Disks)独立磁盘冗余阵列,将多个磁盘有机组合,以较低成本获得与大容量磁盘相当的容量、性能和可靠性。

实现方式:

类型 特点 成本
软 RAID 由操作系统和 CPU 完成
硬 RAID 专用 RAID 控制芯片,不占用 CPU
软硬混合 RAID 有 RAID 控制芯片,但无 I/O 处理芯片

4.2 RAID 级别详解

RAID级别 最小磁盘数 容错能力 磁盘空间开销 读取速度 写入速度
RAID 0 2 0%
RAID 1 2 单个磁盘 50%
RAID 5 3 单个磁盘 1 / N
RAID 6 4 两个磁盘 2 / N
RAID 10 4 多个磁盘 50%
RAID 50 6 多个磁盘 1 / N
RAID 60 8 多个磁盘 50%
RAID 0(条带化)
  • 原理:数据条带化分散存储,无冗余
  • 优点:高性能、成本效益好
  • 缺点:无冗余,一块盘坏全部数据丢失
  • 适用:视频编辑、大型数据库、实时流媒体
RAID 1(镜像)
  • 原理:数据完全复制到多个磁盘
  • 优点:数据冗余、高可用性、读取性能提升
  • 缺点:成本高、写入性能略低
  • 适用:关键数据存储、数据库服务器、文件服务器
RAID 5(分布式校验)
  • 原理:数据条带化 + 分布式奇偶校验
  • 优点:性能增强、数据冗余、成本效益好
  • 缺点:写入性能受限、重构期间有数据完整性风险
  • 适用:文件服务器、数据库服务器、小型企业环境
RAID 6(双重校验)
  • 原理:数据条带化 + 双重奇偶校验
  • 优点:更高级别冗余,允许两块盘同时故障
  • 缺点:写入性能更低、成本更高
  • 适用:大容量存储、长时间运行应用、虚拟化环境
RAID 10(镜像+条带)
  • 原理:RAID 1 + RAID 0 的组合
  • 优点:高性能、数据冗余、可靠性高、故障恢复快
  • 缺点:成本高、空间利用率低(50%)
  • 适用:数据库服务器、虚拟化环境、关键业务应用

4.3 管理软 RAID

Linux 使用 mdadm 实用程序创建和管理软件 RAID。

管理 RAID 0
# 创建 RAID0(2块盘)
mdadm --create /dev/md0 --level 0 --raid-devices 2 /dev/sd{b,c}

# 查看 RAID 状态
cat /proc/mdstat
mdadm --detail /dev/md0

# 格式化挂载
mkfs.xfs /dev/md0
mkdir -p /raid/raid0
mount /dev/md0 /raid/raid0

# 删除 RAID
umount /dev/md0
mdadm --stop /dev/md0
mdadm --zero-superblock /dev/sd{b,c}

⚠️ RAID 0 不能增加新成员盘,也不能强制故障成员盘。

管理 RAID 1
# 创建 RAID1
mdadm --create /dev/md1 --level 1 --raid-devices 2 /dev/sd{b,c}
# 输入 yes 确认

# 等待同步完成(查看进度)
watch -n 1 cat /proc/mdstat

# 格式化挂载
mkfs.xfs /dev/md1
mkdir /raid/raid1
mount /dev/md1 /raid/raid1

# 增加热备盘
mdadm --add /dev/md1 /dev/sdd

# 模拟故障
mdadm --fail /dev/md1 /dev/sdc

# 查看状态(sdd 会自动顶替并重建)
mdadm --detail /dev/md1

# 移除故障盘
mdadm --remove /dev/md1 /dev/sdc

# 删除 RAID
umount /dev/md1
mdadm --stop /dev/md1
mdadm --zero-superblock /dev/sd{b..d}
管理 RAID 5
# 创建 RAID5(4块活动盘,3块数据+1块校验)
mdadm --create /dev/md5 --level 5 --raid-devices 4 /dev/sd{b..e}

# 等待构建完成
watch -n 1 cat /proc/mdstat

# 格式化挂载
mkfs.xfs /dev/md5
mkdir /raid/raid5
mount /dev/md5 /raid/raid5

# 增加热备盘
mdadm --add /dev/md5 /dev/sdf

# 模拟故障
mdadm --fail /dev/md5 /dev/sdb

# 移除故障盘
mdadm --remove /dev/md5 /dev/sdb

# RAID5 扩容(从4块扩到5块)
mdadm --add /dev/md5 /dev/sdb /dev/sdg
mdadm --grow /dev/md5 --raid-devices 5

# 等待 reshape 完成
watch -n 1 cat /proc/mdstat

# 扩容文件系统
xfs_growfs /raid/raid5

# 删除 RAID
umount /dev/md5
mdadm --stop /dev/md5
mdadm --zero-superblock /dev/sd{b..g}

# 重构 RAID(stop 后、zero-superblock 前)
mdadm --assemble /dev/md5 /dev/sd{b..g}

⚠️ RAID 5 只能在正常状态下扩容,降级及重构时不允许扩容。


五、Linux 逻辑卷管理(LVM)

5.1 LVM 基本概念

LVM(Logical Volume Manager)将若干个磁盘或分区连接为一个整块的卷组,形成存储池。

概念 英文 说明
物理卷 PV (Physical Volume) LVM 的基本存储逻辑块,通过块设备创建
卷组 VG (Volume Group) 逻辑的存储空间,由一个或多个 PV 组成
逻辑卷 LV (Logical Volume) 从 VG 中创建的逻辑空间,可类比为硬盘分区
物理扩展 PE (Physical Extend) PV 的最小存储单元,默认 4 MiB
逻辑扩展 LE (Logical Extend) LV 的最小存储单元,通常一个 LE 对应一个 PE

LVM 优点:

  • 灵活扩展和缩减文件系统空间
  • 文件系统可跨多个硬盘,适合超大容量
  • 支持镜像卷,保证数据冗余
  • 支持快照,保留某一时刻数据

管理流程:

物理卷(PV) → 卷组(VG) → 逻辑卷(LV) → 文件系统

5.2 创建物理卷、卷组、逻辑卷

创建物理卷
# 创建单个 PV
pvcreate /dev/sdb

# 创建多个 PV
pvcreate /dev/sd{c,d}

# 查看
pvs
pvdisplay /dev/sdb
创建卷组
# 创建包含单个 PV 的 VG
vgcreate webapp /dev/sdb

# 创建包含多个 PV 的 VG
vgcreate dbapp /dev/sd{c,d}

# 查看
vgs
vgdisplay dbapp
创建逻辑卷
# 在 webapp 中创建 5G 的逻辑卷
lvcreate -n webapp01 -L 5G webapp

# 在 dbapp 中创建跨硬盘的 25G 逻辑卷
lvcreate -n data01 -L 25G dbapp

# 查看
lvs
lvdisplay /dev/dbapp/data01

逻辑卷设备名格式:

  • /dev/vgname/lvname
  • /dev/mapper/vgname-lvname
  • /dev/dm-N
创建文件系统
mkfs.xfs /dev/webapp/webapp01
mkdir -p /usr/share/nginx/html
mount /dev/webapp/webapp01 /usr/share/nginx/html
清理
umount /dev/webapp/webapp01
lvremove /dev/webapp/webapp01 /dev/dbapp/data01
vgremove webapp dbapp
pvremove /dev/sd{b..d}

5.3 扩展和缩减卷组

扩展卷组
# 添加新 PV 到 VG
vgextend webapp /dev/sd{c,d}
缩减卷组
# 查看 PV 使用状态
pvs

# 将数据从 /dev/sdb 移动到其他 PV
pvmove /dev/sdb
# 或指定目标
pvmove /dev/sdb /dev/sdd

# 确认空闲后从 VG 中移除
vgreduce webapp /dev/sdb

⚠️ 删除 PV 前确保该 PV 不在使用中,否则报错 Physical volume still in use

5.4 扩展和缩减逻辑卷

扩展逻辑卷
# 增加 2G
lvextend -L +2G /dev/webapp/webapp01

# 直接设置为 15G
lvextend -L 15G /dev/webapp/webapp01

# 查看
lvs /dev/webapp/webapp01
缩减逻辑卷
lvreduce -L -2G /dev/webapp/webapp01
# 或
lvreduce -L 10G /dev/webapp/webapp01
# 输入 y 确认

5.5 扩展和缩减文件系统

扩展 XFS 文件系统

XFS 只支持扩展,不支持缩减

# 方法1:分两步
lvextend -L 15G /dev/webapp/webapp01
xfs_growfs /usr/share/nginx/html

# 方法2:一步完成(-r 自动扩展文件系统)
lvextend -rL 20G /dev/webapp/webapp01
扩展 EXT4 文件系统

EXT4 支持扩展和缩减。

# 扩展逻辑卷
lvextend -L 25G /dev/webapp/webapp01

# 扩展文件系统
resize2fs /dev/webapp/webapp01

# 或一步完成
lvextend -rL 30G /dev/webapp/webapp01
缩减 EXT4 文件系统

注意事项:

  • 不支持在线缩减,必须卸载后缩减
  • 缩减后的容量不能小于当前已用容量

缩减流程:

  1. 卸载文件系统
  2. e2fsck 检测文件系统
  3. resize2fs 缩减文件系统
  4. lvreduce 缩减逻辑卷
  5. 重新挂载验证
# 第一步:卸载
umount /usr/share/nginx/html

# 第二步:检测文件系统
e2fsck -f /dev/webapp/webapp01

# 第三步:缩减文件系统到 10G
resize2fs /dev/webapp/webapp01 10G

# 第四步:缩减逻辑卷到 10G
lvreduce -L 10G /dev/webapp/webapp01
# 输入 y 确认

# 第五步:重新挂载验证
mount /dev/webapp/webapp01 /usr/share/nginx/html
df -h /usr/share/nginx/html

💡 补充说明:如果文件系统构建在磁盘分区上(非 LVM),扩展和缩减文件系统容量的操作相同。


总结

操作 XFS EXT4
扩展文件系统 xfs_growfs resize2fs
缩减文件系统 不支持 resize2fs
在线扩展 ✅ 支持 ✅ 支持
在线缩减 ❌ 必须卸载

通过 LVM,我们可以灵活地管理存储空间,实现跨硬盘的文件系统、动态扩缩容、数据冗余和快照备份,大大提升了 Linux 存储管理的灵活性和可靠性。


本文整理自 Linux 存储管理课堂笔记,涵盖 GPT 分区、RAID 技术、LVM 逻辑卷管理及文件系统扩缩容等核心内容。

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐