Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Серверные продукты Microsoft » Windows Server 2008/2008 R2 » 2008 R2 - Упал сервер Hyper-V. Копирование виртуальных машин без использования экспорт/импорт.

Ответить
Настройки темы
2008 R2 - Упал сервер Hyper-V. Копирование виртуальных машин без использования экспорт/импорт.

Пользователь


Сообщения: 69
Благодарности: 11

Профиль | Отправить PM | Цитировать


Изменения
Автор: morres
Дата: 08-09-2011
Описание: синтаксическая ошибка в коде
Возможна ситуация, когда сервер Hyper-V "умер", но файлы виртуальных машин со всеми снимками (snapshot) и виртуальными жёсткими дисками (*.vhd и *.avhd) остались. Или, например, другая ситуация: сервер резервного копирования Symantec BackUp Exec может корректно бекапить виртуальные машины, но, при попытке восстановить их на ДРУГОЙ сервер Hyper-V (штатная функция Backup Exec) регистрация виртуальной машины не выполняется, а соответственно в оснастке "Диспетчер Hyper-V" пусто.
Вобщем, пара дней гугления и вивисекций с восстановление виртуальных машин прошла успешно, чем я и решил поделиться.

Выяснилось, что помимо NTFS-безопасности на основе учеток и групп всем нам столь знакомых Hyper-V прописывает безопасность на файлы и папки виртуальных машин своими средствами. Ради интереса посмотрите свойсва папок и файлов на предмет "Безопасности" и увидите, что там прописана такая группа, как "Виртуальные машины" и на *.xml файлы прописаны группы называемые по уникальному идентификатору виртуальной машины.
Собственно, вся загвоздка в том как правильно сделать хардлинк на XML-файл виртуалки, положить его в c:\ProgramData\Microsoft\Windows\Hyper-V\Virtual Machines\ и дать на этот хардлинк правильные права.

в качестве решения этой задачи предлагаю следующий скрипт, который я наваял:
VM_HWLinks_Fix.cmd
Код: Выделить весь код
@ECHO OFF
::---------- путь к файлам Hyper-V, где хранятся ссылки:
set HYPER-V_PATH=c:\ProgramData\Microsoft\Windows\Hyper-V
::---------- переменная содержит ID ВМ 
set VM_ID=""
::---------- переменная содержит путь к ВМ
set VM_PATH=""
::---------- переменная содержит ID снимка ВМ
set SNAP_ID=""
 
:MAINMENU
set answer=""
cls
echo -------------------------------------------------
echo Menu
echo -------------------------------------------------
echo  1: Make Hard Links for Virtual Machine
echo  2: Make Hard Links for Virtual Machine Snapshots
echo  3: Exit
echo -------------------------------------------------
set /p answer=Enter Menu Item: 
if %answer% equ 1 goto MENUVM
if %answer% equ 2 goto MENUSNAP
if %answer% equ 3 (goto :EOF) else goto MAINMENU
 

::----- если нажата единица, то прописываем HardLink для ВМ
:MENUVM
set /p VM_ID=Enter Virtual Machine GUID: 
set /p VM_PATH=Enter path to Virtual Machine: 

if exist "%VM_PATH%\Virtual Machines\%VM_ID%.xml" (
	:: ----- если находим прежние хардлинки, то удаляем (необходимо, при использование Backup Exec)
	if exist "%HYPER-V_PATH%\Virtual Machines\%VM_ID%.xml" del /F /Q "%HYPER-V_PATH%\Virtual Machines\%VM_ID%.xml"
	:: ----- останавливаем службу "Управления виртуальными машинами Hyper-V"
	net stop vmms
	:: ----- создаём хардлинк на XML-файл снимка ВМ
	mklink /H "%VM_ID%.xml" "%VM_PATH%\Virtual Machines\%VM_ID%.xml"
	:: ----- перемещаем хардлинк туда, где он должен быть
	move /Y "%VM_ID%.xml" "%HYPER-V_PATH%\Virtual Machines\"
	:: ----- запускаем службу "Управления виртуальными машинами Hyper-V" (Необходимо чтобы ID ВМ зарегистрировался и icacls отработала корректно)
	net start vmms
	pause
	:: ----- устанавливаем необходимую NTFS-безопасность
	icacls "%HYPER-V_PATH%\Virtual Machines\%VM_ID%.xml" /grant "‚?ђ’“Ђ‹њЌЂџ ЊЂ??ЌЂ NT\%VM_ID%":F /T
	pause
	goto MAINMENU
) else (
	echo ERROR: Snapshot XML-file not found! Try one more time...
	pause
	goto :EOF
)


