Hyper-V

無法從 Hyper-V 導出 VM

  • December 1, 2020

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可以修復它。

引用自:https://serverfault.com/questions/1040194