首页 Linux教程使用 LVM 扩容 Linux 磁盘的完整操作步骤

使用 LVM 扩容 Linux 磁盘的完整操作步骤

运维派隶属马哥教育旗下专业运维社区,是国内成立最早的IT运维技术社区,欢迎关注公众号:yunweipai
领取学习更多免费Linux云计算、Python、Docker、K8s教程关注公众号:马哥linux运维

一、问题背景

生产服务器运行一段时间后,磁盘空间不足是常见问题。数据库日志、应用日志、用户上传文件、备份文件等持续增长,根分区或数据分区空间告警,严重时可能导致服务不可用。

传统分区方式扩容困难,需要停机、备份数据、重新分区、恢复数据,风险高、耗时长。LVM(Logical Volume Manager)提供了灵活的磁盘管理方式,可以在线扩容,无需停机,无需数据迁移。

本文从实战角度出发,介绍 LVM 的核心概念、扩容前检查、扩容步骤、验证方法、常见问题处理、回滚方案和生产环境注意事项。

二、适用场景

  • 根分区空间不足,需要扩容
  • 数据分区空间不足,需要扩容
  • 新增硬盘或云盘,需要扩展现有逻辑卷
  • 虚拟机磁盘扩容后,需要将新空间分配给文件系统
  • 容器或虚拟化环境中磁盘扩容
  • 需要在线扩容,不能停机

不适用场景:

  • 系统未使用 LVM,使用传统分区方式(需要先迁移到 LVM)
  • 磁盘已损坏或文件系统损坏(需要先修复或恢复数据)

三、核心知识点

3.1 LVM 架构

LVM 分为三层:

   物理卷(PV, Physical Volume)
  ↓
卷组(VG, Volume Group)
  ↓
逻辑卷(LV, Logical Volume)
  ↓
文件系统(ext4, xfs, etc.)

3.2 核心概念

物理卷(PV)

  • 物理磁盘或分区,例如 /dev/sdb/dev/sdb1
  • 通过 pvcreate 初始化为 LVM 物理卷
  • 多个物理卷可以组成一个卷组

卷组(VG)

  • 由一个或多个物理卷组成
  • 卷组是 LVM 的存储池
  • 可以从卷组中划分出多个逻辑卷

逻辑卷(LV)

  • 从卷组中划分出的逻辑分区
  • 逻辑卷可以动态调整大小
  • 逻辑卷上创建文件系统后即可挂载使用

PE(Physical Extent)

  • 物理卷的最小分配单位,默认 4MB
  • 逻辑卷大小必须是 PE 的整数倍

LE(Logical Extent)

  • 逻辑卷的最小分配单位,与 PE 大小相同

3.3 扩容原理