::----- если нажата двойка, то прописываем HardLink для снимка ВМ (предполагается, что ВМ уже зарегистрирована иначе icacls отработает не коректно)
:MENUSNAP
if %VM_ID%=="" set /p VM_ID=Enter Virtual Machine GUID: 
if %VM_PATH%=="" set /p VM_PATH=Enter path to Virtual Machine: 
set /p SNAP_ID=Enter Snapshot GUID: 

if exist "%VM_PATH%\Snapshots\%SNAP_ID%.xml" (
	:: ----- если находим прежние хардлинки, то удаляем (необходимо, при использование Backup Exec)
	if exist "%HYPER-V_PATH%\Snapshots\%SNAP_ID%.xml" del /F /Q "%HYPER-V_PATH%\Snapshots\%SNAP_ID%.xml"
	:: ----- создаём хардлинк на XML-файл снимка ВМ
	mklink /H "%SNAP_ID%.xml" "%VM_PATH%\Snapshots\%SNAP_ID%.xml"
	:: ----- перемещаем хардлинк туда, где он должен быть
	move /Y "%SNAP_ID%.xml" "%HYPER-V_PATH%\Snapshots\"
	pause
	:: ----- устанавливаем необходимую NTFS-безопасность
	icacls "%HYPER-V_PATH%\Snapshots\%SNAP_ID%.xml" /grant "‚?ђ’“Ђ‹њЌЂџ ЊЂ??ЌЂ NT\%VM_ID%":F /T
	pause
	goto MAINMENU
) else (
	echo ERROR: Snapshot XML-file not found! Try one more time...
	pause
	goto :EOF
)
условия только одно: запускайте скрипт на том же диске (можно в корне, путь не имеет значение), где расположена виртуалка иначе mklink будет ругаться, что не может создать хардлинк. Конечно, надо бы добавить проверку этого условия (например, после ввода пути к виртуальной машине), но мне лень. И, кстати, путь к виртуальной машине вводите без бэк-слежа в конце, т.е. не c:\VMs\виртуалка\, а c:\VMs\виртуалка.
Это сообщение посчитали полезным следующие участники:

Отправлено: 16:56, 02-09-2011

 

Новый участник


Сообщения: 2
Благодарности: 2

Профиль | Отправить PM | Цитировать


Большое спасибо за объяснения и скрипт.
С вашего разрешения добавлю немного измененную версию для англ. версии Hyper-V сервера
Код: Выделить весь код
@ECHO OFF
::---------- путь к файлам Hyper-V, где хранятся ссылки:
set HYPER-V_PATH=c:\ProgramData\Microsoft\Windows\Hyper-V
::---------- переменная содержит ID ВМ 
set VM_ID=""
::---------- переменная содержит путь к ВМ
set VM_PATH=""
::---------- переменная содержит ID снимка ВМ
set SNAP_ID=""
 
:MAINMENU
set answer=""
cls
echo -------------------------------------------------
echo Menu
echo -------------------------------------------------
echo  1: Make Hard Links for Virtual Machine
echo  2: Make Hard Links for Virtual Machine Snapshots
echo  3: Exit
echo -------------------------------------------------
set /p answer=Enter Menu Item: 
if %answer% equ 1 goto MENUVM
if %answer% equ 2 goto MENUSNAP
if %answer% equ 3 (goto :EOF) else goto MAINMENU
 

::----- если нажата единица, то прописываем HardLink для ВМ
:MENUVM
set /p VM_ID=Enter Virtual Machine GUID: 
set /p VM_PATH=Enter path to Virtual Machine: 

