Назад | Перейти на главную страницу

Почему я не могу сохранить сетевые изменения с помощью virsh?

Я пытаюсь добавить фиксированный адрес к конкретному виртуальному хосту, поэтому я закрыл виртуальную машину и использовал sudo virsh net-edit somenet. После добавления строки

<host mac='52:54:00:26:61:22' name='virt.example.com' ip='192.168.111.111' />

Я сэкономил и ушел. Затем я снова проверил с той же командой, и предыдущее состояние было восстановлено, мои изменения исчезли.

В то же время, когда я смотрю в /etc/libvirt/qemu/networks/somenet.xml, мои изменения применяются.

Если я снова запустил свою виртуальную машину, она получит IP из пула DHCP (192.168.111.170), но не по адресу, который я определил выше.

Когда я перезапускаю libvirt-service после изменений, ситуация кажется такой же: в файле конфигурации мои изменения, с virsh Я вижу ванильное состояние, и виртуальная машина получает неправильный IP-адрес.

Что здесь не так?

Редактировать. Добавляем сюда полный XML. Вот конф, я вижу ниже /etc:

<network>
  <name>somenet</name>
  <uuid>80d85710-23bb-1ab6-79e6-cd65c6739714</uuid>
  <bridge name='virbr1' stp='on' delay='0' />
  <mac address='52:54:00:90:75:1A'/>
  <domain name='example.com'/>
  <ip address='192.168.111.1' netmask='255.255.255.0'>
    <dhcp>
      <range start='192.168.111.100' end='192.168.111.254' />
      <host mac='52:54:00:26:61:22' name='virt.example.com' ip='192.168.111.111' />
    </dhcp>
  </ip>
</network>

Вот конф, я вижу с virsh:

<network>
  <name>somenet</name>
  <uuid>80d85710-23bb-1ab6-79e6-cd65c6739714</uuid>
  <bridge name='virbr1' stp='on' delay='0' />
  <mac address='52:54:00:90:75:1A'/>
  <ip address='192.168.111.1' netmask='255.255.255.0'>
    <dhcp>
      <range start='192.168.111.128' end='192.168.111.254' />
    </dhcp>
  </ip>
</network>

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

virsh net-edit somenet
virsh net-destroy somenet
virsh net-start somenet

Для подтверждения этого см. функциональность virsh net-edit

Обратите внимание, что перезапуск такой сети приведет к прекращению сетевого подключения для любых виртуальных машин, использующих эту сеть. Они не восстановят соединение, когда вы снова запустите сеть; вам необходимо перезапустить домены или вручную переместить интерфейс виртуальных машин на новый мост с помощью brctl.

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

Я не узнал «почему», но нашел способ заставить это работать. Итак, если у кого-то такая же проблема, решение было таким:

  • сбросил конфигурацию сети с virsh net-dumpxml /tmp/somenet.xml
  • остановленная сеть virsh net-destroy somenet
  • инактивированная сеть virsh net-undefine somenet
  • внес необходимые изменения в /tmp/somenet.xml
  • снова создал сеть virsh net-create /tmp/somenet.xml
  • попытался настроить автозапуск сети virsh net-autostart somenet, но не удалось error: Requested operation is not valid: cannot set autostart for transient network
  • нашел помощь Томаса Шульте блог (на немецком)
  • решение заключалось в том, чтобы снова отредактировать conf и внести некоторые несущественные изменения virsh net-edit somenet, Я просто добавил еще одну пустую строку.
  • сейчас virsh net-autostart somenet работал также

И, наконец, мой виртуальный хост получил правильный IP!

В любое время, когда вы используете virsh net-edit {{network}} вам потребуется перезапустить сеть. Поэтому вам нужно будет выполнить команды:

virsh net-edit {{network}} virsh net-destroy {{network}} virsh net-start {{network}}

тем не мение

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

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

Следовательно:

Я бы рекомендовал использовать virsh net-update. (Источник) Это можно использовать для обновления конфигурации сети без перезапуска сети. В частности, похоже, что вы ищете ip-dhcp-host характерная черта.

Пример:

virsh net-update default add ip-dhcp-host \ "<host mac='52:54:00:00:00:01' \ name='bob' ip='192.168.122.45' />" \ --live --config

Надеюсь, это было полезно :)

Проблема в том, что для создания постоянной сети вам необходимо:

  1. создайте XML-определение вашей сети с помощью предпочитаемого вами редактора
  2. sudo virsh net-define <XML file>
  3. sudo virsh net-start <net name>
  4. sudo virsh net-autostart <net name>

Ошибка заключается в использовании net-create вместо net-define.

У меня была аналогичная проблема с экземпляром виртуальной машины, сетевые параметры которой изменились несколько месяцев назад. Сегодня я перезапустил всю среду с 12 виртуальными машинами, и этот экземпляр не хотел запускаться. Базовое оборудование было переопределено, поэтому о восстановлении старых значений не могло быть и речи. Использование virsh edit не помогло: старый параметр продолжал сообщаться и использоваться для загрузки.

Я обнаружил, что во время перезагрузки приостановленное изображение в /var/lib/libvirt/qemu/save/.save все еще имело неверные параметры. Удаление файла позволило виртуальной машине ожить.

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