Заметки о Windows и других программных продуктах Microsoft...

Ошибка доступа к виртуальному диску в Hyper-V

Ошибка доступа к виртуальному диску в Hyper-V

Ситуация следующая: виртуальная машина 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-V\SRV1.vhdx /grant ″NT Virtual Machine\f72e624c-4cc2-4167-b852-a47d412de8440″:(F)

установка разрешений на файл виртуального диска

 

Этой командой мы выдали виртуальной машине права Full Control на файл. В этом можно убедиться, открыв свойства файла и перейдя на вкладку Security. Как видите, разрешения в порядке и теперь виртуальная машина должна успешно запуститься.

Примечание. Подобную операцию необходимо проделать для каждого vhdx, и, если у машины имеются моментальные снимки (checkpoint), то для каждого avhdx файла, имеющего отношение к данной ВМ.

проверка разрешений

 

В заключение опишу некоторые ситуации, которые могут привести к потере прав:

• Перенос файла виртуального диска в другое расположение. Напомню, что при переносе файла на другой диск разрешения файловой системы удаляются и заменяются наследуемыми. Избежать этого можно, перенося файлы виртуальных машин с помощью встроенных средств Hyper-V, таких как Storage migration или Export\Import;
• Копирование файла виртуального диска. Ошибка может возникнуть при попытке подсунуть виртуальной машине чужой диск. Поэтому для ″размножения″ лучше воспользоваться либо экспортом, либо, при наличии VMM, клонированием виртуальных машин;
• Восстановление ВМ из бэкапа. Некоторые программы резервного копирования, например тот же DPM, при восстановлении в другое расположение не выставляют на файлы нужные права.

 
 
Комментарии
Артем

из примера команда не работала, пришлось урезать и все пошло
Icacls H:\Hyper-V\SRV1.vhdx /grant f72e624c-4cc2-4167-b852-a47d412de8440:F
спасибо!

можно сделать проще. например — на диске D: есть папка VM в которой складываются все диски виртуальных машин. Так вот, группе Virtual Mashines разрешен доступ только к этой папке и только для чтения. Разрешаем группе Virtual Mashines полные права на эту папку и её подпапки. И всё работает. А добавлять кучу ID машин в разрешенные, представляете ? 10 виртуальных машин по 2 диска и 8-24 снэпшота на каждую…

Андрей, огромное спасибо и бесконечные благодарности. Предоставил группе Виртуальные машине полные права на папку с файлами вритуалки и все запустилось. Ключ типа Icacls H:\Hyper-V\SRV1.vhdx /grant f72e624c-4cc2-4167-b852-a47d412de8440:F не сработал, написал что-то типа не смог обработать. Респект за совет.

Андрей

Спасибо за статью. Отдельно спасибо Артему. Его пример сработал.
«из примера команда не работала, пришлось урезать и все пошло
Icacls H:\Hyper-V\SRV1.vhdx /grant f72e624c-4cc2-4167-b852-a47d412de8440:F
спасибо!»(с) Артем

Сергей

Если быстро нужно поправить права на один или 2 диска я всегда делал так: в оснастке Hyper-V для нужной машины просто вместо проблемного диска создавал и подключал новый пустой и тут же вместо него снова проблемный диск. При подключении через диспетчер Hyper-V нужные права на подключаемый файл назначаются автоматически. Быстрее чем смотреть идентификатор и вспоминать синтаксис…