外观
第 6 课 用命令指挥虚拟机:libvirt、virsh 与 virt-install 命令行管理
约 6179 字大约 21 分钟
虚拟化libvirtvirshvirt-install
2026-08-17
项目目标
在之前的课程中,你已经学会使用 virt-manager 图形界面创建和管理虚拟机。但在企业级云平台与自动化运维场景中,命令行管理是不可或缺的核心能力。 通过本课的实训与学习,你将达成以下目标:
- 掌控虚拟机状态:理清 libvirt、virsh、libvirtd、QMP 与 QEMU 的分工,熟练使用
virsh list --all、dominfo、domstate查看与解析虚拟机生命周期状态; - 掌握关机与开机风险:掌握
start、shutdown、reboot、destroy动作,深入理解 ACPI 关机原理与destroy强制断电拔电源的风险差异; - 读懂 Domain XML 户口本:使用
dumpxml导出配置,解析 CPU、内存、Virtio 高速驱动、NVRAM 固件与 console 节点,学会使用virsh desc --config进行最小安全修改; - 参数化创建 svr-cli01:掌握
virt-install参数表,理解 QCOW2 精简置备(Thin Provisioning)按需分配原理,使用--print-xml试运行预览,100% 适配 Ubuntu 26.04 LTS(libvirt 12.0+, QEMU 9.0+,virt-install --osinfo detect=on,require=off)完成svr-cli01交付; - 解耦配置与灾备恢复:理解 Domain XML 配置与 QCOW2 磁盘数据的解耦架构,实操
dumpxml备份 ➔undefine移除户口 ➔ 确认磁盘完好 ➔define恢复。

