我正在使用 Server 2012 R2 Datacenter Core。它是我们的 Hyper-V 主机之一。我使用 Hyper-V 管理器从我的工作站管理它,并通过管理共享操作文件。
我创建了一个虚拟机,然后将 VHDX 复制到硬盘文件夹中。然后我尝试使用该 VHDX 启动虚拟机,但是(由于它是一个旧映像并要求输入我没有的管理员密码),我决定从头开始构建。我关闭了虚拟机,删除了驱动器,并尝试删除 VHDX,以便我可以创建一个具有相同名称的新 VHDX。我收到“无法完成操作,因为文件在系统中打开”。这种情况已经持续了几个小时。我最初怀疑我们的 AV 解决方案有问题,但扫描 17GB 的文件不可能花这么长时间(我想)。
现在,我以前在 Win7 系统上也遇到过这种情况,强制删除文件的方法有很多。但在这种情况下,我不能直接去主机上离线启动它,也不能安装 SuperKillerFileDeleterUltraGuaranteedBox。
那么我该如何摆脱它呢?
PS 我还意识到我可以将新的 VHDX 命名为其他名称 - 它不有与虚拟机名称相同。但那只是侮辱,无论如何我都不能永远将未使用的 17GB 文件留在服务器上。
答案1
是的,我遇到过这种情况。很可能是 Hyper-V 保存了该文件。您可能必须停止 Hyper-V 虚拟机管理服务才能删除 VHD。要么这样做,要么重新启动 Hyper-V 主机。或者,您可以检查是否有与已删除的 VM 相对应的虚拟机工作进程。如果有,您可以终止该进程,然后就可以删除 VHD。
您可以在 Powershell 中运行此命令,查看是否存在与虚拟机工作进程相对应的进程 ID“GUID”(右键单击任务管理器中的虚拟机工作进程,选择“转到详细信息”,然后查看用户名“GUID”即可找到)。如果您找到与已删除的 VM 匹配的进程,则终止该进程并删除 VHD。
Get-WmiObject -Namespace root\virtualization -class msvm_computersystem | select elementname, operationalstatus, processid, name| ft -auto
答案2
在其他地方找到的(不是我自己的作品,来自 techienateafs 的评论香料厂),它对我有用。由于卸载失败,我在安装并卸载虚拟磁盘(通过 powershell Mount-WindowsImage 和 Dismount-WindowsImage)后间歇性地遇到此问题。
“我通过在主机服务器上打开 diskmgmt.msc 解决了这个问题。磁盘列在那里,右键单击并选择分离。它会提示您确认文件是否正确。此时,进程资源管理器确认文件不再由 pid 4(nt 内核和系统)打开,我可以自由使用 .vhdx 文件。”
答案3
好吧,这是我第一次在 serverfault 上发帖,真是太尴尬了……显然,这是我的系统已处理该文件。我重新启动了本地计算机,然后就能够删除该文件了。我真不敢相信我没有先尝试一下。