CentOS磁盘扩容全攻略:6种场景化方案详解

前言

在Linux服务器运维中,磁盘空间管理是高频操作。本文针对CentOS系统,整理了6种典型场景的磁盘扩容方案,涵盖LVM逻辑卷管理、挂载点调整、新增磁盘等场景,助您从容应对存储挑战。


一、核心方案速览

方案 适用场景 核心操作 风险等级
方案一 牺牲/home扩容根目录 迁移数据+LV调整 ⭐⭐⭐⭐
方案二 新磁盘扩容根分区 LVM卷组扩展 ⭐⭐
方案三 创建独立存储池 新建VG+LV
方案四 NFS专用存储 定制化VG+自动挂载 ⭐⭐
方案五 Docker数据目录隔离 独立VG+XFS格式化 ⭐⭐
方案六 安全扩展Docker存储 全流程磁盘分区

二、方案详解

方案一:空间再分配(高危操作)

bash 复制代码
# 1. 数据迁移
mkdir /newhome && cp -a /home/* /newhome

# 2. 解除home挂载
umount /dev/mapper/centos-home
lvremove /dev/centos/home

# 3. 扩展根分区
lvextend -L +100G /dev/centos/root
xfs_growfs /dev/centos/root

# 数据回迁注意事项:
chmod 700 /home && restorecon -Rv /home

适用场景:紧急根目录扩容,需确保/home无重要数据


方案二:无损扩容根分区(推荐)

bash 复制代码
fdisk /dev/sdb # 创建新分区
pvcreate /dev/sdb1
vgextend centos /dev/sdb1
lvextend -l +100%FREE /dev/mapper/centos-root
xfs_growfs /dev/mapper/centos-root

优势:不破坏现有数据,支持在线扩容


方案三:创建独立存储池

bash 复制代码
vgcreate appvg /dev/sdb1
lvcreate -n appdata -l 100%FREE appvg
mkfs.xfs /dev/mapper/appvg-appdata
echo "/dev/mapper/appvg-appdata /appdata xfs defaults 0 0" >> /etc/fstab

最佳实践 :建议PE大小设为16M(-s 16m参数)


方案四/五/六:专项存储方案

共性步骤

  1. 使用fdisk创建Linux LVM分区
  2. pvcreate初始化物理卷
  3. vgcreate创建独立卷组
  4. lvcreate分配逻辑卷
  5. mkfs.xfs格式化
  6. 配置/etc/fstab自动挂载

差异化配置

bash 复制代码
# Docker专用(方案六)
vgcreate dockervg -s 16m /dev/sdb1
lvcreate -n dockerlv -l 100%FREE dockervg
mkfs.xfs -n ftype=1 /dev/mapper/dockervg-dockerlv # 支持OverlayFS

三、避坑指南

  1. 数据备份 :操作前务必cp -a保留权限属性

  2. 文件系统检测

    bash 复制代码
    blkid /dev/mapper/centos-root
    tune2fs -l /dev/sda1 | grep 'Filesystem features'
  3. XFS特性 :扩容后必须执行xfs_growfs

  4. 挂载验证mount -a测试无报错再重启

  5. 安全删除lvremove前确认三次挂载点


四、监控建议

bash 复制代码
# 实时监控命令
watch -n 5 'df -h; lsblk; vgs; pvs'

# 日志监控
journalctl -f -u systemd-fsck

结语

不同扩容方案对应不同业务场景,建议:

  1. 生产环境优先选择新增磁盘方案
  2. 测试环境可尝试空间再分配
  3. 关键服务使用独立存储卷组

附完整操作流程图
是 否 是 否 需求分析 现有空间调整? 方案一 选择新磁盘方案 专用存储需求? 方案3-6 方案二

完整的命令在这里

方案一 移除不用的挂载,扩展到目标磁盘

删除 home 扩容到【/】

sh 复制代码
# 检查挂载情况
df -h
# 迁移文件
mkdir /newhome
cp -r /home/* /newhome/
rm -rf /home/*

# 检查磁盘情况
cat /etc/fstab
# 关闭Home挂载检查
sed -i "s@/dev/mapper/centos-home@#/dev/mapper/centos-home@" /etc/fstab

# 移除 home 挂载的文件系统
umount /dev/mapper/centos-home 
# 检查文件系统使用情况
df -h
# 检查磁盘挂载点
lsblk
# 移除home 使用的 lv 卷 即释放占用的空间
lvremove /dev/centos/home

# 将刚释放的卷扩容到 【/】
lvextend -L 400G /dev/centos/root
# 刷新文件系统
xfs_growfs /dev/centos/root 

lsblk
df -h

# 还原home文件
cp -r /newhome/* /home/

参考资料

  1. linux 删除home的默认挂载,扩容到root https://www.codenong.com/cs107017140/

方案二 添加一块磁盘并挂载到 root 节点

sh 复制代码
# 检查文件系统使用情况
df -h
# 检查磁盘挂载点
lsblk
# 查看磁盘分区
fdisk -l
# 查看磁盘文件系统格式  一般为 xfs
cat /etc/fstab | grep centos-root 
# 查看磁盘分区
fdisk -l
# 对新加的磁盘进行分区操作 如我当前的新增硬盘为 sdb :虚拟磁盘
fdisk /dev/sdb 
# 使用 p 命令
# 使用 n 命令
# 继续 【回车键】 确认 (3次)
# 使用 p 命令 查看新分出的磁盘分区
# 使用 w 命令写入保存

# 重启生效
reboot 

# 初始化新分区 使用上面 p命令看到的分区磁盘路径, 如【dev/sdb1 ,dev/sdb1】
pvcreate /dev/sdb1
# 将初始化的分区加入虚拟卷组名中
# 命令   虚拟卷组   分区
vgextend centos /dev/sdb1
# 查看卷组信息
vgdisplay
# 将卷组剩余空间全分配给 centos-root 
lvextend -l +100%FREE /dev/mapper/centos-root
# 查看当前卷信息
pvdisplay
# 扩展磁盘空间,使分配的空间生效
# 若是ext4 文件系统, 下面使用针对ext4文件系统的命令: resize2fs /dev/mapper/centos-root   
xfs_growfs /dev/mapper/centos-root 
# 检查文件系统使用情况
df -h
# 检查磁盘挂载点
lsblk

方案三 添加一块磁盘并挂载到 新的磁盘卷

参考资料

https://blog.csdn.net/qq_51531931/article/details/124181534

sh 复制代码
# 检查文件系统使用情况
df -h
# 检查磁盘挂载点
lsblk
# 查看磁盘分区
fdisk -l
# 查看磁盘文件系统格式  一般为 xfs
cat /etc/fstab | grep centos-root 
# 查看磁盘分区
fdisk -l
# 对新加的磁盘进行分区操作 如我当前的新增硬盘为 vdb :虚拟磁盘
fdisk /dev/sdb 
# 使用 p 命令
# 使用 n 命令
# 继续 【回车键】 确认 (3次)
# 使用 p 命令 查看新分出的磁盘分区
# 使用 w 命令写入保存

# 重启生效
reboot 

# 初始化新分区 使用上面 p命令看到的分区磁盘路径, 如【dev/vdb1 ,dev/sdb1】
pvcreate /dev/sdb1

# 查看磁盘分区 sdb1 就能看到了
fdisk -l

# 这个时候还是看不到挂载信息
lsblk

# 格式化分区 
# mkfs -t xfs /dev/sdb1

# 查看挂载信息 使用-f 查看详细信息
lsblk -f 

# 创建磁盘卷组
 vgcreate myvg /dev/sdb1

#* 卷组绑定多个磁盘
# vgcreate myvg /dev/sdb[1-2]
#* 扩展磁盘到卷组 
# vgextend myvg /dev/sdb3
#* 移除卷组
# vgremove myvg 

#显示当前卷分组
vgs 

# 创建一个逻辑卷 _L 指定大小 -n 指定名称
lvcreate -L 24G -n mylv myvg

# 查看逻辑卷 vgdisplay 的缩写
vgs

# 格式化分区
mkfs -t xfs /dev/mapper/myvg-mylv


# 扩展逻辑卷
lventend -L +100%FREE /dev/mapper/myvg-mylv

# 刷新文件系统
resize2fs /dev/mapper/myvg-mylv

方案四 添加新磁盘并挂载到指定路径下for nfs

sh 复制代码
# 查看当前分区挂载情况
lsblk
# 查看当前分区,确认新的磁盘存在了
fdisk -l
# 对新加的磁盘进行分区格式化操作 如我当前的新增硬盘为 vdb :虚拟磁盘
fdisk /dev/sdb 
# 使用 p 命令 查看当前磁盘信息
# 使用 n 命令 添加一个新磁盘分区
# 继续 【回车键】 确认 (3次)使用默认值即可
# 使用 p 命令 查看新分出的磁盘分区
# 使用 w 命令写入保存

# 可以使用 lsblk 看到新的分区已创建
lsblk

# 初始化新分区 使用上面 p命令看到的分区磁盘路径, 如【dev/vdb1 ,dev/sdb1】
pvcreate /dev/sdb1
# 将初始化的分区加入虚拟卷组名中
# 命令   虚拟卷组   分区
# vgextend centos /dev/vdb1
# 查看卷组信息
# vgdisplay

# 移除挂载到卷组上的磁盘
# vgreduce centos /dev/vdb1

# 创建卷组
# vgcreate nfsgp /dev/vdb1
# vgremove nfsgp 
vgcreate -s 16m nfsgp /dev/sdb1

# 查看卷组信息
vgs 

# 创建逻辑卷 并分配所有剩余空间 百分号形式的磁盘分配需要使用 小写的【l】
# lvcreate -L +5G -n dv nfsgp
lvcreate -l +100%FREE -n dv nfsgp

# 格式化磁盘
mkfs.xfs /dev/mapper/nfsgp-dv

# 使用df -h 查看挂载情况
df -h

# 编辑自动挂载,添加下面的自动挂载配置
# vi /etc/fstab
# /dev/mapper/nfsgp-dv /var/lib/docker  xfs      defaults,pquota 0 0
grep -w "/dev/mapper/nfsgp-dv" /etc/fstab && echo "exist auto mount nfsgp-dv" ||  echo "/dev/mapper/nfsgp-dv /nfs/data  xfs      defaults,pquota 0 0">>/etc/fstab
mkdir -p /nfs/data
mount -a
# mount dev/mapper/nfsgp-dv /var/lib/docker
grep -w "/dev/mapper/jenvg-jenlv" /etc/fstab && echo "exist auto mount jenvg-jenlv" ||  echo "/dev/mapper/jenvg-jenlv /nfs/data  xfs      defaults,pquota 0 0">>/etc/fstab

方案五 添加新磁盘并挂载到指定路径下for docker

sh 复制代码
# 查看当前分区挂载情况
lsblk
# 查看当前分区,确认新的磁盘存在了
fdisk -l
# 对新加的磁盘进行分区格式化操作 如我当前的新增硬盘为 vdb :虚拟磁盘
fdisk /dev/sdb 
# 使用 p 命令 查看当前磁盘信息
# 使用 n 命令 添加一个新磁盘分区
# 继续 【回车键】 确认 (3次)使用默认值即可
# 使用 p 命令 查看新分出的磁盘分区
# 使用 w 命令写入保存

# 可以使用 lsblk 看到新的分区已创建
lsblk

# 初始化新分区 使用上面 p命令看到的分区磁盘路径, 如【dev/vdb1 ,dev/vdb1】
pvcreate /dev/sdb1
# 将初始化的分区加入虚拟卷组名中
# 命令   虚拟卷组   分区
# vgextend centos /dev/vdb1
# 查看卷组信息
# vgdisplay

# 移除挂载到卷组上的磁盘
# vgreduce centos /dev/vdb1

# 创建卷组
# vgcreate nfsgp /dev/vdb1
# vgremove nfsgp 
vgcreate -s 16m nfsgp /dev/sdb1

# 查看卷组信息
vgs 

# 创建逻辑卷 并分配所有剩余空间 百分号形式的磁盘分配需要使用 小写的【l】
# lvcreate -L +5G -n dv nfsgp
lvcreate -l +100%FREE -n dv nfsgp

# 格式化磁盘
mkfs.xfs /dev/mapper/nfsgp-dv

# 使用df -h 查看挂载情况
df -h

# 编辑自动挂载,添加下面的自动挂载配置
# vi /etc/fstab
# /dev/mapper/nfsgp-dv /var/lib/docker  xfs      defaults,pquota 0 0
grep -w "/dev/mapper/nfsgp-dv" /etc/fstab && echo "exist auto mount nfsgp-dv" ||  echo "/dev/mapper/nfsgp-dv /nfs/data  xfs      defaults,pquota 0 0">>/etc/fstab
mkdir -p /nfs/data
mount -a
# mount dev/mapper/nfsgp-dv /var/lib/docker

方案六 添加新磁盘并挂载到指定路径下for docker

sh 复制代码
# 查看当前分区挂载情况
lsblk
# 查看当前分区,确认新的磁盘存在了
fdisk -l
# 对新加的磁盘进行分区格式化操作 如我当前的新增硬盘为 vdb :虚拟磁盘
fdisk /dev/sdb 
# 使用 p 命令 查看当前磁盘信息
# 使用 n 命令 添加一个新磁盘分区
# 继续 【回车键】 确认 (3次)使用默认值即可
# 使用 p 命令 查看新分出的磁盘分区
# 使用 w 命令写入保存

# 可以使用 lsblk 看到新的分区已创建
lsblk

# 初始化新分区 使用上面 p命令看到的分区磁盘路径, 如【dev/vdb1 ,dev/sdb1】
pvcreate /dev/sdb1
# 将初始化的分区加入虚拟卷组名中
# 命令   虚拟卷组   分区
# vgextend centos /dev/vdb1
# 查看卷组信息
# vgdisplay

# 移除挂载到卷组上的磁盘
# vgreduce centos /dev/vdb1

# 创建卷组
# vgcreate dockergp /dev/vdb1
# vgremove dockergp 
vgcreate -s 16m dockergp /dev/sdb1

# 查看卷组信息
vgs 

# 创建逻辑卷 并分配所有剩余空间 百分号形式的磁盘分配需要使用 小写的【l】
# lvcreate -L +5G -n dv dockergp
lvcreate -l +100%FREE -n dv dockergp

# 格式化磁盘
mkfs.xfs /dev/mapper/dockergp-dv

# 使用df -h 查看挂载情况
df -h

# 编辑自动挂载,添加下面的自动挂载配置
# vi /etc/fstab
# /dev/mapper/dockergp-dv /var/lib/docker  xfs      defaults,pquota 0 0
grep -w "/dev/mapper/dockergp-dv" /etc/fstab && echo "exist auto mount dockergp-dv" ||  echo "/dev/mapper/dockergp-dv /var/lib/docker  xfs      defaults,pquota 0 0">>/etc/fstab
mkdir -p /var/lib/docker
mount -a
# mount dev/mapper/dockergp-dv /var/lib/docker
  1. Linux中硬盘分区、创建逻辑卷 https://blog.csdn.net/qq_51531931/article/details/124181534
  2. Linux之/etc/fstab自动挂载文件讲解 http://t.zoukankan.com/wufj-p-14264577.html
  3. Linux系统开机自动挂载文件fstab介绍 https://blog.51cto.com/mingongge/5091999
相关推荐
这个饕字怎么读几秒前
配置Nginx日志url encode问题
运维·nginx·lua
GalaxyPokemon28 分钟前
LINUX网络基础 [一] - 初识网络,理解网络协议
linux·运维·网络
朗晴36 分钟前
Red Hat Enterprise Linux 发行日期!
linux
Channing Lewis39 分钟前
登录服务器后如何找到对应的drupal所在的文件夹
运维·服务器
黎明晓月1 小时前
‌CentOS 7.9 安装 Docker 步骤
linux·docker·centos
菜鸟xy..2 小时前
winhex软件简单讲解,虚拟磁盘分区介绍
linux·运维·服务器
网硕互联的小客服2 小时前
如何排查服务器内存泄漏问题
linux·运维·服务器·安全·ssh
驰驰的老爸2 小时前
elk单机版安装
运维·jenkins
Evoxt 益沃斯2 小时前
How to enable Qemu Guest Agent for Virtual Machines
linux·运维·服务器·qemu
钟离墨笺2 小时前
【Linux】【网络】UDP打洞-->不同子网下的客户端和服务器通信(未成功版)
linux·服务器·网络