最初,我在 Hyper-V 下设置了一个大约 6 TB 的动态扩展 VHDX,然后使用 LVM 在其上安装了 Ubuntu Server 20.04。此后,我设法将已安装的 Ubuntu Server 缩小到 155 GB,但动态扩展 VHDX 的容量仍为 6 TB。我想将其移动到一个远没有 6 TB 的驱动器上。我认为它可能无论如何都可行,因为 Ubuntu Server 不能超过 155 GB,但我希望 VHDX 最多能反映 200 或 250 GB。但我不知道如何在不关闭已安装的 Ubuntu Server 的情况下缩小它。如果我删除所有检查点并通过 Hyper-V 编辑 VHDX 并以这种方式缩小它,它会以某种方式导致问题,并且 Ubuntu Server 之后将无法加载。我一定是漏掉了一步……任何帮助都非常感谢!!
答案1
好的,所以我实际上认为我已经明白了(在下面一些网站的帮助下) - 这并不容易。
首先,如上所述,我必须先(在提出上述问题之前)减小 Ubuntu Server 中所有内容的大小(为了完整起见,下面发布) - 我按照以下网站进行了操作:
https://maideveloper.com/blog/how-to-move-lvm-partition-to-another-disk-drive
这是我所做的:
我启动了一个 LiveCD(Ubuntu Desktop 20.04)并在终端中运行了这些命令(我想——我的记忆现在有点模糊):
sudo e2fsck -f /dev/<VOLUME_GROUP/<LOGICAL_VOLUME>
sudo resize2fs /dev/<VOLUME_GROUP>/<LOGICAL_VOLUME> 150G
sudo lvreduce -L 155G /dev/<VOLUME_GROUP>/<LOGICAL_VOLUME>
sudo resize2fs /dev/<VOLUME_GROUP>/<LOGICAL_VOLUME>
您应该将 <VOLUME_GROUP> 和 <LOGICAL_VOLUME> 替换为适合您系统的条目。我相信上述命令:检查错误,然后缩小文件系统,然后缩小逻辑卷(不要缩小到小于您刚刚缩小的新文件系统大小),然后扩展文件系统以使用逻辑卷上的所有可用空间。我还认为类似这样的操作可能有效,但我没有尝试:sudo lvreduce --resizefs -L 155G /dev/<VOLUME_GROUP>/<LOGICAL_VOLUME>
然后我进入 LiveCD 上的 GParted GUI,用它将分区缩小到新的 155 GB 大小,剩下大量未分配空间。这就是我上面提出的问题。
接下来我找到了这个答案:如何将我的 LVM 250 GB 根分区移动到新的 120GB 硬盘?
这是我所做的:
- 使用 Hyper-V 创建一个新的动态扩展 VHDX 硬盘(这次只有 250 GB),并将其附加到我现有的 Ubuntu Server Hyper-V
- 再次启动 LiveCD 并使用 GParted 在此新 VHDX 硬盘 (sdb) 上创建与我现有的 6 TB 动态扩展 VHDX 硬盘 (sda) 完全相同的分区 - 甚至设置标志等。
- 重新启动我的 Ubuntu 服务器并运行以下命令:
sudo pvcreate /dev/sdb3
(sda3 是我的逻辑卷所在的位置)sudo vgextend <VOLUME_GROUP> /dev/sdb3
sudo pvmove /dev/sda3 /dev/sdb3
sudo vgreduce <VOLUME_GROUP> /dev/sda3
- 启动 Clonezilla 并将 sda1 克隆到 sdb1,然后将 sda2 克隆到 sdb2
- 修改了Hyper-V的设置:
- 删除了新的第二个 250 GB VHDX 硬盘
- 调整主驱动器以指向新的 250 GB VHDX 硬盘驱动器
- 启动 Ubuntu Server Hyper-V 时,一开始(短暂)出现了一个奇怪的错误,然后它启动正常了,瞧瞧 - 我使用的是 250 GB 硬盘!我得到的错误是:
System BootOrder not found. Initializing defaults. Creating boot entry "Boot0004 with label "ubuntu" for file "\EFI\ubuntu\shimx64.efi"
- 意识到如果你去查看固件 -> 启动顺序下的 Hyper-V 设置,现在有 2 个 shimx64.efi 文件 - 一个在最顶部(显然是 Hyper-V 在上述第 6 步中创建的新文件),另一个在 DVD 驱动器下方(旧文件)。没有简单的方法可以删除旧文件 - 所以我找到了这个网站:https://vmlabblog.com/2018/08/how-to-change-vm-bootorder-with-powershell/提供了一些指导
- 在管理员 PowerShell 中,运行以下命令:
$ubuntuserver = Get-VMFirmware "<NAME OF VIRTUAL MACHINE IN HYPER-V>"
$goodfile = $ubuntuserver.BootOrder[0]
$dvddrive = $ubuntuserver.BootOrder[1]
$badfile = $ubuntuserver.BootOrder[2]
$hddrive = $ubuntuserver.BootOrder[3]
$network = $ubuntuserver.BootOrder[4]
Set-VMFirmware -VMName "<NAME OF VIRTUAL MACHINE IN HYPER-V>" -BootOrder $dvddrive,$goodfile,$hddrive,$network
$ubuntuserver.BootOrder
(只是为了确认一切)
- 我觉得这个办法奏效了。我想我现在已经准备好了。
我欢迎大家对上述内容提出任何意见或检查,因为我并不完全确定我所做的是否正确,但看起来是可以的。希望这也能帮助到其他人!