我在 Windows 10 主机上创建了一个 Ubuntu 22.04 虚拟盒 VM。我为虚拟盒中的动态扩展磁盘分配了 600GB 虚拟内存大小。创建此 VM 时,我以为我的 SSD 是 1TB,但实际上只有 500GB。
最近,虚拟机已增长到 277GB,加上主机 Windows 文件系统,已填满 SSD。我能够将其缩小到 60GB,但想减少虚拟内存大小以确保这种情况不会再次发生。
Virtual Box (7.0.12) 尚不支持缩小虚拟大小。我尝试实施的解决方案是创建一个具有正确虚拟大小限制的空 .vdi 映像文件。然后,我尝试使用 gparted 和 dd 克隆上一个磁盘。我面临的问题是 gparted 无法减小主分区 /dev/sda3 的大小,因为该分区在一个卷组 (vgubuntu) 中有两个逻辑卷 (root 和 swap_1)。
我知道有更简单的解决方案,包括增加 SSD 的大小并从头开始创建新的 VM。目前,我将此视为一种学习练习,如果可能的话,我想使用此方法解决这个问题。
我尝试了以下方法:
- 克隆虚拟机作为备份。
- 下载 Gparted iso 映像并将其指定为虚拟盒中启动顺序的第一位。
- 创建了一个具有 200GB 虚拟内存大小的 .vdi 映像,但未将其扩展到最大容量。将其添加到虚拟盒中的 SATA 端口。
- 使用 gparted iso 运行虚拟机。下图显示 /dev/sda3 分区分配了 500GB,使用率达到 100%。但实际情况并非如此,我的 .vdi 文件大约有 70 GB。gparted 显示逻辑卷已使用 100%,lvdisplay 显示逻辑卷和组
然后我尝试使用以下命令减小根逻辑卷的大小:sudo lvreduce -L 100GB -n /dev/vgubuntu/root
。这似乎有效gparted 显示未使用的内存
但是,当我对磁盘进行分区时,出现以下错误消息: gparted 错误屏幕
有人能解释为什么会出现这个错误吗?
答案1
事实证明,您需要调整文件系统、逻辑卷和卷组的大小。要同时调整逻辑组和文件系统的大小,请使用以下命令sudo lvresize -L -200G --resizefs /dev/vgubuntu/root
-200G
是你想减少多少 GB,
--resizefs
顾名思义就是调整文件系统大小。
然后,您需要将 swap_1 逻辑卷移动到新释放的空间(该空间以前属于根卷)。为此,请运行sudo pvs --segments /dev/sda3
以查看物理卷。然后sudo pvmove --alloc anywhere /dev/sda3:<start_byte>-<end_byte>
。在上一个命令的输出中,可以在“PE Ranges”标题下找到 /dev/sda3:<start_byte>-<end_byte>。
下图显示了一个示例:将逻辑卷移动到新释放的空间