LVM(Ubuntu)不停机虚拟机磁盘扩容

最近频繁使用PVE创建多个虚拟机,在系统安装时为了减少磁盘占用只给了32G的磁盘空间,但是在实际使用的过程中经常出现磁盘爆满的情况。

虚拟机磁盘扩容

通过PVE的qcow2格式磁盘挂载可以直接扩展系统可用的磁盘空间,操作方法也很简单。选择虚拟机 > Hardware > Hard Disk > Disk Action > Resize。随后填入需要增加的空间大小后确认即可。

系统分区扩容

在使用LVM作为分区管理的系统中,均可以通过该方案无损调整分区大小。此处以Ubuntu24.04为例给出说明,虽说无损但是防呆不防傻,操作前仍需备份关键资料避免损失。

LVM管理的是磁盘的逻辑分区方式,存在 物理卷(PV, Physical volume)、卷组(VG,Volume group)和逻辑卷(LV,Logical volume)相关概念,此处不赘述其逻辑和实现。但是需要指明的一点是,最贴近磁盘概念的PV管理的仍然是指定的磁盘分区,相关命令无法修改磁盘的 分区 信息。

因此在扩容虚拟机的磁盘空间时,仍然需要 fdisk 工具对磁盘的分区信息做调整。请注意,这里仅调整磁盘分区信息,调整的是磁盘分区描述的配置信息。不是在物理意义上重新创建磁盘分区!!

例如我当前的磁盘分区状态如下

Bash
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 128G 0 disk
├─sda1 8:1 0 1M 0 part
├─sda2 8:2 0 2G 0 part /boot
└─sda3 8:3 0 30G 0 part
└─ubuntu--vg-ubuntu--lv 252:0 0 15G 0 lvm /

可以看到磁盘具有128G空间,但是sda3分区只有30G空间,此时运行 pvresize 啥都不好使。所以要先删除sda3分区表,再创建一个出来。新创建的分区表起始扇区要严格匹配删除的扇区,终止扇区只能向后延长,并且分区表创建成功后不要!!不要!!不要!!自动初始化(不要一路按回车!!)

Bash
$ fdisk /dev/sda
# ----------------------------------------
Command (m for help): d                           # 进入分区删除功能
Partition number (1-3, default 3):               # 删除第三个磁盘,默认为最后一个磁盘,直接回车
# ----------------------------------------
Command (m for help): n                           # 进入分区创建功能
Partition number (3-128, default 3):           # 创建第三个磁盘,使用默认值
First sector (4198400-268435422, default 4198400): # 磁盘分区起始扇区,默认值与删除的恰好匹配,直接回车
Last sector, +/-sectors or +/-size{K,M,G,T,P} (4198400-268435422, default 268433407): # 磁盘分区终止扇区,默认值是整个磁盘,直接回车

Created a new partition 3 of type 'Linux filesystem' and of size 126 GiB.
Partition #3 contains a LVM2_member signature.

Do you want to remove the signature? [Y]es/[N]o: N    # 选择N,保留分区标识。不然数据就拜拜啦
# ----------------------------------------
Command (m for help): w                           # 写入分区信息

The partition table has been altered.
Syncing disks.

备注,如果没有fdisk就安装一个。

操作完成后即可通过 lsblk 看到sda3分区已经变大了。

Bash
$ lsblk
NAME                      MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sda                         8:0    0  128G  0 disk
├─sda1                      8:1    0    1M  0 part
├─sda2                      8:2    0    2G  0 part /boot
└─sda3                      8:3    0  126G  0 part
  └─ubuntu--vg-ubuntu--lv 252:0    0   15G  0 lvm  /

LVM系统分区扩容

在上述磁盘分区已经扩容的基础上使用LVM的能力扩容系统分区。

先使用 pvresize /dev/sda3 扩容物理卷(PV)的可用范围为整个硬盘分区。卷组(VG)会自动跟随PV增大容量,无需手动再做调整。

Bash
$ pvs
  PV         VG        Fmt  Attr PSize   PFree
  /dev/sda3  ubuntu-vg lvm2 a--  <30.00g 15.00g
$ pvresize /dev/sda3
  Physical volume "/dev/sda3" changed
  1 physical volume(s) resized or updated / 0 physical volume(s) not resized
$ pvs
  PV         VG        Fmt  Attr PSize    PFree
  /dev/sda3  ubuntu-vg lvm2 a--  <126.00g 111.00g

$ vgdisplay 
  --- Volume group ---
  VG Name               ubuntu-vg
  System ID
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  4
  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               <126.00 GiB
  PE Size               4.00 MiB
  Total PE              32255
  Alloc PE / Size       3839 / <15.00 GiB
  Free  PE / Size       28416 / 111.00 GiB
  VG UUID               ZzEzfr-Qjgx-cmYh-NnBt-QvuX-vUxg-pXjhf6

扩展Linux系统所在的逻辑分区到整个VG,即扩展 /dev/ubuntu-vg/ubuntu-lv 设备空间大小。使用 lvextend 命令扩容,更多控制参数可自行上网搜索。通过 +100%FREE 来描述扩容的范围是所有的剩余空间,避免计算空间大小。

Bash
$ lvs
  LV        VG        Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  ubuntu-lv ubuntu-vg -wi-ao---- <15.00g
$ lvextend -l +100%FREE /dev/ubuntu-vg/ubuntu-lv
  Size of logical volume ubuntu-vg/ubuntu-lv changed from <15.00 GiB (3839 extents) to <126.00 GiB (32255 extents).
  Logical volume ubuntu-vg/ubuntu-lv successfully resized.
$ lvs
  LV        VG        Attr       LSize    Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  ubuntu-lv ubuntu-vg -wi-ao---- <126.00g

在LVM扩容后要根据系统的文件系统类型更新文件系统的容量上限。

Bash
# 检查文件系统类型
$ df -T /
Filesystem                        Type 1K-blocks    Used Available Use% Mounted on
/dev/mapper/ubuntu--vg-ubuntu--lv ext4  15371208 9202180   5366420  64% /

# 对于ext4文件系统
$ resize2fs /dev/ubuntu-vg/ubuntu-lv

# 对于xfs文件系统
$ xfs_growfs /

全部操作完成后可使用 dflsblk 命令检查效果

Bash
$ lsblk
NAME                      MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sda                         8:0    0  128G  0 disk
├─sda1                      8:1    0    1M  0 part
├─sda2                      8:2    0    2G  0 part /boot
└─sda3                      8:3    0  126G  0 part
  └─ubuntu--vg-ubuntu--lv 252:0    0  126G  0 lvm  /
$ df -h
Filesystem                         Size  Used Avail Use% Mounted on
tmpfs                              794M  996K  794M   1% /run
/dev/mapper/ubuntu--vg-ubuntu--lv  124G  8.8G  110G   8% /
tmpfs                              3.9G     0  3.9G   0% /dev/shm
tmpfs                              5.0M     0  5.0M   0% /run/lock
/dev/sda2                          2.0G  191M  1.6G  11% /boot
tmpfs                              794M   12K  794M   1% /run/user/0

You may also like...

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注