Восстановление узлов и виртуальных машин Hyper-V с помощью PowerShell

Опубликовано: 16 Апреля, 2023
Восстановление узлов и виртуальных машин Hyper-V с помощью PowerShell

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

Прежде чем я начну, я должен указать, что командлеты PowerShell, о которых я собираюсь рассказать, не являются родными для Hyper-V. Вместо этого они включены в System Center Virtual Machine Manager и доступны только через командную оболочку Virtual Machine Manager.

Поиск проблемы

Для восстановления узлов Hyper-V используется командлет Get-SCVMHost. Согласно Microsoft, команда «запускает ряд шагов по исправлению на хосте в состоянии сбоя для известного набора условий сбоя». Другими словами, командлет проверяет, можно ли сбой узла отнести к известной причине, а затем работает над устранением проблемы.

Как это часто бывает при работе в среде System Center Virtual Machine Manager, вам потребуется использовать учетную запись RunAs при восстановлении хоста. Поэтому первое, что вам нужно сделать, — это сопоставить учетную запись запуска от имени с переменной. Например, приведенная ниже команда сопоставляет учетную запись RunAs с именем RunAs с переменной с именем $RunAsAccount:

$RunAsAccount = Get-SCRunAsAccount -Name «RunAsAccount»

После сопоставления учетной записи запуска от имени с переменной можно запустить операцию восстановления. Вот пример команды, используемой для этого:

Get-SCVMHost -ComputerName «<имя хост-сервера>» | Repair-SCVMHost-Credential $RunAsAccount

Вы можете увидеть пример этого процесса на скриншоте ниже.

Исправление проблемы с отдельной виртуальной машиной

Точно так же, как вы можете использовать PowerShell для устранения проблемы с хостом Hyper-V, вы также можете использовать аналогичный метод для устранения проблем, возникших на отдельных виртуальных машинах. Существует четыре основных типа отказов, которые этот метод способен исправить. К ним относятся сбои создания, сбои миграции, сбои обновления и сбои удаления. Кроме того, командлет Repair-SCVirtualMachine можно использовать для устранения проблем с агентом System Center, установленным в гостевой операционной системе.

Для устранения этих проблем используется командлет Repair-SCVirtualMachine. Прежде чем я покажу вам, как использовать этот командлет, мне нужно немного поговорить о действиях.

Всякий раз, когда вы используете командлет Repair-SCVirtualMachine, вам нужно указать одно из трех действий. Первое из этих действий — «Повторить попытку». Это действие полезно, когда виртуальная машина находится в состоянии сбоя из-за какого-либо административного действия, которое вы выполнили, и вы просто хотите повторить действие. Чтобы представить это более перспективно, я действительно использовал это действие прошлой ночью. Я выполнял административную задачу, связанную с предоставлением хранилища. Время ожидания задачи истекло из-за медленного оборудования, но я использовал действие «Повторить попытку», и задача была завершена во второй раз.

Второе действие, которое вы можете выполнить, — «Отменить». Отмена полезна для возврата виртуальной машины к ее предыдущему состоянию после неудачного административного действия. Если, например, вы пытаетесь перенести виртуальную машину на новый хост, но операция миграции завершается сбоем, вы можете использовать действие «Отменить», чтобы переместить виртуальную машину обратно на ее предыдущий хост.

Третье действие — «Отклонить». Вы можете использовать действие «Отклонить» только в тех случаях, когда вы вручную исправили проблему и хотите избавиться от состояния сбоя виртуальной машины. Использование этой опции, по сути, просто выполняет операцию обновления.

Итак, давайте рассмотрим пару примеров того, как можно восстановить виртуальную машину. Предположим, вы попытались перенести виртуальную машину с именем MyVM на новый хост, но операция не удалась, и вы хотите ее отменить. Это приведет к тому, что виртуальная машина будет перенаправлена обратно на хост, на котором она изначально размещалась. Выполнение этого типа корректирующих действий включает использование двух команд:

$VM = Get-SCVirtualMachine -Name «MyVM» Repair-SCVirtualMachine -VM $VM -Undo

Первая команда сопоставляет переменную с именем $VM с указанной виртуальной машиной. В этом случае эта виртуальная машина называется MyVM.

Вторая команда фактически восстанавливает виртуальную машину. Как видите, переключатель -VM используется для указания командлету на виртуальную машину, которую необходимо исправить, а действие исправления указывается через переключатель -Undo. Если бы вместо этого я хотел повторить операцию, я бы заменил -Undo на -Retry.

А как насчет гостевой операционной системы?

Что же делать в ситуации, когда возникают проблемы с агентом System Center, установленным в гостевой операционной системе виртуальной машины? В такой ситуации все работает немного иначе, чем в последнем примере, который я вам показал. Вам все равно нужно сопоставить переменную с виртуальной машиной, как это делалось раньше, но остальная часть процесса работает по-другому. Вот команды PowerShell:

$VM = Get-SCVirtualMachine -Name «MyVM» $Cred = Get-Credential Repair-SCVirtualMachine -VM $VM -Credential $Cred -Agent

Итак, как видите, первая строка идентична первой строке, использованной в предыдущем примере. Вторая команда создает переменную с именем $Cred и фиксирует набор учетных данных в этой переменной. Эти учетные данные используются для входа в виртуальную машину, на которой возникли проблемы.

Третья команда фактически инициирует операцию восстановления. Командлет Repair-SCVirtualMachine используется вместе с ключом -VM, как и раньше, но также используется переключатель -Credential. Это позволяет командлету Repair-SCViretualMachine использовать учетные данные виртуальной машины. Еще одна вещь, на которую стоит обратить внимание, это то, что, поскольку мы решаем проблему с агентом виртуальной машины, действие (отмена, повторная попытка и т. д.) не используется. Вместо этого переключатель агента указывает командлету выполнить восстановление на уровне агента.

Другие способы восстановления хостов Hyper-V

Какой бы полезной ни была возможность восстанавливать узлы и виртуальные машины Hyper-V из командной строки, это не единственные доступные варианты восстановления. Microsoft также предоставляет командлет Repair-SCVirtualNetwork и командлет Repair-SCVirtualNetworkAdapter, которые можно использовать для восстановления виртуальных сетей и виртуальных сетевых адаптеров соответственно.