通过启动脚本修改virsh多网卡模型类型,重启后恢复原状的问题
解决虚拟机网卡模型重启后重置为virtio的问题
问题分析
你之前执行的EDITOR='sed -i "s/virtio/vmxnet3/g"' virsh net-default命令有误,因为virsh net-default是操作libvirt全局网络配置的指令,而你的网卡配置直接定义在虚拟机域的XML文件中,需要针对具体虚拟机实例进行修改。
解决方案
1. 确认目标虚拟机名称
先列出所有虚拟机,找到需要修改的实例名称:
virsh list --all
2. 编写自动修改脚本
创建脚本(比如fix-vm-network-model.sh),内容如下:
#!/bin/bash # 替换为你的虚拟机名称 VM_NAME="your-vm-name" # 非交互式修改虚拟机XML,将所有virtio网卡模型替换为vmxnet3 EDITOR='sed -i "s/<model type='\''virtio'\''\/>/<model type='\''vmxnet3'\''\/>/g"' virsh edit $VM_NAME # 重启虚拟机使修改生效 virsh reboot $VM_NAME
给脚本添加执行权限:
chmod +x fix-vm-network-model.sh
3. 设置开机自动执行
通过systemd服务让脚本在系统启动后自动运行:
- 创建服务文件
/etc/systemd/system/vm-network-fix.service:
[Unit] Description=Set VM network card model to vmxnet3 After=libvirtd.service [Service] Type=oneshot ExecStart=/path/to/fix-vm-network-model.sh [Install] WantedBy=multi-user.target
- 启用并启动服务:
systemctl daemon-reload systemctl enable vm-network-fix.service
4. 验证修改效果
执行脚本后,检查虚拟机XML中的网卡模型:
virsh dumpxml $VM_NAME | grep -A1 -B1 "model type"
重启系统后再次执行上述命令,确认模型保持为vmxnet3。
内容的提问来源于stack exchange,提问作者Ashley Mark Brown
相关产品推荐
相关产品推荐

