因此,我陷入了一种特殊的困境,并且找到了几种解决问题的方法,但却缺少了一些部分。
我的问题的根源在于,我有一台旧的 ESXi 托管服务器,上面有几个关键的 debian VM,还有一台我想托管这些 VM 的新 ESXi 服务器。这些服务器位于不同的数据中心,虽然 VM 的实际使用大小只有几 GB,但它们都设置为加密的 LVM,因此 ESXi 将它们视为已满的 3TB 驱动器。理想情况下,我希望创建这些 VM 非关键部分的副本,然后在某个时间点宣布停机并冻结它们并转移关键部分。如果磁盘未加密,我可以缩小驱动器,但我的理解是,要缩小驱动器,我需要关闭服务器,这并不理想。因此,这是我可以采取的途径。
- 手动传输每个 3TB VMDK 文件(非常慢)
- 停机并调整大小以使传输更顺畅(停机并不理想)
- 使用 DD、sfdisk、LVM 工具和 dump 的组合将内容传输到新的虚拟机
我很想使用 3,但我真的不确定我该如何做到这一点,或者什么是可以保留 LVM 和加密设置的最佳方法。
答案1
由于加密,您无法仅使用从“外部”查看虚拟机的工具来迁移磁盘的“有用”部分。这包括 vMotion、Veeam B&R 等。
我唯一想到的是使用免费的 VMware 转换器执行的迁移:这允许您通过从“内部”查看 VM 来执行“P2V”实时迁移。
将其安装在可以同时访问 VM 和 ESXi 主机的 Windows VM 上,选择迁移“已打开”的 Linux 计算机,并提供 VM 和 ESXi 主机的根凭据。它将登录到计算机并从“内部”执行迁移,看到磁盘已满几 GB,然后仅传输这些磁盘。我怀疑,如果您选择“基础架构”,转换器将尝试利用 VM 已在基础架构中的事实,而这在您的特定情况下是不好的。
从未在家中或生产中使用加密磁盘尝试过此操作,但我执行了从物理主机到 ESXi 主机的 1TB 磁盘的 P2V 实时迁移,通过 1GBe 进行迁移仅花费大约 40 分钟,而通过 GB 链路传输完整的 1TB 数据的估计原始时间约为 3 小时,因此它执行的操作类似于逐个文件类型的复制。
答案2
所以,这是 P2V 失败后最好的情况。
- 使用有效的 LVM 加密在目标上制作副本 VM。
创建第二个 VM 并将加密的 LVM 安装到 /mnt
Important so that the server itself is not running
- 为根用户在服务器之间复制密钥以防止访问问题
运行以下命令
rsync -aHxvK --numeric-ids --progress --exclude=/etc/fstab --exclude=/etc/crypttab --exclude=/etc/initramfs-tools/conf.d/* --exclude=/etc/network/* --exclude=/mnt/* --exclude=/dev/* --exclude=/proc/* --exclude=/sys/* --exclude=/tmp/* --exclude=/boot/* --exclude=/root/* [email protected]:/* /mnt/
这将复制大多数不变的文件,并为您提供一个可运行的服务器“副本”。大多数 rsync 都显示在一些在线指南中,但我发现加密卷需要 /etc/crypttab,否则它无法启动,需要 initramfs,或者您在启动时控制台垃圾邮件
完成后,您可以安排短暂的停机时间并关闭主要服务(如数据库和 Web 服务器),然后在启动和将端点传输到新服务器之前对这些目录进行最后的传输。
答案3
一个可能的解决方案:
在目标主机上构建一个新的空虚拟机。
构建或重用简单的辅助虚拟机。
将目标虚拟机的磁盘连接到辅助虚拟机,在其上构建分区和文件系统,然后挂载它们。如果使用旧 (0.xx) grub 版本,请在创建文件系统时使用 -I 128!
从辅助虚拟机中,通过 rsync 将尽可能多的正在运行的系统(不包括 /proc 和 /sys!!)复制到目标虚拟机文件系统中。您可能需要 --numeric-ids、-H 和 --sparse/--inplace。请慎重使用 --delete。
只要您能负担得起,就让源系统短暂停机(关闭尽可能多的服务,尤其是数据库服务器!),并执行最后的 rsync。
Chroot 进入副本。修复 /proc 和 /sys 挂载点、/dev(MAKEDEV 通用通常会为您提供合理的、独立于 udev 的设置)和引导加载程序(最简单的方法是执行简单的 grub-install - 注意您的设备文件指向的位置!- 然后在第一次启动时使用手动选项,然后在运行系统内正确修复它)。
取消根目录,卸载并断开磁盘。启动副本(首先断开网络。您可能需要手动调整引导加载程序选项)。