启动域时出错: Requested operation is not valid: network 'default' is not active
Traceback (most recent call last):
File "/usr/share/virt-manager/virtManager/asyncjob.py", line 72, in cb_wrapper
callback(asyncjob, *args, **kwargs)
File "/usr/share/virt-manager/virtManager/asyncjob.py", line 108, in tmpcb
callback(*args, **kwargs)
File "/usr/share/virt-manager/virtManager/object/libvirtobject.py", line 57, in newfn
ret = fn(self, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/share/virt-manager/virtManager/object/domain.py", line 1402, in startup
self._backend.create()
File "/usr/lib/python3/dist-packages/libvirt.py", line 1379, in create
raise libvirtError('virDomainCreate() failed')
libvirt.libvirtError: Requested operation is not valid: network 'default' is not active
这个错误表明您的虚拟机(通过 virt-manager 或 virsh 启动)依赖于一个名为 'default' 的虚拟网络,但这个网络当前处于未激活(inactive)状态。
简单来说:虚拟机需要连接到一个网络才能启动,但它指定的“default”网络没有运行,所以启动失败了。
问题原因分析
在 libvirt(管理虚拟化的工具包)中,'default' 通常是一个由 libvirt 自己创建和管理的 NAT 类型虚拟网络。它允许虚拟机通过宿主机(物理机)访问外部网络(如互联网),但外部网络无法直接访问虚拟机,这是最常见的默认配置。
这个 'default' 网络可能因为以下原因没有启动:
最常见原因:libvirt 的守护进程(libvirtd)或其网络部分没有设置成开机自启,或者被意外停止了。
系统重启后,虚拟网络没有自动启动。
该网络被手动停止了。
解决方法
您需要做的就是启动这个 'default' 虚拟网络,并将其设置为开机自启,以防下次重启后再次出现此问题。
请按照以下步骤在终端中操作:
1. 检查虚拟网络的状态
首先,确认 'default' 网络确实存在但未激活。
bash
sudo virsh net-list --all
这条命令会列出所有定义的虚拟网络。您会看到类似下面的输出:
text
名称 状态 自动启动 持久
-----------------------------------------
default 不活跃 否 是
如果 状态 列显示为 不活跃,那就确认了我们的问题。
2. 启动 default 网络
使用 virsh 命令启动它:
bash
sudo virsh net-start default
如果成功,终端不会有太多输出。再次运行 sudo virsh net-list(不加 --all),你应该能看到 default 网络的状态变为 活跃。
3. 设置 default 网络为开机自启
为了避免每次重启电脑后都要手动启动这个网络,请将其设置为自动启动:
bash
sudo virsh net-autostart default
输出会提示:网络 default 标记为自动启动。
4. 再次启动虚拟机
现在,回到 virt-manager 图形界面或者使用 sudo virsh start <虚拟机名称> 命令,再次尝试启动你的虚拟机,应该就可以成功启动了。
如果上述方法无效?
如果 sudo virsh net-list --all 命令根本没有显示 default 网络,或者执行 net-start 时报错,那可能是 default 网络的定义文件丢失或损坏了。
这时,你可以尝试重新定义默认网络:
bash
# 首先确保 libvirt 的网络服务是活动的
sudo systemctl enable --now libvirtd
# 重新创建并启动 default 网络
sudo virsh net-define /usr/share/libvirt/networks/default.xml
sudo virsh net-start default
sudo virsh net-autostart default
如果连 /usr/share/libvirt/networks/default.xml 这个文件都不存在,那问题可能更复杂一些,可能需要重新安装 libvirt 的相关包(如 libvirt-daemon-config-network),但这在常见的 Linux 发行版(如 Ubuntu, CentOS, Fedora)上非常罕见。
总结
问题 原因 解决方案
network 'default' is not active 名为 default 的 libvirt 虚拟网络未启动 1. 使用 sudo virsh net-start default 启动网络
2. 使用 sudo virsh net-autostart default 设置开机自启
绝大多数情况下,执行第2步和第3步的命令就能完美解决这个问题
评论