Назад | Перейти на главную страницу

Server 2012 R2 - как удалить файл, который «открыт в системе»?

Я использую Server 2012 R2 Datacenter Core. Это один из наших хостов Hyper-V. Я управляю им со своей рабочей станции с помощью диспетчера Hyper-V и управляю файлами через административный ресурс.

Я создал виртуальную машину, затем скопировал VHDX в папку жестких дисков. Затем я попытался запустить виртуальную машину с этим VHDX, но (поскольку это старый образ и запросил пароль администратора, которого у меня нет), я решил, что буду создавать с нуля. Я выключил виртуальную машину, удалил диск и попытался удалить VHDX, чтобы создать новый с тем же именем. Я получаю «Действие не может быть завершено, потому что файл открыт в системе». Это происходит уже несколько часов. Сначала я подозревал, что у нас есть антивирусное решение, но сканирование файла размером 17 ГБ не займет так много времени (я думаю).

У меня такое случалось и раньше в системах Win7, и существует множество методов для принудительного удаления файла. Однако в этом случае я не могу просто перейти на хост и загрузить его в автономном режиме или установить SuperKillerFileDeleterUltraGuaranteedBox.

Так как мне от этого избавиться?

P.S. Я также понимаю, что могу назвать новый VHDX как-нибудь иначе - это не так. иметь должно совпадать с именем виртуальной машины. Но это просто обидно, да и вообще я не могу навсегда оставить неиспользованный файл размером 17 ГБ на сервере.

Да, я столкнулся с этим. Очень вероятно, что Hyper-V хранит файл. Вероятно, вам придется остановить службу управления виртуальными машинами Hyper-V, чтобы удалить VHD. Либо так, либо перезагрузите хост Hyper-V. В качестве альтернативы вы можете проверить, существует ли рабочий процесс виртуальной машины, соответствующий удаленной виртуальной машине. Если есть, вы можете убить то, что должно позволить вам удалить VHD.

Вы можете запустить это в Powershell, чтобы увидеть, есть ли идентификатор процесса «GUID», который соответствует рабочему процессу виртуальной машины (можно найти, щелкнув правой кнопкой мыши рабочий процесс виртуальной машины в диспетчере задач, выбрав «Перейти к деталям» и просмотрев имя пользователя. «GUID»). Если вы найдете соответствующий процесс для удаленной виртуальной машины, завершите этот процесс и удалите виртуальный жесткий диск.

Get-WmiObject -Namespace root\virtualization -class msvm_computersystem | select elementname, operationalstatus, processid, name| ft -auto

Ну, это супер неловко для моего первого поста в serverfault ... Видимо, это было мой Система, имеющая дескриптор файла. Я перезагрузил локальную машину, и вуаля смог удалить файл. Не могу поверить, что я не пробовал это сначала.

Нашел это в другом месте (не моя собственная работа, комментарий techienateafs на пряности), и у меня это сработало. Я периодически нажимаю на него после монтирования, а затем размонтирую виртуальный диск (через PowerShell Mount-WindowsImage и Dismount-WindowsImage) из-за сбоя размонтирования.

"Мне удалось решить проблему, открыв diskmgmt.msc на главном сервере. Диск был там указан, щелкните правой кнопкой мыши и выберите" Отсоединить ". Появится запрос на подтверждение того, что у вас правильный файл. На этом этапе проводник процесса подтверждает, что pid 4 (ядро NT и система) больше не открывает файл, и я могу свободно работать с файлом .vhdx ".