Отказ от ответственности: это, конечно, не поддерживаемый / рекомендуемый способ сделать это. Не делай этого на производственной коробке. Я сделал это, когда все виртуальные машины были отключены, а vSphere отключен, чтобы быть в безопасности.
Сначала вам нужно получить доступ к консоли ESXi. Затем это можно легко сделать, отредактировав /etc/vmware/esx.conf .
Для каждого vSwitch есть такая запись:
/net/vswitch/child[0000]/name = "vSwitch0"
/net/vswitch/child[0000]/...
/net/vswitch/child[0001]/name = "vSwitch1"
/net/vswitch/child[0001]/...
...
Кстати, там вы можете переименовать vSwitches.
Группы портов являются узлами под vSwitches:
/net/vswitch/child[0000]/portgroup/child[0000]/name = "Management Network"
/net/vswitch/child[0000]/portgroup/child[0000]/...
...
/net/vswitch/child[0000]/portgroup/child[0001]/name = "VM Network"
/net/vswitch/child[0000]/portgroup/child[0001]/...
...
Чтобы переместить группу портов из одного vSwitch в другой, вы просто измените, какой узел /net/vswitch/child[XXXX]/ находится под ним, убедившись, что portgroup дочерние группы портов там уже есть. Другими словами, когда вы перемещаете группу портов в другой vSwitch, вам может потребоваться изменить его дочерний номер.
Примечание. Необходимо перенумеровать все соответствующие строки (все строки, соответствующие этой группе портов).
Примечание 2: Если для группы портов присутствуют записи teamPolicy , вам может потребоваться убедиться, что соответствующие параметры uplinks[nnnn]/pnic = соответствуют фактическому vmnicN для vswitch, в который вы перемещаете его.
После редактирования файла я просто перезагрузил сервер ESXi: $ reboot . Вместо этого может быть какой-то сервис или процесс, который можно было бы перезапустить, но я подумал, что перезагрузка была самым простым и безопасным способом.
пример
Скажем, у нас есть два vSwitch каждый с одной восходящей vmnic и две группы портов:
vSwitch0 --> vmnic0
|--portGroupA
|--portGroupB
vSwitch1 --> vmnic1
|--portGroupC
|--portGroupD
Соответствующие записи в esx.conf могут выглядеть примерно так 1:
# vSwitch0
/net/vswitch/child[0000]/...
/net/vswitch/child[0000]/name = "vSwitch0"
/net/vswitch/child[0000]/numPorts = "128"
# vSwitch0->portGroupA
/net/vswitch/child[0000]/portgroup/child[0000]/name = "portGroupA"
/net/vswitch/child[0000]/portgroup/child[0000]/teamPolicy/uplinks[0000]/pnic = "vmnic0"
# vSwitch0->portGroupB
/net/vswitch/child[0000]/portgroup/child[0001]/name = "portGroupB"
/net/vswitch/child[0000]/portgroup/child[0001]/teamPolicy/uplinks[0000]/pnic = "vmnic0"
/net/vswitch/child[0000]/uplinks/child[0000]/pnic = "vmnic0"
# vSwitch1
/net/vswitch/child[0001]/...
/net/vswitch/child[0001]/name = "vSwitch1"
/net/vswitch/child[0001]/numPorts = "128"
# vSwitch1->portGroupC
/net/vswitch/child[0001]/portgroup/child[0000]/name = "portGroupC"
/net/vswitch/child[0001]/portgroup/child[0000]/teamPolicy/uplinks[0000]/pnic = "vmnic1"
# vSwitch1->portGroupD
/net/vswitch/child[0001]/portgroup/child[0001]/name = "portGroupD"
/net/vswitch/child[0001]/portgroup/child[0001]/teamPolicy/uplinks[0000]/pnic = "vmnic1"
/net/vswitch/child[0001]/uplinks/child[0000]/pnic = "vmnic1"
Теперь мы хотим переместить portGroupC из vSwitch1 в vSwitch0 , поэтому конфигурация выглядит следующим образом:
vSwitch0 --> vmnic0
|--portGroupA
|--portGroupB
|--portGroupC
vSwitch1 --> vmnic1
|--portGroupD
Для этого мы:
- Определите все строки
portGroupC , которые начинаются с /net/vswitch/child[0001]/portgroup/child[0000] . Переместите эти записи вверх с помощью конфигурации vSwitch0 (не обязательно, но проясняет ситуацию при редактировании).
- Замените
/net/vswitch/child[0001] на /net/vswitch/child[0000] в каждой строке (потому что мы перемещаем его в этот переключатель).
- Поймите, что уже есть
/net/vswitch/child[0000]/portgroup/child[0000] (portGroupA), и измените portGroupC на /portgroup/child[0002] .
- Поймите, что наш uplink для этой группы портов теперь неверен (если указан), и измените
uplinks[0000]/pnic = с vmnic1 на vmnic0 (потому что это vmnic, обслуживающий этот vSwitch.)
Конечный конфиг должен выглядеть так:
# vSwitch0
/net/vswitch/child[0000]/...
/net/vswitch/child[0000]/name = "vSwitch0"
/net/vswitch/child[0000]/numPorts = "128"
# vSwitch0->portGroupA
/net/vswitch/child[0000]/portgroup/child[0000]/name = "portGroupA"
/net/vswitch/child[0000]/portgroup/child[0000]/teamPolicy/uplinks[0000]/pnic = "vmnic0"
# vSwitch0->portGroupB
/net/vswitch/child[0000]/portgroup/child[0001]/name = "portGroupB"
/net/vswitch/child[0000]/portgroup/child[0001]/teamPolicy/uplinks[0000]/pnic = "vmnic0"
# vSwitch1->portGroupC
/net/vswitch/child[0000]/portgroup/child[0002]/name = "portGroupC"
/net/vswitch/child[0000]/portgroup/child[0002]/teamPolicy/uplinks[0000]/pnic = "vmnic0"
/net/vswitch/child[0000]/uplinks/child[0000]/pnic = "vmnic0"
# vSwitch1
/net/vswitch/child[0001]/...
/net/vswitch/child[0001]/name = "vSwitch1"
/net/vswitch/child[0001]/numPorts = "128"
# vSwitch1->portGroupD
/net/vswitch/child[0001]/portgroup/child[0000]/name = "portGroupD"
/net/vswitch/child[0001]/portgroup/child[0000]/teamPolicy/uplinks[0000]/pnic = "vmnic1"
/net/vswitch/child[0001]/uplinks/child[0000]/pnic = "vmnic1"
Обратите внимание, что я также изменил portGroupD с portgroup/child[0001] на [0000] (так как больше не было записи 0).
1 - # комментарии здесь только для пояснения; Я не знаю, работают ли они в реальном файле, и, в любом случае, сдуваются при следующей конфигурации.