|
Компьютерный форум OSzone.net » Серверные продукты Microsoft » Windows Server 2008/2008 R2 » 2008 R2 - Упал сервер Hyper-V. Копирование виртуальных машин без использования экспорт/импорт. |
|
2008 R2 - Упал сервер Hyper-V. Копирование виртуальных машин без использования экспорт/импорт.
|
Пользователь Сообщения: 69 |
Профиль | Отправить PM | Цитировать
Возможна ситуация, когда сервер 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 ) |
|
Отправлено: 16:56, 02-09-2011 |
Новый участник Сообщения: 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
|
Профиль | Отправить PM | Цитировать Цитата JonnyB:
У меня скрипт под русскую версию Windows, где развёрнут Hyper-V. Естественно, для английской - в команде icacls надо использовать "NT VIRTUAL MACHINE..." Кому не лень, можете дописать, например, проверку при запуске скрипта - на предмет языка операционной системы |
|
Отправлено: 12:32, 15-09-2011 | #3 |
Новый участник Сообщения: 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 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
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 |
|