Удаление сетевых адаптеров-призраков в виртуальных машинах Hyper-V

Опубликовано: 15 Апреля, 2023
Удаление сетевых адаптеров-призраков в виртуальных машинах Hyper-V

Одной из проблем, с которой рано или поздно сталкивается большинство администраторов Hyper-V, являются сетевые адаптеры-призраки. Призрачный сетевой адаптер, который иногда называют фантомным сетевым адаптером, — это сетевой адаптер, определенный в гостевой операционной системе, но не связанный с конфигурацией виртуальной машины.

Существует по крайней мере несколько различных способов появления сетевого адаптера-призрака. Наиболее распространенная причина — физическое преобразование в виртуальное (преобразование P2V). Если вы преобразуете физическую машину в виртуальную машину, операционная система машины по-прежнему будет содержать ссылку на физические сетевые адаптеры, которые использовала машина. Конечно, эти сетевые адаптеры больше не существуют после виртуализации машины, поэтому адаптеры становятся призраками.

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

В любом случае сетевая карта больше не существует, но она по-прежнему определена в реестре Windows.

Для демонстрации я создал виртуальную машину, содержащую два разных виртуальных сетевых адаптера. Windows (гостевая ОС) идентифицировала эти адаптеры как Ethernet и Ethernet 2. Затем я выключил виртуальную машину, удалил один из виртуальных сетевых адаптеров и создал новый виртуальный сетевой адаптер, идентичный тому, который я удалил. Как вы можете видеть на рисунке ниже, этот новый виртуальный сетевой адаптер идентифицируется гостевой ОС как Ethernet 3. Другими словами, гостевая операционная система обнаруживает базовое изменение виртуального оборудования, даже если удаленные и новые виртуальные сетевые адаптеры идентичны друг другу.

Изображение 14198
Windows видит старый и новый виртуальные сетевые адаптеры как два разных адаптера, даже если они идентичны.

Так почему все это имеет значение? Представьте на мгновение, что вы решили выполнить преобразование P2V на физическом сервере, который выполняет какую-то важную роль. Давайте также предположим, что этому конкретному серверу был назначен статический IP-адрес и что он должен продолжать использовать тот же адрес после виртуализации.

При загрузке машины после ее виртуализации вам придется вручную назначить IP-адрес виртуальному сетевому адаптеру. Однако, когда вы это сделаете, вы увидите сообщение о том, что другой адаптер уже использует этот адрес. Некоторые версии Windows более снисходительны, чем другие, когда речь идет о фантомном сетевом адаптере, удерживающем IP-адрес, который вы хотите переназначить. На рисунке ниже Windows на самом деле спрашивает вас, хотите ли вы освободить адрес от фантомного адаптера. Другие версии просто дадут вам возможность проигнорировать проблему и, таким образом, назначить один и тот же адрес как призраку, так и новому виртуальному сетевому адаптеру. Другие версии Windows (особенно старые) не позволяют назначать IP-адрес, который уже привязан к призрачной сетевой карте.

Изображение 14199
Это пример ошибки, указывающей на то, что IP-адрес уже назначен призрачной сетевой карте.

Это поднимает вопрос о том, как вы можете восстановить IP-адрес от сетевой карты-призрака. Процесс для этого зависит от версии Windows, работающей на виртуальной машине.

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

Изображение 14200
Вы можете указать Диспетчеру устройств отображать скрытые устройства.

Итак, что вы можете сделать, если вы используете более старую версию Windows, а в диспетчере устройств нет возможности отображать скрытые устройства? Что ж, в таких ситуациях вы можете ввести команду в окно командной строки с повышенными привилегиями, чтобы заставить диспетчер устройств отображать устройства-призраки. Команда:

Установите devmgr_show_nonpresent_devices=1

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

Изображение 14201
Возможно, вам придется использовать эту команду, чтобы сделать призрачную сетевую карту видимой.

Если у вас очень старая версия Windows, например Windows Server 2003 или Windows 2000, то даже этот метод не сработает. В таких случаях вам нужно будет добавить devmgr_show_nonpresent_devices=1 к переменным среды сервера.

В крайнем случае вы также можете попробовать удалить конфигурацию TCP/IP фантомного сетевого адаптера непосредственно из реестра. Я настоятельно рекомендую сделать резервную копию, прежде чем пытаться это сделать, потому что вы можете серьезно повредить операционную систему Windows, если что-то пойдет не так. Я также рекомендую вам избегать соблазна удалить всю сетевую карту с помощью реестра. Вместо этого лучше сосредоточиться на выпуске IP-адреса.

Для этого откройте редактор реестра и перейдите в раздел HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServices. Вы увидите несколько разделов реестра с длинными шестнадцатеричными именами. Каждый из них соответствует сетевому адаптеру. Разверните каждый адаптер, а затем разверните контейнер параметров под ним, чтобы открыть контейнер Tcpip. Отредактируйте ключ реестра EnableDHCP и измените его значение на 1, как показано на рисунке ниже. Это говорит адаптеру использовать DHCP вместо статического IP-адреса, что дает вам возможность повторно использовать адрес на другом адаптере.

Изображение 14202
Вы можете изменить значение EnableDHCP на 1 и удалить IP-адрес и подсеть.

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

Изображение 14203
Вот так выглядит раздел реестра после редактирования.

Вам нужно будет внести аналогичные изменения в HKEY_LOCAL_MACHINESYSTEMCurrentControlSet001ServicesTcpipParametersInterfaces{ваш GUID}.

Как видите, степень сложности восстановления IP-адреса с фантомного сетевого адаптера пропорциональна возрасту операционной системы. Со временем все стало проще. К счастью, есть способы освободить IP-адрес, даже если вы используете старую версию Windows.