if exist "%VM_PATH%\Virtual Machines\%VM_ID%.xml" (
	:: ----- если находим прежние хардлинки, то удаляем (необходимо, при использование Backup Exec)
	if exist "%HYPER-V_PATH%\Virtual Machines\%VM_ID%.xml" del /F /Q "%HYPER-V_PATH%\Virtual Machines\%VM_ID%.xml"
	:: ----- останавливаем службу "Управления виртуальными машинами Hyper-V"
	net stop vmms
	:: ----- создаём хардлинк на XML-файл снимка ВМ
	mklink /H "%VM_ID%.xml" "%VM_PATH%\Virtual Machines\%VM_ID%.xml"
	:: ----- перемещаем хардлинк туда, где он должен быть
	move /Y "%VM_ID%.xml" "%HYPER-V_PATH%\Virtual Machines\"
	:: ----- запускаем службу "Управления виртуальными машинами Hyper-V" (Необходимо чтобы ID ВМ зарегистрировался и icacls отработала корректно)
	net start vmms
	pause
	:: ----- устанавливаем необходимую NTFS-безопасность
	icacls "%HYPER-V_PATH%\Virtual Machines\%VM_ID%.xml" /grant "NT VIRTUAL MACHINE\%VM_ID%":F /T
	pause
	goto MAINMENU
) else (
	echo ERROR: Snapshot XML-file not found! Try one more time...
	pause
	goto :EOF
)


::----- если нажата двойка, то прописываем HardLink для снимка ВМ (предполагается, что ВМ уже зарегистрирована иначе icacls отработает не коректно)
:MENUSNAP
if %VM_ID%=="" set /p VM_ID=Enter Virtual Machine GUID: 
if %VM_PATH%=="" set /p VM_PATH=Enter path to Virtual Machine: 
set /p SNAP_ID=Enter Snapshot GUID: 

if exist "%VM_PATH%\Snapshots\%SNAP_ID%.xml" (
	:: ----- если находим прежние хардлинки, то удаляем (необходимо, при использование Backup Exec)
	if exist "%HYPER-V_PATH%\Snapshots\%SNAP_ID%.xml" del /F /Q "%HYPER-V_PATH%\Snapshots\%SNAP_ID%.xml"
	:: ----- создаём хардлинк на XML-файл снимка ВМ
	mklink /H "%SNAP_ID%.xml" "%VM_PATH%\Snapshots\%SNAP_ID%.xml"
	:: ----- перемещаем хардлинк туда, где он должен быть
	move /Y "%SNAP_ID%.xml" "%HYPER-V_PATH%\Snapshots\"
	pause
	:: ----- устанавливаем необходимую NTFS-безопасность
	icacls "%HYPER-V_PATH%\Snapshots\%SNAP_ID%.xml" /grant "NT VIRTUAL MACHINE\%VM_ID%":F /T
	pause
	goto MAINMENU
) else (
	echo ERROR: Snapshot XML-file not found! Try one more time...
	pause
	goto :EOF
)
Это сообщение посчитали полезным следующие участники:

Отправлено: 11:31, 15-09-2011 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Пользователь


Сообщения: 69
Благодарности: 11

Профиль | Отправить PM | Цитировать


Цитата JonnyB:
С вашего разрешения добавлю немного измененную версию для англ. версии Hyper-V сервера »
Да, конечно, без проблем, только, не мешало бы сообщение полезным пометить
У меня скрипт под русскую версию Windows, где развёрнут Hyper-V. Естественно, для английской - в команде icacls надо использовать "NT VIRTUAL MACHINE..." Кому не лень, можете дописать, например, проверку при запуске скрипта - на предмет языка операционной системы
Это сообщение посчитали полезным следующие участники:

Отправлено: 12:32, 15-09-2011 | #3


Новый участник


Сообщения: 2
Благодарности: 2

Профиль | Отправить PM | Цитировать


