Linux LVM 分区扩展磁盘空间

在 Linux 系统下通过 LVM (Logical Volume Manager, 逻辑卷管理器) 扩展磁盘空间, 适用于常见的云服务器和虚拟机环境。

LVM 是一种灵活的磁盘管理机制, 允许用户动态调整分区大小、合并或拆分存储空间, 极大提升了磁盘管理的灵活性。

LVM 关系图

查看当前磁盘与分区信息

说明:

  • Vultr 等 VPS 常用 virtio 驱动, 磁盘设备为 /dev/vda
  • 如果是 IDE 驱动, 则为 /dev/sda

DD 完的 Rocky 9 磁盘使用空间。硬盘总空间为 50 GiB, 但系统初始仅能用 3.0G

[root@server ~]# fdisk -l
Disk /dev/vda: 50 GiB, 53687091200 bytes, 104857600 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
Disklabel type: dos
Disk identifier: 0xac55217a

Device     Boot   Start     End Sectors  Size Id Type
/dev/vda1  *       2048 1050623 1048576  512M 83 Linux
/dev/vda2       1050624 7340031 6289408    3G 8e Linux LVM

[root@server ~]# df -h
Filesystem                  Size  Used Avail Use% Mounted on
devtmpfs                    4.0M     0  4.0M   0% /dev
tmpfs                       982M     0  982M   0% /dev/shm
tmpfs                       393M  5.4M  388M   2% /run
/dev/mapper/rl_server-root  3.0G  1.7G  1.3G  57% /
/dev/vda1                   448M  231M  218M  52% /boot
tmpfs                       197M     0  197M   0% /run/user/0

扩展 LVM 磁盘

操作步骤:

  1. 使用 fdisk 创建新分区 (vda3), 重启系统使分区表生效
  2. 将新分区初始化为物理卷 (pvcreate)
  3. 将其加入现有卷组 (vgextend), 实现卷组空间扩展。
  4. 扩展逻辑卷 (lvextend)
  5. 扩容文件系统 (resize2fsxfs_growfs)

使用 fdisk 创建新分区

使用 fdisk 在已有磁盘上创建一个新的主分区 vda3, 并占用磁盘所有剩余空间, 为后续 LVM 扩容做准备。

fdisk 分区命令

完成分区操作后, 建议重启系统以使新分区表生效。重启后再继续进行 LVM 的后续操作。

查看逻辑卷与卷组信息

查看系统中的逻辑卷 (LV) 和卷组 (VG) 信息, 便于确认扩容目标。

lvdisplay

记下根目录的逻辑卷名。这里是 root

[root@server ~]# lvdisplay
  --- Logical volume ---
  LV Path                /dev/rl_server/root
  LV Name                root
  VG Name                rl_server
  LV UUID                oi22tV-mRCx-3HAD-GLQI-HzjU-wH8Z-86Gnl3
  LV Write Access        read/write
  LV Creation host, time server, 2025-09-24 00:01:11 +0800
  LV Status              available
  # open                 1
  LV Size                <3.00 GiB
  Current LE             767
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:0

查看卷组 (VG) 信息

vgdisplay

记下 root 所使用的卷组名, 这里使用的是 rl_server

[root@server ~]# vgdisplay
  --- Volume group ---
  VG Name               rl_server
  System ID             
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  2
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               1
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               <3.00 GiB
  PE Size               4.00 MiB
  Total PE              767
  Alloc PE / Size       767 / <3.00 GiB
  Free  PE / Size       0 / 0
  VG UUID               IqoFnK-lWT3-jLmP-4a0j-iRbS-6sRj-eRRAsr

创建物理卷

vda3 分区初始化为 LVM 可用的物理卷。

[root@server ~]# pvcreate /dev/vda3
  Physical volume "/dev/vda3" successfully created.

扩展卷组

将新建的物理卷 vda3 加入到目标卷组 rl_server 中, 扩展卷组容量。

[root@server ~]# vgextend rl_server /dev/vda3
  Volume group "rl_server" successfully extended

查看卷组剩余空间

确认卷组扩容后剩余的可用空间。

[root@server ~]# vgdisplay
  --- Volume group ---
  VG Name               rl_server
  System ID             
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  3
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               1
  Max PV                0
  Cur PV                2
  Act PV                2
  VG Size               49.49 GiB
  PE Size               4.00 MiB
  Total PE              12670
  Alloc PE / Size       767 / <3.00 GiB
  Free  PE / Size       11903 / <46.50 GiB
  VG UUID               IqoFnK-lWT3-jLmP-4a0j-iRbS-6sRj-eRRAsr

可以看到现在 rl_server 多出了 46.50 GiB 的可使用空间

此时卷组已拥有全部新空间, 可以选择全部分配给根分区, 也可以预留部分空间用于新建 swap 分区等。

扩展逻辑卷与文件系统

扩展逻辑卷 (LV) 并扩容文件系统, 使新增空间可被操作系统使用。

扩展逻辑卷

将卷组中的空闲空间分配给目标逻辑卷。

# lvextend -L 扩展后逻辑卷该有的大小 /dev/卷组名/逻辑卷名 [-r]

[root@server ~]# lvextend -l +100%FREE /dev/rl_server/root
  Size of logical volume rl_server/root changed from <3.00 GiB (767 extents) to 49.49 GiB (12670 extents).
  Logical volume rl_server/root successfully resized.

扩展文件系统

扩展文件系统以识别并使用逻辑卷新增的空间。

提示: 部分发行版支持在 lvextend 时直接加 -r 参数自动扩容文件系统。

ext4 文件系统

resize2fs -p /dev/rl_server/root

xfs 文件系统

xfs 文件系统, 扩容命令如下:

xfs_growfs /dev/rl_server/root

本镜像使用 xfs 文件系统, 扩容命令如下

[root@server ~]# xfs_growfs /dev/rl_server/root
meta-data=/dev/mapper/rl_server-root isize=512    agcount=4, agsize=196352 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=1, rmapbt=0
         =                       reflink=1    bigtime=1 inobtcount=1 nrext64=0
data     =                       bsize=4096   blocks=785408, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
log      =internal log           bsize=4096   blocks=16384, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
data blocks changed from 785408 to 12974080

至此, 系统分区已成功扩容

验证扩容结果

你可以通过 df -h 命令确认根分区已成功扩容。

[root@server ~]# df -h
Filesystem                  Size  Used Avail Use% Mounted on
devtmpfs                    4.0M     0  4.0M   0% /dev
tmpfs                       982M     0  982M   0% /dev/shm
tmpfs                       393M  5.4M  388M   2% /run
/dev/mapper/rl_server-root   50G  2.0G   48G   5% /
/dev/vda1                   448M  231M  218M  52% /boot
tmpfs                       197M     0  197M   0% /run/user/0

一键自动扩容脚本

如需自动化操作, 可直接使用如下脚本一键扩展, 无需手动执行上述所有步骤。

# 扩展系统磁盘
bash <(curl -sL shell.puka.cc/lvm-disk-extend)

原文

扩充DD后linux的使用空间
Linux LVM的基本使用