虚拟机基础管理
管理工具
RealVNC
下载链接:https://www.realvnc.com/en/connect/download/viewer/
命令里写了 --graphics vnc,listen=0.0.0.0,KVM 会启动一个 VNC 服务。但需要知道它监听在哪个端口(通常是从 5900 开始)。
# 查看虚拟机的 VNC 端口
virsh vncdisplay ubuntu-01
# 如果输出 :0,对应端口就是 5900。
# 如果输出 :1,对应端口就是 5901,以此类推。最后在本地电脑打开 VNC 客户端,输入 宿主机IP:5900 即可看到 Ubuntu 的安装界面。
virsh 命令
- virsh 是基于命令行的虚拟机管理工具,来自 libvirt-client 包;
- 此工具基于 libvirtd 服务,此服务如果关闭或意外停止将无法继续使用 virsh 命令对虚拟机进行管理,但虚拟机本身依旧会正常运行(默认的 iptables规则与虚拟网卡等实现都是由 libvirtd 服务生成的)。
- virsh 分为交互式与非交互式,交互式直接敲 virsh 后回车即可进入 virsh 命令行界面。非交互式则需要在命令后跟上具体的任务命令:
- 可以使用虚拟机名称、编号、UUID 来对虚拟机进行操作,但 UUID 最保险。
任务 命令 只列出目前在运行的虚拟机 virsh list查看所有虚拟机(包括已关机) virsh list --all启动虚拟机 virsh start ubuntu-01关闭虚拟机 virsh shutdown ubuntu-01强制断电 virsh destroy ubuntu-01暂停虚拟机 virsh suspend ubuntu-01恢复暂停的虚拟机 virsh resume ubuntu-01查看虚拟机 UUID virsh domuuid ubuntu-01通过 Console 连接 virsh console ubuntu-01(退出按Ctrl + ])设置开机自启 virsh autostart ubuntu-01(本质上是在 /etc/libvirt/qemu/autostart/ 创建了一个软链接)禁止开机自启 virsh autostart --disable ubuntu-01(本质上是删除了 /etc/libvirt/qemu/autostart/ 下的软链接)修改配置 virsh edit ubuntu-01(需重启生效)查看磁盘信息 virsh domblklist ubuntu-01查看虚拟机 XML 配置 virsh dumpxml ubuntu-01(本质上是从 /etc/libvirt/qemu/ 目录下读取 XML 文件)
- 可以使用虚拟机名称、编号、UUID 来对虚拟机进行操作,但 UUID 最保险。
这份总结已经非常全面,特别是你对“本质上是创建/删除软链接”的理解,说明你已经深入到了 Libvirt 的底层逻辑。
关于 QEMU Guest Agent (QGA),它是 SRE 提升虚拟机管理精细度的关键。目前的“高级功能”描述略显宽泛,因为即使不装 QGA,很多操作(如强制断电、基本信息查看)也能做。QGA 的真正价值在于**“从宿主机安全、优雅地感知和操作 Guest OS 内部”**。
以下是润色后的版本,我帮你强化了 SRE 实战场景:
virt-manager
virt-manager 是一个可视化虚拟机管理工具,它提供了一个用户友好的界面,用于创建、配置、管理和监控虚拟机。
安装 virt-manager
# Ubuntu/Debian
apt install virt-manager -y
# CentOS/Rocky
yum install virt-manager -y启动 virt-manager
- 需要开启 X11 转发,例如 xshell 中需要安装 Xmanager-passive 程序
# 假设宿主机 IP 为 10.0.0.1,X11 转发端口为 0.0
export DISPLAY=10.0.0.1:0.0
# 启动 virt-manager
virt-manager在虚拟机内安装 QGA 服务
# Ubuntu/Debian
apt install qemu-guest-agent -y && systemctl enable --now qemu-guest-agent
# CentOS/Rocky
yum install qemu-guest-agent -y && systemctl enable --now qemu-guest-agent通过QEMU Guest Agent (QGA) 可以增强 virsh 功能,它是安装在虚拟机内部的一个守护进程(qemu-guest-agent)。它在宿主机与虚拟机之间开启了一个特殊的通信通道(Virtio-serial),使得 Libvirt 可以执行那些必须进入系统内部才能完成的任务。
核心增强功能:
- 优雅管理:不通过发送 ACPI 信号,而是直接在虚拟机内部调用
systemctl poweroff,避免文件系统损坏。 - 信息探测:无需登录虚机,即可获取虚机内部的真实网卡 IP(包括多网卡、虚拟 IP)、用户登录情况及 OS 详细版本。
- 文件系统冻结:在进行虚拟机快照备份前,自动冻结(fsfreeze)磁盘 I/O,确保备份数据的一致性。
- 重置密码:在忘记密码时,直接从宿主机端注入新密码。
当虚拟机已安装并启动 QGA 服务后,可使用以下高级命令:
| 任务 | 命令 | SRE 使用场景 |
|---|---|---|
| 获取虚拟机时间 | virsh domtime ubuntu-01 |
同步宿主机与虚机时间,防止时钟偏移影响日志分析 |
| 查看内部网卡 IP | virsh domifaddr ubuntu-01 --source agent |
最常用:直接获取虚机内部真实 IP(支持多网卡环境) |
| 安全关机 | virsh shutdown ubuntu-01 --mode agent |
比默认 ACPI 方式更稳定,确保数据库等应用安全关闭 |
| 安全重启 | virsh reboot ubuntu-01 --mode agent |
强制通过内部 Agent 重启,避免某些内核卡死状态 |
| 重置 root 密码 | virsh set-user-password ubuntu-01 root 123456 |
紧急救援,无需进入单用户模式或挂载磁盘修改 |
| 查看 OS 详情 | virsh domhostname ubuntu-01 |
确认内部主机名是否与 Libvirt 记录一致 |
| 获取磁盘占用 | virsh domfsinfo ubuntu-01 |
从内部视角看磁盘挂载点和文件系统类型 |
为虚拟机添加描述
# 创建虚拟机时添加,在使用 virt-install 创建虚拟机时,添加 --description 参数即可:
virt-install --name my-vm-01 --description "研发部-张三-用于Web接口测试" ...
# 创建后添加描述
virsh desc prod-harbor --new-desc "生产环境harbor" --live --config
# --config:修改下次启动时生效(持久化)
# --live:修改立即生效(仅限本次运行,重启丢失)
# 通常两个参数配合使用,如果机器已经关机,则只添加 --config 参数即可虚拟机改名
# 停止虚拟机(重命名必须在关机状态下进行):
virsh shutdown 老名称
# 执行重命名:
virsh domrename 老名称 新名称