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)


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

28 июн. 2010 г.

Поиск отвалившихся компьютеров WSUS

Проблема:
Вы обновляете ваши компьютеры с помощью WSUS, но случайно оказывается, что не все они подхватили настройки, которые вы распространили через GPO.
Причины могут быть разные: задисейбленная служба Автоматического обновления, установка из образа, просто глюки (мне вот к примеру так и не удалось победить 2 машины. Если в оснастке WSUS'a появляется одна из них - то сразу же отваливается другая. В чём дело понять пока не могу)
Скрипт сравнивает содержимого OU (и движется вниз по дереву) в котором содержатся учётные записи ваших компьютеров и сравнивает их с теми, что получает из WSUS'a. Не найденные во WSUS'e учётки предоставляет нам в текстовом файлике.


[reflection.assembly]::LoadWithPartialName("Microsoft.UpdateServices.Administration")
# Указываем свой сервер WSUS. Если он у вас используется на порту отличном от 80 укажите это таким образом "GetUpdateServer("krnd-file", $false, 12345)"
$wsus = [Microsoft.UpdateServices.Administration.AdminProxy]::GetUpdateServer("krnd-file", $false)
$WSUScomps = $wsus.GetComputerTargets()
$WSUSCompNames = $WSUScomps | ForEach { $_.FullDomainName.ToUpper() }
# Получаем список незаблокированных компьютеров в вашем OU
$ADcomps = (new-object System.DirectoryServices.DirectorySearcher([ADSI]"LDAP://ou=krnd,ou=katren,dc=katren,dc=net","(&(objectCategory=computer)(!userAccountControl:1.2.840.113556.1.4.803:=2))")).findAll()
$ADCompNames = $ADcomps | ForEach {$_.GetDirectoryEntry().dNSHostName.ToString().ToUpper()}
$NoWSUSCompNames = $ADCompNames | Where { $WSUSCompNames -notcontains $_ } > C:\Wsus.txt

Скрипт "собран" мною с помощью статьи Ильи Сазонова, за что ему огромное спасибо!

Частичный бекап с помощью Windows Backup в 2008 R2

Предыстория.
Настроил на новом сервере БД полный бекап.
Есстественно после переноса туда тестовой БД с радостью обнаружил что он её забекапил в архив размером 65 гигабайт :\
Попытался сделать новый. Для этого галочка Bare Metal должна быть снята, иначе не получается отключить бекап отдельных папок. Next- Next - Next и в итоге видим окошко (см. вложение)


Если коротко - то чтобы решить этот вопрос нужно снять галочку с "Documents And Settings" в окне выбора файлов для архивации

Утро началось плохо

Утро началось плохо - в один глаз светило солнце, из другого торчало копьё

Утро началось с обычного старта моей домашней Hyper-V "лаборатории"
Почему то не стартанул виртуальный DC и ещё одна машина, обе 2008R2. Обе в Saved State (в которое они по умолчанию падают при выключении хоста)
Странно, подумал я.

При попытке стартануть вручную - ошибка, проверьте права на папку

"Unnamed VM' could not read or update the virtual machine configuration because access was denied: General access denied error (0x80070005). Check the security settings on the folder in which the virtual machine is stored"

Log Name: Microsoft-Windows-Hyper-V-Worker-Admin
Source: Microsoft-Windows-Hyper-V-Worker
Date: 28.06.2010 9:05:08
Event ID: 3072
Task Category: None
Level: Error
Keywords:
User: NETWORK SERVICE
Computer: host.a.ru
Description:
'Unnamed VM' could not read or update the virtual machine configuration because access was denied: General access denied error (0x80070005). Check the security settings on the folder in which the virtual machine is stored. (Virtual machine ID D1C7CB0B-6024-4FD1-8854-342703BA18BA)
Event Xml:
Буду разбираться...