Files
fnos-libvirt-runbooks/README.md
2026-03-15 16:22:10 +08:00

5.8 KiB
Raw Blame History

fnOS Libvirt 操作手册

飞牛OS (fnOS) 虚拟机管理命令参考,用于处理 fnOS Web 界面无法正确识别 libvirt NAT 网络的情况。

问题背景

fnOS 的虚拟机管理界面无法正确识别 libvirt 的 default NAT 网络,即使命令行显示网络正常:

sudo virsh -c qemu:///system net-list --all
# Name      State    Autostart   Persistent
# --------------------------------------------
# default   active   yes         yes

根本原因fnOS 界面层的判断逻辑问题libvirt 后端是正常的。


环境变量约定

建议先设置变量,后续命令更简洁:

export VM=0z7x696a
export URI=qemu:///system

一、查看状态

查看所有虚拟机

sudo virsh -c $URI list --all

查看指定 VM 详细信息

sudo virsh -c $URI dominfo $VM

查看 VM 网卡配置

sudo virsh -c $URI domiflist $VM

查看 VM XML 配置

sudo virsh -c $URI dumpxml $VM

备份 XML 配置

sudo virsh -c $URI dumpxml $VM > /tmp/${VM}-$(date +%F-%H%M%S).xml

二、开机 / 关机 / 重启

启动虚拟机

sudo virsh -c $URI start $VM

优雅关机

sudo virsh -c $URI shutdown $VM

强制断电

sudo virsh -c $URI destroy $VM

重启

sudo virsh -c $URI reboot $VM

设置开机自启

sudo virsh -c $URI autostart $VM

取消开机自启

sudo virsh -c $URI autostart --disable $VM

三、网络管理

查看 libvirt 网络列表

sudo virsh -c $URI net-list --all

查看 default 网络详情

sudo virsh -c $URI net-info default

查看 default 网络 XML

sudo virsh -c $URI net-dumpxml default

启动 default 网络

sudo virsh -c $URI net-start default

设置 default 开机自启

sudo virsh -c $URI net-autostart default

停止 default 网络

sudo virsh -c $URI net-destroy default

四、查看虚拟机 IP 地址

方法 1查看 dnsmasq 租约文件

cat /var/lib/libvirt/dnsmasq/virbr0.status

或:

cat /var/lib/misc/dnsmasq.leases

方法 2使用 qemu guest agent

sudo virsh -c $URI domifaddr $VM

方法 3查看 virbr0 接口

ip addr show virbr0

五、修改 VM 配置CPU/内存/网络)

编辑配置

sudo virsh -c $URI edit $VM

内存修改示例64G

<memory unit='KiB'>67108864</memory>
<currentMemory unit='KiB'>67108864</currentMemory>

vCPU 修改示例

<vcpu placement='static'>64</vcpu>

查看宿主机可用 CPU

nproc
lscpu

网络修改为 default NAT

确保网卡部分为:

<interface type='network'>
  <mac address='e4:27:cd:98:26:6a'/>
  <source network='default'/>
  <model type='virtio'/>
</interface>

注意:删除旧的 bridge 配置,如:

<!-- 删除以下内容 -->
<interface type='bridge'>
  <source bridge='enp193s0f0-ovs'/>
  ...
</interface>

六、修改配置的标准流程

安全修改步骤

# 1. 关机
sudo virsh -c qemu:///system shutdown 0z7x696a

# 2. 等待确认关闭
sudo virsh -c qemu:///system list --all

# 3. 备份当前配置
sudo virsh -c qemu:///system dumpxml 0z7x696a > /tmp/0z7x696a-backup.xml

# 4. 编辑配置
sudo virsh -c qemu:///system edit 0z7x696a

# 5. 启动
sudo virsh -c qemu:///system start 0z7x696a

# 6. 验证
sudo virsh -c qemu:///system dominfo 0z7x696a
sudo virsh -c qemu:///system domiflist 0z7x696a

七、端口转发(配合 Traefik

如果需要用 Traefik 反向代理到 VM 内网服务:

HTTP 转发

sudo iptables -t nat -I PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 192.168.122.28:80
sudo iptables -I FORWARD -d 192.168.122.28 -p tcp --dport 80 -j ACCEPT

HTTPS 转发

sudo iptables -t nat -I PREROUTING -p tcp --dport 8443 -j DNAT --to-destination 192.168.122.28:443
sudo iptables -I FORWARD -d 192.168.122.28 -p tcp --dport 443 -j ACCEPT

查看转发规则

sudo iptables -t nat -L PREROUTING -n -v
sudo iptables -L FORWARD -n -v

八、诊断脚本

快速检查 VM 和网络状态

cat > /tmp/check-ub24.sh <<'EOF'
#!/usr/bin/env bash
VM=0z7x696a
URI=qemu:///system

echo "=== VM list ==="
sudo virsh -c $URI list --all

echo -e "\n=== VM info ==="
sudo virsh -c $URI dominfo $VM

echo -e "\n=== VM interfaces ==="
sudo virsh -c $URI domiflist $VM

echo -e "\n=== Networks ==="
sudo virsh -c $URI net-list --all

echo -e "\n=== default network info ==="
sudo virsh -c $URI net-info default || true

echo -e "\n=== virbr0 addr ==="
ip addr show virbr0 2>/dev/null || true

echo -e "\n=== DHCP leases ==="
cat /var/lib/libvirt/dnsmasq/virbr0.status 2>/dev/null || \
cat /var/lib/misc/dnsmasq.leases 2>/dev/null || \
echo "No lease file found"
EOF

chmod +x /tmp/check-ub24.sh
/tmp/check-ub24.sh

九、常见问题

Q: 为什么 fnOS 界面显示 "网络不存在"

A: libvirt 后端正常fnOS Web 界面层判断逻辑问题。cli 能看到 default 网络,但 fnOS 界面识别不了。

Q: virbr0 状态 DOWN 怎么办?

A: 将 VM 网卡绑定到 default 网络后virbr0 会自动变为 UP

sudo virsh -c qemu:///system start 0z7x696a

Q: 如何确认 VM 已获取 IP

A:

cat /var/lib/libvirt/dnsmasq/virbr0.status

十、核心命令速查

最常用的三个命令:

# 编辑配置
sudo virsh -c qemu:///system edit 0z7x696a

# 启动 VM
sudo virsh -c qemu:///system start 0z7x696a

# 查看网卡
sudo virsh -c qemu:///system domiflist 0z7x696a

参考