多年前,我在 Atlantic Net Cloud 上安装了许多服务器,现在我们大部分东西都放在 AWS 上。AWS 的优点是它允许我关闭(并且不付费)很少使用的机器。我想利用这一点,但迁移它会很困难,尤其是那个 Windows 服务器,设置起来很麻烦。Unix 没什么大问题。
有没有办法只下载 VM 映像?如果我只提取二进制磁盘映像(使用 cygwin dd 等),将其发送到 AWS,将其以二进制形式写入 EBS 磁盘 (dd),然后尝试启动它,会怎么样?这有成功的机会吗?
我曾多次对物理笔记本电脑驱动器进行过这样的操作:只需将其从 NUC 中拔出并放入 ThinkPad 中,然后当 ThinkPad 坏掉时,将其转移到另一台 ThinkPad 上,再放回 NUC,无论怎样,它总是有效的。但我从未对虚拟机进行过这样的操作,而 AWS 尤其重要,因为在启动期间您无法访问控制台。
答案1
你应该使用AWS 应用程序迁移服务是的,您可以使用一种称为“应用程序迁移服务”的东西来迁移服务器,想想看。一旦您进入控制台的该区域,它将指导您完成整个过程,但您基本上是在源服务器上安装一个代理,它会复制到 AWS,然后您停止旧服务器,然后启动新服务器。
如果您的操作系统太旧且不受 AWS 支持,您应该复制数据并重新安装应用程序,而不是执行不受支持的变通方法。
答案2
我确实能够做到这一点,现在我感到非常有成就感。
大多数人没有意识到将 Windows 从一个硬件转移到另一个硬件是多么容易。方法很简单,只需生的复制磁盘,将其插入新机器并启动。
对于那些认为从头开始设置 Windows 系统更容易的人来说,事实并非如此,特别是如果你依赖 10 多年的老软件并且没有安装盘:将系统磁盘换到新硬件上绝对更容易!
如果没有控制台,迁移到 AWS 会稍微困难一些。但还是可以做到的。
概述
- 在旧的非 AWS 机器上安装 AWS 驱动程序,并打开启动日志记录。
- 如果还没有,请获取 cygwin,这样就可以使用 dd 来访问原始磁盘,还可以使用 gzip 和 ssh。
- 尽可能缩小系统卷(C:驱动器)。
- 如果缩小后磁盘上有足够的空间,请在另一个磁盘上创建文件系统分区,或者准备将系统分区原始克隆到新磁盘中,如果您可以关闭系统并可以访问磁盘,那就更容易了。但在 Atlantic 云上您无法做到这一点。
- 将系统磁盘的原始 dd 副本复制到其他空间,从磁盘的起始位置直到系统分区之后,以及物理磁盘的最后几个块,通过 gzip 写入大副本可节省大约 40% 的空间,这对于下一步很方便。
- 将这两个原始数据文件复制到某个临时空间,最好连接到 AWS 上的 UNIX(FreeBSD、Linux 等)服务器。我使用了 scp 或通过 ssh 的管道。这是最耗时的步骤,我以 1.6 MB/s 的传输速度花了 10 个小时。这就是为什么缩小系统容量如此重要的原因。
- 获取与原始大小相同的 AWS EC2 EBS 磁盘(在我的情况下为 160 GB,并且最终的块数与我的原始块数完全相同,非常好。)
- 将该新磁盘附加到正在运行的 UNIX 系统。
- 现在 zcat | dd 将主要原始数据文件转移到新磁盘,并写入最后的块。
- 将新磁盘从 UNIX 系统中分离。
- 启动 EC2 Windows 实例,启动并连接。我使用了 t2.micro(免费套餐),这是可行的架构(t3.micro 不起作用)。
- 将该新磁盘附加到新的 Windows 系统。
- 在分区工具中,您可能会看到新磁盘处于“脱机”状态,右键单击并将其联机
- 您可能会在缩小的空间中看到备用分区,该内容未被复制,只需删除该分区即可。在系统磁盘克隆上,单击属性并扫描/检查文件系统(在克隆过程中被关闭)。
- 彻底关闭 Windows 系统
- 在 EC2 控制台上,系统停止后,分离两个磁盘,并将克隆的磁盘附加为 /dev/sda1(启动磁盘)。
- 现在启动实例。
- 一旦它从“待处理”状态变为“已启动”,获取实例屏幕截图,您将看到它在搅动,希望不会卡住,而是显示“按 ALT+CTL+DEL”屏幕。因此系统启动了。
- 如果您还无法通过远程桌面访问系统,请等待一段时间,然后在 EC2 控制台上发出正常停止实例。无需急躁并强制停止。只需等待一分钟,它就会停止。然后再次重新启动。
- 现在,当实例屏幕截图进入“按 ALT+CTL+DEL”屏幕时,再次尝试远程桌面,现在它应该可以工作了。
细节
第 1 点:安装 AWS 驱动程序在旧的非 AWS 机器上,这并非易事。就我而言,我有一台非常旧的 Windows 2008 服务器,它甚至无法运行许多 AWS 驱动程序附带的 install.ps1 脚本。
本文档在此处:https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/migrating-latest-types.html是最好的行动指南。
- 安装 AWS PV 驱动程序
- 安装 AWS ENA 驱动程序
- 安装 AWS NVMe 驱动程序
- 安装 EC2Config 和 EC2Launch
PV 驱动程序很难,因为最新版本会告诉您它不支持您的旧系统。但经过一番挖掘,我发现最后支持的版本是 8.3.4,然后我发现该版本的 URL 是:https://s3.amazonaws.com/ec2-windows-drivers-downloads/AWSPV/8.3.4/AWSPVDriver.zip一旦找到它,包含的 .msi 安装程序就可以顺利运行。
其他驱动程序从最新版本开始就可以运行。但运行 ENA 驱动程序的 install.ps1 脚本相当容易。对于 NVMe 驱动程序来说,这很难。我最终只能亲眼阅读脚本,解释它的作用,然后手动执行。
EC2Config 和 EC2Launch 的安装非常简单。
现在重新启动系统,即使是在旧平台上,也已经出现了 AWS 背景,右上角有 AWS 系统信息面板。虽然没有显示太多内容,但它告诉您 EC2Launch 这个东西发挥了神奇的作用。
关于 dd 副本。
在 cygwin 上,磁盘驱动器是 /dev/sda、sdb、sdc、... 您需要的是原始驱动器,而不是分区。首先,您需要获取要复制的分区的确切大小:
$ wmic partition get name,bootable,size,type
Bootable Name Size Type
TRUE Disk #0, Partition #0 104857600 Installable File System
FALSE Disk #0, Partition #1 104805171712 Installable File System
FALSE Disk #0, Partition #2 66884468736 Installable File System
这些大小以字节为单位。将启动分区和系统分区相加,104857600 + 104805171712 = 104910029312 字节。为了加快 dd 的速度,您需要读取更大的块,例如 10 MiB(bs=10M)。在这种情况下,您需要除以 1024 两次,得到 104910029312 /1024 /1024 /10 = 10005.00004882..然后向上舍入:
dd if=/dev/sda bs=10M count=10006 status=progress |gzip -cv > /cygdrive/d/diskimage.gz
在磁盘的末尾,您只需将所有分区的总和 66884468736 + 104805171712 + 104857600 = 171794498048 字节/1024 = 167768064 kiB 块:
dd if=/dev/sda bs=1024 skip=167768064 of=/dev/null status=progress
4096+0 records in
4096+0 records out
4194304 bytes (4.2 MB, 4.0 MiB) copied, 0.057467 s, 73.0 MB/s
4 kiB 是一个不错的小尺寸。如果这个尺寸非常大,您会知道磁盘的确切大小,然后只需取最后的 4 kiB 即可。
$ dd if=/dev/sda bs=1024 skip=167768064 of=diskimage.end status=progress
4096+0 records in
4096+0 records out
4194304 bytes (4.2 MB, 4.0 MiB) copied, 0.0673959 s, 62.2 MB/s
制作完这些副本后,将内容移至 AWS,在连接了新 EBS 卷的 UNIX 机器上,仔细检查它的位置,以免错误地擦除其他磁盘。就我而言:
zcat diskimage.gz |dd of=/dev/nvd4 bs=10M status=progress
104847114240 bytes (105 GB, 98 GiB) transferred 1550.052s, 68 MB/s
0+1600960 records in
10006+0 records out
104920514560 bytes transferred in 1551.084986 secs (67643305 bytes/sec)
结尾:
dd if=diskimage.end of=/dev/nvd4 bs=1024 seek=167768064 status=progress
2983936 bytes (2984 kB, 2914 KiB) transferred 2.002s, 1491 kB/s
4096+0 records in
4096+0 records out
4194304 bytes transferred in 2.836086 secs (1478906 bytes/sec)
现在您已准备好启动了!
当我第一次无法连接它时,是因为网络没有正确设置。
2022/03/14 17:45:53Z: Windows sysprep configuration complete.
2022/03/14 17:46:03Z: Failed to find primary network interface...retrying...
2022/03/14 17:46:13Z: Failed to find primary network interface...retrying...
2022/03/14 17:46:24Z: Failed to find primary network interface...retrying...
打开启动日志,查看 C:\Windows 中的一些 AWS 相关设置日志(将磁盘连接到正在运行的 Windows 系统时为 E:\Windows),按文件时间降序对目录视图进行排序,我可以看到 xen 驱动程序已安装,但未找到 xenbus,xennet 也未安装。但在第二次启动时,我突然注意到 xennet曾是现已安装。所有问题都解决了。
答案3
看起来你正在做一件不合常规的事情,试图让 Windows 在 AWS 上工作。话虽如此,我有两个想法给你。
- 您是否尝试过此过程来获取启动控制台访问权限?您只是说“它不起作用”,而没有说明您尝试了什么。
https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/troubleshooting-sac.html
- 您也可以在嵌套虚拟化中运行它。创建一个运行现代 Windows 版本的新 EC2 实例,运行 HyperV 或 VMware,然后尝试启动磁盘映像。您至少可以获得控制台访问权限并在需要时安装其他安装介质。
/编辑 - 您在问题描述中陈述了过程的几个部分,但没有详细说明。您是如何预安装驱动程序的?您是否使用了此处的软件包?
https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/Upgrading_PV_drivers.html