从PVE上克隆一个ubuntu的虚拟机,发现磁盘太大了,用不了那么多,于是想着能不能把磁盘缩小了。搜集了多个资料,经过多次尝试,最终搞定了,在此记录一下,也分享给大家。
原磁盘大小
在虚拟机内部查询,如下图所示,最终目的:把 /dev/sda3 去掉,然后把 swap 分区做成 3G大小。

1、整理虚拟机内部磁盘分区
1.1、关闭 swap 功能,执行:swapoff -a
查看是否关闭成功,执行:free -lh 。如果 Swap 行 total 列是 0B 则说明已经关闭 swap 功能
1.2、卸载 /dev/sda3,执行:umount /dev/sda3,如果是空闲状态,都会执行成功。
查看是否卸载,执行:df -lh 查看即可。
1.3、删除 /dev/sda3 和 /dev/sda4 分区,重现创建 3G 的 /dev/sda3 分区,作为 swap 分区
执行:parted /dev/sda ,使用 rm 4 和 rm3 指令分别删除两个分区。
然后使用 mkpart 指令创建 swap 分区。参考下图:

输入 q 退出交互界面。
另外知识点:
unit s:指定 print 以扇区单位显示;
unit compact: 指定 print 以字节大小展示。但是,这里的GB不是GiB,也就是说 B->KB->MB->GB 是 1000 进制的,不是 1024 进制。
1.4、创建 swap 文件格式,输出会提示设备UUID。然后修改 /etc/fstab 配置,保存后,使用 mount -a 挂载。

/etc/fstab 添加此行即可。
/dev/disk/by-uuid/308d3e1a-24c5-4831-8a59-52e1c4ddc599 none swap sw 0 0
1.5、开启 swap 功能:swapon -a 。检查是否能生效:free -lh 。没有什么问题,先关闭虚拟机:poweroff。
2、缩小虚拟磁盘
这一步在宿主机操作。我安装的PVE8.4.0,在LVM卷上创建的虚拟磁盘,所有需要减小 LV 大小。
2.1、先查看一下 lv 情况。
找到 虚拟机 挂载的磁盘信息,如下图所示:

然后执行 lvdisplay 查看对应卷信息

2.2、缩小 vm-105-disk-0 卷的大小,使用 lvresize 。
需要先提前计算一下缩减到多少。/dev/sda3 最后终止的扇区是:257953791,所以计算大小为:
( 257953791 + 1 ) * 512 / 1024 / 1024 = 125954 MB
执行指令:lvresize -L 125954M /dev/pve/vm-105-disk-0

3、重新分区
上边的操作已经缩小了 磁盘的大小,但是,执行 fdisk -l 发现,只有一个 ID是 ee、类型是 GPT 的分区。所以 GPT 分区表已经坏了,需要重新创建原来的分区。注意:到目前还不能打开虚拟机,第2步和第3步都在宿主机上完成。
3.1、使用 gdisk 工具。如果没有,执行 apt install gdisk 安装。
执行:gdisk /dev/pve/vm-105-disk-0 进入交互页面,重建 GPT 分区表。具体操作看下图:

3.2、最后提示:重启或者用 partprobe / kpartx 工具来生效。执行一下:kpartx -a /dev/pve/vm-105-disk-0 ,然后查看分区情况。如果没有 kpartx 工具,执行 apt install kpartx 安装。


至此,虚拟机磁盘已经成功缩小了,可以开机查看磁盘情况。
开机测试
打开虚拟机测试是否能正常启动,并查看硬盘分区情况。

查看管理台 VM 磁盘大小

注意:这次并没有改变正在使用的分区,只是在虚拟磁盘的后半部分有一个分区不再使用了,做了一个缩减。这就是系统盘和数据盘没有单独做虚拟磁盘的坏处。建议在PVE安装虚拟机,以后分区,系统分区做一个虚拟磁盘,数据分区单独再做一个虚拟磁盘。
在管理台查看 虚拟机 的硬件配置信息时,发行磁盘大小并没有改变。这个是读取的虚拟机信息文件,直接在宿主机修改:/etc/pve/nodes/xpve/qemu-server/105.conf 文件即可。
发表回复