修復 VMware 錯誤:需要虛擬機磁碟合併

VMware vSphere中的虛擬機器有許多優勢。如果使用適當的硬件並應用正確的軟件配置,它們將具有可靠的高性能。有時在VMware vSphere Client中顯示需要虛擬機器合併的狀態,系統管理員必須修復此錯誤。本博客文章解釋了為什麼需要VMware虛擬機器磁盤合併以及如何修復此錯誤。

什麼是VMware磁盤合併?

虛擬磁盤合併是在拍攝VM快照後創建的虛擬磁盤文件合併的過程。您可以按需啟動磁盤合併,以避免性能下降和其他問題。拍攝快照時,會創建增量磁盤並將更改寫入適當的增量磁盤(默認情況下為最新的增量磁盤,直到選擇恢復虛擬機器的某個先前快照為止)。因此,虛擬機器存儲中存在多餘的數據,因為每個增量磁盤都包含與上一個增量磁盤狀態相比所做的所有更改,並且父磁盤保持不變。

當快照鏈和相關的虛擬磁盤文件變得很大時,性能會降低。當您執行VMware磁盤合併時,增量磁盤中的數據將合併到單個磁盤中,並且在存儲此VM文件的數據存儲器上不留下多餘的數據。在合併虛擬機器磁盤文件後,存儲空間被清理。請記住,VMware建議每個VM使用不超過32個快照。

VMware磁盤合併錯誤的可能原因

VMware 虛擬機器磁碟合併 錯誤訊息顯示在 VMware vSphere 客戶端的 VM 摘要標籤中(如下截圖)。此錯誤訊息的一個常見原因是錯誤刪除 VM 快照,這可能會在資料存儲中留下與快照相關的 VMDK 檔案和記錄檔(例如,在您對 VM 快照執行 全部刪除刪除 操作之後)。

虛擬機器合併需要 狀態的最常見原因:

  • VMFS 資料存儲空間不足以合併 VM 快照和合併虛擬磁碟檔案。如果資料存儲中的可用空間少於 1 GB,可能會發生此錯誤。
  • ESXi 主機連接的存儲系統性能低下,該主機上正在運行的 VM 快照大小較大或超時時,快照合併可能會失敗。
  • ESXi 主機和 vCenter 之間的連接問題。
  • 快照檔案被第三方應用程式鎖定,例如備份應用程式。如果備份應用程式未完成備份作業並鎖定快照(備份應用程式在運行備份時可以創建虛擬機器的臨時快照),則可能會發生此情況。備份應用程式無法在不使用快照技術的情況下使磁碟保持一致,以便對正在運行的 VM 進行一致備份。

基本上,您應該恢復 VM 磁碟檔案的一致性。

如何修復錯誤?

為了修復虛擬機的虛擬機合併需求狀態,在 VMware vSphere 客戶端中右鍵點擊虛擬機名稱,然後在打開的菜單中點擊快照> 合併

A confirmation message is displayed:

此操作將合併虛擬機上的所有多餘重做日誌。您確定要繼續嗎?

點擊以確認並合併虛擬機磁盤文件。

注意: 如果有擔心 VMware 磁盤合併期間可能會丟失某些數據,請進行 VMware 虛擬機備份,例如,將所有虛擬機文件複製到數據存儲的另一個文件夾,然後執行 VMware 磁盤合併。

等待 VMware 磁盤合併完成並清除日誌。您可以在 VMware vSphere 客戶端界面底部的任務面板中查看任務進度。如果虛擬機正在運行,則此操作可能會導致虛擬機性能下降。完成此操作所需的時間取決於虛擬機大小、快照數量和虛擬機負載。

完成 VMware 磁盤合併任務後,VMware 虛擬機磁盤合併需求的警告應該消失。

可能發生的錯誤

有時,在 VMware 磁盤合併期間可能會發生另一個錯誤,並顯示以下錯誤消息:

無法訪問文件,因為它被鎖定。合併磁盤時發生錯誤: 無法鎖定文件。磁盤節點 ‘scsi0:0’ 的合併失敗。

鎖定也可以在備份應用程式使用快速添加磁碟選項進行備份時建立,而使用快照。 VM檔案鎖旨在避免多個ESXi主機對文件進行同時寫入。

嘗試執行以下操作來修復此錯誤。

  1. 在VM所在的ESXi伺服器上重新啟動管理代理。打開ESXi shell或通過SSH連接到ESXi主機並以root身份運行以下命令:

services.sh restart

/etc/init.d/hostd restart

/etc/init.d/vpxa restart

您也可以打開ESXi直接控制台,轉到故障排除選項,並選擇重新啟動管理代理(按Enter以啟動所需選項,然後按F11以確認)。

  1. 使用以下命令檢查已鎖定的文件:

vmfsfilelockinfo -p /vmfs/volumes/vm_datastore/vm_name/vm_name.vmx

  1. 如果需要識別存儲區上VM文件的路徑,則檢查hostd日誌文件。

cat /var/log/hostd.log |grep -i vm_name

  1. 當您知道VM文件的位置時,轉到存儲區上的VM目錄:

cd /vmfs/volumes/datastore_name/vm_name

  1. 運行命令列出鎖定VM文件的ESXi主機:

