virsh工具基本使用

virsh工具基本使用

🔧 什么是 virsh

  • virshlibvirt 虚拟化管理套件 提供的命令行客户端。
  • 它通过与 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:将用户加入 libvirtkvm 用户组:

sudo usermod -aG libvirt $(whoami)
# 然后重新登录

✅ 总结

操作命令
列出 VMvirsh list --all
启动virsh start name
关机virsh shutdown name
强制停止virsh destroy name
自启动virsh autostart name
删除virsh undefine name + 手动删磁盘
编辑配置virsh edit name

virsh 是 KVM 虚拟化运维的基石。掌握这些基本命令,你就能在没有图形界面的服务器上轻松管理数十台虚拟机!


评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注