之前在 Proxmox 上给 Ubuntu 划分了 64GB 的空间,运行一段时间之后磁盘空间剩余不多,就抽时间扩展一下。本文就记录一下给 Proxmox VE 的虚拟机扩展的过程。其实之前的文章里面也略微提到过一些,但是没有完整记录。

本来想着是这一篇文章把虚拟机的扩展和缩减空间一并整理了,但写着写着篇幅就比较大了,本文最后还是集中在扩容部分,缩减(shrink) 部分有机会再整理吧。

扩容之前

在扩容之前,为了防止发生错误,请先备份虚拟机,然后关闭虚拟机操作。

关于备份的操作可以参考: Proxmox VE 下备份和恢复虚拟机

虚拟机磁盘扩容

在 Proxmox VE 管理后台,点击虚拟机,在 Hardware 中选中 Hard Disk,然后在菜单栏中就能看到 Resize disk

proxmox resize vm disk

不过需要注意的是,这里的只能给虚拟机的磁盘增加容量,而不能缩小容量,关于缩小容量的操作以后有机会再写。

图中可以看到原始的虚拟机磁盘分配了 64GB,我又扩容了 64GB。

扩容之后启动虚拟机,SSH 登录,然后执行 df -h

Filesystem      Size  Used Avail Use% Mounted on
udev            7.8G     0  7.8G   0% /dev
tmpfs           1.6G  1.5M  1.6G   1% /run
/dev/sda2        63G   38G   23G  63% /
tmpfs           7.9G  4.0K  7.9G   1% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           7.9G     0  7.9G   0% /sys/fs/cgroup
/dev/loop0       56M   56M     0 100% /snap/core18/2344
/dev/loop2       62M   62M     0 100% /snap/core20/1434
/dev/loop1       56M   56M     0 100% /snap/core18/2409
mergerfs        5.4T  4.6T  510G  91% /mnt/storage
/dev/loop3       68M   68M     0 100% /snap/lxd/22753
/dev/loop6       44M   44M     0 100% /snap/snapd/15177
/dev/loop7       62M   62M     0 100% /snap/core20/1405
/dev/loop5       45M   45M     0 100% /snap/snapd/15534
/dev/loop4       68M   68M     0 100% /snap/lxd/22526
/dev/sdd1       1.8T  1.6T  196G  89% /mnt/sdb1
/dev/sdb1       1.8T  1.6T  117G  94% /mnt/sdd1
/dev/sdc1       1.8T  1.6T  198G  89% /mnt/sdc1
tmpfs           1.6G     0  1.6G   0% /run/user/1000

可以看到系统分区的容量 /dev/sda2 并没有扩展。

还可以用 sudo fdisk -l 来查看。

然后检查一下分区,执行 sudo lsblk

❯ sudo lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
loop0    7:0    0 55.5M  1 loop /snap/core18/2344
loop1    7:1    0 55.5M  1 loop /snap/core18/2409
loop2    7:2    0 61.9M  1 loop /snap/core20/1434
loop3    7:3    0 67.8M  1 loop /snap/lxd/22753
loop4    7:4    0 67.9M  1 loop /snap/lxd/22526
loop5    7:5    0 44.7M  1 loop /snap/snapd/15534
loop6    7:6    0 43.6M  1 loop /snap/snapd/15177
loop7    7:7    0 61.9M  1 loop /snap/core20/1405
sda      8:0    0  128G  0 disk
├─sda1   8:1    0    1M  0 part
└─sda2   8:2    0   64G  0 part /

可以看到系统的分区 sda2 确实是没有完全占用全部的磁盘(sda)。这个时候我们只需要扩展一下系统分区即可。

我们可以使用很多种方式(parted, growpart, cfdisk)扩展分区,这里我们就使用 growpart 命令。

在 Debian 和 Ubuntu 下 growpart 命令在 cloud-guest-utils 包中。

注意这里的数字 2 要替换成自己的分区号。

sudo growpart /dev/sda 2

结果:

❯ sudo growpart /dev/sda 2
CHANGED: partition=2 start=4096 old: size=134211584 end=134215680 new: size=268431327 end=268435423

没有使用 [[LVM]],就使用 resize2fs,执行:

sudo resize2fs /dev/sda2

执行结果:

❯ sudo resize2fs /dev/sda2
resize2fs 1.45.5 (07-Jan-2020)
Filesystem at /dev/sda2 is mounted on /; on-line resizing required
old_desc_blocks = 8, new_desc_blocks = 16
The filesystem on /dev/sda2 is now 33553915 (4k) blocks long.

之后在查询 df -h 就看到空间完美的被使用了。

如果使用了 LVM,需要执行如下步骤:

sudo pvresize /dev/sda2

更新逻辑卷的大小:

sudo lvresize --extents +100%FREE --resizefs /dev/mapper/ubuntu--vg-ubuntu--lv

reference