- Remove From My Forums
Ремонт виртуальных машин после сбоя питания.
-
Вопрос
-
Помогите, пожалуйста, добрым советом, как чинить такую пакость:
После сбоя питания (ИБП не успел потушить сервер, умер прямо во время остановки Hyper-V) перестали запускаться виртуальные машины. Аргументируется всё это 4-мя ошибками в логах:
1: «VM01»: У учетной записи Hyper-V Virtual Machine Management service отсутствуют необходимые привилегии для открытия вложения «E:VM01VM01.vhd». Ошибка: «Ошибка доступа» (0x80070005). (ИД виртуальной машины CEA772E4-187A-420C-A697-E643F0A6B5C6)
2: «VM01»: У учетной записи IDE/ATAPI отсутствуют необходимые привилегии для открытия вложения «E:VM01VM01.vhd». Ошибка: «Ошибка доступа» (0x80070005). (ИД виртуальной машины CEA772E4-187A-420C-A697-E643F0A6B5C6)
3: «VM01» Microsoft Emulated IDE Controller (ИД экземпляра {83F8638B-8DCA-4152-9EDA-2CA8B33039B4}): Сбой включения, ошибка «Ошибка доступа» (0x80070005). (ИД виртуальной машины CEA772E4-187A-420C-A697-E643F0A6B5C6)
4: Не удалось запустить «VM01» (идентификатор виртуальной машины CEA772E4-187A-420C-A697-E643F0A6B5C6).
ОС Хоста, если это имеет какое-то значение: Microsoft Hyper-V Server 2008 R2. Управляю через диспетчер Hyper-V с другого сервера.
Ответы
-
Решил.
Как НЕ получалось: я удалял через Диспетчер Hyper-V виртуальную машину, после чего создавал новую с тем же именем, и пытался через icacls присвоить права на полный доступ для нового идентификатора ВМ (icacls <путь к папке с виртуальной машиной> /grant
«NT VIRTUAL MACHINE<идентификатор виртуальной машины>»:F /T) — НЕ сработало.Как ПОЛУЧИЛОСЬ: удалил виртуальную машину, переименовал папку с виртуальной машиной, создал новую виртуальную машину с теми же параметрами, что и старая (при этом указал, что путь к файлу жесткого диска укажу позже). Поместил в папку новой виртуальной машины
VHD от «убитого товарища», после чего — icacls на папку с ВМ (icacls <путь к папке с виртуальной машиной> /grant «NT VIRTUAL MACHINE<идентификатор виртуальной машины>»:F /T). Теперь работает.Спасибо, Денис за советы и «работу катализатором»!
Всем авторам, упомянутым в ссылках — тоже спасибо!
-
Помечено в качестве ответа
9 июня 2010 г. 12:50
-
Помечено в качестве ответа
Ситуация следующая: виртуальная машина Hyper-V не может запуститься, выдавая при старте ошибку примерно такого содержания «VM failed to start. Synthetic SCSI controller (Instance ID xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx): Failed to Power on with Error ‘General access denied error’.».
Если развернуть окно и посмотреть детальную информацию об ошибке, то станет понятно, что проблема кроется в отсутствии доступа к файлу виртуального диска. Дело в том, что виртуальной машине (как и обычному пользователю) для работы с файлом необходимы NTFS-права на этот файл. В том случае, когда у виртуальной машины отсутствуют необходимые разрешения, то она не сможет стартовать и вывалится с ошибкой.
Как видно на рисунке, каждая виртуальная машина имеет свой уникальный идентификатор (Virtual machine ID). Для устранения ошибки надо взять этот ID и добавить его в список контроля доступа VHD-файла. Сделать это можно из командной строки, с помощью утилиты с неблагозвучным 🙂 названием Icacls. В нашем примере команда будет выглядеть так:
Icacls H:Hyper-VSRV1.vhdx /grant ″NT Virtual Machinef72e624c-4cc2-4167-b852-a47d412de8440″:(F)
Этой командой мы выдали виртуальной машине права Full Control на файл. В этом можно убедиться, открыв свойства файла и перейдя на вкладку Security. Как видите, разрешения в порядке и теперь виртуальная машина должна успешно запуститься.
Примечание. Подобную операцию необходимо проделать для каждого vhdx, и, если у машины имеются моментальные снимки (checkpoint), то для каждого avhdx файла, имеющего отношение к данной ВМ.
В заключение опишу некоторые ситуации, которые могут привести к потере прав:
• Перенос файла виртуального диска в другое расположение. Напомню, что при переносе файла на другой диск разрешения файловой системы удаляются и заменяются наследуемыми. Избежать этого можно, перенося файлы виртуальных машин с помощью встроенных средств Hyper-V, таких как Storage migration или ExportImport;
• Копирование файла виртуального диска. Ошибка может возникнуть при попытке подсунуть виртуальной машине чужой диск. Поэтому для ″размножения″ лучше воспользоваться либо экспортом, либо, при наличии VMM, клонированием виртуальных машин;
• Восстановление ВМ из бэкапа. Некоторые программы резервного копирования, например тот же DPM, при восстановлении в другое расположение не выставляют на файлы нужные права.
While some of the simple answers provided above may work for some users, none of them solved my issue. My problem was that the Hyper-V .vhdx file for my virtual machine was locked but not appearing in either File Explorer as an ejectable disk nor in Administrative Tools Disk Management component. Note that my VM is a Debian Linux derivative running under WSL2 in Windows 10 with Hyper-V enabled.
So how did it become locked in the first place? I followed the instructions from an article on the web that said I can easily view files by simply double-clicking the .vhdx file. With the virtual machine shut down for the moment I did just that but got an error message (something about «can’t read file»). Afterwards, trying to connect to my virtual machine with Hyper-V resulted in the error message «the process cannot access the file because it is being used by another process». So how to unlock it?
After scouring the web and trying various procedures I finally found one that worked by using the Powershell. Here’s the short procedure:
-
Search for Powershell and then Run as Administrator.
-
At the command prompt type:
get-physicaldisk
In my case the results were:
Number FriendlyName SerialNumber MediaType CanPool OperationalStatus HealthStatus Usage Size
------ ------------ ------------ --------- ------- ----------------- ------------ ----- ----
1 SanDisk Ultra II 480GB 16xxxxxxxx96 SSD False OK Healthy Auto-Select 447.13 GB
0 WDC WD1001FALS-00E3A0 WD-WCATxxxxxxx9 Unspecified True OK Healthy Auto-Select 931.51 GB
2 Msft Virtual Disk SSD False OK Healthy Auto-Select 32 GB
As you can see there is an entry called «Msft Virtual Disk» which represents the VM file mounted as a virtual disk.
- To unmount the virtual disk, from the command prompt type:
Dismount-DiskImage -ImagePath "C:UsersPublicDocumentsHyper-VVirtual hard disksName-Of-Your-Virtual-Machine.vhdx"
- Re-enter the command:
get-physicaldisk
to verify that the virtual disk is unmounted.
After that the virtual disk was unmounted and I was able to successfully connect and load my virtual machine from Hyper-V once again.
I hope this information helps someone!
-
-
August 1 2019, 21:27
Ситуация:
После замены виртуальных жестких дисков и последующей попытке запустить виртуальную машину, получаем отлуп следующего вида:
«An error occurred while attempting to start the selected virtual machine(s).
VM-100500 failed to start. (Virtual machine ID BLA-BLA-BLA)
VM-100500 Microsoft Emulated IDE Controller (Instance ID OZAZA): Failed to Power on with Error ‘General access denied error’ (0x80070005). (Virtual machine ID BLA-BLA-BLA)
VM-100500: IDE/ATAPI Account does not have sufficient privilege to open attachment D:Hyper-VVirtual hard disksVM-100500-01.vhdx. Error: ‘General access denied error’ (0x80070005). (Virtual machine ID BLA-BLA-BLA)»
Причина:
Нет разрешений для объекта виртуальной машины вида «полный доступ» для файла виртуального жесткого диска.
Лечение тривиальное:
1) Узнаём имя виртуальной машины и путь к *.VHD/*.VHDX файлам дисков.
2) Узнаём Virtual machine ID. Для этого вводим команду в PowerShell:
Get-VM -Name VM-100500 | Select-Object VMID
Получим ответ вида:
12345678-90ab-cdef-0123-4567890abcfe
3) Далее, «надеваем на голову» файлам нужные права:
icacls «D:Hyper-VVirtual Hard DisksVM-100500-01.vhdx» /grant 12345678-90ab-cdef-0123-4567890abcfe:F
4) Повторить для всех файлов виртуальных дисков.
__
Hyper-V виртуальная машина не запускается и появляется ««Ошибка доступа» (0x80070005)» сообщение об ошибке
Если не удалось запустить виртуальную машину с первого раза и сыпятся ошибки вроде этих
Произошла ошибка при попытке запустить выбранную виртуальную машину.
Не удалось запустить «VMName».
Microsoft эмулированных IDE-контроллера (идентификатор экземпляра
{83F8638B-8DCA-4152-9EDA-2CA8B33039B4}): ошибка питания на «Общие
Отказано в доступе «
IDE/ATAPI учетная запись не имеет достаточных привилегий для открытия вложения
«D:NewWindows7x64.vhd. Ошибка: «Ошибка доступа»
Учетная запись не имеет достаточных привилегий для открытия вложения
«
D:NewWindows7x64.vhd. Ошибка: «Ошибка доступа»
Значит у учетной записи VM нет доступа к файлу и все решается очень просто
Если щелкнуть просмотреть сведения в окне сообщения выводится следующее сообщение об ошибке:
Не удалось инициализировать «Без имени виртуальной Машины». (Виртуальная машина 7E77503A-A26B-4BB5-9846-396F49A30141)
«Без имени виртуальной Машины» не удается прочитать или обновить конфигурацию виртуальной машины, так как доступ запрещен: (0 × 80070005) Ошибка доступа. Проверьте параметры безопасности для папки, в которой хранится на виртуальной машине. (Виртуальная машина 7E77503A-A26B-4BB5-9846-396F49A30141)
В командной строке смело набиваем
icacls «D:NewWindows7x64.vhd» /grant «NT ВИРТУАЛЬНАЯ МАШИНАCE92BDA7-257B-4ABD-BA9A-DCC88BD59E3C»:(F)
для английской Windows выглядит как-то так
icacls «D:NewWindows7x64.vhd» /grant «NT VIRTUAL MACHINECE92BDA7-257B-4ABD-BA9A-DCC88BD59E3C»:(F)
так можно посмотреть список прав на файл
icacls «F:¥ MyVIrtualMachine.vhd»