[ kvm ] 学习笔记 6:virsh 命令及功能详解
1. 虚拟机管理操作
attach-device 从XML文件附加设备 attach-disk 附加磁盘设备 attach-interface 连接网络接口 autostart 自动启动一个域 blkdeviotune 设置或查询块设备I/O调整参数。 blkiotune 获取或设置blkio参数 blockcommit 开始块提交操作。 blockcopy 开始一个块复制操作。 blockjob 管理活动的块操作 blockpull 从其背景图像填充磁盘。 blockresize 调整域的块设备。 change-media 更换CD或软驱的媒体 console 连接到访客控制台 cpu-baseline 计算基准CPU cpu-compare 比较主机CPU和由XML文件描述的CPU cpu-stats 显示域的CPU统计信息 create 从XML文件创建一个域 define 从XML文件中定义(但不要启动)域 desc 显示或设置域的描述或标题 destroy 摧毁(停止)一个域名 detach-device 从XML文件中分离设备 detach-disk 分离磁盘设备 detach-interface 分离网络接口 domdisplay 域显示连接URI domfsfreeze 冻结域的挂载文件系统。 domfsthaw 解冻域的安装文件系统。 domfsinfo 获取域安装的文件系统的信息。 domfstrim 在域的挂载文件系统上调用fstrim。 domhostname 打印域的主机名 domid 将域名或UUID转换为域ID domif-setlink 设置虚拟接口的链路状态 domiftune 获取/设置虚拟接口的参数 domjobabort 中止活动的域名工作 domjobinfo 域名工作信息 domname 将域ID或UUID转换为域名 domrename 重命名一个域 dompmsuspend 使用电源管理功能优雅地暂停域 dompmwakeup 从pmsuspended状态唤醒一个域 domuuid 将域名或ID转换为域UUID domxml-from-native 将本地配置转换为域XML domxml-to-native 将域XML转换为本地配置 dump 将域的核心转储到文件进行分析 dumpxml XML中的域信息 edit 编辑域的XML配置 event 域名事件 inject-nmi 向客人注入NMI iothreadinfo 查看域名IOThreads iothreadpin 控制域IOThread亲和力 iothreadadd 将IOThread添加到来宾域 iothreaddel 从来宾域中删除一个IOThread send-key 将密钥发送给客人 send-process-signal 发送信号给进程 lxc-enter-namespace LXC访客输入名称空间 managedsave 管理域名状态保存 managedsave-remove 删除管理的域名保存 memtune 获取或设置内存参数 perf 获取或设置perf事件 metadata 显示或设置域的自定义XML元数据 migrate 将域迁移到其他主机 migrate-setmaxdowntime 设置最大可容忍的停机时间 migrate-compcache 获取/设置压缩缓存大小 migrate-setspeed 设置最大迁移带宽 migrate-getspeed 获得最大的迁移带宽 migrate-postcopy 切换运行从预复制到后复制的迁移 numatune 获取或设置numa参数 qemu-attach QEMU附件 qemu-monitor-command QEMU监视器命令 qemu-monitor-event QEMU监控事件 qemu-agent-command QEMU访客代理命令 reboot 重新启动一个域 reset 重置一个域 restore 从文件中保存的状态恢复域 resume 恢复一个域名 save 将域状态保存到文件 save-image-define 重新定义一个域的保存状态文件的XML save-image-dumpxml 保存XML中的状态域信息 save-image-edit 编辑域的已保存状态文件的XML schedinfo 显示/设置调度程序参数 screenshot 截取当前的域控制台并将其存储到文件中 set-user-password 在域内设置用户密码 setmaxmem 改变最大内存限制 setmem 改变内存分配 setvcpus 更改虚拟CPU的数量 shutdown 正常关闭域 start 启动一个(以前定义的)非活动域 suspend 暂停域名 ttyconsole tty控制台 undefine 取消定义一个域 update-device 从XML文件更新设备 vcpucount 域的vcpu数量 vcpuinfo 详细的域名vcpu信息 vcpupin 控制或查询域vcpu亲和力 emulatorpin 控制或查询域模拟器亲和力 vncdisplay vnc显示 guestvcpus 查询或修改guest虚拟机中的vcpu状态(通过代理) setvcpu 附加/分离vcpu或线程组 domblkthreshold 为给定块设备或其支持链元素设置块阈值事件的阈值
1.1 虚拟机状态
通过 virsh 管理虚拟机,虚拟机的状态显示为以下几种:
runing 是运行状态 idel 是空闲状态 pause 暂停状态 shutdown 关闭状态 crash 虚拟机崩坏状态 daying 垂死状态 shut off 不运行完全关闭 pmsuspended客户机被关掉电源中中断
1.2 虚拟机的创建、开机、重启、关机
首先看下 create 和 define 创建虚拟机异同:
create 创建虚拟机 [root@192.168.118.14 ~]#virsh list --all Id Name State ---------------------------------------------------- 76 centos running [root@192.168.118.14 ~]#virsh create cirros.xml Domain cirros created from cirros.xml [root@192.168.118.14 ~]#virsh list --all Id Name State ---------------------------------------------------- 76 centos running 79 cirros running define 创建虚拟机 [root@192.168.118.14 ~]#virsh list --all Id Name State ---------------------------------------------------- 76 centos running [root@192.168.118.14 ~]#virsh define cirros.xml Domain cirros defined from cirros.xml [root@192.168.118.14 ~]#virsh list --all Id Name State ---------------------------------------------------- 76 centos running - cirros shut off
create 是通过 xml 格式文件创建虚拟机,创建完毕启动。当关闭虚拟机时,create创建的虚拟机消失。
define 是通过 xml 格式文件创建虚拟机,创建完毕不启动。当关闭虚拟机时,define 在 list 中依然能查看到。
开启、重启、关闭虚拟机
开启: virsh start domain 重启: virsh reboot domain 关闭: virsh shutdown domain - 正常关闭虚拟机 virsh destroy domain - 直接断电关闭虚拟机
1.3 虚拟机 CPU 的操作
cpu-stats 宿主机和虚拟机cpu 运行时间状态
[root@192.168.118.14 ~]#virsh cpu-stats centos CPU0: cpu_time 131.344620748 seconds vcpu_time 78.559064700 seconds CPU1: cpu_time 145.769793063 seconds vcpu_time 81.011781142 seconds CPU2: cpu_time 132.633396527 seconds vcpu_time 12.782286092 seconds CPU3: cpu_time 49.708745382 seconds vcpu_time 11.473885669 seconds Total: cpu_time 459.456555720 seconds user_time 8.220000000 seconds system_time 17.180000000 seconds
vcpucount 查看虚拟机 vcpu 的配置数量
[root@192.168.118.14 ~]#virsh vcpucount centos maximum config 2 maximum live 2 current config 2 current live 2
vcpuinfo 查看 vcpu 详细信息,vcpu0 运行在宿主机的 cpu0 上。
[root@192.168.118.14 ~]#virsh vcpuinfo cirros VCPU: 0 CPU: 3 State: running CPU time: 8.1s CPU Affinity: yyyy
1.3.1 vcpu 亲和性绑定
使用 virsh vcpuinfo 命令查看实例 vcpu 和 物理 cpu 的对应关系
[root@192.168.118.11 ~]#virsh vcpuinfo cirros VCPU: 0 CPU: 2 State: running CPU time: 3.5s CPU Affinity: yyyy VCPU: 1 CPU: 3 State: running CPU time: 1.0s CPU Affinity: yyyy
可以发现, vcpu0 绑定到物理 cpu2 上, vcpu1 绑定到物理 cpu3 上。
使用 emulatorpin 命令可以查看虚拟机可以使用哪些物理逻辑 cpu
[root@192.168.118.11 ~]#virsh emulatorpin cirros emulator: CPU Affinity ---------------------------------- *: 0-3
宿主机本身有 4个 cpu。 意味着 cirros 虚拟机可以随意在这 4个cpu上切换。
在线绑定虚拟机 cpu
可以强制将虚拟机绑定到一个 cpu 区间。例如,将虚拟机 cirros 的 vcpu 绑定在 1-3 区间调度。
[root@192.168.118.11 ~]#virsh emulatorpin cirros 1-3 [root@192.168.118.11 ~]#virsh emulatorpin cirros emulator: CPU Affinity ---------------------------------- *: 1-3
这样,就绑定了虚拟机在 1-3 cpu 区间之类切换。
上面是为虚拟机设置一个物理 cpu 区间,如果要一对一绑定就需要使用 vcpupin
[root@192.168.118.11 ~]#virsh vcpuinfo cirros VCPU: 0 CPU: 3 State: running CPU time: 3.6s CPU Affinity: yyyy VCPU: 1 CPU: 2 State: running CPU time: 1.0s CPU Affinity: yyyy # 将vcpu0 绑定到 cpu0 [root@192.168.118.11 ~]#virsh vcpupin cirros 0 0 # 将 vcpu1 绑定到 cpu1 [root@192.168.118.11 ~]#virsh vcpupin cirros 1 1 [root@192.168.118.11 ~]#virsh vcpuinfo cirros VCPU: 0 CPU: 0 State: running CPU time: 3.6s CPU Affinity: y--- VCPU: 1 CPU: 1 State: running CPU time: 1.0s CPU Affinity: -y--
cpu 绑定技术原理:cpu绑定实际上是 Libvirt 通过 cgroup 来实现的,通过cgroup直接去绑定KVM 虚拟机进程。cgroup 不仅可以做 cpu 绑定,还可以限制虚拟机磁盘、网络资源控制。
cpu 绑定技术适用的应用场景:
系统的 CPU 压力较大
多核 cpu 压力不平衡,可以通过 cpu vcpupin 技术人工进行调配。
1.3.2 动态调配 vcpu 个数(可增大不可减少)
在 kvm 中可动态的调整 vcpu 的个数,简单理解就是,设置一个 vcpu 最大值,这个最大值肯定是要大于当前 vcpu 数量的,然后就可以在 当前 vcpu 数量和 设置的最大vcpu数量之间 动态的调整 vcpu 的个数,如下示例演示:
(1)在虚拟机关闭的情况下,调整 vcpu 最大支持的数目
[root@192.168.118.14 ~]#virsh list --all Id Name State ---------------------------------------------------- 76 centos running - cirros shut off # 查看未虚拟机 cirros 目前主机信息 [root@192.168.118.14 ~]#virsh dominfo cirros Id: - Name: cirros UUID: b7acba73-f70c-4c59-b144-cc20a7665ad4 OS Type: hvm State: shut off CPU(s): 1 Max memory: 1048576 KiB Used memory: 0 KiB Persistent: yes Autostart: disable Managed save: no Security model: selinux Security DOI: 0 # 关机状态下修改虚拟机 cirros 最大支持的 vcpu 个数 [root@192.168.118.14 ~]#virsh setvcpus cirros --maximum 4 --config
(2)开机状态下动态的调整 vcpu 的数目
# 开启虚拟机 [root@192.168.118.14 ~]#virsh start cirros Domain cirros started # 查看开机 虚拟机 cirros 主机信息 [root@192.168.118.14 ~]#virsh dominfo cirros Id: 89 Name: cirros UUID: b7acba73-f70c-4c59-b144-cc20a7665ad4 OS Type: hvm State: running CPU(s): 1 CPU time: 8.0s Max memory: 1048576 KiB Used memory: 1048576 KiB Persistent: yes Autostart: disable Managed save: no Security model: selinux Security DOI: 0 Security label: system_u:system_r:svirt_t:s0:c123,c791 (permissive) # 动态调整 vcpu 为 2 [root@192.168.118.14 ~]#virsh setvcpus cirros 2 # 查看调整 vcpu 是否成功 [root@192.168.118.14 ~]#virsh dominfo cirros Id: 89 Name: cirros UUID: b7acba73-f70c-4c59-b144-cc20a7665ad4 OS Type: hvm State: running CPU(s): 2 CPU time: 20.7s Max memory: 1048576 KiB Used memory: 1048576 KiB Persistent: yes Autostart: disable Managed save: no Security model: selinux Security DOI: 0 Security label: system_u:system_r:svirt_t:s0:c123,c791 (permissive)
1.4 虚拟机 内存 操作
1.4.1 虚拟机内存限制
memtune 查看或设置内存参数
作用:限制虚拟机在物理机host上申请内存的大小。
[root@192.168.118.14 ~]#virsh memtune centos hard_limit : unlimited soft_limit : unlimited swap_hard_limit: unlimited hard_limit :设置虚拟机可用物理内存最大值 (单位KB) soft_limit:设置虚拟机软限制最大上限(单位KB) swap_hard_limit:设置虚拟机 swap 分区硬上限(单位KB)
设置:
[root@192.168.118.14 ~]#virsh memtune centos --hard-limit 4G --config --live [root@192.168.118.14 ~]#virsh memtune centos --swap-hard-limit 4G --config --live [root@192.168.118.14 ~]#virsh memtune centos --soft-limit 2G --config --live [root@192.168.118.14 ~]#virsh memtune centos hard_limit : 4194304 soft_limit : 2097152 swap_hard_limit: 4194304
说明:
--config 设置永久配置
--live 设置当前启动状态配置
1.4.2 动态修改内存大小(可增大可减小)
动态修改内存和动态调配 vcpu 配置差不多,都是通过设置一个最大值,然后就可以设置的内存 大于等于当前内存了。
(1)关机状态下,修改虚拟机的最大内存数
[root@192.168.118.14 ~]#virsh list --all Id Name State ---------------------------------------------------- 90 cirros running - centos shut off [root@192.168.118.14 ~]#virsh dominfo centos Id: - Name: centos UUID: b149f8c5-f4b4-4d2d-a10d-81b8b13c68eb OS Type: hvm State: shut off CPU(s): 1 Max memory: 1048576 KiB Used memory: 0 KiB Persistent: yes Autostart: disable Managed save: no Security model: selinux Security DOI: 0 [root@192.168.118.14 ~]#virsh setmaxmem centos 10G --config [root@192.168.118.14 ~]#virsh dominfo centos Id: - Name: centos UUID: b149f8c5-f4b4-4d2d-a10d-81b8b13c68eb OS Type: hvm State: shut off CPU(s): 1 Max memory: 10485760 KiB Used memory: 0 KiB Persistent: yes Autostart: disable Managed save: no Security model: selinux Security DOI: 0
(2)开启虚拟机,进行内存大小的调整
调整前,虚拟机内存大小:
[root@192.168.118.14 ~]#virsh setmem centos 2G --config --live [root@192.168.118.14 ~]#virsh dominfo centos Id: 93 Name: centos UUID: b149f8c5-f4b4-4d2d-a10d-81b8b13c68eb OS Type: hvm State: running CPU(s): 1 CPU time: 92.1s Max memory: 10485760 KiB Used memory: 2097152 KiB Persistent: yes Autostart: disable Managed save: no Security model: selinux Security DOI: 0 Security label: system_u:system_r:svirt_t:s0:c645,c949 (permissive)
调整后,虚拟机内存大小:
内存动态调整完成。
1.5 虚拟机 磁盘 的操作
1.5.1 磁盘的新增和删除
磁盘的新增和删除有两种实现方式:
(1)attach-device 和 detach-device
(2)attach-disk 和 detach-disk
在新增或删除磁盘之前,通过 qemu-img 创建一个虚拟磁盘文件:
[root@192.168.118.14 ~]#qemu-img create -f qcow2 /images/share-device.qcow2 -o size=5G,preallocation=metadata
第一种方式:
通过 attach-device 新增磁盘时,需要通过 xml 来添加。
编写 xml 文件,这里有个技巧:通过 virsh edit cirros 编辑 xml 文件,复制关于 disk 的部分进行修改,这样不容易出现报错。
[root@192.168.118.14 /images]#cat share-device.xml <disk type='file' device='disk'> <driver name='qemu' type='qcow2' cache='writeback' io='threads'/> <source file='/images/share-device.qcow2'/> <target dev='vdb' bus='virtio'/> </disk>
通过 attach-device 将磁盘附加到虚拟机上
[root@192.168.118.14 /images]#virsh attach-device cirros /images/share-device.xml --config --live Device attached successfully # 通过 domblklist 可查看虚拟机目前挂载的磁盘信息 [root@192.168.118.14 /images]#virsh domblklist cirros Target Source ------------------------------------------------ vda /images/cirros-0.3.5-i386-disk.img vdb /images/share-device.qcow2
查看虚拟机磁盘:
删除添加过的磁盘:
[root@192.168.118.14 /images]#virsh detach-device cirros /images/share-device.xml --config --live Device detached successfully # 通过 domblklist 可查看虚拟机目前挂载的磁盘信息 [root@192.168.118.14 /images]#virsh domblklist cirros Target Source ------------------------------------------------ vda /images/cirros-0.3.5-i386-disk.img
查看虚拟机磁盘:
删除成功。
注意:使用 attach-device 和 detach-device 时,文件的指向是 xml 文件,而不是虚拟磁盘文件。
第二种方式:
通过 attach-disk 新增磁盘时,需要通过 虚拟磁盘文件 来添加。
添加虚拟磁盘:
[root@192.168.118.14 /images]#virsh attach-disk cirros /images/share-device.qcow2 vdb --live --config Disk attached successfully
删除虚拟磁盘:
[root@192.168.118.14 /images]#virsh detach-disk cirros /images/share-device.qcow2 --live --config Disk detached successfully
1.6 虚拟机 网卡 的操作
主要操作命令:
domiflist : 查看虚拟机中所有的网卡设备 attach-interface: 为虚拟机添加网卡设备 detach-interface:删除虚拟机网卡设备
示例演示:
(1)查看虚拟机所有网络设备:
[root@192.168.118.14 /images]#virsh domiflist cirros Interface Type Source Model MAC ------------------------------------------------------- vnet0 network default rtl8139 52:54:00:c6:aa:b7
(2)为虚拟机再添加一张网卡:
[root@192.168.118.14 /images]#virsh attach-interface cirros --type bridge --source virbr0 --live --config Interface attached successfully [root@192.168.118.14 /images]#virsh domiflist cirros Interface Type Source Model MAC ------------------------------------------------------- vnet0 network default rtl8139 52:54:00:c6:aa:b7 vnet1 bridge virbr0 rtl8139 52:54:00:de:6d:04
网卡添加成功。
(3)删除网络设备:
[root@192.168.118.14 ~]#virsh detach-interface cirros --type bridge --mac 52:54:00:e0:2c:44 --live --config Interface detached successfully [root@192.168.118.14 ~]#virsh domiflist cirros Interface Type Source Model MAC ------------------------------------------------------- vnet0 network default rtl8139 52:54:00:c6:aa:b7
1.7 虚拟机 其他 的一些操作
1.7.1 autostart
autostart :设置物理机开机启动虚拟机
查看方式:
[root@192.168.118.14 ~]#virsh dominfo cirros Id: 96 Name: cirros UUID: 3748ef4e-1c84-4f28-9a4b-53ad22310bfd OS Type: hvm State: running CPU(s): 1 CPU time: 25.1s Max memory: 1048576 KiB Used memory: 1048576 KiB Persistent: yes Autostart: disable Managed save: no Security model: selinux Security DOI: 0 Security label: system_u:system_r:svirt_t:s0:c184,c860 (permissive)
其中 autostart 选项就是是否开机启动。disable 否,enable 是
设置:
[root@192.168.118.14 ~]#virsh autostart cirros # 设置开机启动 [root@192.168.118.14 ~]#virsh autostart cirros --disable # 关闭开机启动
1.7.2 domdisplay
显示虚拟机连接的 URI
[root@192.168.118.14 ~]#virsh domdisplay centos vnc://127.0.0.1:0
1.7.3 dumpxml
导出虚拟机的 xml 文件
[root@192.168.118.14 ~]#virsh dumpxml centos > centos.xml
2. 虚拟机 监控 操作
domblkerror 在块设备上显示错误 domblkinfo 域块设备大小信息 domblklist 列出所有的域块 domblkstat 获取域的设备块统计信息 domcontrol 域控制接口状态 domif-getlink 获取虚拟接口的链接状态 domifaddr 获取正在运行的域的网络接口地址 domiflist 列出所有的域虚拟接口 domifstat 获取域的网络接口统计信息 dominfo 域信息 dommemstat 获取域的内存统计信息 domstate 域状态 domstats 获取有关一个或多个域的统计信息 domtime 域时间 list 列出域名