Переписал/дополнил/изменил данный скрипт.
1.Убрал зависимость от диска с которого запускается скрипт
2.Добавил назначение соответствующих прав папкам самой виртуальной машины(т.к. ,например, при переносе на другую ОС без этих прав ВМ не сможет получить доступ к своим дискам)
3.Добавил пункт меню для автоматического добавления ВМ и снапшотов, только по пути к папке
P.S.:Перед первым запуском ВМ, следует проверить парметры настройки сети машины.
Код: Выделить весь код
@ECHO OFF
rem Скрипт для Английской версии Hyper-V сервера
rem Позволяет подключить не экспортированную ВМ к Hyper-V со всеми снимками и виртуальными жёсткими дисками.
rem помимо NTFS-безопасности на основе учеток и групп, Hyper-V прописывает настройки безопасности на файлы и папки виртуальных машин
rem данный скрипт делает хардлинк на XML-файл виртуалки, подкладывает его в c:\ProgramData\Microsoft\Windows\Hyper-V\Virtual Machines\
rem и дает на этот хардлинк и файлы виртуальной машины нужные права.
rem в меню 1 пункт добаляет в ручную ВМ, 2 пункт добавляет вручную снапшоты к ВМ, 3 пункт добавляет ВМ автоматически

::---------- путь к файлам Hyper-V, где хранятся ссылки:
set HYPER-V_PATH=c:\ProgramData\Microsoft\Windows\Hyper-V
::---------- переменная содержит ID ВМ 
set VM_ID=""
::---------- переменная содержит путь к ВМ
set VM_PATH=""
::---------- переменная содержит ID снимка ВМ
set SNAP_ID=""
 
:MAINMENU
set answer=""
cls
echo -------------------------------------------------
echo Menu
echo -------------------------------------------------
echo  1: Make Hard Links for Virtual Machine
echo  2: Make Hard Links for Virtual Machine Snapshots
echo  3: Make Hard Links for VM and Snapshots Automatic
echo  4: Exit
echo -------------------------------------------------
set /p answer=Enter Menu Item: 
if %answer% equ 1 goto MENUVM
if %answer% equ 2 goto MENUSNAP
if %answer% equ 3 goto MENUAUTO
if %answer% equ 4 (
	%~d0
	goto :EOF )
else goto MAINMENU
 

::----- если нажата ЕДИНИЦА, то прописываем HardLink для ВМ
:MENUVM
set /p VM_ID=Enter Virtual Machine GUID: 
set /p VM_PATH=Enter path to Virtual Machine: 
%VM_PATH:~0,2%

:: -----Вызываем процедуру добавления виртуальной машины
call :add_vm_id
goto MAINMENU


::----- если нажата ДВОЙКА, то прописываем HardLink для снимка ВМ (предполагается, что ВМ уже зарегистрирована иначе icacls отработает не коректно)
:MENUSNAP
if %VM_ID%=="" set /p VM_ID=Enter Virtual Machine GUID: 
if %VM_PATH%=="" set /p VM_PATH=Enter path to Virtual Machine: 
%VM_PATH:~0,2%
set /p SNAP_ID=Enter Snapshot GUID: 

:: -----Вызываем процедуру добавления снапшота
call :add_snapshot
goto MAINMENU


::----- ТРЕТИЙ пункт меню, HardLink ВМ и снимков автоматически по пути к папке с ВМ
:MENUAUTO
set /p VM_PATH=Enter path to Virtual Machine(e.g.: d:\VMs\VM1): 
%VM_PATH:~0,2%

:: ----- ищем xml файл в папке %VM_PATH%\Virtual Machines и заносим найденное в переменную VM_ID
for %%I in ("%VM_PATH%\Virtual Machines\*.xml") do set VM_ID=%%~nI
:: -----Вызываем процедуру добавления виртуальной машины
call :add_vm_id
:: ----- ищем xml файлы в папке %VM_PATH%\Snapshots и заносим каждый найденный файл в переменную SNAP_ID и регистрируем его
for %%K in ("%VM_PATH%\Snapshots\*.xml") do (
	set SNAP_ID=%%~nK
	call :add_snapshot
)
goto MAINMENU	
:: ----- КОНЕЦ основного модуля


