参考资料
命令速览
通用命令
不特定与某个虚拟机的命令。
| 命令 | 解释 | 使用方式 |
|---|---|---|
| help | 显示命令帮助信息,可以列出所有命令或得到特定命令的帮助。 | help [命令名称(可选)] |
| quit, exit | 退出virsh命令行界面。 | quit / exit |
| version | 显示virsh的版本信息,包括libvirt和hypervisor的信息。 | version |
| cd | 更改当前工作目录(对于会话内部命令环境)。 | cd [目录路径] |
| pwd | 打印当前工作目录(对于会话内部命令环境)。 | pwd |
| connect | 连接到libvirt守护进程。 | connect [URI] |
| uri | 显示当前连接的URI。 | uri |
| hostname | 显示hypervisor的主机名。 | hostname |
| sysinfo | 显示从hypervisor获取的系统信息。 | sysinfo |
| nodeinfo | 显示关于物理服务器的信息(CPU、内存大小、节点数)。 | nodeinfo |
| nodecpumap | 显示节点的CPU分布情况。 | nodecpumap [节点名称(可选)] |
| nodecpustats | 显示指定节点的CPU统计信息。 | nodecpustats [节点名称(可选)] |
| nodememstats | 显示指定节点的内存统计信息。 | nodememstats [节点名称(可选)] |
| nodesevinfo | 显示关于服务器的SEV信息(安全加密虚拟化相关)。 | nodesevinfo |
| nodesuspend | 挂起物理主机节点。 | nodesuspend [节点名称(可选)] |
| node-memory-tune | 调整节点的内存配置。 | node-memory-tune [节点名称(可选)] |
| capabilities | 显示hypervisor的功能。 | capabilities |
| domcapabilities | 显示虚拟机的功能。 | domcapabilities [虚拟机名称(可选)] |
| pool-capabilities | 显示存储池的功能。 | pool-capabilities [存储池名称(可选)] |
| inject-nmi | 向虚拟机注入非屏蔽中断(NMI),用于故障排查。 | inject-nmi [虚拟机名称] |
| list | 列出所有虚拟机。 | list |
| freecell | 显示节点上未使用的内存。 | freecell [节点名称(可选)] |
| freepages | 查询特定或所有NUMA节点上的空闲内存页。 | freepages [节点名称(可选)] |
| allocpages | 在NUMA节点上分配内存页。 | allocpages [节点名称(可选)] |
| cpu-baseline | 计算一组CPU特性的最小公共超集,用于确定兼容性。 | cpu-baseline [CPU型号列表] |
| cpu-compare | 比较两个CPU定义的兼容性。 | cpu-compare [CPU1型号] [CPU2型号] |
| cpu-models | 列出给定架构支持的所有CPU型号。 | cpu-models [架构(可选)] |
| hypervisor-cpu-compare | 比较虚拟机CPU与hypervisor CPU的兼容性。 | hypervisor-cpu-compare [虚拟机名称] |
| hypervisor-cpu-baseline | 确定两个或更多hypervisor CPU的兼容基线。 | hypervisor-cpu-baseline [CPU型号列表] |
虚拟机命令
直接操作虚拟机的命令。
| 命令 | 解释 | 使用方式 |
|---|---|---|
| autostart | 设置虚拟机在宿主机启动时是否自动启动 | autostart [虚拟机名称] [yes/no] |
| blkdeviotune | 设置块设备的 I/O 调优参数 | blkdeviotune [虚拟机名称] [块设备名称] [参数] |
| blkiotune | 设置块设备的 I/O 控制参数 | blkiotune [虚拟机名称] [块设备名称] [参数] |
| blockcommit | 提交虚拟机磁盘镜像的更改并合并到父镜像中 | blockcommit [虚拟机名称] [磁盘名称] |
| blockcopy | 复制虚拟机磁盘镜像 | blockcopy [虚拟机名称] [源磁盘名称] [目标磁盘名称] |
| blockjob | 查看或管理虚拟机磁盘操作任务 | blockjob [虚拟机名称] [操作] |
| blockpull | 将磁盘镜像的更改从父镜像中拉回 | blockpull [虚拟机名称] [磁盘名称] |
| blockresize | 调整虚拟机磁盘的大小 | blockresize [虚拟机名称] [磁盘名称] [新大小] |
| console | 连接到虚拟机的控制台 | console [虚拟机名称] |
| cpu-stats | 显示虚拟机的 CPU 使用统计 | cpu-stats [虚拟机名称] |
| create | 创建一个新的虚拟机 | create [XML配置文件] |
| define | 定义虚拟机配置 | define [XML配置文件] |
| desc | 显示虚拟机的描述信息 | desc [虚拟机名称] |
| destroy | 关闭并销毁虚拟机 | destroy [虚拟机名称] |
| domblkerror | 显示或清除虚拟机块设备的错误状态 | domblkerror [虚拟机名称] [块设备名称] [操作] |
| domblkinfo | 显示虚拟机的块设备信息 | domblkinfo [虚拟机名称] [块设备名称] |
| domblklist | 列出虚拟机的块设备 | domblklist [虚拟机名称] |
| domblkstat | 显示虚拟机块设备的统计信息 | domblkstat [虚拟机名称] [块设备名称] |
| domblkthreshold | 显示或设置虚拟机块设备的阈值 | domblkthreshold [虚拟机名称] [块设备名称] [阈值] |
| domcontrol | 控制虚拟机的运行状态 | domcontrol [虚拟机名称] [操作] |
| domdirtyrate-calc | 估算虚拟机的内存脏页率 | domdirtyrate-calc [虚拟机名称] |
| domdisplay | 显示虚拟机的图形输出 | domdisplay [虚拟机名称] |
| domdisplay-reload | 重新加载虚拟机的图形输出 | domdisplay-reload [虚拟机名称] |
| domfsfreeze | 冻结虚拟机的文件系统 | domfsfreeze [虚拟机名称] |
| domfsinfo | 显示虚拟机的文件系统信息 | domfsinfo [虚拟机名称] |
| domfsthaw | 解冻虚拟机的文件系统 | domfsthaw [虚拟机名称] |
| domfstrim | 为虚拟机的文件系统执行 TRIM 操作 | domfstrim [虚拟机名称] [块设备名称] |
| domhostname | 显示虚拟机的主机名 | domhostname [虚拟机名称] |
| domid | 显示虚拟机的 ID | domid [虚拟机名称] |
| domif-getlink | 获取虚拟机网络接口的链路状态 | domif-getlink [虚拟机名称] [接口名称] |
| domif-setlink | 设置虚拟机网络接口的链路状态 | domif-setlink [虚拟机名称] [接口名称] [状态] |
| domifaddr | 显示虚拟机的网络接口 IP 地址 | domifaddr [虚拟机名称] [接口名称] |
| backup-begin | 开始虚拟机的备份 | backup-begin [虚拟机名称] [备份目录] |
| backup-dumpxml | 导出虚拟机的备份信息 | backup-dumpxml [虚拟机名称] [备份目录] |
| domiflist | 列出虚拟机的网络接口 | domiflist [虚拟机名称] |
| domifstat | 显示虚拟机的网络接口统计信息 | domifstat [虚拟机名称] [接口名称] |
| domiftune | 调整虚拟机的网络接口性能 | domiftune [虚拟机名称] [接口名称] [参数] |
| dominfo | 显示虚拟机的信息 | dominfo [虚拟机名称] |
| domjobabort | 中止虚拟机的后台任务 | domjobabort [虚拟机名称] |
| domjobinfo | 显示虚拟机的后台任务信息 | domjobinfo [虚拟机名称] [任务ID(可选)] |
| domlaunchsecinfo | 显示虚拟机的启动安全信息 | domlaunchsecinfo [虚拟机名称] |
| domsetlaunchsecstate | 设置虚拟机的启动安全状态 | domsetlaunchsecstate [虚拟机名称] [状态] |
| dommemstat | 显示虚拟机的内存统计信息 | dommemstat [虚拟机名称] |
| domname | 显示虚拟机的名称 | domname [虚拟机名称] |
| dompmsuspend | 暂停虚拟机的电源管理 | dompmsuspend [虚拟机名称] |
| dompmwakeup | 唤醒虚拟机的电源管理 | dompmwakeup [虚拟机名称] |
| domrename | 重命名虚拟机 | domrename [虚拟机名称] [新名称] |
| domstate | 显示虚拟机的运行状态 | domstate [虚拟机名称] |
| domstats | 显示虚拟机的统计信息 | domstats [虚拟机名称] |
| domtime | 显示虚拟机的时间 | domtime [虚拟机名称] |
| domuuid | 显示虚拟机的 UUID | domuuid [虚拟机名称] |
| domxml-from-native | 将本地配置转换为 XML 配置 | domxml-from-native [本地配置文件] |
| domxml-to-native | 将 XML 配置转换为本地配置 | domxml-to-native [XML配置文件] |
| dump | 转储虚拟机的内存 | dump [虚拟机名称] [转储文件路径] |
| dumpxml | 导出虚拟机的 XML 配置 | dumpxml [虚拟机名称] |
| edit | 编辑虚拟机的 XML 配置 | edit [虚拟机名称] |
| emulatorpin | 设置虚拟机模拟器进程的 CPU 亲和性 | emulatorpin [虚拟机名称] [CPU列表] |
| event | 显示或监视虚拟机的事件 | event [虚拟机名称] [操作] |
| get-user-sshkeys | 获取虚拟机用户的 SSH 公钥 | get-user-sshkeys [虚拟机名称] |
| guest-agent-timeout | 设置虚拟机客户端代理的超时时间 | guest-agent-timeout [虚拟机名称] [时间] |
| guestinfo | 显示虚拟机的客户端代理信息 | guestinfo [虚拟机名称] |
| guestvcpus | 显示虚拟机客户端代理的虚拟 CPU 信息 | guestvcpus [虚拟机名称] |
| iothreadadd | 添加虚拟机 I/O 线程 | iothreadadd [虚拟机名称] [线程ID] |
| iothreaddel | 删除虚拟机 I/O 线程 | iothreaddel [虚拟机名称] [线程ID] |
| iothreadinfo | 显示虚拟机 I/O 线程信息 | iothreadinfo [虚拟机名称] |
| iothreadpin | 设置虚拟机 I/O 线程的 CPU 亲和性 | iothreadpin [虚拟机名称] [线程ID] [CPU列表] |
| iothreadset | 配置虚拟机 I/O 线程 | iothreadset [虚拟机名称] [线程ID] [配置] |
| managedsave | 将虚拟机状态保存到文件 | managedsave [虚拟机名称] [保存文件路径] |
| managedsave-define | 定义虚拟机状态保存配置 | managedsave-define [XML配置文件] |
| managedsave-dumpxml | 导出虚拟机状态保存配置 | managedsave-dumpxml [虚拟机名称] |
| managedsave-edit | 编辑虚拟机 | managedsave-edit [虚拟机名称] |
设备命令
操作于虚拟机相关联的设备命令
| 命令 | 解释 | 使用方式 |
|---|---|---|
| attach-device | 将设备附加到虚拟机 | attach-device [虚拟机名称] [设备配置文件] |
| attach-disk | 将磁盘设备附加到虚拟机 | attach-disk [虚拟机名称] [磁盘配置文件] |
| attach-interface | 将网络接口设备附加到虚拟机 | attach-interface [虚拟机名称] [接口配置文件] |
| detach-device | 从虚拟机中分离设备 | detach-device [虚拟机名称] [设备名称] |
| detach-device-alias | 通过别名从虚拟机中分离设备 | detach-device-alias [虚拟机名称] [设备别名] |
| detach-disk | 从虚拟机中分离磁盘设备 | detach-disk [虚拟机名称] [磁盘名称] |
| detach-interface | 从虚拟机中分离网络接口设备 | detach-interface [虚拟机名称] [接口名称] |
| update-device | 更新虚拟机的设备配置 | update-device [虚拟机名称] [设备配置文件] |
| update-memory-device | 更新虚拟机的内存设备配置 | update-memory-device [虚拟机名称] [配置文件] |
| change-media | 更改虚拟机中设备的介质 | change-media [虚拟机名称] [设备名称] [介质] |
| dom-fd-associate | 关联虚拟机的 FD (File Descriptor) | dom-fd-associate [虚拟机名称] [FD] |
网络和网络接口命令
操作网络和网络端口
| 命令 | 描述 | 使用方式 |
|---|---|---|
| net-autostart | 设置网络在宿主机启动时是否自动启动 | net-autostart [网络名称] [yes/no] |
| net-create | 创建一个新的虚拟网络 | net-create [网络配置文件] |
| net-define | 定义虚拟网络配置 | net-define [网络名称] [网络配置文件] |
| net-desc | 显示虚拟网络的描述信息 | net-desc [网络名称] |
| net-destroy | 关闭并销毁虚拟网络 | net-destroy [网络名称] |
| net-dumpxml | 导出虚拟网络的 XML 配置 | net-dumpxml [网络名称] |
| net-edit | 编辑虚拟网络的 XML 配置 | net-edit [网络名称] |
| net-event | 显示或监视虚拟网络的事件 | net-event [网络名称] [选项] |
| net-info | 显示虚拟网络的信息 | net-info [网络名称] |
| net-list | 列出已定义的虚拟网络 | net-list |
| net-metadata | 显示或更新虚拟网络的元数据 | net-metadata [网络名称] [选项] |
| net-name | 显示虚拟网络的名称 | net-name [网络UUID] |
| net-start | 启动虚拟网络 | net-start [网络名称] |
| net-undefine | 取消定义虚拟网络 | net-undefine [网络名称] |
| net-uuid | 显示虚拟网络的 UUID | net-uuid [网络名称] |
| net-update | 更新虚拟网络的配置 | net-update [网络名称] [网络配置文件] |
| net-dhcp-leases | 显示虚拟网络的 DHCP 租约信息 | net-dhcp-leases [网络名称] |
| net-port-list | 列出虚拟网络的端口 | net-port-list [网络名称] |
| net-port-create | 创建虚拟网络的端口 | net-port-create [网络名称] [端口配置文件] |
| net-port-dumpxml | 导出虚拟网络端口的 XML 配置 | net-port-dumpxml [网络名称] [端口名称] |
| net-port-delete | 删除虚拟网络的端口 | net-port-delete [网络名称] [端口名称] |
| 命令 | 描述 | 使用方式 |
|---|---|---|
| iface-bridge | 将网络接口桥接到指定的网桥 | iface-bridge [接口名称] [网桥名称] |
| iface-define | 定义网络接口配置 | iface-define [接口名称] [配置文件] |
| iface-destroy | 销毁网络接口 | iface-destroy [接口名称] |
| iface-dumpxml | 导出网络接口的 XML 配置 | iface-dumpxml [接口名称] |
| iface-edit | 编辑网络接口的 XML 配置 | iface-edit [接口名称] |
| iface-list | 列出已定义的网络接口 | iface-list |
| iface-name | 显示网络接口的名称 | iface-name [接口UUID] |
| iface-mac | 显示网络接口的 MAC 地址 | iface-mac [接口名称] |
| iface-start | 启动网络接口 | iface-start [接口名称] |
| iface-unbridge | 解除网络接口的桥接 | iface-unbridge [接口名称] |
| iface-undefine | 取消定义网络接口 | iface-undefine [接口名称] |
| iface-begin | 开始对网络接口的更改 | iface-begin [接口名称] |
| iface-commit | 提交对网络接口的更改 | iface-commit [接口名称] |
| iface-rollback | 回滚对网络接口的更改 | iface-rollback [接口名称] |
存储命令
操作存储池
| 命令 | 解释 | 使用方式 |
|---|---|---|
| find-storage-pool-sources | 查找存储池的源 | find-storage-pool-sources |
| find-pool-sources-as | 将发现的存储池源作为列表打印出来 | find-pool-sources-as |
| pool-autostart | 设置存储池在宿主机启动时是否自动启动 | pool-autostart [存储池名称] [yes/no] |
| pool-build | 构建存储池 | pool-build [存储池名称] |
| pool-create | 创建存储池 | pool-create [XML配置文件] |
| pool-create-as | 创建存储池并指定参数 | pool-create-as [XML配置文件] |
| pool-define | 定义存储池配置 | pool-define [XML配置文件] |
| pool-define-as | 使用 XML 文件定义存储池 | pool-define-as [存储池名称] [XML配置文件] |
| pool-destroy | 关闭并销毁存储池 | pool-destroy [存储池名称] |
| pool-delete | 删除存储池 | pool-delete [存储池名称] |
| pool-dumpxml | 导出存储池的 XML 配置 | pool-dumpxml [存储池名称] [导出文件路径] |
| pool-edit | 编辑存储池的 XML 配置 | pool-edit [存储池名称] |
| pool-info | 显示存储池的信息 | pool-info [存储池名称] |
| pool-list | 列出已定义的存储池 | pool-list |
| pool-name | 显示存储池的名称 | pool-name [存储池名称] |
| pool-refresh | 刷新存储池 | pool-refresh [存储池名称] |
| pool-start | 启动存储池 | pool-start [存储池名称] |
| pool-undefine | 取消定义存储池 | pool-undefine [存储池名称] |
| pool-uuid | 显示存储池的 UUID | pool-uuid [存储池名称] |
| pool-event | 显示或监视存储池的事件 | pool-event [存储池名称] [操作] |
卷命令
操作存储卷
| 命令 | 解释 | 使用方式 |
|---|---|---|
| vol-create | 创建一个新的卷 | vol-create [存储池名称] [卷名称] [大小] |
| vol-create-from | 使用现有资源创建一个新的卷 | vol-create-from [存储池名称] [卷名称] [源卷名称] |
| vol-create-as | 使用指定参数创建一个新的卷 | vol-create-as [存储池名称] [XML配置文件] |
| vol-clone | 克隆一个卷 | vol-clone [存储池名称] [源卷名称] [目标卷名称] |
| vol-delete | 删除一个卷 | vol-delete [存储池名称] [卷名称] |
| vol-upload | 上传一个卷 | vol-upload [存储池名称] [卷名称] [本地文件路径] |
| vol-download | 下载一个卷 | vol-download [存储池名称] [卷名称] [目标路径] |
| vol-wipe | 擦除一个卷 | vol-wipe [存储池名称] [卷名称] |
| vol-dumpxml | 导出卷的 XML 配置 | vol-dumpxml [存储池名称] [卷名称] |
| vol-info | 显示卷的信息 | vol-info [存储池名称] [卷名称] |
| vol-list | 列出卷 | vol-list [存储池名称] |
| vol-pool | 显示卷所在的存储池 | vol-pool [存储池名称] [卷名称] |
| vol-path | 显示卷的路径 | vol-path [存储池名称] [卷名称] |
| vol-name | 显示卷的名称 | vol-name [存储池名称] [卷名称] |
| vol-key | 显示卷的关键字 | vol-key [存储池名称] [卷名称] |
| vol-resize | 调整卷的大小 | vol-resize [存储池名称] [卷名称] [新大小] |
快照命令
操作虚拟机快照,报错虚拟机的磁盘内存和设备状态。
| 命令 | 解释 | 使用方式 |
|---|---|---|
| snapshot-create | 创建一个新的快照 | snapshot-create [虚拟机名称] [xml文件] |
| snapshot-create-as | 使用指定参数创建一个新的快照 | snapshot-create-as [虚拟机名称] [快照名称] [参数] |
| snapshot-current | 显示当前虚拟机的快照 | snapshot-current [虚拟机名称] |
| snapshot-edit | 编辑快照的配置 | snapshot-edit [虚拟机名称] [快照名称] |
| snapshot-info | 显示快照的信息 | snapshot-info [虚拟机名称] [快照名称] |
| snapshot-list | 列出快照 | snapshot-list [虚拟机名称] |
| snapshot-dumpxml | 导出快照的 XML 配置 | snapshot-dumpxml [虚拟机名称] [快照名称] |
| snapshot-parent | 显示快照的父快照 | snapshot-parent [虚拟机名称] [快照名称] |
| snapshot-revert | 恢复到指定的快照状态 | snapshot-revert [虚拟机名称] [快照名称] |
| snapshot-delete | 删除一个快照 | snapshot-delete [虚拟机名称] [快照名称] |
其他命令
| 命令 | 解释 | 基础使用方式 |
|---|---|---|
| secret-define | 定义一个新的密钥 | secret-define [密钥名称] |
| secret-dumpxml | 导出密钥的 XML 配置 | secret-dumpxml [密钥名称] |
| secret-event | 显示或监视密钥的事件 | secret-event [密钥名称] |
| secret-set-value | 设置密钥的值 | secret-set-value [密钥名称] [密钥值] |
| secret-get-value | 获取密钥的值 | secret-get-value [密钥名称] |
| secret-undefine | 取消定义一个密钥 | secret-undefine [密钥名称] |
| secret-list | 列出已定义的密钥 | secret-list |
| 命令 | 解释 | 基础使用方式 |
|---|---|---|
| checkpoint-create | 创建一个新的检查点 | checkpoint-create [虚拟机名称] [检查点名称] |
| checkpoint-create-as | 使用指定参数创建一个新的检查点 | checkpoint-create-as [虚拟机名称] [检查点名称] [参数] |
| checkpoint-edit | 编辑检查点的配置 | checkpoint-edit [虚拟机名称] [检查点名称] |
| checkpoint-info | 显示检查点的信息 | checkpoint-info [虚拟机名称] [检查点名称] |
| checkpoint-list | 列出检查点 | checkpoint-list [虚拟机名称] |
| checkpoint-dumpxml | 导出检查点的 XML 配置 | checkpoint-dumpxml [虚拟机名称] [检查点名称] |
| checkpoint-parent | 显示检查点的父检查点 | checkpoint-parent [虚拟机名称] [检查点名称] |
| checkpoint-delete | 删除一个检查点 | checkpoint-delete [虚拟机名称] [检查点名称] |
| 命令 | 解释 | 基础使用方式 |
|---|---|---|
| nwfilter-define | 定义一个新的网络过滤器 | nwfilter-define [网络过滤器名称] [XML配置文件] |
| nwfilter-undefine | 取消定义一个网络过滤器 | nwfilter-undefine [网络过滤器名称] |
| nwfilter-list | 列出已定义的网络过滤器 | nwfilter-list |
| nwfilter-dumpxml | 导出网络过滤器的 XML 配置 | nwfilter-dumpxml [网络过滤器名称] |
| nwfilter-edit | 编辑网络过滤器的配置 | nwfilter-edit [网络过滤器名称] |
| nwfilter-binding-create | 创建网络过滤器绑定 | nwfilter-binding-create [网络过滤器名称] [虚拟网络名称] |
| nwfilter-binding-delete | 删除网络过滤器绑定 | nwfilter-binding-delete [网络过滤器名称] [虚拟网络名称] |
| nwfilter-binding-list | 列出网络过滤器绑定 | nwfilter-binding-list [网络过滤器名称] |
| nwfilter-binding-dumpxml | 导出网络过滤器绑定的 XML 配置 | nwfilter-binding-dumpxml [网络过滤器名称] |
| 命令 | 解释 | 基础使用方式 |
|---|---|---|
| qemu-attach | 附加到 QEMU 进程 | qemu-attach [虚拟机名称] [参数] |
| qemu-monitor-command | 向 QEMU 监视器发送命令 | qemu-monitor-command [虚拟机名称] [命令] |
| qemu-agent-command | 向 QEMU 代理发送命令 | qemu-agent-command [虚拟机名称] [命令] |
| qemu-monitor-event | 显示或监视 QEMU 监视器事件 | qemu-monitor-event [虚拟机名称] [参数] |
| 命令 | 解释 | 基础使用方式 |
|---|---|---|
| nodedev-create | 创建一个新的节点设备 | nodedev-create [设备名称] [类型] [参数] |
| nodedev-update | 更新节点设备的配置 | nodedev-update [设备名称] [参数] |
| nodedev-destroy | 销毁节点设备 | nodedev-destroy [设备名称] |
| nodedev-define | 定义一个新的节点设备 | nodedev-define [设备名称] [类型] [XML配置文件] |
| nodedev-undefine | 取消定义一个节点设备 | nodedev-undefine [设备名称] |
| nodedev-start | 启动节点设备 | nodedev-start [设备名称] |
| nodedev-detach | 分离节点设备 | nodedev-detach [设备名称] |
| nodedev-dumpxml | 导出节点设备的 XML 配置 | nodedev-dumpxml [设备名称] |
| nodedev-info | 显示节点设备的信息 | nodedev-info [设备名称] |
| nodedev-list | 列出节点设备 | nodedev-list |
| nodedev-reattach | 重新附加节点设备 | nodedev-reattach [设备名称] |
| nodedev-reset | 重置节点设备 | nodedev-reset [设备名称] |
| nodedev-event | 显示或监视节点设备的事件 | nodedev-event [设备名称] [参数] |
| nodedev-autostart | 设置节点设备在宿主机启动时是否自动启动 | nodedev-autostar |
基础操作
修改配置文件
virsh edit <名称>
快照
介绍
快照是一个虚拟机状态的镜像或备份。当创建快照时,虚拟化管理程序会记录虚拟机当前状态的一份副本,包括内存、磁盘状态以及其他相关信息。这样,即使后续对虚拟机进行了更改仍然可以回滚到快照的状态,实现快速恢复。
快照的实现依赖于虚拟化管理程序和底层的虚拟化技术。创建大量的快照可能会消耗大量的存储空间,并影响系统性能。
QCOW2格式的快照存储在磁盘的特定区域中,被称为快照链表(Snapshot Chain。快照的数据通常存储在与原始QCOW2文件同一个文件内。快照链表是一种记录磁盘变化历史的数据结构,它包含了一系列快照以及它们之间的关联关系。快照链表通过记录每个快照的父快照来建立快照之间的关系。每个快照文件中都包含一个指向其父快照文件的引用,从而形成了一个链表结构。
快照的所有命令见 命令速览 -> 快照命令。
QCOW2
QCOW2 是一种常用的虚拟磁盘格式,文章中默认都是使用这种格式。
可以使用qemu-img命令查看QCOW2文件的详细信息。命令格式为:qemu-img info image.qcow2。
快照类型
内部快照
在创建快照时,会将当前磁盘中已分配的簇(cluster)置为只读,标记为已被快照引用,当有新的写IO请求,要修改某个簇时,将该簇中的数据复制出来,创建一个新的簇,后续对该簇的编辑将保存在这个新簇中。由于虚拟机的内部快照存储在其基础磁盘文件中,当虚拟机的磁盘文件遭到损坏或者误删除时,快照数据也会随之丢失。
内部快照仅适用于 qcow2 格式的虚拟机磁盘。内部快照可能不适用于使用某些类型固件虚拟机。如果虚拟机磁盘文件损坏或丢失,内部快照数据也会丢失。
外部快照
创建快照时,当前磁盘被置为只读,系统在磁盘所在存储路径中创建增量镜像文件,后续对该磁盘数据的编辑保存在增量镜像文件中。对该磁盘再次创建快照时,原磁盘和当前增量镜像文件均被置为只读,系统会在数据存储中再创建一个增量镜像文件,形成一个具有数据依赖关系的镜像链。删除外部快照不会更改虚拟机或其他快照。删除快照时,会进行镜像合并,将快照后的增量镜像文件的数据写入到上一级镜像文件中 。
外部快照支持比内部快照更广泛的虚拟机磁盘格式,包括 RAW、vmdk 和 vhdx。创建快照时,增加一个 --disk-only即可创建外部快照。
内外共存
一旦创建了一个外部快照,后续的快照(无论是内部快照还是外部快照)都会增加新的 QCOW2 文件,因为外部快照形成了一个快照链,每个新快照都是基于前一个快照的增量数据。
常用操作
virsh snapshot-list <domain> # 列出快照
virsh snapshot-create <domain> <name> # 创建快照
virsh snapshot-delete <domain> <name> # 删除快照
virsh snapshot-revert <domain> <name> # 恢复到快照
使用案例
virsh snapshot-list <虚拟机名称> --tree
virsh snapshot-create-as <虚拟机名称> <快照名称> --atomic --disk-only --description "此处为描述"
QEMU Agent
virsh qemu-agent-command winltsc '{"execute":"guest-ping"}'
virsh qemu-agent-command winltsc '{"execute":"guest-exec", "arguments": {"path":"C:\\Windows\\System32\\ipconfig.exe", "capture-output": true}}'
virsh qemu-agent-command winltsc '{"execute":"guest-exec-status","arguments":{"pid":6496}}'
虚拟机XML配置
操作示例
创建虚拟机
Windows
shell
sudo virt-install \
--name=Win10 \
--memory=8192 \
--disk path=/vm/Win10/disk.qcow2,size=40 \
--vcpus=4 \
--cdrom=/storage/iso/windows_10_business_20h2_x64.iso \
--os-variant=win10 \
--graphics=vnc,port=5900,listen=0.0.0.0 \
--network network=default \
--boot cdrom,hd
| 参数 | 作用 | 当前参数的作用 |
|---|---|---|
| --name=Win10 | 指定虚拟机的名称 | 创建一个名为 "Win10" 的虚拟机 |
| --memory=8192 | 指定虚拟机的内存大小(以 MB 为单位) | 设置虚拟机的内存大小为 8192 MB(8 GB) |
| --disk path=/vm/Win10/disk.qcow2,size=40 | 指定虚拟机的磁盘配置,包括磁盘文件路径和大小 | 创建一个大小为 40 GB 的磁盘文件,并将其挂载到虚拟机上 |
| --vcpus=4 | 指定虚拟机的虚拟 CPU 核心数量 | 分配 4 个虚拟 CPU 核心给虚拟机 |
| --cdrom=/iso/windows.iso | 指定虚拟机的光盘镜像文件路径 | 将 Windows 10 的光盘镜像文件挂载到虚拟机的 CD-ROM 设备上 |
| --os-variant=win10 | 指定虚拟机操作系统的变种 | 指定虚拟机为 Windows 10 操作系统 |
| --graphics=vnc,port=5900,listen=0.0.0.0 | 指定虚拟机的图形输出方式和参数 | 启用 VNC 图形输出,监听端口为 5900,并绑定到所有网络接口 |
| --network network=default | 指定虚拟机的网络配置 | 使用默认网络配置连接虚拟机 |
| --boot cdrom,hd | 指定虚拟机的启动顺序,首先从光盘启动,然后从硬盘启动 | 设置虚拟机首先从 CD-ROM 启动,然后从硬盘启动 |