準備 VMware 無代理程式移轉
本文提供使用移轉和現代化工具,透過無代理程式移轉方法將 VMware VM 移轉至 Azure 時所執行的變更概觀。
注意
此端對端 VMware 移轉案例檔目前為預覽狀態。 如需使用 Azure Migrate 的詳細資訊,請參閱 Azure Migrate 產品檔。
警告
本文參考 CentOS,這是處於終止服務 (EOL) 狀態的 Linux 發行版。 請據此考慮您的使用方式和規劃。 如需詳細資訊,請參閱 CentOS 生命週期結束指導。
將內部部署 VM 移轉至 Azure 之前,您可能需要進行一些變更,才能讓 VM 準備好供 Azure 使用。 這些變更對於確保已移轉的 VM 可以在 Azure 中成功開機,並可以建立 Azure VM 的連線能力非常重要。 Azure Migrate 會自動針對 Linux 和 Windows 的下列作業系統版本處理這些設定變更。 此流程稱為「序列化」。
注意
如果無代理程式移轉支援操作系統的主要版本,則會自動支援所有次要版本和核心。
支援序列化的作業系統版本
- Windows Server 2008 或更新版本
- Red Hat Enterprise Linux 9.x、8.x、7.9、7.8、7.7、7.6、7.5、7.4、7.3、7.2、7.1、7.0、6.x
- CentOS 資料流
- SUSE Linux Enterprise Server 15 SP6、15 SP5、15 SP4、15 SP3、15 SP2、15 SP1、15 SP0、12、11 SP4、11 SP3
- Ubuntu 22.04、21.04、20.04、19.04、19.10、18.04LTS、16.04LTS、14.04LTS
- Kali Linux (2016、2017、2018、2019、2020、2021、2022)
- Debian 11、10、9、8、7
- Oracle Linux 9、8、7.7-CI、7.7、6
您也可以使用本文手動準備 VM,以便針對上述未列出的作業系統版本,將 VM 移轉至 Azure。 概括而言,這些變更包括:
- 驗證必要驅動程式是否存在
- 啟用序列主控台
- 設定網路設定
- 安裝 VMM 客體代理程式
序列化流程
您必須在移轉之前對 VM 設定進行一些變更,以確保已移轉的 VM 在 Azure 上正常運作。 Azure Migrate 會透過序列化流程處理這些設定變更。 凍結程式只會針對上述支援的 Azure 作業系統版本執行。 在移轉之前,您可能需要針對上述未列出的其他作業系統版本手動執行必要的變更。 如果 VM 在未進行必要的變更的情況下進行移轉,則 VM 可能無法開機,或您可能沒有連線到已移轉的 VM。 下圖顯示 Azure Migrate 會執行序列化流程。
當使用者觸發測試移轉或移轉時,Azure Migrate 會執行序列化流程來準備內部部署 VM 以移轉至 Azure。 為了設定序列化流程,Azure Migrate 會建立暫時的 Azure VM,並連結來源 VM 的磁碟以執行變更,讓來源 VM 準備好供 Azure 使用。 暫存的 Azure VM 是在建立最終移轉的 VM 前,於移轉流程期間建立的中繼 VM。 暫存 VM 會以類似的 OS 類型 (Windows/Linux) 建立並使用其中一個市集 OS 映像。 如果內部部署 VM 正在執行 Windows,內部部署 VM 的作業系統磁碟將會作為資料磁碟附加至暫存 VM 以執行變更。 如果是 Linux 伺服器,連結至內部部署 VM 的所有磁碟都會作為資料磁碟連結至暫存的 Azure VM。
Azure Migrate 會建立網路介面、新的虛擬網路、子網路和網路安全性群組 (NSG) 來裝載暫存 VM。 這些資源會在客戶的訂用帳戶中建立。 如果發生衝突的原則會防止建立網路成品,Azure Migrate 會嘗試在虛擬網路中建立暫存 Azure VM,並在複寫目標設定選項中提供子網路。
建立虛擬機器之後,Azure Migrate 會使用 Azure 虛擬機器 REST API 在暫存 VM 上叫用自訂指令碼延伸模組。 自訂指令碼延伸模組公用程式會執行準備指令碼,其中包含附加至暫存 Azure VM 的內部部署 VM 磁碟上 Azure 整備所需的設定。 準備指令碼會從 Azure Migrate 擁有的儲存體帳戶下載。 虛擬網路的網路安全性群組規則會設定為允許暫存 Azure VM 存取 Azure Migrate 儲存體帳戶以叫用指令碼。
注意
序列化 VM 磁碟不支援客戶自控金鑰 (CMK)。 平台代控金鑰 (PMK) 是預設選項。
序列化流程期間執行的變更
準備指令碼會根據要移轉的來源 VM 作業系統類型來執行下列變更。 您也可以使用本節作為指南,手動準備 VM 以針對不支援序列化的作業系統版本進行移轉。
在 Windows 伺服器上執行的變更
探索並準備 Windows OS 磁碟區
在執行相關的設定變更之前,準備指令碼會驗證是否已選取正確的 OS 磁碟以進行移轉。 準備指令碼會查看系統可見的所有連結磁碟區,並搜尋 SYSTEM 登錄區檔案路徑以尋找來源 OS 磁碟區。
此步驟會執行下列動作:
在連結至暫存 VM 的 OS 磁碟上掛接每個分割區。
在掛接分割區之後尋找 \Windows\System32\Config\System 登錄檔案。
如果找不到檔案,則會取消掛接分割區,而且搜尋會繼續尋找正確的分割區。
如果檔案不存在於任何分割區上,可能表示已選取的 OS 磁碟不正確,或 OS 磁碟已損毀。 Azure Migrate 會將移轉流程設為失敗,並顯示相應的錯誤。
注意
如果您手動準備伺服器以進行移轉,則此步驟並不相關。
進行開機和連線相關變更
偵測到來源 OS 磁碟區檔案之後,準備指令碼會將系統登錄區載入暫存 Azure VM 的登錄編輯器,並執行下列變更以確保 VM 開機和連線。 如果 OS 版本不支援序列化,您必須手動設定這些設定。
驗證必要驅動程式是否存在
請確定已安裝必要的驅動程式,並設定為在開機啟動時載入。 這些 Windows 驅動程式可讓伺服器與硬體和其他連線裝置通訊。
- IntelIde.sys
- Atapi
- Storflt
- Storvsc
- VMbus
將儲存區域網路 (SAN) 原則設定為 [線上全部]
這樣可以確保 Azure VM 中的 Windows 磁碟區使用與內部部署 VM 相同的磁碟機代號指派。 根據預設,系統會將磁碟機 D: 指派給 Azure VM 作為暫存儲存體。 此磁碟機指派會使其他所有連接的存放磁碟機指派遞增一個字母。 為防止這種自動指派,並確保 Azure 會將下一個可用的磁碟機代號指派給其暫存磁碟區,請將存放區域網路 (SAN) 原則設定為 [線上全部]。
若要手動設定此設定:
在內部部署伺服器上,以較高的權限開啟命令提示字元,然後輸入 diskpart。
輸入 SAN。 如果未維持客體作業系統的磁碟機代號,則會傳回 [全部離線] 或 [共用離線]。
在 DISKPART 提示字元中,輸入 SAN Policy=OnlineAll。 此設定可確保磁碟上線,且您可以讀取和寫入這兩個磁碟。
設定 DHCP 啟動類型
準備指令碼也會將 DHCP 服務啟動類型設定為 [自動]。 這可讓移轉的 VM 取得 IP 位址,並在移轉後建立連線。 請確定已設定 DHCP 服務,且狀態正在執行。
若要手動編輯 DHCP 啟動設定,請在 Windows PowerShell 中執行下列範例:
Get-Service -Name Dhcp Where-Object StartType -ne Automatic Set-Service -StartupType Automatic
停用 VMware 工具
如果「VMware 工具」服務啟動類型存在,請將其停用,因為 Azure 中的 VM 不需要這些類型。
注意
若要連線到 Windows Server 2003 VM,Hyper-V Integration Services 必須安裝在 Azure VM 上。 根據預設,Windows Server 2003 電腦不會安裝此服務。 請參閱這篇文章來安裝和準備移轉。
安裝 Windows Azure 客體代理程式
Azure Migrate 會嘗試安裝 Microsoft Azure 虛擬機器代理程式 (VM 代理程式),這是一種安全的輕量型處理程序,可管理虛擬機器 (VM) 與 Azure 網狀架構控制器的互動。 VM 代理程式在啟用和執行 Azure 虛擬機器擴充功能具有主要角色,可啟用 VM 的部署後設定,例如安裝和設定軟體。 Azure Migrate 會自動在 Windows Server 2008 R2 和更新版本上安裝 Windows VM 代理程式。
Windows VM 代理程式可以使用 Windows Installer 套件來手動安裝。 若要手動安裝 Windows VM 代理程式,下載 VM 代理程式安裝程式。 您也可以在 GitHub Windows IaaS VM 代理程式版本中搜尋特定版本。 Windows Server 2008 (64 位元) 和更新版本支援 VM 代理程式。
若要檢查 Azure VM 代理程式是否已成功安裝,請開啟 [工作管理員]、選取 [詳細資料] 索引標籤,然後尋找程序名稱 WindowsAzureGuestAgent.exe。 此程序的目前狀態表示已安裝 VM 代理程式。 您也可以使用 PowerShell 來偵測 VM 代理程式。
執行上述變更之後,系統會卸載系統分割區。 VM 現在已準備好進行移轉。 深入了解 Windows 伺服器的變更。
在 Linux 伺服器上執行的變更
探索並掛接 Linux OS 分割
在執行相關的設定變更之前,準備指令碼會驗證是否已選取正確的 OS 磁碟以進行移轉。 指令碼會收集所有分割區、其 UUID,和掛接點的相關資訊。 指令碼會查看所有這些可見的分割區,以找出 /boot 和 /root 分割區。
此步驟會執行下列動作:
- 探索 /root 分割區:
- 掛接每個可見的分割區,並尋找 etc/fstab。
- 如果找不到 fstab 檔案,則會取消掛接分割區,而且搜尋會繼續尋找正確的分割區。
- 如果找到 fstab 檔案,請閱讀 fstab 內容以識別根裝置,並將其掛接為基底掛接點。
- 探索 /boot 和其他系統分割區:
- 使用 fstab 內容來判斷 /boot 是否為個別的分割區。 如果是個別的分割區,則從 fstab 內容取得開機分割區裝置名稱,或尋找具有開機旗標的分割區。
- 指令碼會繼續探索並掛接 /boot,以及 「/mnt/azure_sms_root」上的其他必要分割區,以建置 chroot 破解所需的根檔案系統樹狀結構。 其他必要的分割區包括:/boot/grub/menu.lst、/boot/grub/grub.conf、/boot/grub2/grub.cfg、/boot/grub.cfg、/boot/efi (適用於 UEFI 開機)、/var、/lib、/etc、/usr 等等。
- 探索 /root 分割區:
探索作業系統版本
探索到根分割區之後,指令碼會使用下列檔案來判斷 Linux 作業系統發行版本和版本。
- RHEL:etc/redhat-release
- OL: etc/oracle-release
- SLES: etc/SuSE-release
- Ubuntu: etc/lsb-release
- Debian: etc/debian_version
安裝 Hyper-V Linux Integration Services 並重新產生核心映像
下一個步驟是檢查核心映像並重建 Linux init 映像,使其包含初始 ramdisk 上所需的 Hyper-V 驅動程式 (hv_vmbus、hv_storvsc、hv_netvsc)。 重建 init 映像可確保 VM 會在 Azure 中開機。
Azure 會在 Hyper-V Hypervisor 上執行。 因此 Linux 要求在 Azure 中執行某些核心模組。 若要準備您的 Linux 映像,需要重新建置 initrd,因此,在初始的 ramdisk 上至少有 hv_vmbus 和 hv_storvsc 核心模組可供使用。 重新建置 initrd 或 initramfs 映像的機制會根據散發套件而有所不同。 請參閱散發套件的文件或洽支援人員,以了解適當程序。 以下是使用 mkinitrd 公用程式重新建置 initrd 的範例之一:
尋找安裝在系統上的核心清單 (/lib/modules)
針對每個模組,檢查是否已包含 Hyper-V 驅動程式。
如果遺漏上述任何驅動程式,請新增必要的驅動程式,並重新產生對應核心版本的映像。
注意
此步驟可能不適用於 Ubuntu 和 Debian VM,因為 Hyper-V 驅動程式預設為內建。 深入了解這些變更。
重建 initrd 的說明範例
- 備份現有的 initrd 映像
cd /boot sudo cp initrd-`uname -r`.img initrd-`uname -r`.img.bak
- 使用 hv_vmbus 和 hv_storvsc 核心模組重新建置 initrd:
sudo mkinitrd --preload=hv_storvsc --preload=hv_vmbus -v -f initrd-`uname -r`.img `uname -r`
最新版的 Linux 散發套件預設會包含此元件。 若未包含在內,請使用前述步驟,對所有版本 (上述版本除外) 進行手動安裝。
啟用 Azure 序列主控台記錄
指令碼接著會進行變更,以啟用 Azure 序列主控台記錄。 啟用主控台記錄有助於針對 Azure VM 上的問題進行疑難排解。 深入了解適用於 Linux 的 Azure 序列主控台適用於 Linux 的 Azure 序列主控台 - 虛擬機器 | Microsoft Docs。
修改 GRUB 或 GRUB2 中的核心開機行以包含下列參數,如此便會將所有主控台訊息傳送到第一個序列埠。 這些訊息均可協助 Azure 支援來偵錯任何問題。
console=ttyS0,115200n8 earlyprintk=ttyS0,115200 rootdelay=300
我們也建議「移除」下列參數 (如果有的話)。
rhgb quiet crashkernel=auto
如需特定變更,請參閱本文。
連線的網路變更
根據 OS 版本,指令碼會執行連線至已移轉 VM 所需的網路變更。 這些變更包括:
移動 (或移除) udev 規則可防止產生乙太網路介面的靜態規則。 在 Azure 中複製虛擬機器時,這些規則會造成問題。
RedHat 伺服器的說明範例
sudo ln -s /dev/null /etc/udev/rules.d/75-persistent-net-generator.rules sudo rm -f /etc/udev/rules.d/70-persistent-net.rules
如有必要,請移除網路系統管理員。 網路系統管理員可能會干擾幾個 OS 版本的 Azure Linux 代理程式。 建議針對執行 RedHat 和 Ubuntu 發行版本的伺服器進行這些變更。
執行下列命令以將此套件解除安裝:
RedHat 伺服器的說明範例
sudo rpm -e --nodeps NetworkManager
備份現有的 NIC 設定,並使用 DHCP 設定建立 eth0 NIC 組態檔。 若要這樣做,指令碼會建立或編輯 /etc/sysconfig/network-scripts/ifcfg-eth0 檔案,並新增下列文字:
RedHat 伺服器的說明範例
DEVICE=eth0 ONBOOT=yes BOOTPROTO=dhcp TYPE=Ethernet USERCTL=no PEERDNS=yes IPV6INIT=no PERSISTENT_DHCLIENT=yes NM_CONTROLLED=yes
重設 etc/sysconfig/network 檔案,如下所示:
RedHat 伺服器的說明範例
NETWORKING=yes HOSTNAME=localhost.localdomain
Fstab 驗證
Azure Migrate 會驗證 fstab 檔案的項目,並視需要將 fstab 項目取代為永續性磁碟區識別碼 UUID。 這可確保磁碟機/分割區名稱不論其連結的系統為何,都會維持不變。
- 如果裝置名稱是標準裝置名稱 (例如 /dev/sdb1),則:
- 如果是根或開機分割區,則會將其取代為 UUID。
- 如果分割區與根磁碟或開機分割區並存,做為相同磁碟上的標準分割區,則會以 UUID 取代。
- 如果裝置名稱為 UUID/LABEL/LV,則不會進行任何變更。
- 如果是網路裝置 (nfs、cifs、smbfs 等) ,則指令碼會批註項目。 若要對其存取,您可以取消批註,並重新啟動您的 Azure VM。
- 如果裝置名稱是標準裝置名稱 (例如 /dev/sdb1),則:
安裝 Linux Azure 客體代理程式
Azure Migrate 會嘗試安裝 Microsoft Azure Linux 代理程式 (waagent),這是安全的輕量型程序,可管理 Linux 和 FreeBSD 佈建,以及 VM 與 Azure 網狀架構控制器之間的互動。 深入了解透過 Linux 代理程式啟用 Linux 和 FreeBSD IaaS 部署的功能。
檢閱安裝 Linux VM 代理程式所需的套件清單。 Azure Migrate 會自動安裝 RHEL 9.x、8.x/7.x/6.x 的 Linux VM 代理程式、 Ubuntu 14.04/16.04/18.04/19.04/19.10/20.04、SUSE 15 SP0/15 SP1/12、Debian 9/8/7,以及使用 VMware 移轉無代理程式方法時的 Oracle 7/6。 請依照這些指示為其他 OS 版本手動安裝 Linux 代理程式。
您可以使用命令來驗證 Azure Linux 代理程式的服務狀態,以確定其正在執行。 服務名稱可能是 walinuxagent 或 waagent。 完成序列化變更之後,指令碼會卸載掛接的所有分割區、停用磁碟區群組,然後排清裝置。
sudo vgchange -an <vg-name> sudo lockdev –flushbufs <disk-device-name>
清除暫存 VM
執行必要的變更之後,Azure Migrate 會微調暫存 VM,並釋放連結的 OS 磁碟 (和資料磁碟)。 這表示序列化流程的結尾。
之後,系統會複製已修改的 OS 磁碟和包含複寫資料的資料磁碟。 新的虛擬機器會在目的地區域、虛擬網路和子網路中建立,且複製的磁碟會連結至虛擬機器。 這表示移轉流程完成。