🔧 什么是 virsh?
virsh是 libvirt 虚拟化管理套件 提供的命令行客户端。- 它通过与
libvirtd后台服务通信,实现对本地或远程虚拟机的控制。 - 支持 KVM、Xen、LXC、VMware 等多种虚拟化平台(本文以 KVM 为主)。
✅ 优势:脚本友好、无需图形界面、支持远程管理、功能全面。
🚀 一、准备工作
确保已安装必要组件:
# CentOS/RHEL
sudo yum install libvirt virt-install qemu-kvm
# Ubuntu/Debian
sudo apt install libvirt-daemon-system libvirt-clients qemu-kvm virtinst
启动并启用 libvirt 服务:
sudo systemctl enable --now libvirtd
验证是否正常:
virsh list --all
如果输出为空(但无报错),说明环境已就绪!
🖥️ 二、常用 virsh 操作速查
1. 查看虚拟机状态
# 列出所有虚拟机(包括关机的)
virsh list --all
# 仅列出运行中的虚拟机
virsh list
输出示例:
Id Name State
------------------------------
2 ubuntu22 running
- centos7 shut off
2. 启动 / 关闭 / 重启虚拟机
# 启动虚拟机
virsh start <vm-name>
# 正常关机(发送 ACPI 信号)
virsh shutdown <vm-name>
# 强制断电(相当于拔电源)
virsh destroy <vm-name>
# 重启
virsh reboot <vm-name>
💡 建议优先使用
shutdown,避免文件系统损坏。
3. 进入虚拟机控制台
# 连接到虚拟机的串行控制台(需 VM 内配置 getty)
virsh console <vm-name>
# 退出 console:按 Ctrl + ](英文输入法下)
⚠️ 注意:图形界面虚拟机通常不响应
console,建议用 SSH 登录。
4. 暂停 / 恢复虚拟机
# 暂停(冻结 CPU 和内存,不释放资源)
virsh suspend <vm-name>
# 恢复运行
virsh resume <vm-name>
适用于临时“冻结”任务,比如调试或资源调度。
5. 删除虚拟机(谨慎!)
# 先关机
virsh destroy <vm-name> # 如果正在运行
# 或
virsh shutdown <vm-name>
# 删除定义(从 libvirt 中移除)
virsh undefine <vm-name>
# 手动删除磁盘文件(可选,需自行清理)
rm /var/lib/libvirt/images/<vm-name>.qcow2
❗
undefine不会自动删除磁盘文件!务必手动清理存储。
6. 查看虚拟机信息
# 查看详细配置(XML 格式)
virsh dumpxml <vm-name>
# 查看 CPU、内存使用
virsh dominfo <vm-name>
# 查看磁盘和网卡设备
virsh domblklist <vm-name> # 磁盘
virsh domiflist <vm-name> # 网络接口
7. 编辑虚拟机配置
# 在线修改 XML 配置(保存后可能需重启生效)
virsh edit <vm-name>
常用修改:
- 增加 CPU / 内存
- 添加磁盘或网卡
- 修改启动顺序
✅ 修改后,可用
virsh define重新加载(但edit已自动完成)。
8. 自动启动(开机自启)
# 设置虚拟机随宿主机启动
virsh autostart <vm-name>
# 取消自动启动
virsh autostart --disable <vm-name>
配置文件位于 /etc/libvirt/qemu/autostart/。
🌐 三、高级技巧(进阶)
远程管理其他主机的虚拟机
# 通过 SSH 连接远程 libvirt
virsh -c qemu+ssh://user@remote-host/system list
# 示例:启动远程 VM
virsh -c qemu+ssh://admin@192.168.1.100/system start web-server
需配置 SSH 免密登录,并确保远程主机开启 libvirt TCP 监听(或使用 SSH 通道)。
批量操作(结合 shell 脚本)
# 关闭所有虚拟机
for vm in $(virsh list --name); do
virsh shutdown $vm
done
📝 四、常见问题
Q:virsh 报错 “failed to connect to the hypervisor”?
A:检查 libvirtd 是否运行:
systemctl status libvirtd
Q:普通用户无法使用 virsh?
A:将用户加入 libvirt 或 kvm 用户组:
sudo usermod -aG libvirt $(whoami)
# 然后重新登录
✅ 总结
| 操作 | 命令 |
|---|---|
| 列出 VM | virsh list --all |
| 启动 | virsh start name |
| 关机 | virsh shutdown name |
| 强制停止 | virsh destroy name |
| 自启动 | virsh autostart name |
| 删除 | virsh undefine name + 手动删磁盘 |
| 编辑配置 | virsh edit name |
virsh 是 KVM 虚拟化运维的基石。掌握这些基本命令,你就能在没有图形界面的服务器上轻松管理数十台虚拟机!


发表回复