:: -----ПРОЦЕДУРА добавления виртуальной машины
:add_vm_id
echo _
echo                        -=ADD VM=-
echo _
if exist "%VM_PATH%\Virtual Machines\%VM_ID%.xml" (
	:: ----- останавливаем службу "Управления виртуальными машинами Hyper-V"
	net stop vmms
	:: ----- если находим прежние хардлинки, то удаляем (необходимо, при использование Backup Exec)
	if exist "%HYPER-V_PATH%\Virtual Machines\%VM_ID%.xml" del /F /Q "%HYPER-V_PATH%\Virtual Machines\%VM_ID%.xml"	
	:: ----- создаём хардлинк на XML-файл снимка ВМ
	mklink /H "%VM_ID%.xml" "%VM_PATH%\Virtual Machines\%VM_ID%.xml"	
	:: ----- перемещаем хардлинк туда, где он должен быть
	move /Y "%VM_ID%.xml" "%HYPER-V_PATH%\Virtual Machines\"	
	:: ----- запускаем службу "Управления виртуальными машинами Hyper-V" (Необходимо чтобы ID ВМ зарегистрировался и icacls отработала корректно)
	net start vmms
	:: ----- устанавливаем права безопасности на содержимое папки Virtual Machines
	icacls "%VM_PATH%\Virtual Machines\*" /grant "NT VIRTUAL MACHINE\%VM_ID%":F /T
	:: ----- устанавливаем права безопасности на содержимое папки Virtual Hard Disks
	icacls "%VM_PATH%\Virtual Hard Disks\*" /grant "NT VIRTUAL MACHINE\Virtual Machines":F /T
	:: ----- устанавливаем необходимую NTFS-безопасность для хардлинка
	icacls "%HYPER-V_PATH%\Virtual Machines\%VM_ID%.xml" /grant "NT VIRTUAL MACHINE\%VM_ID%":F /T
	echo _
	echo VM %VM_ID% was added.
	echo _
	pause
	exit /b
) else (
	echo ERROR: VM XML-file not found! Try one more time...
	pause
	%~d0
	exit
)

:: -----ПРОЦЕДУРА добавления снапшота
:add_snapshot
echo _
echo                     -=ADD SNAPSHOT=-
echo _
if exist "%VM_PATH%\Snapshots\%SNAP_ID%.xml" (
	:: ----- если находим прежние хардлинки, то удаляем (необходимо, при использование Backup Exec)
	if exist "%HYPER-V_PATH%\Snapshots\%SNAP_ID%.xml" del /F /Q "%HYPER-V_PATH%\Snapshots\%SNAP_ID%.xml"
	:: ----- создаём хардлинк на XML-файл снимка ВМ
	mklink /H "%SNAP_ID%.xml" "%VM_PATH%\Snapshots\%SNAP_ID%.xml"
	:: ----- перемещаем хардлинк туда, где он должен быть
	move /Y "%SNAP_ID%.xml" "%HYPER-V_PATH%\Snapshots\"
	:: ----- устанавливаем права безопасности на содержимое папки Snapshots
	icacls "%VM_PATH%\Snapshots\*" /grant "NT VIRTUAL MACHINE\%VM_ID%":F /T
	:: ----- устанавливаем необходимую NTFS-безопасность  для хардлинка
	icacls "%HYPER-V_PATH%\Snapshots\%SNAP_ID%.xml" /grant "NT VIRTUAL MACHINE\%VM_ID%":F /T
	echo _
	echo SHAPSHOT %SNAP_ID% was added.
	echo _
	pause
	exit /b
) else (
	echo ERROR: Snapshot XML-file not found! Try one more time...
	pause
	%~d0
	exit
)

Последний раз редактировалось JonnyB, 16-09-2011 в 12:09.

Это сообщение посчитали полезным следующие участники:

Отправлено: 11:57, 16-09-2011 | #4



Компьютерный форум OSzone.net » Серверные продукты Microsoft » Windows Server 2008/2008 R2 » 2008 R2 - Упал сервер Hyper-V. Копирование виртуальных машин без использования экспорт/импорт.

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
2007 - неактивен импорт и экспорт Glebush Microsoft Office (Word, Excel, Outlook и т.д.) 1 31-10-2010 10:09
Redhat/Fedora - [решено] Автозапуск виртуальных машин(VMware)? FATruden Общий по Linux 2 20-07-2010 00:39
Создание виртуальной сети виртуальных машин lem785 Microsoft Windows NT/2000/2003 2 11-11-2009 10:40
Route/Bridge - [решено] Выход в инет одновременно с 2-3 виртуальных машин. Myobelt Сетевые технологии 5 25-11-2008 09:02
Доступ - EFS Научите делать экспорт и импорт nod201 Microsoft Windows 2000/XP 2 24-10-2008 17:59




 
Переход