29 июн. 2010 г.

Access Denied при запуске виртуалок в Hyper-V

Запустил procmon, попытался запустить виртуалку, выгрузил результаты в Excel и отфильтровал по Access Denied.
Одна из записей говорила просто и понятно о многом:
vmwp.exe 2440 CreateFile C:\VM\2008R2-EE1\Virtual Machines\F497964D-32A9-4A86-B9D8-0DD6C9E533C2.xml ACCESS DENIED
Desired Access: Generic Read/Write, Disposition: Open, Options: Write Through, Sequential Access, Non-Directory File, Open No Recall, Attributes: n/a, ShareMode: Read, Write, AllocationSize: n/a

Как оказалось, на этот файл должны быть установлены права для NT VIRTUAL MACHINE\Virtual Machines (либо для NT VIRTUAL MACHINE\GUID_вашей виртуалки – разницы пока не понял). Вот результат выполнения команды icacls c:\VM\2003-1\ - на каталог с виртуалкой, которая чувствовала себя нормально

c:\VM\2003-3\ NT VIRTUAL MACHINE\Virtual Machines:(R,WD,AD)
NT VIRTUAL MACHINE\Virtual Machines:(CI)(IO)(GR,WD,AD)
BUILTIN\Administrators:(F)
CREATOR OWNER:(OI)(CI)(IO)(F)
BUILTIN\Administrators:(I)(OI)(CI)(F)
NT AUTHORITY\SYSTEM:(I)(OI)(CI)(RX)
HOST\Administrator:(I)(OI)(CI)(F)


Тогда как у меня для неработающих машин результат был таким:
C:\Users\administrator.A>icacls c:\VM\2008R2-EE1\
c:\VM\2008R2-EE1\ BUILTIN\Administrators:(I)(OI)(CI)(F)
NT AUTHORITY\SYSTEM:(I)(OI)(CI)(RX)
HOST\Administrator:(I)(OI)(CI)(F)

Выполняю:

icacls c:\VM\2008R2-EE1\ /T /grant "NT Virtual machine\F497964D-32A9-4A86-B9D8-0DD6C9E533C2":(F)

Результат:
C:\Users\administrator.A>icacls c:\VM\2008R2-EE1\
c:\VM\2008R2-EE1\ NT VIRTUAL MACHINE\F497964D-32A9-4A86-B9D8-0DD6C9E533C2:(F)
BUILTIN\Administrators:(I)(OI)(CI)(F)
NT AUTHORITY\SYSTEM:(I)(OI)(CI)(RX)
HOST\Administrator:(I)(OI)(CI)(F)

И всё вроде бы красиво, права у учётки, запускающей VM полные и даже машина стартанула из Saved State и я решил не заморачиваться с пониманием таинственных CI, IO из строки правильной и рабочей виртуалки "NT VIRTUAL MACHINE\Virtual Machines:(CI)(IO)". Лучше бы я сделал это сразу

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

Как оказалось, нужно чтобы для NT VIRTUAL MACHINE\Virtual Machines всё таки были назначено наследование, как это показано на скриншоте.

Либо с помощью icacls C:\VM\2008r2-EE1\ /grant NT VIRTUAL MACHINE\Virtual Machines:(CI,OI)


После этого виртуалки заработали в штатном режиме, правда так осталось непонятным, кто же или что отобрало права у учёток…

Комментариев нет: