Перенос файлов виртуальных машин hyper-v
Бывает так, что админ создал конфигурационные файлы виртуальных машин по умолчанию, а нам их нужно откинуть на другой диск.
Перенос всех файлов конфигураций.
- Останавливаем службу Hyper-V
- Копируем «C:\ProgramData\Microsoft\Windows\Hyper-V\Virtual Machines» на D:\VM
- Копируем права из под админа cmd
icacls "C:\ProgramData\Microsoft\Windows\Hyper-V\Virtual Machines" /save c:\wm_perms.txt /t /c
- Переименовываем «C:\ProgramData\Microsoft\Windows\Hyper-V\Virtual Machines» в «C:\ProgramData\Microsoft\Windows\Hyper-V\_Virtual Machines»
- Создаем симлинк из под админа в
cmd mklink /J "C:\ProgramData\Microsoft\Windows\Hyper-V\Virtual Machines" D:\VM
- Даем права на симлинк из под админа powershell (потому что на icacls на ярлык права не передаются)
Get-Acl -Path "C:\ProgramData\Microsoft\Windows\Hyper-V\_Virtual Machines" | Set-Acl -Path "C:\ProgramData\Microsoft\Windows\Hyper-V\Virtual Machines"
- Восстанавливаем права на новом месте из под амина cmd
Icacls D:\ /restore c:\wm_perms.txt
- Запускаем службу Hyper-V
На данном этапе Hyper-V увидит все машины и может даже запуститься, но если начнет ругаться на нехватку прав, то для каждой машины делаем следующее.
- Раскрываем ошибку и видим ID машины
- Идем в Папку «C:\ProgramData\Microsoft\Windows\Hyper-V\Virtual Machines» тут храняться симлинки на конфигурационные файлы
- Находим файл с ID машины и смотрим его свойства куда ведет симлинк, дальше по этому пути на папку Virtual Machines нужно дать права на конкретную виртуальную машину. ( 02BD87BF-8786-4B22-A265-4FD6DDDBEAEE )
- Даем права из под админа cmd
icacls "D:\VM\DC1\Virtual Machines" /grant "ВИРТУАЛЬНАЯ МАШИНА NT\02BD87BF-8786-4B22-A265-4FD6DDDBEAEE":F /T
Перенос конфигурационных файлов конкретной машины
- Останавливаем службу
- Переносим файлы
- Идем в «C:\ProgramData\Microsoft\Windows\Hyper-V\Virtual Machines»
- Находим симлинк нашей виртуалки ( 02BD87BF-8786-4B22-A265-4FD6DDDBEAEE )
- Переименовываем его например подчеркивание в начале
- Создаем симлинк на новое расположение конфигурационного файла
mklink "C:\ProgramData\Microsoft\Windows\Hyper-V\Virtual Machines\02BD87BF-8786-4B22-A265-4FD6DDDBEAEE.xml" "D:\WM\DC1\Virtual Machines\02BD87BF-8786-4B22-A265-4FD6DDDBEAEE.xml"
- Раздаем права
icacls D:\VM /grant "ВИРТУАЛЬНАЯ МАШИНА NT\Виртуальные машины":F /T
icacls "C:\ProgramData\Microsoft\Windows\Hyper-V\Virtual Machines\02BD87BF-8786-4B22-A265-4FD6DDDBEAEE.xml" /grant "ВИРТУАЛЬНАЯ МАШИНА NT\02BD87BF-8786-4B22-A265-4FD6DDDBEAEE":F /T
icacls "D:\WM\DC1\Virtual Machines" /grant "ВИРТУАЛЬНАЯ МАШИНА NT\02BD87BF-8786-4B22-A265-4FD6DDDBEAEE":F /T
- Либо копируем права из под powershell с предыдущих файлов и мест расположений
Get-Acl -Path Старое | Set-Acl -Path Новое
- Запускаем службу
Диски виртуалки
Если у нас есть скопированный диск виртуалки и нам нужно его вернуть вместо рабочего, то:
- Останавливаем виртуалку
- Копируем права диска (всей папки)
icacls D:\VM-DISKS /save c:\wm_disks.txt /t /c
- Заменяем диск
- Восстанавливаем права
icacls D:\VM-DISKS /restore c:\wm_disks.txt