for i in `ls`; do vmfsfilelockinfo -p $i ;done|grep 'is locked in\|Host owning the lock\|Total time taken' | sed 's|Host owning the lock on file is||g'|sed 's|Total time|---|g' | awk '{print $1}' |uniq

  1. 重新启动ESXi管理代理,包括hostdvpxa如上所述,或在锁定VM文件的ESXi主机上运行以下命令:

/etc/init.d/hostd restart

/etc/init.d/vpxa restart

另一种解锁VM文件的方法

作为替代方案,请尝试以下步骤来解决“在整理磁盘时发生错误:无法锁定文件”的问题。

  1. 关闭虚拟机。
  2. 对虚拟机进行新的磁盘快照。
  3. 删除所有现有的VM快照。在vSphere Client中右键单击VM名称,选择快照,然后单击删除所有快照

  1. 如果错误仍未解决,请克隆该VM或使用vMotion将该VM迁移到另一个ESXi主机。
  2. 尝试再次整理快照,如上所述。

如果這些操作沒有幫助,請嘗試關閉虛擬機器,打開VM設置,選擇VM選項標籤,然後展開高級部分,並點擊編輯配置。配置參數窗口中,點擊添加配置參數。添加asyncConsolidate.forceSync參數並將該參數設置為TRUE。

有時候,虛擬機合併所需狀態可能是由於為更改塊跟踪(例如VM備份軟件)創建的不一致的-ctk.vmdk文件引起的。嘗試刪除CTK文件。快照合併不需要它們。刪除CTK文件之前不要忘記備份VM文件。然後再次嘗試合併虛擬機磁盤文件。

合併選項不活動

如果VMware 合併快照選項被灰色(不活動),則現在可能正在VM上運行活動任務。如果您看到“檢測到無效的快照配置”錯誤,則某些快照可能已損壞或存在快照的分割鏈。在這種情況下,請嘗試執行以下操作。

  1. 通過SSH連接到ESXi服務器,並轉到數據存儲上VM文件所在的目錄。

cd vmfs/volumes/DatastoreName/VMFolderName

您可以在VMware vSphere Client中檢查VM文件的位置,並通過查看VM設置找到虛擬磁盤的位置。

  1. 識別所指的磁盤快照:

cat VM-name.vmx | grep scsi*

查看輸出以檢查虛擬磁盤文件,包括虛擬磁盤快照文件。例如,虛擬磁盤文件的名稱顯示在該行中。這不是一個快照:

scsi 0:0.fileName = “VM-Name.vmdk”

在輸出行中,顯示了虛擬磁盤快照文件的名稱,並且您正在指向該快照:

scsi 0:0.fileName = “VM-Name-000002.vmdk”

A SCSI virtual disk controller is used in VM configuration in this example.

  1. 下一個命令檢查每個快照指向的是什麼。使用此命令檢測哪個快照指向快照鏈中的下一個磁盤文件(快照 vmdk 文件或基本磁盤 vmdk 文件)。

cat VM-Name-000002.vmdk | grep parentFileNameHint

您可能需要再次執行此命令以檢查其他 vmdk 文件(例如此示例中的 VM-Name-000001.vmdk),直到找到所需的基本磁盤。此方法幫助您找到不一致之處。

  1. 如果找到了不一致,例如,VM-Name-000002.vmdk 指向 VM-Name-000001.vmdk,後者指向 VM-Name.vmdk,請在磁盤快照鏈的最高點(在此案例中為 VM-Name-000002.vmdk)上運行 vmkfstools:

vmkfstools -q -v10 VM-Name-000002.vmdk

此命令嘗試打開和關閉鏈中的所有 vmdk 文件,並通知您發生故障的位置。

使用 PowerCLI

作為在 VMware vSphere Client 圖形用戶界面中執行 VMware 磁盤合併的替代方法,您可以使用帶有命令行界面的 vSphere PowerCLI。

  1. 連接到管理 ESXi 主機具有所需虛擬機合併狀態的 vCenter Server。在提示時輸入憑據。

Connect-VIServer vcenter01.test.com

  1. 獲取具有所需虛擬機合併狀態的 VM 列表:

Get-VM | Where-Object {$_.Extensiondata.Runtime.ConsolidationNeeded}

  1. 執行 VMware 磁盤合併。

Get-VM | Where-Object {$_.Extensiondata.Runtime.ConsolidationNeeded} | foreach {$_.ExtensionData.ConsolidateVMDisks_Task()}

結論

本博客文章已解釋了可以幫助您修復所需虛擬機合併狀態的建議。當快照之一損壞、快照鏈不一致或快照被另一個 ESXi 主機鎖定時,通常需要進行 VMware 虛擬機磁盤合併。

定期在您的 VMware vSphere 環境中運行虛擬機備份。如果您有數據備份,則可以在數據被刪除、損壞、被勒索軟件加密或在 vCenter 操作期間出現錯誤時恢復數據並恢復工作。VMware vCenter Server 應該像其他重要的虛擬機一樣進行備份。考慮使用 NAKIVO Backup & Replication – 支持在 VMware vSphere 中備份虛擬機的專業備份產品。

Source:
https://www.nakivo.com/blog/fix-vmware-error-virtual-machine-disks-consolidation-needed/