Отказ от ответственности: это, конечно, не поддерживаемый / рекомендуемый способ сделать это. Не делай этого на производственной коробке. Я сделал это, когда все виртуальные машины были отключены, а 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 - #
комментарии здесь только для пояснения; Я не знаю, работают ли они в реальном файле, и, в любом случае, сдуваются при следующей конфигурации.