Перенос файлов виртуальных машин hyper-v

Бывает так, что админ создал конфигурационные файлы виртуальных машин по умолчанию, а нам их нужно откинуть на другой диск.

Перенос всех файлов конфигураций.

  1. Останавливаем службу Hyper-V
  2. Копируем «C:\ProgramData\Microsoft\Windows\Hyper-V\Virtual Machines» на D:\VM
  3. Копируем права из под админа cmd icacls "C:\ProgramData\Microsoft\Windows\Hyper-V\Virtual Machines" /save c:\wm_perms.txt /t /c
  4. Переименовываем «C:\ProgramData\Microsoft\Windows\Hyper-V\Virtual Machines» в «C:\ProgramData\Microsoft\Windows\Hyper-V\_Virtual Machines»
  5. Создаем симлинк из под админа в cmd mklink /J "C:\ProgramData\Microsoft\Windows\Hyper-V\Virtual Machines" D:\VM
  6. Даем права на симлинк из под админа powershell (потому что на icacls на ярлык права не передаются) Get-Acl -Path "C:\ProgramData\Microsoft\Windows\Hyper-V\_Virtual Machines" | Set-Acl -Path "C:\ProgramData\Microsoft\Windows\Hyper-V\Virtual Machines"
  7. Восстанавливаем права на новом месте из под амина cmd Icacls D:\ /restore c:\wm_perms.txt
  8. Запускаем службу Hyper-V

На данном этапе Hyper-V увидит все машины и может даже запуститься, но если начнет ругаться на нехватку прав, то для каждой машины делаем следующее.

  1. Раскрываем ошибку и видим ID машины
  2. Идем в Папку «C:\ProgramData\Microsoft\Windows\Hyper-V\Virtual Machines» тут храняться симлинки на конфигурационные файлы
  3. Находим файл с ID машины и смотрим его свойства куда ведет симлинк, дальше по этому пути на папку Virtual Machines нужно дать права на конкретную виртуальную машину. ( 02BD87BF-8786-4B22-A265-4FD6DDDBEAEE )
  4. Даем права из под админа cmd icacls "D:\VM\DC1\Virtual Machines" /grant "ВИРТУАЛЬНАЯ МАШИНА NT\02BD87BF-8786-4B22-A265-4FD6DDDBEAEE":F /T

Перенос конфигурационных файлов конкретной машины

  1. Останавливаем службу
  2. Переносим файлы
  3. Идем в «C:\ProgramData\Microsoft\Windows\Hyper-V\Virtual Machines»
  4. Находим симлинк нашей виртуалки ( 02BD87BF-8786-4B22-A265-4FD6DDDBEAEE )
  5. Переименовываем его например подчеркивание в начале
  6. Создаем симлинк на новое расположение конфигурационного файла 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"
  7. Раздаем права
    • 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
  8. Либо копируем права из под powershell с предыдущих файлов и мест расположений Get-Acl -Path Старое | Set-Acl -Path Новое
  9. Запускаем службу

Диски виртуалки

Если у нас есть скопированный диск виртуалки и нам нужно его вернуть вместо рабочего, то:

  1. Останавливаем виртуалку
  2. Копируем права диска (всей папки) icacls D:\VM-DISKS /save c:\wm_disks.txt /t /c
  3. Заменяем диск
  4. Восстанавливаем права icacls D:\VM-DISKS /restore c:\wm_disks.txt
  • 18.07.2023