HoRain云--CentOS磁盘扩容:6大方案全面解析

前言

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


一、核心方案速览

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

二、方案详解

方案一:空间再分配(高危操作)
# 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无重要数据


    方案二:无损扩容根分区(推荐)
    fdisk /dev/sdb # 创建新分区
    pvcreate /dev/sdb1
    vgextend centos /dev/sdb1
    lvextend -l +100%FREE /dev/mapper/centos-root
    xfs_growfs /dev/mapper/centos-root
    

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


      方案三:创建独立存储池
      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自动挂载

        差异化配置

        # 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. 文件系统检测
            blkid /dev/mapper/centos-root
            tune2fs -l /dev/sda1 | grep 'Filesystem features'
            
            • XFS特性:扩容后必须执行xfs_growfs
            • 挂载验证mount -a测试无报错再重启
            • 安全删除lvremove前确认三次挂载点

            四、监控建议

            # 实时监控命令
            watch -n 5 'df -h; lsblk; vgs; pvs'
            
            # 日志监控
            journalctl -f -u systemd-fsck
            

              结语

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

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

              附完整操作流程图

              完整的命令在这里

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

              删除 home 扩容到【/】
              # 检查挂载情况
              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/
              
                参考资料方案二 添加一块磁盘并挂载到 root 节点
                # 检查文件系统使用情况
                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
                

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

                  # 检查文件系统使用情况
                  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

                    # 查看当前分区挂载情况
                    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

                      # 查看当前分区挂载情况
                      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

                        # 查看当前分区挂载情况
                        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

                        评论
                        添加红包

                        请填写红包祝福语或标题

                        红包个数最小为10个

                        红包金额最低5元

                        当前余额3.43前往充值 >
                        需支付:10.00
                        成就一亿技术人!
                        领取后你会自动成为博主和红包主的粉丝 规则
                        hope_wisdom
                        发出的红包
                        实付
                        使用余额支付
                        点击重新获取
                        扫码支付
                        钱包余额 0

                        抵扣说明:

                        1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
                        2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

                        余额充值