無法從 Hyper-V 導出 VM
TLDR;
不正確的功能(0x80070001)意味著硬碟被塞滿。如果這是你,希望你有備份!
完整的故事
我正在嘗試將虛擬機從主機上的 1 個磁碟移動到另一個磁碟。
但是,當我嘗試導出 VM 時,它執行了大約 15 分鐘,狀態列中的進度緩慢滴答作響,然後最終彈出以下錯誤:
An error occurred while attempting to export the virtual machine. Failed to copy file during export. Failed to copy file from 'D:\VMs\SuperServer\Virtual Hard Disks\SuperServer.vhdx' to 'E:\VMs\SuperServer\Virtual Hard Disks\SuperServer.vhdx': Incorrect function. (0x80070001).
通過 powershell 導出會以稍微不同的格式給出相同的錯誤。
Export-VM : Failed to copy file during export. Failed to copy file from 'D:\VMs\SuperServer\Virtual Hard Disks\SuperServer.vhdx' to 'E:\VMs\SuperServer\Virtual Hard Disks\SuperServer.vhdx' : Incorrect function. (0x80070001). At line:1 char:1 + Export-VM -Name SuperServer -Path 'E:\VMs\' + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (:) [Export-VM], VirtualizationException + FullyQualifiedErrorId : OperationFailed,Microsoft.HyperV.PowerShell.Commands.ExportVM
沒有文件被創建,只是一個空文件夾。此磁碟上的同一文件夾中還有其他 VM。
vhdx 文件超過 100GB,avhdx 文件為 25GB。
源硬碟有 800GB 空閒空間,目標磁碟有 300GB 空閒空間。我知道更小,但它的 SSD。
當我嘗試導出虛擬機時,它處於“關閉”狀態。
發生這種情況時,事件查看器中沒有錯誤。
編輯 1:
可能與問題有關的是所有 VM 的計劃備份也失敗了。我們正在使用內置的 Windows Server Backup。這給出的錯誤是:
Error in backup of D:\VMs\SuperServer\Virtual Hard Disks\SuperServer.vhdx during read: Error [0x80070001] Incorrect function. Writer Id: {some hexadecimal string} Component: some other hexadecimal string Caption : Offline\SuperServer Logical Path: Error : 8078010E Error Message : Copy of the files failed. Detailed Error : 80070001 Detailed Error Message : (null)
備份目標是多個磁碟的跨區卷,總共有 4TB 可用空間。所有磁碟都報告為執行狀況良好。
編輯2:
試圖簡單地複製文件也會出錯。我試過 Robocopy,但它在 2 個最大的文件上失敗了。我嘗試使用和不使用 /J 標誌來進行無緩衝複製。
robocopy D:\VMs\SuperServer E:\VMs\SuperServer /E /ZB /DCOPY:T /COPYALL /R:1 /W:1 /V /TEE /LOG:Robocopy.log
其余文件複製得很好,但這兩個文件不成功
87.5% New File 109.3 g SuperServer.vhdx 2020/10/28 13:22:43 ERROR 5 (0x00000005) Copying File D:\VMs\SuperServer\Virtual Hard Disks\SuperServer.vhdx Access is denied. Waiting 1 seconds... Retrying... 87.5% New File 109.3 g SuperServer.vhdx 2020/10/28 13:49:45 ERROR 5 (0x00000005) Copying File D:\VMs\SuperServer\Virtual Hard Disks\SuperServer.vhdx Access is denied. ERROR: RETRY LIMIT EXCEEDED. 7.6% New File 23.9 g SuperServer_Some_Hex_String.avhdx 2020/10/28 13:51:21 ERROR 5 (0x00000005) Copying File D:\VMs\SuperServer\Virtual Hard Disks\SuperServer_Some_Hex_String.avhdx Access is denied. Waiting 1 seconds... Retrying... 7.6% New File 23.9 g SuperServer_Some_Hex_String.avhdx 2020/10/28 13:51:21 ERROR 5 (0x00000005) Copying File D:\VMs\SuperServer\Virtual Hard Disks\SuperServer_Some_Hex_String.avhdx Access is denied.
同時,事件查看器中有許多這樣的警告:
An error was detected on device \Device\Harddisk3\DR3 during a paging operation.
而HardDisk3確實是D盤。
編輯 3:
我執行了一個
chkdsk /f
,它沒有報告任何錯誤。我不願意執行chkdsk /R
,因為它必須卸下驅動器並且需要很多小時。我在那個磁碟上還有其他虛擬機,所以失去所有這些虛擬機半天是一種痛苦。但是,一旦執行它,它就開始在我無法複製的文件中報告錯誤的集群。此外,這個磁碟太糟糕了,它已經沒有空間來移動壞扇區了。The disk does not have enough space to replace bad clusters detected in file 88 of name \VMs\SUPERSERVER\VIRTUA~1\SUPERSERVER.vhdx.
如果您想知道,是的,驅動器上有足夠的可用空間,但壞扇區需要不同類型的可用空間。
更糟糕的是,在 chkdsk 完成後,同一驅動器上的另一個 VM 無法再啟動,必須從備份中恢復。
備份和導出有一個共同點:源。您的 VHD 或其他 Hyper-V 文件可能有問題。
這個人通過使用 Robocopy 複製 VM 內的數據解決了這個問題,但這可能對你不起作用:https ://evotec.xyz/hyper-v-incorrect-function-when-trying-to-move-files/
您更新的文章顯示您的驅動器出現故障。如果
chkdsk /r
無法修復,則需要使用其他恢復方法。數據失去在這裡幾乎是肯定的。您需要決定是否值得保存這台機器,或者是否要重建。無論如何,您需要停止使用此磁碟,即使chkdsk /r
可以修復它。