6.1 任务一:查看与掌控虚拟机状态
在前两课中,你已经通过图形界面完成了虚拟机的安装。现在你需要在宿主机终端中使用命令行工具接管虚拟机的控制权。
终端前置准备与虚拟机名称说明
- 终端位置:本课所有
virsh与virt-install命令均在 Ubuntu 宿主机终端(Host) 中执行,请勿在虚拟机内部终端执行。 - 权限与连接:默认命令会通过系统总管
qemu:///system连接 libvirt。如果你的终端提示权限不足或virsh list返回为空,说明误连到了普通用户模式(qemu:///session),请在命令前加上sudo(例如sudo virsh list --all)。 - 目标 VM 名称:本课命令中的
svr01为前几课建立的示例虚拟机名称。如果你本地建立的虚拟机名为其他名字(如ubuntu-test),请在执行时替换为你的真实 VM 名称。
【动手做】查询虚拟机状态与硬件摘要
所有 virsh 与 virt-install 命令均在 Ubuntu 宿主机终端中执行。输入以下指令查询宿主机上的虚拟机信息:
# 查看所有虚拟机(包含处于关闭状态的实例)
virsh list --all
# 查看已创建的虚拟机 svr01 的当前运行状态
virsh domstate svr01
# 查看 svr01 的详细摘要信息(包含 UUID、vCPU、内存、持久化状态)
virsh dominfo svr01【看现象】输出观察
执行上述命令后,终端将返回结构化的诊断回显:
virsh list --all输出示例:Id Name State -------------------- 1 svr01 running - win01 shut off观察要点:运行中的虚拟机拥有唯一的数字进程 ID(如
1),而处于shut off关闭状态的虚拟机 ID 显示为-。virsh dominfo svr01输出示例:Id: 1 Name: svr01 UUID: a1b2c3d4-e5f6-7890-abcd-ef1234567890 OS Type: hvm State: running CPU(s): 2 Max memory: 2097152 KiB Used memory: 2097152 KiB Persistent: yes Autostart: disable观察要点:
Persistent: yes表示该虚拟机的 Domain XML 配置文件已持久化写在宿主机磁盘中;Autostart: disable表示宿主机开机时不会自动启动该 VM。
【学原理与拓展】架构解密与 5 大状态机
1. 命令行管理体系架构拆解
在 KVM 虚拟化体系中,各个组件分工明确,通过 C/S 客户端/服务端架构层层传递指令:
- libvirt API:统一的虚拟化管理接口(相当于‘管家/翻译官’)。无论是
virsh还是virt-manager,都不直接操作底层 QEMU 进程,而是统一向libvirtd发送 API 指令。 - Domain(管理域):libvirt 体系中用来代指每一台虚拟机的专属术语。通俗解读:Domain 就是每一台虚拟机的‘户口本/档案卡’,借用自早期 Xen 虚拟化的称呼。
- QMP (QEMU Monitor Protocol):
libvirtd与底层qemu-system-x86_64进程通信的 JSON 格式底层专线。通俗理解:QMP 相当于 libvirtd 管家与 QEMU 进程之间的‘内部专线对讲机’,用结构化命令传递控制指令。 qemu:///system连接 URI:宿主机最高权限‘系统总管’连接,具备 root 权限,能够管理宿主机上的所有桥接网卡、存储池与 KVM 实例。
2. 虚拟机 5 大核心状态机
一台虚拟机(Domain)在其生命周期中会在以下 5 种状态间切换:
- Undefined(未定义):宿主机无 XML 配置文件,libvirt 未注册该虚拟机。
- Shut off(已关闭):XML 配置文件存在于
/etc/libvirt/qemu/,但宿主机内存中没有 QEMU 运行进程。 - Running(运行中):QEMU 进程在宿主机内存中正常运行,Guest 操作系统接收指令。
- Paused(暂停):QEMU 进程依然驻留内存,但 CPU 虚拟执行被挂起,内存状态被冻结。
- In Transition(过渡态):正在进行启动、优雅关机、快照保存或迁移等中间过程。
我们可以通过以下交互式动画,直观感受生命周期动作对 QEMU 进程、XML 配置与 QCOW2 磁盘的三层影响:
virsh 生命周期控制
virsh 6 大生命周期动作与底层动态影响
观察 start、shutdown、reboot、destroy、undefine、define 作用于 QEMU 进程、XML 配置和 QCOW2 磁盘的三层影响。
动作 1 / 6
动作指令:
virsh start svr01Shut off (关闭)➔Running (运行中)
安全动作
⚡
QEMU 内存进程
Hypervisor Process创建并运行 (Running)
libvirt 读取 XML 配置文件,调用 qemu-system-x86_64 产生新的进程并分配 PID。
📄
Domain XML 配置
/etc/libvirt/qemu/保持不变 (Persistent)
读取 /etc/libvirt/qemu/ 下的配置,文件本身未发生任何变更。
💾
QCOW2 虚拟磁盘
/var/lib/libvirt/images/打开读写 (Mounted R/W)
QEMU 进程独占打开磁盘文件,开始读写 Guest 内核与文件系统数据。
6.2 任务二:开机、优雅关机与关机风险
管理虚拟机的生命周期,要求运维人员准确选择开机、重启、优雅关机与强制断电命令。
【动手做】生命周期动作控制
在宿主机终端中依次执行启动、正常重启、优雅关机与强制关机演练:
# 1. 启动已关闭的虚拟机 svr01
virsh start svr01
# 2. 验证状态变为 running
virsh domstate svr01
# 3. 向虚拟机发送正常重启指令
virsh reboot svr01
# 4. 向虚拟机发送 ACPI 优雅关机指令
virsh shutdown svr01
# 5. (对比演练)强行终止 QEMU 进程(拔电源)
virsh destroy svr01【看现象】输出观察
执行上述指令后,观察终端提示与状态变化:
- 执行
virsh start svr01:终端回显Domain 'svr01' started,再次执行virsh domstate显示running;若在已运行状态下重复执行,libvirt 会拦截并报错error: Domain is already active。 - 执行
virsh shutdown svr01:终端回显Domain 'svr01' is being shutdown,此时 Guest OS 开始执行关机流程,几秒钟后virsh domstate变为shut off。 - 执行
virsh destroy svr01:终端回显Domain 'svr01' destroyed,虚拟机瞬间切回shut off状态。
【学原理与拓展】ACPI 关机原理与 destroy 拔电源对比
| 动作维度 | virsh shutdown (优雅关机) | virsh destroy (强制关机) |
|---|---|---|
| 底层信号类型 | ACPI Power Button 信号 / Guest Agent 指令 | SIGKILL 进程终止信号 |
| Guest OS 响应 | 接收信号,停止服务,写回磁盘缓存,卸载文件系统 | 进程被瞬间杀死,Guest OS 完全无法做出响应 |
| 数据安全性 | 最高(无数据丢失风险) | 低(未落盘数据丢失,易产生脏标记) |
| 磁盘与配置影响 | XML 与 QCOW2 完好 | XML 与 QCOW2 完好(绝对不会删除虚拟机) |
| 适用场景 | 日常标准关机与运维维护 | 系统彻底卡死、操作系统无响应时的应急救援 |
shutdown 与 destroy 动作底层对比
1. ACPI 关机机制
ACPI(Advanced Configuration and Power Interface)直观理解就相当于物理主机箱上的电源开关按键。当你敲下 virsh shutdown 时,就像你在电脑上按了一下关机键,libvirtd 通过 QEMU 向 Guest OS 触发 ACPI 中断信号。Guest OS 的操作系统电源管理模块(如 Linux 的 acpid 守护进程)捕获此信号后,就像弹出了‘正在关机...’提示窗口,主动停止正在运行的服务、将内存缓存(Page Cache)写回硬盘落盘,最后安全卸载文件系统并断电。整个过程零数据丢失。
2. destroy 拔电源误区
初学者看到 destroy(英文原意‘销毁/毁灭’)常被吓退,误以为它是“删除虚拟机或把虚拟机文件彻底抹掉”。概念本质:在 libvirt 术语中,destroy 仅仅针对宿主机内存中正在运行的 QEMU 进程,相当于在任务管理器里强制结束进程,或者硬拔掉物理机的电源线。
底层 /etc/libvirt/qemu/ 中的 XML 配置文件(户口本)和 /var/lib/libvirt/images/ 下的 QCOW2 虚拟磁盘文件完好无损,绝对不会被删除!你可以随时使用 virsh start 重新开机。
6.3 任务三:读取与修改虚拟机“户口本”
在 libvirt 体系中,虚拟机的硬件规格统一由格式规范的 Domain XML 文件进行定义。
【动手做】读取 XML 与安全修改描述
# 1. 导出并查看 svr01 的完整 Domain XML 配置
virsh dumpxml svr01
# 2. 使用安全命令给 svr01 增加描述信息(持久化修改)
virsh desc svr01 --config --new-desc "星舟实训云 Web 节点 - 适配 Ubuntu 26.04 LTS"
# 3. 验证描述信息是否写入生效
virsh dominfo svr01【看现象】输出观察
virsh dumpxml核心片段展示:<domain type='kvm'> <name>svr01</name> <uuid>a1b2c3d4-e5f6-7890-abcd-ef1234567890</uuid> <description>星舟实训云 Web 节点 - 适配 Ubuntu 26.04 LTS</description> <memory unit='GiB'>2</memory> <vcpu placement='static'>2</vcpu> <devices> <disk type='file' device='disk'> <driver name='qemu' type='qcow2'/> <source file='/var/lib/libvirt/images/svr01.qcow2'/> <target dev='vda' bus='virtio'/> </disk> <interface type='network'> <source network='default'/> <model type='virtio'/> </interface> <console type='pty'> <target type='serial' port='0'/> </console> </devices> </domain>virsh dominfo svr01观察:在输出中可直接看到更新后的Description: 星舟实训云 Web 节点 - 适配 Ubuntu 26.04 LTS字段。
【学原理与拓展】Domain XML 标签解析与安全修改边界
1. Domain XML 核心标签解密
<target dev='vda' bus='virtio'/>:使用 Virtio 高速半虚拟化驱动。通俗理解:传统虚拟机像是在模拟老旧慢速的机械硬盘(IDE 盘叫hda,SATA 盘叫sda),而 Virtio 相当于给虚拟机装上了直通宿主机内存的高速通道,性能提升数倍。vda(Virtual Disk A)就是 Virtio 专属的高速磁盘盘符。<model type='virtio'/>:网卡 Virtio 驱动。通俗理解:将网卡也升级为直通高速通道,避免 QEMU 耗费 CPU 去模拟百兆/千兆老旧 e1000 网卡。<nvram>:UEFI 引导的虚拟机包含 NVRAM 节点,保存虚拟机启动项与安全密钥文件(*_VARS.fd)。形象理解:相当于虚拟机的‘主板 CMOS 电池与 UEFI 配置卡’,记录着虚拟主板的启动顺序和安全启动密钥。<console type='pty'>:Virtio 串口控制台。允许你在无桌面环境下通过virsh console命令行直接登录虚拟机 Linux Shell。
【实用操作技巧】virsh console 切出与切入指南
- 进入 console:在宿主机终端输入
virsh console svr01后,必须连按一次 Enter(回车键),终端才会刷出来宾系统的login:登录提示符。 - 切出 console:进入 console 后,你敲
exit退出的是虚拟机 Shell,终端依然会被 console 卡住。要彻底从 console 切回宿主机终端,必须同时按下快捷键:Ctrl + ](按住 Ctrl 键不放,再按右方括号])。记住这个切出快捷键,它是防止终端卡死在控制台里的“逃生通道”!
2. 修改配置的两种方式与禁区
virsh edit svr01:修改 CPU、内存、网卡等关键硬件时使用。它会打开编辑器并在保存时自动校验 XML 语法,阻止错误配置生效。virsh desc svr01 --config:修改非硬件属性(如描述、别名)的首选命令,无需手动修改 XML 标签。- 危险禁区:切勿直接使用
nano /etc/libvirt/qemu/svr01.xml强行编辑! 直接修改文件会绕过 libvirt 的语法校验,且不会触发libvirtd内存缓存刷新,容易导致配置混乱。
6.4 任务四:使用 virt-install 参数化创建小实例 svr-cli01
掌握了配置文件与控制命令后,我们使用 virt-install 命令行工具从零参数化创建一个轻量级小实例 svr-cli01。
规格配置与参数表
| 配置项 | 参数值 | 作用与含义 |
|---|---|---|
| 实例名称 (--name) | svr-cli01 | libvirt 中的唯一标识名称 |
| 内存容量 (--memory) | 1536 | 分配 1536 MiB 内存 (1.5 GiB) |
| vCPU 核心 (--vcpus) | 1 | 分配 1 核心虚拟 CPU |
| 虚拟磁盘 (--disk) | pool=default,size=12,format=qcow2,bus=virtio | default 存储池创建 12GB QCOW2 格式、VirtIO 高速总线磁盘 |
| 虚拟网络 (--network) | network=default,model=virtio | 连接 default NAT 桥接网络,VirtIO 网卡 |
| OS 识别适配 (--osinfo) | detect=on,require=off | 100% 适配 Ubuntu 26.04 LTS (libvirt 12.0+, QEMU 9.0+) 自动检测与兼容模式 |
| 安装介质 (--cdrom) | /srv/iso/ubuntu-26.04-live-server-amd64.iso | 指定 ISO 安装镜像路径 |
| 图形显示 (--graphics) | spice | 开启 SPICE 高性能控制台 |
| 后台提交 (--noautoconsole) | 包含此标志位 | 不弹窗阻塞终端,方便自动化脚本集成 |
svr-cli01 虚拟机规格参数表
【动手做】预检、试运行预览与正式创建
按步骤在宿主机终端中执行 svr-cli01 的创建演练:
确认 ISO 路径与权限
【关键避坑指南】ISO 镜像绝对路径与
/home/权限陷阱- 绝对路径防手抖:在命令行中务必使用绝对路径(如
/srv/iso/ubuntu-26.04-live-server-amd64.iso),避免因为相对路径或波浪号~展开错误导致命令找不到文件。 - 不要将 ISO 放在用户家目录
/home/xxx/:QEMU 虚拟机进程是以系统专属账户libvirt-qemu运行的。Ubuntu 系统中用户家目录权限默认是700,libvirt-qemu用户无法跨越访问你的/home/ubuntu/Downloads/目录!如果强行使用家目录 ISO 路径,virt-install会直接报错Permission denied。 - 标准避坑准备指令(在宿主机终端一键创建目录并放行读权限):
# 1. 创建公共镜像存放目录 sudo mkdir -p /srv/iso # 2. 将下载好的 ISO 移动或复制到 /srv/iso/ 目录 sudo mv ~/Downloads/ubuntu-26.04-live-server-amd64.iso /srv/iso/ # 3. 赋予公共读取权限 sudo chmod 644 /srv/iso/ubuntu-26.04-live-server-amd64.iso
- 绝对路径防手抖:在命令行中务必使用绝对路径(如
确认 ISO 文件存在,且处于 libvirt-qemu 用户可读路径:
ls -lh /srv/iso/ubuntu-26.04-live-server-amd64.iso使用
--print-xml预览生成的 Domain XMLvirt-install \ --connect qemu:///system \ --name svr-cli01 \ --memory 1536 \ --vcpus 1 \ --disk pool=default,size=12,format=qcow2,bus=virtio \ --network network=default,model=virtio \ --osinfo detect=on,require=off \ --cdrom /srv/iso/ubuntu-26.04-live-server-amd64.iso \ --graphics spice \ --noautoconsole \ --print-xml正式提交创建任务
去掉
--print-xml参数,正式提交给 libvirt 调度:virt-install \ --connect qemu:///system \ --name svr-cli01 \ --memory 1536 \ --vcpus 1 \ --disk pool=default,size=12,format=qcow2,bus=virtio \ --network network=default,model=virtio \ --osinfo detect=on,require=off \ --cdrom /srv/iso/ubuntu-26.04-live-server-amd64.iso \ --graphics spice \ --noautoconsole确认虚拟机创建与运行状态
virsh list --all
:::
【看现象】输出观察
- 执行带
--print-xml的步骤 2 时,终端仅打印包含<name>svr-cli01</name>、<memory unit='MiB'>1536</memory>等结构的 XML 文本,执行virsh list --all确认没有生成svr-cli01。 - 执行步骤 3 正式创建时,终端返回:
Starting install... Domain creation completed. - 执行
virsh list --all可看到svr-cli01处于running状态。
【学原理与拓展】QCOW2 精简置备与 Pipeline 管线
1. QCOW2 精简置备(Thin Provisioning)
在参数中我们指定了 size=12(12GB 磁盘)。很多初学者担心物理硬盘剩余空间不足 12GB 导致创建失败。
通俗比喻:
- 厚置备(Thick Provisioning):就像去饭店包桌,不管你吃不吃得下,厨师立刻把 12 碗饭全部盛好占满桌子(立刻在宿主机物理硬盘上切走 12GB 真实文件空间)。
- 精简置备(Thin Provisioning):就像吃自助餐“吃多少拿多少”。虽然你向虚拟机系统承诺最高能吃 12 碗(声明容量上限 12GB),但刚建好时在宿主机物理盘
/var/lib/libvirt/images/svr-cli01.qcow2文件初始仅占用几百 KB。只有当 Guest OS 在里面实际写文件时,物理文件才会按需膨胀扩容。这就叫‘虚报高额上限、按需实即分配’,极大地节省了存储资源!
2. virt-install 执行管线
下图展示了 virt-install 命令从参数解析到底层拉起 QEMU 进程的完整 Pipeline:
virt-install 管线
virt-install 参数转化与虚拟机创建流程管线
探索从命令行参数(--name、--memory、--disk 等)转化为 Domain XML,再建立 QCOW2 磁盘并拉起 QEMU 进程的全过程。
步骤 1 / 6
1
参数解析与前置校验2
Domain XML 生成与映射3
存储池分配虚拟磁盘4
libvirt 域名注册与持久化5
拉起 QEMU 进程与网络接口6
挂载 ISO 并提供图形控制台CLI 参数与输入virt-install 命令行参数
--name svr-cli01 --memory 1536 --vcpus 1 ...阶段产物:命令行参数语法树 (Parsed AST)
Domain XML 映射libvirt 配置文件结构
<!-- 检查宿主机内存余量、ISO文件可读性及域名唯一性 -->3. Ubuntu 26.04 LTS 选项适配
在 Ubuntu 26.04 LTS 中,libvirt 升级至 12.0+,QEMU 升级至 9.0+。使用 --osinfo detect=on,require=off 能够让 virt-install 自动从 ISO 卷标检测操作系统类型,同时避免因旧版本操作系统数据库未同步而导致的阻断性报错。
6.5 任务五:Domain XML 配置解耦与备份恢复
虚拟机配置(XML)与存储数据(QCOW2)在底层是完全解耦的,这一特性为系统灾备与快速恢复提供了极大的便利。
【动手做】备份、解耦删除与恢复演练
按以下步骤演练配置解耦与备份恢复流程:
# 1. 导出备份 svr01 的静态 XML 配置文件
virsh dumpxml svr01 --inactive > ~/svr01.backup.xml
# 2. 注销并删除虚拟机的配置文件注册(抹去户口本)
virsh undefine svr01
# 3. 验证列表中已不再显示 svr01
virsh list --all
# 4. 检查底层物理存储,证明 QCOW2 磁盘文件完好无损
ls -lh /var/lib/libvirt/images/svr01.qcow2
# 5. 使用备份的 XML 重新注册定义虚拟机
virsh define ~/svr01.backup.xml
# 6. 验证恢复结果
virsh list --all
virsh dominfo svr01【看现象】输出观察
- 执行
virsh undefine svr01后:virsh list --all中找不到svr01项。 - 执行
ls -lh /var/lib/libvirt/images/svr01.qcow2:磁盘文件依然存在且文件大小完好。 - 执行
virsh define ~/svr01.backup.xml后:终端提示Domain 'svr01' defined from /home/ubuntu/svr01.backup.xml,virsh list --all重新出现svr01且状态为shut off,成功实现秒级恢复!
【学原理与拓展】配置与数据解耦架构
| 存储维度 | Domain XML 配置文件 | QCOW2 虚拟磁盘文件 |
|---|---|---|
| 存储路径 | /etc/libvirt/qemu/svr01.xml | /var/lib/libvirt/images/svr01.qcow2 |
| 文件大小 | 极小(约几 KB) | 较大(几 GB 至几十 GB) |
| 存储内容 | 硬件规格、CPU/内存额度、网卡 MAC 地址、驱动模式 | 操作系统内核、安装软件、用户业务数据 |
| undefine 影响 | 被删除 | 完好保留 |
| 灾备恢复策略 | 定期将 XML 导出并纳入 Git 版本控制 | 定期做 QCOW2 增量快照或离线复制 |
Domain XML 配置与 QCOW2 数据解耦表
undefine 操作的底层本质:相当于在房管局注销了这套房子的‘房产证与户口本’(删除了 /etc/libvirt/qemu/ 下的 XML 文件)。注销后,virsh list --all 自然就查不到它了。但是物理房子本身(/var/lib/libvirt/images/ 下的 QCOW2 磁盘文件)依然完好停在原地,里面的系统数据和软件一块都没少!只要你手头留有导出的 XML 备份(房产证复印件),就能随时使用 virsh define 重新办理落户登记,瞬间让虚拟机复活。
【高危操作预警】切勿随意附加 --remove-all-storage 参数
如果在执行 virsh undefine 时随手加上了 --remove-all-storage 参数,libvirt 将会连同户口本和物理磁盘文件一起永久抹掉!那才是真正的拆迁队彻底粉碎。在日常运维和实训演练中切勿误加该参数。
6.6 常见问题排错矩阵
下表总结了在 Ubuntu 26.04 LTS (libvirt 12.0+, QEMU 9.0+) 命令行管理过程中最常见的故障场景及修复命令:
| 故障现象 | 常见原因分析 | 修复与排查命令 |
|---|---|---|
virsh list 显示为空 | 1. 未加 --all 参数,关闭的 VM 被隐去;2. 误连到了普通用户 qemu:///session 连接 | 执行 virsh list --all;检查命令中是否明确指定 --connect qemu:///system |
virt-install 报错 Permission denied 无法读取 ISO | ISO 镜像保存在用户个人目录(如 /home/ubuntu/),libvirt-qemu 用户无权跨目录读取 | 将 ISO 文件移动至 /srv/iso/ 或 /var/lib/libvirt/images/,并执行 chmod 644 <iso_path> |
virt-install 报错 Domain 'svr-cli01' already exists | 宿主机中已存在同名 VM 配置残留 | 执行 virsh list --all 确认;确属残留则执行 virsh undefine svr-cli01 清理后重试 |
virsh start 提示 domain is already running | 虚拟机已处于运行状态 | 执行 virsh domstate <name> 确认状态,无需重复启动 |
virsh shutdown 发送后虚拟机无响应 | Guest 操作系统未安装/未启用 ACPI 响应服务 | 登录 Guest OS 安装 acpid 软件;或在确认数据安全时使用 virsh destroy 强制关机 |
virsh console 卡住无响应或不知如何退出 | 1. 刚连入未按回车未刷出提示符; 2. 不知如何切回宿主机终端; 3. Guest 未启用串口监听 | 按 Enter 键刷出 login: 登录框;按 Ctrl + ] 快捷键逃生切回宿主机终端;Guest 内部安装并启用 serial-getty@ttyS0.service |
virt-install 警告 --os-variant / --osinfo | Ubuntu 26 OS 数据库未同步新发行版名称 | 指定 --osinfo detect=on,require=off 开启自动检测与兼容模式 |
Ubuntu 26.04 LTS 命令行管理排错矩阵
6.7 提交内容
1. 4 张必交截图清单
完成本课实训后,请提交以下 4 张关键步骤截图 作为实验成果证明:
作业提交截图清单
screenshots
01-virsh-list-dominfo.png# 截图一:virsh list --all 及 virsh dominfo svr01 终端输出截图
02-virsh-lifecycle-state.png# 截图二:virsh shutdown 与 virsh start 虚拟机生命周期状态切换过程截图
03-virt-install-print-xml.png# 截图三:virt-install --print-xml 命令预览 XML 生成截图
04-svr-cli01-acceptance.png# 截图四:svr-cli01 创建成功后 virsh list --all 及控制台登录截图
- 截图一:基础查询与域名信息:展现
virsh list --all包含虚拟机列表及virsh dominfo svr01摘要信息的终端屏幕。 - 截图二:生命周期状态切换:展现执行
virsh shutdown后virsh domstate变为shut off,以及后续virsh start恢复running的完整交互过程。 - 截图三:
virt-install --print-xml预览:展现带--print-xml参数的virt-install命令及其输出的标准 XML 结构。 - 截图四:
svr-cli01交付与登录验证:左侧为宿主机virsh list --all显示svr-cli01处于running,右侧为通过virsh console或图形控制台成功登录svr-cli01系统 Shell 的界面。
2. virsh domifaddr 命令解析
当虚拟机运行中且安装了 QEMU Guest Agent 代理服务时,你可以使用 virsh domifaddr 命令一键查出来宾虚拟机的 IP 地址与 MAC 地址。
命令用法与输出解析
在宿主机终端中执行:
virsh domifaddr svr-cli01输出示例:
Name MAC address Protocol Address
-------------------------------------------------------------------------------
vda 52:54:00:12:34:56 ipv4 192.168.122.105/24Name:虚拟机内部网卡设备标识(如vda或enp1s0)。MAC address:虚拟网卡的物理地址(以52:54:00QEMU 官方前缀开头)。Protocol&Address:Guest 操作系统通过 DHCP 从宿主机virbr0虚拟网桥获取到的 IPv4 地址与掩码。- 获取原理:
virsh domifaddr通过三条渠道获取地址信息:1. Leases 模式(读取/var/lib/libvirt/dnsmasq/default.leasesDHCP 租约文件);2. Agent 模式(通过 QEMU Guest Agent 串口通道直接向 Guest 内核查询);3. ARP 模式(扫描宿主机内核 ARP 邻居表)。
本章小结
本课系统讲解了 KVM 虚拟化命令行管理体系的核心逻辑与实操技能:
- 分工架构:理清了
virsh(CLI 客户端)、libvirt(统一 API 守护进程)、QMP(底层专线)与 QEMU(虚拟机进程)的调用链路。 - 生命周期:掌握了虚拟机状态机切换,理清了
shutdown(优雅关机/按电源按键)与destroy(硬拔电源线)、undefine(抹去配置户口)与删除磁盘镜像的本质区别。 - 配置文件与驱动:掌握了 Domain XML 的关键节点含义、Virtio 高速半虚拟化驱动与 NVRAM 固件机制,实现了配置与数据的安全解耦。
- 参数化交付:学会使用
virt-install将命令行参数转化为标准 Domain XML,掌握了 QCOW2 精简置备(Thin Provisioning)按需分配优势,完美适配 Ubuntu 26.04 LTS 完成了svr-cli01实例的交付。