LVM 扩容分为两步:

  1. 扩展逻辑卷大小(lvextend
  2. 扩展文件系统大小(resize2fs 或 xfs_growfs

逻辑卷扩容前提:

  • 卷组有足够的剩余空间
  • 若卷组空间不足,需要先添加新的物理卷到卷组

3.4 常见文件系统扩容命令

  • ext2/ext3/ext4resize2fs
  • xfsxfs_growfs
  • btrfsbtrfs filesystem resize

注意:

  • ext4 支持在线扩容和离线扩容
  • xfs 仅支持在线扩容,不支持缩容
  • 扩容前务必备份数据

四、整体扩容思路

   1. 检查磁盘空间和 LVM 状态
2. 确认扩容目标(扩容哪个逻辑卷、扩容多大)
3. 检查卷组剩余空间
4. 若卷组空间不足,添加新物理卷到卷组
5. 扩展逻辑卷大小
6. 扩展文件系统大小
7. 验证扩容结果
8. 记录操作过程

五、实战步骤

5.1 扩容前检查

5.1.1 检查磁盘空间使用情况

   bashdf -h

输出示例:

   文件系统                 容量  已用  可用 已用% 挂载点
devtmpfs                 7.8G     0  7.8G    0% /dev
tmpfs                    7.8G     0  7.8G    0% /dev/shm
/dev/mapper/centos-root   50G   45G  5.0G   91% /
/dev/sda1                1014M  150M  865M   15% /boot
/dev/mapper/centos-home  100G   85G   15G   86% /home

判断逻辑:

  • /dev/mapper/centos-root 使用率 91%,需要扩容
  • /dev/mapper/centos-home 使用率 86%,需要关注

/dev/mapper/centos-root 即为逻辑卷设备,centos 是卷组名,root 是逻辑卷名。

5.1.2 检查逻辑卷信息

   bashlvdisplay

输出示例:

     --- Logical volume ---
  LV Path                /dev/centos/root
  LV Name                root
  VG Name                centos
  LV UUID                abc123-def456-ghi789
  LV Write Access        read/write
  LV Creation host, time localhost, 2023-01-01 10:00:00 +0800
  LV Status              available
  # open                 1
  LV Size                50.00 GiB
  Current LE             12800
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:0

重点字段:

  • LV Path:逻辑卷设备路径
  • LV Name:逻辑卷名称
  • VG Name:所属卷组
  • LV Size:当前大小

查看所有逻辑卷简要信息:

   bashlvs

输出示例:

     LV   VG     Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  home centos -wi-ao---- 100.00g                                                    
  root centos -wi-ao----  50.00g                                                    
  swap centos -wi-ao----   4.00g

5.1.3 检查卷组信息

   bashvgdisplay

输出示例:

     --- Volume group ---
  VG Name               centos
  System ID             
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  5
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                3
  Open LV               3
  Max PV                0
  Cur PV                2
  Act PV                2
  VG Size               199.00 GiB
  PE Size               4.00 MiB
  Total PE              50944
  Alloc PE / Size       39424 / 154.00 GiB
  Free  PE / Size       11520 / 45.00 GiB
  VG UUID               xyz789-abc123-def456

重点字段:

  • VG Name:卷组名称
  • VG Size:卷组总大小
  • Alloc PE / Size:已分配空间
  • Free  PE / Size:剩余空间

判断逻辑:

  • 若 Free PE / Size 显示剩余空间充足,可以直接扩展逻辑卷
  • 若剩余空间不足,需要先添加新物理卷到卷组

查看所有卷组简要信息:

   bashvgs

输出示例:

     VG     #PV #LV #SN Attr   VSize   VFree 
  centos   2   3   0 wz--n- 199.00g 45.00g

5.1.4 检查物理卷信息

   bashpvdisplay

输出示例:

     --- Physical volume ---
  PV Name               /dev/sda2
  VG Name               centos
  PV Size               <99.00 GiB / not usable 3.00 MiB
  Allocatable           yes (but full)
  PE Size               4.00 MiB
  Total PE              25343
  Free PE               0
  Allocated PE          25343
  PV UUID               aaa111-bbb222-ccc333

  --- Physical volume ---
  PV Name               /dev/sdb1
  VG Name               centos
  PV Size               <100.00 GiB / not usable 4.00 MiB
  Allocatable           yes 
  PE Size               4.00 MiB
  Total PE              25600
  Free PE               11520
  Allocated PE          14080
  PV UUID               ddd444-eee555-fff666

重点字段:

  • PV Name:物理卷设备
  • VG Name:所属卷组
  • PV Size:物理卷大小
  • Free PE:剩余空间

判断逻辑:

  • /dev/sda2 已满,无剩余空间
  • /dev/sdb1 有剩余空间

查看所有物理卷简要信息:

   bashpvs

输出示例:

     PV         VG     Fmt  Attr PSize    PFree 
  /dev/sda2  centos lvm2 a--   <99.00g     0 
  /dev/sdb1  centos lvm2 a--  <100.00g 45.00g

5.1.5 检查文件系统类型

   bashdf -T

输出示例:

   文件系统                类型      容量  已用  可用 已用% 挂载点
devtmpfs                devtmpfs  7.8G     0  7.8G    0% /dev
tmpfs                   tmpfs     7.8G     0  7.8G    0% /dev/shm
/dev/mapper/centos-root xfs        50G   45G  5.0G   91% /
/dev/sda1               xfs      1014M  150M  865M   15% /boot
/dev/mapper/centos-home xfs       100G   85G   15G   86% /home

重点:

  • /dev/mapper/centos-root 文件系统类型为 xfs
  • 后续扩容时需要使用 xfs_growfs 命令

或使用:

   bashblkid /dev/mapper/centos-root

输出示例:

   /dev/mapper/centos-root: UUID="abc123-def456" TYPE="xfs"

5.1.6 检查磁盘硬件

查看所有块设备:

   bashlsblk

输出示例:

   NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0  100G  0 disk 
├─sda1            8:1    0    1G  0 part /boot
└─sda2            8:2    0   99G  0 part 
  ├─centos-root 253:0    0   50G  0 lvm  /
  ├─centos-swap 253:1    0    4G  0 lvm  [SWAP]
  └─centos-home 253:2    0   45G  0 lvm  /home
sdb               8:16   0  100G  0 disk 
└─sdb1            8:17   0  100G  0 part 
  ├─centos-home 253:2    0  100G  0 lvm  /home
sdc               8:32   0  200G  0 disk

判断逻辑:

  • sdasdb 已分区并加入 LVM
  • sdc 是新添加的磁盘,未分区,可以用于扩容

5.2 场景一:卷组有剩余空间,直接扩展逻辑卷

适用场景:

  • vgs 显示卷组有剩余空间(VFree > 0)
  • 需要扩容的逻辑卷所在卷组有空闲空间

5.2.1 备份重要数据

风险提示:

  • 虽然 LVM 扩容通常安全,但仍建议备份关键数据
  • 备份方式:tar 打包、rsync 同步、快照备份等

示例备份命令:

   bashtar -czf /backup/root_backup_$(date +%Y%m%d).tar.gz -C / --exclude=/proc --exclude=/sys --exclude=/dev --exclude=/backup .

或使用 rsync:

   bashrsync -avzP / /backup/root_backup/ --exclude=/proc --exclude=/sys --exclude=/dev --exclude=/backup

5.2.2 扩展逻辑卷

假设要将 /dev/centos/root 从 50GB 扩展到 80GB。

方式一:指定扩展后的总大小

   bashlvextend -L 80G /dev/centos/root

方式二:指定增加的大小

   bashlvextend -L +30G /dev/centos/root

方式三:使用所有剩余空间

   bashlvextend -l +100%FREE /dev/centos/root

参数说明:

  • -L:指定大小(K, M, G, T)
  • -l:指定 PE 数量
  • +100%FREE:使用卷组中所有剩余空间

输出示例:

     Size of logical volume centos/root changed from 50.00 GiB (12800 extents) to 80.00 GiB (20480 extents).
  Logical volume centos/root successfully resized.

验证逻辑卷是否扩展成功:

   bashlvs

输出示例:

     LV   VG     Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  home centos -wi-ao---- 100.00g                                                    
  root centos -wi-ao----  80.00g                                                    
  swap centos -wi-ao----   4.00g

确认 root 逻辑卷大小已变为 80GB。

5.2.3 扩展文件系统

逻辑卷扩展后,文件系统大小未变,需要手动扩展。

查看文件系统类型:

   bashdf -T /

输出示例:

   文件系统                类型   容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root xfs     50G   45G  5.0G   91% /

文件系统类型为 xfs,使用 xfs_growfs 扩展。

5.2.3.1 扩展 xfs 文件系统
   bashxfs_growfs /

或指定设备:

   bashxfs_growfs /dev/mapper/centos-root

输出示例:

   meta-data=/dev/mapper/centos-root isize=512    agcount=4, agsize=3276800 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0 spinodes=0
data     =                       bsize=4096   blocks=13107200, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal               bsize=4096   blocks=6400, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
data blocks changed from 13107200 to 20971520

重点关注:

  • data blocks changed from 13107200 to 20971520:表示文件系统已扩展
5.2.3.2 扩展 ext4 文件系统

若文件系统类型为 ext4

   bashresize2fs /dev/mapper/centos-root

输出示例:

   resize2fs 1.42.9 (28-Dec-2013)
Filesystem at /dev/mapper/centos-root is mounted on /; on-line resizing required
old_desc_blocks = 7, new_desc_blocks = 10
The filesystem on /dev/mapper/centos-root is now 20971520 blocks long.

注意:

  • ext4 支持在线扩容,无需卸载
  • 扩容前可先执行 e2fsck -f /dev/mapper/centos-root 检查文件系统(需要卸载或进入单用户模式)

5.2.4 验证扩容结果

   bashdf -h /

输出示例:

   文件系统                 容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root   80G   45G   35G   57% /

确认:

  • 容量已从 50GB 变为 80GB
  • 可用空间已增加

查看逻辑卷信息:

   bashlvdisplay /dev/centos/root

确认 LV Size 为 80GB。

5.3 场景二:卷组空间不足,需要添加新物理卷

适用场景:

  • vgs 显示卷组剩余空间不足
  • 系统有新的硬盘或云盘可以使用

5.3.1 识别新磁盘

   bashlsblk

输出示例:

   NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0  100G  0 disk 
├─sda1            8:1    0    1G  0 part /boot
└─sda2            8:2    0   99G  0 part 
  ├─centos-root 253:0    0   50G  0 lvm  /
  ├─centos-swap 253:1    0    4G  0 lvm  [SWAP]
  └─centos-home 253:2    0   45G  0 lvm  /home
sdb               8:16   0  100G  0 disk 
└─sdb1            8:17   0  100G  0 part 
  └─centos-home 253:2    0  100G  0 lvm  /home
sdc               8:32   0  200G  0 disk

判断逻辑:

  • sdc 是新添加的 200GB 磁盘,未分区,可以直接使用
  • 若磁盘已分区,需要先删除分区或使用现有分区

查看磁盘分区信息:

   bashfdisk -l /dev/sdc

输出示例:

   Disk /dev/sdc: 214.7 GB, 214748364800 bytes, 419430400 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x00000000

确认磁盘无分区。

5.3.2 创建物理卷

5.3.2.1 直接使用整个磁盘
   bashpvcreate /dev/sdc

输出示例:

     Physical volume "/dev/sdc" successfully created.

验证:

   bashpvs

输出示例:

     PV         VG     Fmt  Attr PSize    PFree   
  /dev/sda2  centos lvm2 a--   <99.00g       0 
  /dev/sdb1  centos lvm2 a--  <100.00g  45.00g
  /dev/sdc          lvm2 ---   200.00g 200.00g

/dev/sdc 已成为物理卷,但尚未加入卷组(VG 列为空)。

5.3.2.2 使用分区

若需要将磁盘分区后再创建物理卷:

创建分区:

   bashfdisk /dev/sdc

操作步骤:

  1. 输入 n 创建新分区
  2. 选择分区类型(p 主分区)
  3. 输入分区号(默认 1)
  4. 输入起始扇区(默认)
  5. 输入结束扇区(默认,使用全部空间)
  6. 输入 t 修改分区类型
  7. 输入 8e(Linux LVM 类型)
  8. 输入 w 保存并退出

或使用 parted

   bashparted /dev/sdc
(parted) mklabel gpt
(parted) mkpart primary 0% 100%
(parted) set 1 lvm on
(parted) quit

刷新分区表:

   bashpartprobe /dev/sdc

创建物理卷:

   bashpvcreate /dev/sdc1

5.3.3 将物理卷添加到卷组

   bashvgextend centos /dev/sdc

参数说明:

  • centos:卷组名称
  • /dev/sdc:要添加的物理卷

输出示例:

     Volume group "centos" successfully extended

验证:

   bashvgs

输出示例:

     VG     #PV #LV #SN Attr   VSize   VFree  
  centos   3   3   0 wz--n- 399.00g 245.00g

确认:

  • 卷组 centos 的物理卷数量从 2 增加到 3
  • 卷组总大小从 199GB 增加到 399GB
  • 剩余空间从 45GB 增加到 245GB

查看卷组详细信息:

   bashvgdisplay centos

确认 Cur PV 和 VG Size 已更新。

5.3.4 扩展逻辑卷

添加物理卷到卷组后,卷组有了足够的剩余空间,可以按照【场景一】的步骤扩展逻辑卷。

例如,将 /dev/centos/root 扩展 50GB:

   bashlvextend -L +50G /dev/centos/root

或使用所有剩余空间:

   bashlvextend -l +100%FREE /dev/centos/root

5.3.5 扩展文件系统

根据文件系统类型选择命令:

xfs:

   bashxfs_growfs /

ext4:

   bashresize2fs /dev/mapper/centos-root

5.3.6 验证扩容结果

   bashdf -h /
   bashlvs
   bashvgs

5.4 场景三:云服务器磁盘扩容

云服务器(阿里云、腾讯云、AWS 等)通常先在控制台扩展磁盘大小,然后在系统内部识别并扩容。

5.4.1 在云控制台扩展磁盘

登录云服务商控制台,找到对应实例,选择磁盘,执行扩容操作。

例如将 100GB 云盘扩展到 200GB。

注意:

  • 部分云服务商扩容需要重启实例
  • 部分云服务商支持在线扩容

5.4.2 在系统内识别新磁盘大小

扩容后,系统可能未自动识别新大小,需要手动刷新。

查看当前磁盘大小:

   bashlsblk

输出示例:

   NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
vda             252:0    0  100G  0 disk 
├─vda1          252:1    0    1G  0 part /boot
└─vda2          252:2    0   99G  0 part 
  ├─centos-root 253:0    0   50G  0 lvm  /
  └─centos-home 253:1    0   49G  0 lvm  /home

若 vda 仍显示 100GB,需要刷新:

   bashecho 1 > /sys/class/block/vda/device/rescan

或重新扫描 SCSI 设备:

   bashecho "- - -" > /sys/class/scsi_host/host0/scan

再次查看:

   bashlsblk

输出示例:

   NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
vda             252:0    0  200G  0 disk 
├─vda1          252:1    0    1G  0 part /boot
└─vda2          252:2    0   99G  0 part 
  ├─centos-root 253:0    0   50G  0 lvm  /
  └─centos-home 253:1    0   49G  0 lvm  /home

vda 已识别为 200GB,但分区 vda2 仍为 99GB。

5.4.3 扩展分区

使用 growpart 扩展分区(部分发行版需要安装 cloud-utils-growpart 包):

   bashgrowpart /dev/vda 2

参数说明:

  • /dev/vda:磁盘设备
  • 2:分区号

输出示例:

   CHANGED: partition=2 start=2099200 old: size=207616000 end=209715200 new: size=417331167 end=419430367

或使用 parted 手动扩展分区:

   bashparted /dev/vda
(parted) print
(parted) resizepart 2 100%
(parted) quit

刷新分区表:

   bashpartprobe /dev/vda

验证分区是否扩展:

   bashlsblk

输出示例:

   NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
vda             252:0    0  200G  0 disk 
├─vda1          252:1    0    1G  0 part /boot
└─vda2          252:2    0  199G  0 part 
  ├─centos-root 253:0    0   50G  0 lvm  /
  └─centos-home 253:1    0   49G  0 lvm  /home

vda2 已扩展到 199GB。

5.4.4 扩展物理卷

   bashpvresize /dev/vda2

输出示例:

     Physical volume "/dev/vda2" changed
  1 physical volume(s) resized or updated / 0 physical volume(s) not resized

验证:

   bashpvs

输出示例:

     PV         VG     Fmt  Attr PSize    PFree  
  /dev/vda2  centos lvm2 a--  <199.00g 100.00g

物理卷 /dev/vda2 大小已从 99GB 增加到 199GB,卷组剩余空间增加 100GB。

5.4.5 扩展逻辑卷和文件系统

按照【场景一】的步骤扩展逻辑卷和文件系统。

5.5 场景四:扩容根分区

根分区扩容与普通分区扩容流程相同,但需要注意:

  • 根分区通常不能卸载,必须在线扩容
  • xfs 和 ext4 均支持在线扩容
  • 扩容前务必备份关键数据

步骤与【场景一】或【场景二】相同。

5.6 场景五:扩容数据分区

数据分区扩容流程与根分区相同。

若数据分区可以卸载,建议卸载后再扩容(ext4 支持离线扩容,xfs 仅支持在线扩容)。

卸载分区:

   bashumount /data

扩展逻辑卷:

   bashlvextend -L +50G /dev/centos/data

扩展文件系统(ext4):

   bashe2fsck -f /dev/centos/data
resize2fs /dev/centos/data

重新挂载:

   bashmount /dev/centos/data /data

验证:

   bashdf -h /data

若数据分区无法卸载,按照在线扩容流程操作。

六、常用命令汇总

6.1 查看命令

   bash# 查看磁盘空间使用情况
df -h
df -T

# 查看块设备
lsblk

# 查看磁盘分区
fdisk -l

# 查看物理卷
pvs
pvdisplay
pvscan

# 查看卷组
vgs
vgdisplay
vgscan

# 查看逻辑卷
lvs
lvdisplay
lvscan

# 查看文件系统类型
blkid /dev/mapper/centos-root

6.2 创建命令

   bash# 创建物理卷
pvcreate /dev/sdc

# 创建卷组
vgcreate vg_data /dev/sdc

# 创建逻辑卷
lvcreate -L 100G -n lv_data vg_data

# 创建文件系统
mkfs.xfs /dev/vg_data/lv_data
mkfs.ext4 /dev/vg_data/lv_data

6.3 扩展命令

   bash# 扩展物理卷
pvresize /dev/vda2

# 扩展卷组
vgextend centos /dev/sdc

# 扩展逻辑卷
lvextend -L +50G /dev/centos/root
lvextend -l +100%FREE /dev/centos/root

# 扩展文件系统
xfs_growfs /
resize2fs /dev/mapper/centos-root

6.4 删除命令(慎用)

   bash# 删除逻辑卷
lvremove /dev/centos/data

# 从卷组中移除物理卷
vgreduce centos /dev/sdc

# 删除卷组
vgremove centos

# 删除物理卷
pvremove /dev/sdc

风险提示:

  • 删除操作会导致数据丢失
  • 删除前务必备份数据
  • 删除逻辑卷前需要先卸载

七、配置示例

7.1 完整创建 LVM 的示例

假设新服务器有两块硬盘 /dev/sdb 和 /dev/sdc,需要创建 LVM 并挂载到 /data

7.1.1 创建物理卷

   bashpvcreate /dev/sdb /dev/sdc

7.1.2 创建卷组

   bashvgcreate vg_data /dev/sdb /dev/sdc

7.1.3 创建逻辑卷

   bashlvcreate -L 500G -n lv_data vg_data

或使用所有空间:

   bashlvcreate -l 100%FREE -n lv_data vg_data

7.1.4 创建文件系统

   bashmkfs.xfs /dev/vg_data/lv_data

7.1.5 挂载

   bashmkdir -p /data
mount /dev/vg_data/lv_data /data

7.1.6 写入 /etc/fstab

   bashecho "/dev/vg_data/lv_data /data xfs defaults 0 0" >> /etc/fstab

验证:

   bashdf -h /data

7.2 /etc/fstab 配置示例

   bash# 根分区
/dev/mapper/centos-root /                       xfs     defaults        0 0

# boot 分区
UUID=abc123-def456      /boot                   xfs     defaults        0 0

# swap 分区
/dev/mapper/centos-swap swap                    swap    defaults        0 0

# home 分区
/dev/mapper/centos-home /home                   xfs     defaults        0 0

# 数据分区
/dev/vg_data/lv_data    /data                   xfs     defaults        0 0

建议使用 UUID 而非设备路径,避免设备名称变化导致挂载失败:

   bashblkid /dev/mapper/centos-root

输出示例:

   /dev/mapper/centos-root: UUID="abc123-def456" TYPE="xfs"

修改 /etc/fstab

   bashUUID=abc123-def456 /                       xfs     defaults        0 0

八、日志与指标观察方法

8.1 查看系统日志

扩容过程中若出现错误,查看系统日志:

   bashdmesg | tail -n 50
   bashtail -f /var/log/messages
   bashjournalctl -xe

8.2 监控磁盘空间

使用监控系统(Prometheus、Zabbix、Grafana)监控磁盘使用率。

Prometheus 查询磁盘使用率:

   promql100 - (node_filesystem_avail_bytes{mountpoint="/"} / node_filesystem_size_bytes{mountpoint="/"}) * 100

设置告警规则,当磁盘使用率超过 80% 时告警。

8.3 查看扩容操作日志

LVM 命令执行后会记录日志:

   bashgrep -E "lvm|lvextend|vgextend|pvcreate" /var/log/messages | tail -n 20

或查看 audit 日志:

   bashausearch -m USER_CMD -c lvextend

九、排查路径

   1. 检查磁盘空间是否不足
   ↓
2. 确认文件系统挂载点和逻辑卷路径
   ↓
3. 检查卷组是否有剩余空间
   ↓
4. 若卷组剩余空间充足:
   - 扩展逻辑卷
   - 扩展文件系统
   - 验证结果
   ↓
5. 若卷组剩余空间不足:
   - 检查是否有新磁盘可用
   - 创建物理卷
   - 将物理卷添加到卷组
   - 扩展逻辑卷
   - 扩展文件系统
   - 验证结果
   ↓
6. 若是云服务器:
   - 在控制台扩展磁盘
   - 刷新系统识别
   - 扩展分区
   - 扩展物理卷
   - 扩展逻辑卷
   - 扩展文件系统
   - 验证结果
   ↓
7. 记录操作过程和结果

十、风险提醒

10.1 数据风险

  • LVM 扩容通常安全,但仍建议备份关键数据
  • 扩容前检查文件系统是否有损坏(xfs_repaire2fsck
  • 扩容过程中若断电或系统崩溃,可能导致文件系统损坏

10.2 操作风险

  • 扩容命令写错可能导致逻辑卷或卷组无法使用
  • 删除命令(lvremovevgremovepvremove)会导致数据丢失
  • 扩容前确认设备路径,避免操作错误的磁盘

10.3 性能风险

  • 扩容过程中,文件系统扩展可能消耗较多 CPU 和 I/O 资源
  • 建议在业务低峰期操作
  • 扩容大容量逻辑卷时,文件系统扩展可能耗时较长

10.4 云服务器特殊风险

  • 部分云服务商扩容需要重启实例
  • 扩容后若未刷新系统识别,可能导致扩容失败
  • 扩容分区时操作错误可能导致数据丢失

10.5 文件系统特殊风险

  • xfs 仅支持扩容,不支持缩容
  • ext4 支持扩容和缩容,但缩容需要卸载文件系统
  • 扩容过程中不要中断操作

十一、验证方式

11.1 验证逻辑卷是否扩展

   bashlvs
lvdisplay /dev/centos/root

确认 LV Size 是否符合预期。

11.2 验证文件系统是否扩展

   bashdf -h /

确认容量是否增加。

11.3 验证卷组剩余空间

   bashvgs

确认 VFree 是否减少。

11.4 验证物理卷是否添加

   bashpvs
vgdisplay centos

确认物理卷数量和卷组大小。

11.5 验证文件系统完整性

xfs:

   bashxfs_repair -n /dev/mapper/centos-root

-n 表示只检查,不修复。

ext4:

   bashe2fsck -n /dev/mapper/centos-root

11.6 验证业务是否正常

  • 检查业务日志是否有异常
  • 检查应用是否能正常读写文件
  • 检查数据库是否能正常启动

十二、回滚方案

12.1 逻辑卷扩展失败

若 lvextend 执行失败,通常不会影响现有数据。

检查错误信息,确认问题:

  • 卷组剩余空间不足:添加物理卷或释放空间
  • 设备路径错误:确认逻辑卷路径
  • 文件系统已满:清理文件后再扩展

12.2 文件系统扩展失败

若 xfs_growfs 或 resize2fs 执行失败,文件系统可能处于不一致状态。

xfs 修复:

   bashumount /
# 无法卸载根分区,需要进入单用户模式或使用 Live CD
xfs_repair /dev/mapper/centos-root
mount /

ext4 修复:

   bashumount /
e2fsck -f /dev/mapper/centos-root
mount /

12.3 扩容后系统无法启动

若扩容后系统无法启动,可能是 /etc/fstab 配置错误或文件系统损坏。

使用 Live CD 或救援模式进入系统:

  1. 检查 /etc/fstab 配置是否正确
  2. 检查文件系统是否损坏,使用 xfs_repair 或 e2fsck 修复
  3. 检查 grub 配置是否正确

12.4 缩容逻辑卷(ext4)

xfs 不支持缩容,ext4 支持但需要卸载文件系统。

风险提示:

  • 缩容前务必备份数据
  • 缩容可能导致数据丢失
  • 缩容后的大小必须大于已使用空间

步骤:

  1. 卸载文件系统
   bashumount /data
  1. 检查文件系统
   bashe2fsck -f /dev/centos/data
  1. 缩容文件系统
   bashresize2fs /dev/centos/data 50G
  1. 缩容逻辑卷
   bashlvreduce -L 50G /dev/centos/data
  1. 重新挂载
   bashmount /dev/centos/data /data
  1. 验证
   bashdf -h /data

十三、生产环境注意事项

13.1 操作前准备

  • 通知相关人员,说明操作内容和可能影响
  • 备份关键数据
  • 准备回滚方案
  • 选择业务低峰期操作
  • 准备应急联系方式

13.2 操作中监控

  • 实时观察磁盘空间变化
  • 实时观察系统日志
  • 实时观察业务日志
  • 准备好回滚命令

13.3 操作后验证

  • 验证逻辑卷大小
  • 验证文件系统大小
  • 验证文件系统完整性
  • 验证业务是否正常
  • 持续观察一段时间,确认无异常

13.4 文档与记录

  • 记录操作时间、操作人、操作命令
  • 记录扩容前后的容量
  • 记录遇到的问题和解决方法
  • 更新运维文档
  • 更新 CMDB 或资产管理系统

13.5 预防措施

  • 建立磁盘空间告警,提前扩容
  • 定期检查磁盘使用率
  • 定期清理无用日志和文件
  • 建立日志轮转机制
  • 建立数据归档机制
  • 合理规划磁盘分区和逻辑卷大小

十四、常见问题处理

14.1 扩容后 df 显示大小未变化

原因:

  • 逻辑卷扩展了,但文件系统未扩展

解决:

   bashxfs_growfs /
# 或
resize2fs /dev/mapper/centos-root

14.2 pvresize 提示设备大小未变化

原因:

  • 系统未识别到磁盘扩容

解决:

   bashecho 1 > /sys/class/block/vda/device/rescan
partprobe /dev/vda
pvresize /dev/vda2

14.3 lvextend 提示卷组空间不足

原因:

  • 卷组剩余空间不足

解决:

  • 添加新物理卷到卷组
   bashpvcreate /dev/sdc
vgextend centos /dev/sdc
lvextend -L +50G /dev/centos/root

14.4 xfs_growfs 提示文件系统已是最大

原因:

  • 逻辑卷未扩展,或已扩展但大小与文件系统一致

解决:

  • 检查逻辑卷大小
   bashlvs
  • 若逻辑卷未扩展,先扩展逻辑卷
   bashlvextend -L +50G /dev/centos/root
xfs_growfs /

14.5 提示设备正在使用,无法操作

原因:

  • 设备被进程占用

解决:

  • 查看占用进程
   bashlsof /dev/mapper/centos-root
  • 停止相关进程或卸载设备
   bashumount /data

14.6 growpart 提示分区无法扩展

原因:

  • 分区后有其他分区,无法扩展

解决:

  • 检查分区表
   bashfdisk -l /dev/vda
  • 若分区后有其他分区,需要先删除或移动

14.7 扩容后系统变慢

原因:

  • 文件系统扩展过程消耗 I/O 资源

解决:

  • 等待文件系统扩展完成
  • 检查 I/O 负载
   bashiostat -x 1

14.8 提示 PE 大小不匹配

原因:

  • 卷组 PE 大小与指定的不一致

解决:

  • 使用 -l 参数指定 PE 数量而非大小
   bashlvextend -l +100%FREE /dev/centos/root

十五、总结

LVM 是 Linux 下灵活的磁盘管理工具,支持在线扩容,无需停机,无需数据迁移。

核心流程:

  1. 检查磁盘空间和 LVM 状态
  2. 若卷组有剩余空间,直接扩展逻辑卷
  3. 若卷组空间不足,添加新物理卷到卷组
  4. 扩展逻辑卷
  5. 扩展文件系统
  6. 验证扩容结果

关键要点:

  • 扩容前备份关键数据
  • 确认文件系统类型,选择正确的扩展命令
  • 云服务器扩容需要先在控制台扩展磁盘,再在系统内识别
  • xfs 仅支持扩容,不支持缩容
  • ext4 支持扩容和缩容
  • 扩容过程中不要中断操作
  • 扩容后验证逻辑卷、文件系统、业务是否正常

常见场景:

  • 卷组有剩余空间:直接扩展逻辑卷和文件系统
  • 卷组空间不足:添加物理卷到卷组,再扩展
  • 云服务器扩容:控制台扩容 → 系统识别 → 扩展分区 → 扩展物理卷 → 扩展逻辑卷 → 扩展文件系统

风险控制:

  • 备份数据
  • 选择业务低峰期操作
  • 检查文件系统完整性
  • 准备回滚方案
  • 操作后充分验证

预防机制:

  • 建立磁盘空间告警
  • 定期检查磁盘使用率
  • 定期清理无用文件
  • 建立日志轮转和数据归档机制
  • 合理规划磁盘分区和逻辑卷大小

通过本文的完整流程,可以安全高效地完成 Linux 磁盘 LVM 扩容,确保业务连续性,避免因磁盘空间不足导致的服务中断。

使用 LVM 扩容 Linux 磁盘的完整操作步骤插图

本文链接:https://www.yunweipai.com/archives/49379

网友评论comments

发表回复

您的电子邮箱地址不会被公开。

暂无评论

Copyright © 2012-2022 YUNWEIPAI.COM - 运维派 京ICP备16064699号-6
扫二维码
扫二维码
返回顶部