ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

KVM命令行管理实战:virsh、qemu-img与libvirt工具详解

KVM命令行管理实战:virsh、qemu-img与libvirt工具详解 运维的朋友应该都有这种体会刚接手一套KVM虚拟化环境图形界面一关剩下的活儿基本全在命令行里。别被“虚拟化平台”这几个字吓到KVM本身只是一个内核模块真正支撑日常管理的是围绕它展开的一整套CLI工具——virsh、qemu-img、virt-install这些命令才是管理员每天真正打交道的东西。这篇文章就从我自己的使用习惯出发把管理员真正用得上的KVM CLI工具、常用命令和背后思路整理一遍希望能给准备上手或者已经在用KVM做生产环境的朋友提供一条更清晰的路径。文章适合两类人一类是刚接触KVM、想知道从哪下手的初学者另一类是已经会用virsh但想系统梳理工具边界、排障思路和脚本化经验的运维工程师。1. 先把KVM的命令行地图铺开virsh、qemu、libvirt各管哪一摊很多人一提到KVM脑子里先蹦出来的是QEMU。这个印象不算错但不完整。KVM是Linux内核里的虚拟化模块它本身不管设备模拟也不管磁盘格式更不管虚机怎么配置。真正把虚拟机“造”出来的是一个叫QEMU的用户态进程而日常我们敲的virsh命令其实是在和一个叫做libvirt的中间层对话。把这三者的关系搞清楚后面所有操作都不会迷糊。1.1 KVM不等于QEMU也不是virt-managerKVM全称是Kernel-based Virtual Machine。你可以把它理解成内核提供的一个“硬件加速开关”让CPU可以同时跑多个特权级上下文。没有KVMQEMU也能跑虚拟机但那叫纯软件模拟速度慢到没法在生产环境用有了KVMQEMU的CPU执行路径会直接落到硬件虚拟化指令上性能才谈得上可用。QEMU则是那个真正干活的进程。它模拟CPU、内存、磁盘控制器、网卡、显示设备替虚拟机向操作系统“伪装”一套硬件环境。你会在宿主机进程列表里看到形如qemu-system-x86_64 -name your-vm -enable-kvm...的进程那就是一台运行中的虚机。而libvirt是一套管理API和守护进程它解决了两个核心问题第一你不用每次都拼一条上百个参数的qemu命令行第二它统一了不同Hypervisor的差异——同一套virsh语法可以同时管KVM、Xen、LXC。我还见过不少刚接触的朋友把virt-manager当成KVM的全部以为有图形界面就够了。实际上virt-manager底层也是通过libvirt调virsh那套接口在干活。一旦机器上没装图形环境或者要批量管理几十台虚机CLI的能力边界就体现出来了。不要小看命令行生产效率完全不在一个量级。1.2 libvirt的CLI工具链virsh、virt-install、virt-clone、virt-xml既然libvirt是中间层那它对外提供的命令行工具就是管理员的主战场。最核心的是virsh它几乎是libvirt的全功能入口虚机定义、生命周期、设备热插拔、迁移、快照、存储、网络全部可以在这个命令里完成。除了virsh还有几个高频工具virt-install从零创建虚机的专用工具支持指定安装源、磁盘、网络、vCPU数量还能配合kickstart、cloud-init做全自动安装。virt-clone基于已有虚机做克隆可以自动处理新MAC地址、新UUID省去手工改配置的麻烦。virt-xml在已有虚机的XML配置文件上做增量修改适合在脚本里“微调”某个参数比如加一块网卡或改内存上限。virt-viewer和virt-top前者是图形化控制台客户端后者是类似top的虚机资源实时监控工具。这套工具链的思路很清晰libvirt提供一个稳定的API边界上层所有工具都围绕“域domain”“存储池storage pool”“网络network”这三个核心概念展开。理解了这三个概念virsh里80%的命令都能对上号。1.3 什么时候选virsh什么时候直接调qemu命令我的建议是日常管理优先用virsh只有三种情况才需要直接碰qemu命令。第一种是手工测试QEMU参数本身比如调试某个设备模型第二种是诊断需要看清虚拟机进程实际启动参数ps一下看qemu进程第三种是qemu-img这类独立镜像工具它虽然名字带qemu但和libvirt没有直接绑定关系镜像的转换、扩容、检查都靠它。直接调qemu-system命令建虚机不是不行但你会失去libvirt的“状态管理”能力。比如用qemu命令行启动的虚机libvirt根本不知道它的存在virsh list看不到设备热插拔、迁移、自动重启全都无从谈起。生产环境千万别这么干。反过来如果virsh操作遇到“内部错误”第一反应应该是去看/var/log/libvirt/qemu/vm-name.log那里面有qemu进程的真实报错排障必须两层结合。2. 虚机生命周期管理virsh里的create、undefine、迁移与控制台实战生命周期操作是管理员每天用virsh最频繁的场景创建、启动、关机、暂停、恢复、删除、迁移。这里面的概念多且容易混淆尤其是“关机”和“销毁”、“定义”和“启动”之间的边界初学者经常踩坑。2.1 定义、启动、关闭、重启的完整姿势先分清两个基础动词virsh define是把一份XML配置注册到libvirt里此时虚机“存在”但“未运行”virsh create则是直接根据XML启动一个临时虚机虚机停止后配置也不见了。生产环境规范操作是先define再start不要用create因为你必须保留一份稳定的配置方便后续通过virsh edit修改。日常查看用virsh list --all不带--all只显示运行中的虚机带上看得到全部已定义虚机及其状态。状态字段主要有running正常运行中idle不常用在KVM里基本等同于runningpaused被virsh suspend挂起CPU处于冻结状态shutdown正在关闭还没完全退出off已定义但没启动或正常关机后的状态关闭虚机我推荐按这个顺序来先virsh shutdown vm这是通知虚拟机内系统执行优雅关机如果超过一两分钟还没关再考虑virsh destroy。注意destroy是强制销毁相当于拔电源数据丢失风险极高。还有个virsh reset是模拟硬复位用于故障恢复场景。刚上手的人最容易犯的错就是拿destroy当日常关机用多来几次文件系统就该出问题了。2.2 从关机到删除的完整流程删除虚机也是个容易犯错的地方。正确的顺序是先关机再virsh undefine vm。但undefine默认只删XML配置不删磁盘文件所以很多人发现“虚机没了但浪费了一堆磁盘空间”。如果你确认要连数据一起清掉用virsh undefine vm --remove-all-storage这个选项会把关联的磁盘文件一并删除。不过这命令有风险小心别把其他虚机共用的磁盘也删了。稳妥做法是先执行virsh domblklist vm看看这台虚机挂了哪些磁盘确认每块盘都是这台虚机独有的再删。另外还有两个实用选项--managed-save清理保存状态--snapshots-metadata清理快照元数据常规销毁可以一并带上。2.3 迁移virsh migrate的实战细节迁移是KVM生产环境的一个高价值操作。virsh migrate有两种基本路径离线迁移和在线迁移。在线迁移需要--live参数原理是在两台宿主机之间先同步内存页面最后阶段短暂暂停虚机、把剩余脏页传过去在目标主机上恢复运行。整个过程虚机服务基本不中断。前提是目标宿主机能访问到同一份磁盘所以生产环境通常搭配共享存储NFS、iSCSI、GlusterFS均可或者用--copy-storage-all在迁移时顺带把磁盘数据也拷过去。后者的缺点是迁移时间被磁盘大小主导速度慢只适合冷迁移或一次性迁移。一个比较典型的生产场景是给宿主机做内核升级、裁撤故障机器。我是这么执行的virsh migrate --live --persistent --undefinesource \ --migrateuri tcp://192.168.10.21/ \ web01 qemutcp://192.168.10.21/system--persistent表示目标端保留配置--undefinesource表示迁移成功后源端自动删除配置。这是“搬走”而非“复制”的语义。迁移完成后记得在目标机上virsh list --all确认虚机状态再回源机确认没有残留进程。2.4 控制台访问virsh console和串口配置图形界面不开的情况下virsh console vm是访问虚机控制台的标配方式。但经常有人遇到连接上以后屏幕一片黑、什么输出都没有的尴尬。这多半是因为虚机里的grub没有配置串口输出。以CentOS/RHEL系列为例安装时通过virt-install --graphics none --extra-args consolettyS0,115200n8引导就能自动启用串口控制台。如果你已经有运行中的虚机可以通过修改内核启动参数解决编辑/etc/default/grub在GRUB_CMDLINE_LINUX里加上consolettyS0,115200n8重新生成grub配置后重启虚机即可。用Ubuntu的还需要确认/etc/systemd/system/serial-gettyttyS0.service已启用。注意virsh console退出方式是Ctrl]不是CtrlC。连接期间如果虚机重启控制台会自动断开需要重新执行virsh console。想彻底避免这类交互麻烦生产环境建议同时保留ssh访问通道console只是最后的兜底手段。3. 磁盘与存储池qemu-img带来的格式、扩容、快照知识点磁盘是虚机管理的重头戏。KVM环境里磁盘操作主要涉及两个层面一是镜像文件本身的管理二是libvirt里存储池和存储卷的概念。很多管理员整天用qemu-img却忽略了存储池的便利性这里有必要一起梳理。3.1 qcow2与raw的选型逻辑创建虚拟磁盘之前先决定格式。raw格式最简单性能最好本质就是一个稀疏文件IO路径上没有额外封装。qcow2则提供了三层高级能力写时复制Copy on Write、快照、压缩和加密。我的选型逻辑是这样的追求极致的IO性能、且不需要快照能力时选raw需要频繁做快照、要用qcow2的按需分配节约空间时就选qcow2。日常测试、开发环境我更推荐qcow2因为它分配多少用多少一个200G的虚拟磁盘文件实际可能只占十几G备份时方便。生产数据库类负载尤其是随机写入密集的建议raw并尽量让磁盘文件所在文件系统支持块对齐。有个经常被忽略的点qcow2磁盘一旦写满或者长时间高负载运行碎片化会拖累性能。排查性能问题时先看一眼qemu-img check的输出如果unreferenced clusters太多说明有很多废弃数据块可以考虑做一次qemu-img convert把镜像“重整”一遍。3.2 qemu-img常用操作info、create、convert、resize、rebase、check我把qemu-img最常用的子命令列一张表子命令用途关键选项info查看镜像文件信息、虚拟大小、磁盘占用--backing-chain查看整条镜像链create创建镜像文件-f qcow2指定格式-b指定backing fileresize调整镜像大小10G扩大或-10G缩小扩容安全缩小有风险convert格式转换/拷贝镜像-O raw输出格式-p显示进度check校验一致性-r all尝试修复rebase修改或合并backing chain-u仅更新metadata--commit把覆盖层合并到底部扩展现有虚机磁盘是实战高频需求。步骤分两端先用qemu-img resize扩大镜像文件再进虚机内部让系统识别并扩展分区。比如从100G扩到120Gqemu-img resize vm-disk.qcow2 20G virsh domblklist vm01 # 确认磁盘路径然后进到虚机里用lsblk看新空间再用growpart和resize2fs针对ext4或xfs_growfs针对xfs做在线扩容。如果你用LVM还要先扩展PV和LV。很多人只做了第一步没做第二步结果虚拟磁盘显示120G系统里还是100G这就是典型的“文件变大了分区没变大”事故。3.3 存储池管理virsh pool-define-as、vol-create-aslibvirt的存储池抽象值得好好用。存储池可以基于目录、LVM卷组、NFS共享、iSCSI目标等。有了存储池创建和管理虚机磁盘就统一了不需要到处找绝对路径。我常用的目录型存储池创建方式virsh pool-define-as vmstore dir - - - - /data/vmstore virsh pool-build vmstore virsh pool-start vmstore virsh pool-autostart vmstore在池里创建卷virsh vol-create-as vmstore vm01.qcow2 40G --format qcow2创建虚机时直接指定池名和卷名比如--disk volvmstore/vm01.qcow2。在批量创建虚机时特别方便因为卷的路径、格式、权限都由libvirt统一管理。平时排查时用virsh pool-list、virsh vol-list就能看到所有池和卷的状态比在宿主机上翻目录高效得多。3.4 快照的完整理解快照有两个层面一定要分清楚。内部快照是qcow2镜像内部保存的状态包含虚拟机内存和磁盘状态的冻结点外部快照则是基于backing chain创建新的覆盖层原镜像被冻结为只读底层。日常简单备份我推荐用内部快照virsh snapshot-create-as vm01 snap-20241201 \ --description before upgrade \ --disk-only --atomic查看和回滚virsh snapshot-list vm01 virsh snapshot-revert vm01 snap-20241201生产环境做外部快照时要小心外部快照链一旦太长读性能会明显下降合并链又需要停机窗口。我的习惯是快照只用于短期回滚保护比如升级前留一个点确认没问题后尽快virsh blockcommit或virsh blockpull把数据合并回去别让镜像链长期悬在那里。4. 网络命令链Libvirt网络、Linux Bridge与OVS的三层衔接网络是KVM环境里最容易被低估的部分。一台虚机的网络配置涉及libvirt网络对象、宿主机上的Linux网桥、网卡直通等多个层级。命令不熟的话经常会出现“虚机里配好IP却ping不通网关”“物理机重启后网桥丢了”这类问题。4.1 默认NAT网络的困境与自定义网络libvirt安装后会默认定义一个NAT网络virbr0。这个网络适合单机测试因为它让虚机通过宿主机的IP做地址转换出网外部无法直接反向访问到虚机。生产环境基本不会用它来承载业务流量而是自定义一个bridge网络让虚机直接挂在物理网络上。查看现有网络和执行自定义配置virsh net-list --all virsh net-define /path/to/bridge-network.xml virsh net-start mybridge virsh net-autostart mybridge自定义bridge网络的XML核心配置大致如下network nameprod-bridge/name forward modebridge/ bridge namebr0/ /network这种模式本质上是把宿主机已有的br0网桥交给libvirt管理虚机的虚拟网卡通过vnet设备连到br0上和物理网络平级互通。4.2 Linux Bridge实操brctl与ip命令的衔接虽然brctl是传统命令但现在新系统更推荐用ip命令。创建一个网桥并挂载物理网卡ip link add name br0 type bridge ip link set ens3 master br0 ip addr add 192.168.10.10/24 dev br0 ip link set br0 up然后把物理网卡的IP去掉宿主机和虚机的通信都走br0。这个步骤做完推荐写进systemd network配置或者NetworkManager的配置里持久化否则物理机重启网桥就没了。检查网桥状态时看bridge link show能直接看到挂载在br0上的所有虚机vnet接口。这里有个常见坑创建完网桥后如果发现虚机内网络不通先检查/proc/sys/net/ipv4/ip_forward是否为1。bridge模式本身还需要开启IP转发因为宿主机要转发来自虚机的数据包。尤其在多网卡、多网段的场景iptables规则和firewalld可能会悄悄拦住转发流量排障时先停掉firewalld测试一轮很快就能定位。4.3 OVS CLI结合使用的场景当虚机数量多、需要做精细的流量隔离、QoS、隧道或流表控制时Linux Bridge会显得不够灵活这时候就该上Open vSwitch。OVS的CLI有三个主要命令ovs-vsctl管理网桥和端口比如创建网桥、挂接端口、配置VLANovs-ofctl操作OpenFlow流表ovs-appctl运行时状态和调试把物理网卡挂到OVS网桥ovs-vsctl add-br ovsbr0 ovs-vsctl add-port ovsbr0 ens3 ovs-vsctl set port ens3 tag100通过设置tag来划分VLAN是OVS最直接的用法。之后在libvirt虚机网络XML里接口类型填interface typebridge桥名指向ovsbr0即可。不过要特别注意OVS网桥的物理端口千万不要配IP地址否则网络栈会异常。宿主机与虚机的通信要另建一个内部端口internal port并配IP这个细节很多人第一次用会踩。4.4 网卡直通与SR-IOV的命令如果业务要求极低延迟、进出虚机流量不能经过虚拟化层那就得考虑PCI直通或者SR-IOV。直通模式下物理网卡完全分配给一台虚机宿主机不再持有该网卡。操作要点是先把网卡从宿主机驱动解绑再通过virsh给虚机挂上PCI设备# 宿主机上查找PCI地址 virsh nodedev-list --cap pci # 解绑驱动 echo 0000:01:00.0 /sys/bus/pci/drivers/ixgbe/unbind # 热挂到虚机 virsh attach-device vm01 device.xml --liveSR-IOV则是把一个物理网卡切成多个VF让每个VF可以直接分配给不同虚机兼顾了性能和多虚机共享。相关配置主要在物理网卡驱动侧例如echo 4 /sys/class/net/ens3/device/sriov_numvfs创建4个VF然后逐个分配。直通意味着该虚机和宿主机的内存需要做IOMMU映射记得在BIOS和内核参数打开IOMMU支持否则设备分配会失败。5. 性能监控与排障当虚机变慢时我按顺序敲的命令虚机变慢是管理员最常遇到的求助场景。我先明确一个观点不是所有性能问题都出在虚机内部很多根因在宿主机层面。所以排查时要同时看虚机视角和宿主机视角乱猜不如按顺序收集数据。5.1 virsh domstats虚机资源统计的第一手资料virsh domstats是libvirt 1.2.8以后引入的统计命令比virsh dominfo的信息全面得多而且可以一次输出多个维度的指标。用法virsh domstats vm01 --state --vcpu --balloon --block --net输出里值得重点看几个字段vcpu.time每颗vCPU累计占用的CPU时间如果忙到几乎不下降说明CPU确实被吃满了vcpu.waitvCPU等待时间这个值高说明虚机想跑但没拿到物理CPU宿主机可能超卖严重balloon.current当前内存占用结合宿主机free看是否存在内存超分block.rd.bytes/block.wr.bytes块设备读写量判断磁盘层压力net.rx.bytes/net.tx.bytes网络吞吐量我一般会连续采样几轮观察趋势而不是看瞬时值。比如用个简单的for循环for i in $(seq 1 10); do virsh domstats vm01 --vcpu | grep vcpu.time; sleep 2; done如果vcpu.time增量极小但业务又感觉卡那问题大概率不是CPU继续看内存和磁盘。5.2 宿主机视角的排查命令虚机的状态不代表宿主机全局状态。当多台虚机都跑在同一台物理机上时单个虚机慢很可能是邻居虚机在抢资源。宿主机端我习惯按这个顺序查看uptime看load average快速判断宿主机整体负载mpstat -P ALL 1看每颗物理CPU的使用率识别是不是某些核心打满pidstat定位到具体的qemu进程比如pidstat -p $(pgrep -f guestvm01) 1看用户态/内核态的CPU占比iostat -x 2看磁盘util和await特别是await过高说明磁盘饱和或设备异常sar -n DEV 1看物理网卡的吞吐和错误包一个容易被忽略的指标是steal time。如果在虚机里用top看到很多CPU被“偷走”说明宿主机上存在过度的CPU超分或者处于不公平调度状态这种问题在虚机内部怎么调都没用只能回到宿主机层面处理。用pidstat -p qemu_pid -w 1看线程切换次数也能侧面反映调度压力。5.3 日志与配置文件排障排障的另一条线是日志。KVM相关的日志主要在三个地方/var/log/libvirt/qemu/下面按虚机名命名的日志文件记录每次qemu进程启动和运行时的错误/var/log/messages或/var/log/syslog里的内核报错以及dmesg里与KVM相关的模块信息。比如虚机启动失败第一件事就是看对应的domain日志tail -n 50 /var/log/libvirt/qemu/vm01.log常见报错包括“failed to open disk image”“找不到可用的PCI地址”“内存不足无法分配”等日志一般会直接给出原因。再看编译和加载的内核模块状态lsmod | grep kvm virsh nodeinfo virsh capabilitiesnodeinfo能确认宿主的物理CPU、内存总数capabilities则展现了libvirt认为当前环境支持的全部虚拟化能力。如果capabilities里没有开启嵌套虚拟化或者缺少某设备模型很多高级功能就会报“不支持”排查有一个整体把握会快很多。6. 自动化脚本里的KVM CLI批量操作与模板化部署的思路单台虚机手工管理没问题但一旦要批量创建、批量巡检、定期清理就得靠脚本了。这一章分享我用CLI工具做自动化的几种思路以及踩过的坑。6.1 bash批量管理注意点批量操作的经典场景是批量重启一组虚机、批量查看资源使用率。用bash循环可以快速实现但有几个细节要特别留心。首先virsh list在不同模式下的输出格式不稳定--name选项才是最安全的解析方式。不要用awk {print $2}这种方式去抓名字因为表头、空格、状态字段会导致错位。建议这样for vm in $(virsh list --name); do echo checking $vm virsh domstate $vm done其次批量操作要防止一颗老鼠屎坏了一锅汤。比如批量关机时如果某一台虚机正处于paused状态shutdown可能不起作用。更安全的姿势是先判断状态再执行对应动作。最后脚本里尽量用完整命令路径或者确保PATH环境变量包含了/usr/bin否则crontab环境下常常找不到virsh命令。6.2 virt-install与无人值守安装组合批量创建虚机最省心的方式是用virt-install结合kickstart或cloud-init。这里给一个最小示例创建一台CentOS虚机串口控制台使用网络安装源virt-install \ --name c8s01 \ --memory 4096 \ --vcpus 4 \ --disk poolvmstore,size40,formatqcow2 \ --network networkprod-bridge \ --location http://mirror.example.com/centos/8/BaseOS/x86_64/os/ \ --os-variant centos-stream8 \ --graphics none \ --extra-args consolettyS0 kshttp://ks.example.com/centos8.ks--extra-args里的ks参数指定kickstart文件虚机启动后完全无人值守完成安装。如果是云场景可以在--extra-args里直接写dsnocloud配合seed镜像做cloud-init初始化IP、主机名、公钥都可以在seed里预置。这里要提醒一个经常翻车的点--os-variant一定要指定。别图省事留空因为不同的os-variant会影响默认的virtio设备选择、固件模式、时钟配置。留空时libvirt可能选一个保守的设备模型导致性能和兼容性都不理想。可以用osinfo-query os查看当前系统支持的os-variant清单。6.3 自动化整合与注意事项如果要在自动化平台比如Ansible里管理KVM通常用的还是libvirt模块但底层调用的依然是virsh/virt-install这套CLI。在脚本设计上我建议三层结构函数封装单一操作如创建虚机、扩展磁盘、检查状态上层编排如批量创建多台、错误回滚、日志记录最外层接入平台或定时任务。回滚这一点尤其值得强调。批量创建虚机时如果第5台失败了前面4台要不要清理我的做法是在脚本里写一个trap遇到异常就调用清理函数把本次批次内创建成功的虚机全部undefine并删除卷。虽然乍一看有点激进但比留下半成品环境要可控得多。7. 容易翻车的细节我踩过的坑和总结的提醒清单最后一章不收拢方法论只分享一些我真实遇到过、且在网络文档里很少被提及的细节。有些坑其实质很简单但排查路径可能很曲折写下来算是一个提醒。7.1 常见问题与解决方向第一个常用问题是资源超卖导致的CPU steal。很多管理员规划虚机时喜欢“多多益善”内存超分或CPU超分严重后某台虚机的vCPU排队严重。翻车场景是业务方反馈虚机卡但宿主机top看起来负载不高。实际上每个vCPU都在等待被调度只是qemu进程的CPU%没体现出来。解决思路是控制超卖比CPU建议不超过物理线程数的2倍内存评估好业务需求后尽量少超分。第二个是UUID冲突。克隆虚机时如果没清理XML配置里的UUID两台虚机用同一个UUID启动libvirt会直接报“domain already exists”。用virt-clone工具自动克隆一般不会有这个问题但手工复制XML再改名字的场景特别容易留下隐患。命令层面可以用virsh dumpxml vm new.xml修改时务必同时改name和uuid字段。第三个是存储权限。esp.当存储池挂载在NFS上或者磁盘文件的属主不是libvirt的qemu用户启动虚机时报“permission denied”。排查时用ls -l检查文件属主把属主改为qemu:qemu即可。NFS场景还要检查no_root_squash之类的导出参数否则你在宿主机上改了权限虚机通过NFS客户端访问时依然被限制。7.2 一些几乎没人写但极好用的命令细节其实virsh里有几个命令平时文档很少提及但在关键时刻非常有用。virsh edit和virsh dumpxml看起来功能相似但前者会在保存时校验XML格式避免手误把整机配置写坏。改完配置想验证语法还有个办法是用virsh define重新加载同份XML报错会直接提示哪个节点不合法。virsh domiflist配合virsh domblklist是我排查配置时必用的两个命令。前者列出虚机所有网卡的类型、源设备、MAC后者列出所有磁盘的后端文件路径。拿到这些基础信息再去定位性能和网络问题才有判断依据。再说一个大杀器qemu-img commit和qemu-img rebase。当你的镜像链出现多级backing后想把它压扁成一整块或者想更换底层镜像这两个命令能救场。有个典型场景开发环境频繁做模板模板更新后几十台虚机仍然引用旧镜像。这种情况用rebase替换backing file比逐个convert效率高得多。7.3 给管理员的最后一点提醒我在实际管理KVM环境的过程中体会最深的是CLI工具本身并不难难的是理解每一层抽象之间的关系。内核KVM负责加速QEMU负责设备模拟libvirt负责管理封装virsh命令只是最外层的入口。遇到问题先确认是虚机内部的问题还是宿主机资源问题还是libvirt/存储/网络的配置问题再决定用哪一层工具去处理。另外生产环境务必给操作上保险操作前先virsh dumpxml备份配置升级内核前确保迁移通道可信定期对关键虚机做快照或备份。命令行效率高但能造成的影响也大双人复核和自动化脚本同样重要。如果你刚开始接触KVM别急着把所有命令都背下来先把这一套“tick能不能跑起来、存储怎么做、网络怎么通、坏了怎么看日志”的闭环练通剩余的命令遇到什么学什么很快就熟。
返回列表