TLDR;
错误函数 (0x80070001) 表示硬盘已满。如果这是你的情况,希望你有备份!
完整故事
我正在尝试将虚拟机从一个磁盘移动到另一个磁盘。
但是,当我尝试导出虚拟机时,它运行了大约 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
没有创建任何文件,只有一个空文件夹。此磁盘上的同一文件夹中还有其他虚拟机。vhdx
文件超过 100GB,avhdx 文件为 25GB。
源硬盘有 800GB 可用空间,目标磁盘有 300GB 可用空间。我知道更小,但它是 SSD。
当我尝试导出虚拟机时,它处于“关闭”状态。
发生这种情况时,事件查看器中没有错误。
编辑1:
可能与该问题相关的是所有虚拟机的计划备份也失败了。我们正在使用内置的 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 完成后,同一驱动器上的另一台虚拟机无法启动,必须从备份中进行恢复。
答案1
备份和导出有一个共同点:源。您的 VHD 或其他 Hyper-V 文件可能有问题。
这个人通过使用 Robocopy 复制虚拟机内部的数据解决了这个问题,但这对你来说可能不起作用:https://evotec.xyz/hyper-v-incorrect-function-when-trying-to-move-files/
您更新的帖子显示您的驱动器出现故障。如果chkdsk /r
无法修复,则需要使用其他恢复方法。数据丢失几乎是肯定的。您需要决定是否值得挽救这台机器,或者是否要重建。无论如何,您需要停止使用此磁盘,即使chkdsk /r
可以修复它。
答案2
从备份中恢复虚拟机一周后,物理硬盘就恢复了!
这是通过将其从服务器中移除,然后重新连接并重新导入并再次开始工作来完成的。所以如果其他方法都失败了,值得一试。
答案3
尝试将虚拟机导出到源磁盘上的文件夹。如果成功,则问题出在目标上。
此外,如果这有效,则尝试将导出的虚拟机复制到目标并从那里导入,看看是否遇到相同的错误。