Надеюсь, мне здесь помогут. Я использую команду virt-clone, чтобы получить образ VyOS (Linux-маршрутизатор с открытым исходным кодом). Клон работает нормально, но когда я копирую образ на другой хост KVM и устанавливаю его, номер сетевой карты меняется. порты eth0 и eth1 превращаются в eth2 и eth3 на новом экземпляре. Есть ли способ предотвратить это?
на исходном сервере я запускаю:
vyos@vyos:~$ show int
Codes: S - State, L - Link, u - Up, D - Down, A - Admin Down
Interface IP Address S/L Description
--------- ---------- --- -----------
eth0 - u/u
eth1 - u/u
lo 127.0.0.1/8 u/u
::1/128
vyos@vyos:~$
Затем я завершаю работу и клонирую:
virt-clone --original vyos --name vyos_clone --file vyos_clone
Я копирую новый клонированный файл на другой хост kvm и запускаю:
virt-install -n vyos --description "Vyos Server" --ram 1024 --vcpus 1 --os-type=linux --disk /VMs/vyos_clone,device=disk,bus=virtio,size=15,sparse=true,format=raw --graphics none --network=default,model=virtio --network=network:HUB1,model=virtio --import --noautoconsole --autostart
Я запускаю службу с virsh start vyos
но когда я просматриваю интерфейсы, нумерация изменилась:
vyos@vyos:~$ show int
Codes: S - State, L - Link, u - Up, D - Down, A - Admin Down
Interface IP Address S/L Description
--------- ---------- --- -----------
eth2 - u/u
eth3 - u/u
lo 127.0.0.1/8 u/u
::1/128
vyos@vyos:~$
Есть ли способ заставить новую виртуальную машину / домен использовать eth0 и eth1 вместо eth2 и eth3?
Мне нужно, чтобы они оставались такими же, чтобы я мог писать сценарии.
****** Обновить
Я попытался запустить sysprep, и похоже, что он не распознает операционную систему vyos:
> # virt-sysprep -a /VMs/vyos_clone [ 0.0] Examining the guest ... virt-sysprep: error: no operating systems were found in the guest
> image
>
> If reporting bugs, run virt-sysprep with debugging enabled and include
> the complete output:
>
> virt-sysprep -v -x [...]
Я также попытался отредактировать xml с помощью virsh edit и удалить MAC-адреса и перезапустить домен, но это не устранило проблему.
Спасибо за помощь C
Причина, по которой вы столкнулись с этой проблемой, заключается в том, что вы не очистили различные заполненные значения из этого образа виртуальной машины, которые необходимо очистить перед использованием после клонирования, например MAC-адреса интерфейсов в файлах конфигурации, что объясняет имя вашего сетевого адаптера. вопрос.
При клонировании создается только копия диска и создается новое определение виртуальной машины. Определения представлены в формате XML, их можно найти в /etc/libvirt/qemu/$VM_NAME.xml
по умолчанию. Изображения могут быть в различных форматах (включая необработанные блочные устройства, а не файлы вообще), но при использовании файлов изображений они хранятся в /var/lib/libvirt/images/
по умолчанию.
Вам необходимо сначала выполнить sysprep этого образа, чтобы исправить наблюдаемое поведение, которое удалит заполненные значения для таких вещей, как постоянные сетевые правила и конфигурации сетевых адаптеров (и еще несколько вещей, но они наиболее важны в контексте этого вопроса).
Это делается для виртуальных машин libvirt с помощью virt-sysprep
в отношении образа корневого диска, обычно либо после клонирования одного образа, либо потенциально перед клонированием (в случае создания «шаблонного» образа виртуальной машины).
ВНИМАНИЕ! Используйте virt-sysprep только для неактивных (уничтоженных или отключенных) образов виртуальных машин. Этот инструмент смонтирует гостевые файловые системы и внесет изменения, что опасно и может привести к серьезным сбоям при выполнении на работающей виртуальной машине)
В этом случае я подробно расскажу о процессе sysprep, который вы бы использовали. после клонирование изображения, а не создание шаблона или чего-то еще. Дайте мне знать, если вам понадобится помощь в использовании по-другому. Следующее будет выполнять стандартные "типичные" действия, которые вам нужно будет сделать для успешного использования корневого образа, как если бы он никогда не загружался:
Клонируйте свое изображение
[...]
Выполните эту команду для клонированного корневого образа (до или после копирования, не имеет значения):
virt-sysprep -a /var/lib/libvirt/images/$ROOT_VM_DISK.qcow2
Затем вы можете использовать это изображение в экземпляре, как если бы оно никогда раньше не загружалось. Ваши важные изменения будут сохранены.
Вывод, выгружаемый в stdout, подробно описывает, что было сделано, и удалось ли это сделать. Я не совсем уверен, что образ VyOS будет успешным с использованием значений по умолчанию. Если у вас возникли проблемы, и вы застряли, опубликуйте свои результаты, и я могу помочь разобрать, что там происходит.
Я смог выполнить то, что искал, установив Vyos на виртуальную машину без сетевых адаптеров. Затем я клонировал эту виртуальную машину и использовал файлы qcow2 для своей установки. Когда я установил с помощью этого файла qcow2, я бы добавил 2 новые карты NIC. Теперь каждый раз, когда я запускаю Vyos, это всегда Eth0 и Eth1, и мои сценарии работают нормально.
Больше работа, чем исправление.