將 Server 2008 R2 VM 從 atlantic.net 遷移到 AWS
多年前,我在大西洋網路雲上安裝了許多伺服器,現在我們的大部分東西都在 AWS 上。AWS 的好處是它允許我關閉(而不是付費)很少使用的機器。我想利用這一點,但遷移它會很困難,尤其是一個 Windows 伺服器,它在你知道要設置什麼時會很痛苦。Unix沒有大問題。
有沒有辦法只下載VM映像?如果我只是提取二進制磁碟映像(使用 cygwin dd 左右),將其發送到 AWS,將其二進制寫入 EBS 磁碟 (dd),然後嘗試啟動它。這會有成功的機會嗎?
我已經多次使用物理筆記型電腦驅動器做到這一點:只需將 NUC 拉出並放入 ThinkPad,然後當它分崩離析時,將其轉移到另一個 ThinkPad 上,然後再回到 NUC,無論如何,它總是有效的。但我從來沒有在虛擬機上做過這件事,AWS 尤其重要,因為你在啟動期間無法訪問控制台。
我實際上能夠做到這一點,我現在感覺非常有成就感。
大多數人沒有意識到的一件事是,將 Windows 從一種硬體轉移到另一種硬體是多麼容易。該方法只是獲取磁碟的原始副本,將其插入新機器並啟動。
對於那些認為從頭開始設置 Windows 系統更容易的人來說,事實並非如此,尤其是如果您依賴超過 10 年的舊軟體並且沒有安裝盤:將系統盤換成新硬體!
在沒有控制台的情況下遷移到 AWS 會更加棘手。但這是可以完成的。
概述
- 在舊的非 AWS 機器上安裝 AWS 驅動程序,並打開啟動日誌記錄。
- 如果您還沒有,請獲取 cygwin,這是為了讓 dd 可以訪問原始磁碟,還使用了 gzip 和 ssh。
- 盡可能縮小系統卷(C:驅動器)。
- 如果你在壓縮後磁碟上有足夠的空間,在另一個磁碟上創建一個文件系統分區或準備將系統分區原始複製到新的分區,如果你可以關閉系統並可以訪問磁碟,那就更容易了。但是在大西洋雲上你不能這樣做。
- 將系統盤的原始dd拷貝到其他空間,從磁碟開始到系統分區之後,以及物理磁碟的最後幾個塊,通過gzip寫入大副本可以節省40%的空間,這對下一步很方便。
- 將這兩個原始數據文件複製到一些臨時空間,該空間理想地連接到 AWS 上的 UNIX(FreeBSD、Linux 等)伺服器。我使用 scp 或通過 ssh 的管道。這是最耗時的步驟,以 1.6 MB/s 的傳輸速度花了我 10 個小時。這就是為什麼縮小系統體積如此重要的原因。
- 獲取原始大小的 AWS EC2 EBS 磁碟(在我的情況下為 160 GB,它最終與我原始的塊數完全相同,非常好。)
- 將該新磁碟附加到正在執行的 UNIX 系統。
- 現在zcat | 將主要原始數據文件添加到該新磁碟,並寫入最後的塊。
- 從 UNIX 系統中分離該新磁碟。
- 啟動 EC2 Windows 實例,啟動並連接。我使用了 t2.micro(免費層),它是工作架構(t3.micro 不起作用)。
- 將該新磁碟附加到新的 Windows 系統。
- 在分區工具中,您可能會看到新磁碟“離線”,右鍵點擊並啟用聯機
- 您可能會在縮小的空間中看到備用分區,該內容沒有被複製,只需刪除該分區。在系統磁碟複製上,點擊“屬性”並掃描/檢查文件系統(在複製中被關閉)。
- 徹底關閉Windows系統
- 在 EC2 控制台上,一旦系統停止,分離兩個磁碟,並將複製的磁碟附加為 /dev/sda1(引導磁碟)。
- 現在啟動實例。
- 一旦它從 Pending 狀態變為 Started 狀態,獲取實例螢幕截圖,您會看到它在攪動,希望不會卡住,但會顯示“按 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(將磁碟附加到正在執行的 Windows 系統時為 E:\Windows)中的一些 AWS 相關設置日誌,按文件時間降序排序目錄視圖,我可以看到 xen 驅動程序是已安裝,但未找到 xenbus 且未安裝 xennet。但是在第二次啟動時,我突然注意到現在已經安裝了 xennet。所有的問題都消失了。
您應該使用AWS Application Migration Service。是的,你使用一種叫做“應用程序遷移服務”的東西來遷移伺服器,去看看吧。一旦你進入控制台的那個區域,它會引導你完成整個過程,但你基本上是在源伺服器上安裝一個代理,它複製到 AWS,你停止舊伺服器,你啟動新伺服器。
如果您的作業系統太舊且不受 AWS 支持,您應該複製您的數據並重新安裝您的應用程序,而不是採取不受支持的變通辦法。