我想添加固定地址到特定的虚拟主机,因此我closures了虚拟机,并使用sudo virsh net-edit somenet 。 join行后
<host mac='52:54:00:26:61:22' name='virt.example.com' ip='192.168.111.111' />
我保存并退出。 然后我用同样的命令再次检查,之前的状态恢复了,我的更改没有了。
同时,当我查看/etc/libvirt/qemu/networks/somenet.xml ,我的更改已被应用。
如果我再次启动我的虚拟机,它将从DHCP池( 192.168.111.170 )获得IP,但不是我上面定义的地址。
当我改变后重新启动libvirt-service,情况似乎是一样的:在configuration文件中是我的变化,与virsh我看到香草状态和虚拟机得到错误的IP。
这里有什么问题?
编辑。 在这里添加完整的XML。 这里是conf我看到/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>
这里是conf我看到与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>
在networking下次启动时,对networking进行更改。 你需要执行这一系列的操作。
virsh net-edit somenet virsh net-destroy somenet virsh net-start somenet
为了确认这一点,请参阅virsh net-edit的function
请注意,像这样重新启动networking将终止使用此networking的任何虚拟机的networking连接。 当您再次启动networking时,他们不会重新获得连接; 您必须重新启动域或手动将虚拟机接口移动到brctl的新桥 。
编辑: libvirt维基描述了这种情况,也指向一个脚本来重新build立networking连接。
我没有find“为什么”,但我find了解决问题的方法。 所以,如果有人有同样的问题,解决scheme是这样的:
virsh net-dumpxml /tmp/somenet.xml转储networkingconfiguration 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 virsh net-edit somenet更改virsh net-edit somenet ,我刚刚添加了另一个空行。 virsh net-autostart somenet也是如此 最后,我的虚拟主机得到正确的IP!
问题是要创build一个持久的networking,你需要:
sudo virsh net-define <XML file> sudo virsh net-start <net name> sudo virsh net-autostart <net name> 错误是使用net-create而不是net-define。
任何时候你使用virsh net-edit {{network}}它将需要你重新启动networking。 因此你将不得不执行命令:
virsh net-edit {{network}} virsh net-destroy {{network}} virsh net-start {{network}}
然而
重要的是要提到,每当你这样做时,任何当前在其VMS上使用该虚拟networking的人都将在重新启动networking时松动连接。
这不会超过几秒钟,但取决于您通过DHCP主机添加静态IP的频率,这可能会给您的用户带来不便。
因此:
我会build议使用virsh net-update 。 ( 来源 )这可以用来更新networkingconfiguration,而不必重新启动networking。 具体来说,看来你正在寻找ip-dhcp-hostfunction。
例:
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
希望这是有帮助的:)
我有一个类似的问题,一个虚拟机实例的networking参数在几个月前已经改变。 今天我重新启动了整个12-VMs环境,这个实例不想启动。 底层的硬件已经被重新定义,因此恢复旧的价值是没有问题的。 使用virsh编辑没有帮助:旧的参数不断报告和用于启动。
我发现在重启过程中,/var/lib/libvirt/qemu/save/.save下的挂起的映像仍然embedded了错误的参数。 删除文件允许虚拟机恢复生机。
唯一的副作用是虚拟机没有恢复(就像其余的兄弟姐妹一样),但必须做一个完整的启动,可能这个过程不是很干净, 幸运的是,这是一个servlets器,可以负担得起。 在此之后,它重新上线并正常工作。