virsh 命令详解
原文链接 http://geekspeng.cn/2019/04/24/virsh-%E5%91%BD%E4%BB%A4%E8%AF%A6%E8%A7%A3.html
注:以下为加速网络访问所做的原文缓存,经过重新格式化,可能存在格式方面的问题,或偶有遗漏信息,请以原文为准。
安装
# yum install qemu-kvm libvirt virt-install virt-manager
命令列表
版本信息
- virsh-v 只显示版本号
- virsh-V 显示版本的详细信息
<!-- more -->
查看实例
- virsh list查看活动的虚拟机
- virsh list --all 查看所有的虚拟机(关闭和运行的虚拟机)
虚拟机的状态有(8)种
- runing 是运行状态
- idel 是空闲状态
- pause 暂停状态
- shutdown 关闭状态
- shut off 不运行完全关闭
- crash 虚拟机崩坏状态
- daying 垂死状态
- pmsuspended 客户机被关掉电源中中断 ## 连接方式
qemu:///system (本地连接到系统实例)
qemu+unix:///system(本地连接到系统实例)
qemu://example.com/system(远程连接,TLS)
qemu+tcp://example.com/system(远程登录,SASI)
qemu+ssl://example.com/system(远程登录,SSL)
-c - -connect 连接远程的主机
-l - -log 输出日志
-q - -quiet避免额外的信息
-r - - readonly 只读,一般和connect配合使用
-t - - timing 输出消逝的时间
-e - - escape 设置转意序列
domain命令
创建、连接虚拟机
- define(file)从文件定义一个虚拟机(但是不启动)
- undefine (file) 取消定义的虚拟机
- create (file):从文件创建虚拟机
console (domain):连接虚拟机的控制台
查看虚拟机状态
dominfo(domian)显示虚拟机的信息
domname(idorUUID)显示虚拟机的名字
domuuid (domian)显示虚拟机的id
domid(id or name ) 根据名字得到id
domstate(domian) 显示虚拟机的状态
domstats(domian) 显示虚拟机的统计信息
domcontrol(domian) 显示虚拟机的控制接口状态ok or error
domtime(domian) 显示虚拟机的时间
dommemstat(domain)获取虚拟机的内存统计信息
domhostname(domain)显示虚拟机的主机名
dump (domian file) 把文件配置输出到文件file
dumpxml(domian)直接显示domian的xml文件配置
domblklist(domain)显示虚拟机的磁盘
domblkerror(domian)显示有错的磁盘
domblkinfo(domaindevice)显示磁盘大小信息
domblkstat(domaindevice)显示磁盘统计信息
domiflist(domain)显示网卡接口
domifaddr(domianinterface) 显示网络接口地址
domif-getlink(domianinterface) 显示虚拟接口的链接状态
domifstat(domianinterface) 显示网卡统计信息
vcpuinfo(domian) 显示cpu的信息
vcpucount (domian)显示 vcpu个数
cpu-stats (domian) 显示虚拟机的cpu统计信息
domdisplay (domian)显示地址和显卡
vncdisplay(domian) 显示虚拟机的vnc 信息
ttyconsole (domian) 显示设备用的终端
domjobinfo (domian) 显示虚拟机的任务
domjobabort(domian) 终止虚拟机活动的任务
memtune(domian) 获取或设置虚拟机内存参数
blkdeviotune(domian) 获取或设置虚拟机的块设备IO参数
blkiotune(domian) 获取或设置虚拟机的磁盘参数
domiftune(domian) 获取或设置虚拟机的虚拟接口参数
metadata(domian) 获取或设置虚拟机的metadata
schedinfo(domian) 获取或设置虚拟机的调度信息
管理虚拟机
reset(domian)reset虚拟机
reboot(domian) 重启虚拟机
start(name or id) 开启虚拟机
shutdown(domian) 关闭虚拟机(soft shutdown)
destroy(domain) 销毁虚拟机(Hard poweroff a physical machine)
suspend (domian) 挂起虚拟机
resume(domian) 回复虚拟机的suspend状态
dompmsuspend( ) 挂起虚拟机(电源功能)
dompmwakeup() 回复虚拟机的suspend状态(电源功能)
save()保存虚拟机状态到文件中
restore()从保存状态的文件还原虚拟机
managedsave(domian)托管保存虚拟机状态
managedsave-remove(domian) 移除托管保存虚拟机状态
managedsave-edit(domian)编辑托管保存状态的XML文件
managedsave-dumpxml(domian)以XML文件格式显示托管保存状态文件
managedsave-define(domianxml)用托管保存状态文件替换与之相关联的虚拟机的XML文件
autostart (domain):标示自动启动虚拟机
screenshot (domian) 虚拟机截屏
修改虚拟机配置
set-user-password(domianuser password)设置虚拟机用户密码
domrename(domiannew-name) 重新命名虚拟机
setvcpus(domian count)设置虚拟机的虚拟cpu个数
setmaxmen(domian)设置虚拟机的最大内存
setmen(domian) size 设置虚拟机的内存
vcpupin(domian)绑定虚拟机的vcpu与物理CPU
emulatorpin(domian)绑定虚拟机的仿真器与物理CPU
edit (domian) 编辑虚拟机的配置文件
domif-setlink set link state of a virtual interface
虚拟机文件系统
domfsfreeze Freeze domain's mounted filesystems.
domfsthaw Thaw domain's mounted filesystems.
domfsinfo Get information of domain's mounted filesystems.
domfstrim Invoke fstrim on domain's mounted filesystems.
虚拟机迁移
migrate migrate domain to another host
migrate-setmaxdowntime set maximum tolerable downtime
migrate-getmaxdowntime get maximum tolerable downtime
migrate-compcache get/set compression cache size
migrate-setspeed Set the maximum migration bandwidth
migrate-getspeed Get the maximum migration bandwidth
migrate-postcopy Switch running migration from pre-copy to post-copy
虚拟机 attach 和 detach
attach-device attach device from an XML file
attach-disk attach disk device
attach-interface attach network interface
detach-device detach device from an XML file
detach-device-alias detach device from an alias
detach-disk detach disk device
detach-interface detach network interface
update-device update device from an XML file
虚拟机 image
save-image-define redefine the XML for a domain's saved state file
save-image-dumpxml saved state domain information in XML
save-image-edit edit XML for a domain's saved state file
虚拟机 block
blockcommit Start a block commit operation.
blockcopy Start a block copy operation.
blockjob Manage active block operations
blockpull Populate a disk from its backing image.
blockresize Resize block device of domain.
virtual network 命令
net-list 显示网络
net-info()显示网络信息
net-uuid ()显示网络的id
net-name()显示网络的名字
net-dumpxml() 以XML形式显示网络信息
net-dhcp-leases()显示 dhcp 租约信息
net-define () 从XML文件定义网卡
net-undefine () 取消定义的网卡
net-create () 从XML文件创建网卡
net-edit() 编辑网卡信息
net-update( ) 更新网卡配置
net-autostart () 自动启动网卡
net-start ()开启网卡
net-destory ( ) 摧毁(停止)网卡
interface 命令
iface-list 列出所有的接口
iface-name (mac) 根据mac得到名字
iface-mac(interface) 根据名字得到mac
iface-dumpxml (interface)显示接口的信息
iface-define(file)从XML文件定义接口
iface-undefine(interface) 取消定义的接口
iface-edit(interface) 编辑接口
iface-start(interface)开启接口 (enable it / "if-up")
iface-destroy(interface) 摧毁(停止)接口(disable it / "if-down")
iface-bridge 创建 bridge 设备并将现有网络设备连接到它
iface-unbriged 解绑定网桥
iface-begin(interface)创建当前接口设置的快照,可以稍后提交(iface-commit)或恢复(iface-rollback)
iface-commit (interface)提交自 iface-begin 和 iface-rollbak以来所做的更改
iface-rollbak (interface)回滚到通过iface-begin创建的先前保存的配置
storage pool 命令
pool-list 的列表
pool-info 池的信息
pool-name(id)根据id得到name
pool-id(name)根据name得到id
pool-uuid (pool) 返回一个池的uuid
pool-define(file)定义但是不开启
pool-create(file)根据文件创建池
pool-build(pool)建造一个池
pool-start(poop)开启池
pool-destory(pool)销毁池,以后能回复
pool-delete(pool)删除池,以后不能恢复
pool-auto (pool)标记池自动启动
pool-dumpxml(pool)查看池的定义文件
pool-edit(pool)编辑池的定义文件
volume 命令
vol-list(pool)列出卷
vol-info(pool)卷的信息
vol-name(path)得到卷的名字
vol-path returns the volume path for a given volume name or key
vol-pool returns the storage pool for a given volume key or path
vol-create create a vol from an XML file
vol-create-as create a volume from a set of args
vol-create-from create a vol, using another volume as input
vol-delete()卷的删除
vol-upload(pool) upload file contents to a volume
vol-download download volume contents to a file
vol-resize resize a vol
vol-wipe wipe a vol
vol-clone clone a volume.
vol-dumpxml vol information in XML
vol-key returns the volume key for a given volume name or path
nwfilter 命令
nwfilter-define (file)根据文件生成一个网络过滤器
nwfilter-undefine(name) 删除网络过滤
nwfilter-list 列出来网络过滤
nwfilter-dumpxml(file)生成一个网络过滤的文件
nwfilter-edit(name) 编辑一个网络过滤器
动手实践
创建虚拟机
- 准备虚拟机配置文件,复制一份 cirros.xml并命名为cirros_instance.xml
bash [root@geekspeng ~]# cd /etc/libvirt/qemu [root@geekspeng qemu]# ls autostart cirros.xml networks [root@geekspeng qemu]# cp cirros.xml cirros_instance.xml [root@geekspeng qemu]# ls autostart cirros_instance.xml cirros.xml networks [root@geekspeng qemu]#
- 修改 cirros_instance.xml 中的 name 为 cirros_instance,并删掉uuid
bash [root@geekspeng qemu]# vim cirros_instance.xml
- 创建虚拟机的第一种方式(先定义在启动)
- 定义一个虚拟机
bash [root@geekspeng qemu]# virsh define cirros_instance.xml Domain cirros_instance defined from cirros_instance.xml [root@geekspeng qemu]# virsh list --all Id Name State ---------------------------------------------------- 5 cirros running - cirros_instance shut off
可以看到此时虚拟机 cirros_instance 处于关机状态 - 启动虚拟机
bash [root@geekspeng qemu]# virsh start cirros_instance Domain cirros_instance started[root@geekspeng qemu]# virsh list --all Id Name State ---------------------------------------------------- 5 cirros running 6 cirros_instance running
可以看到此时虚拟机 cirros_instance 处于运行状态 创建虚拟机的第二种方式(直接启动)
[root@geekspeng qemu]# virsh list --all Id Name State ---------------------------------------------------- 5 cirros running[root@geekspeng qemu]# virsh create cirros_instance.xml Domain cirros_instance created from cirros_instance.xml[root@geekspeng qemu]# virsh list --all Id Name State ---------------------------------------------------- 5 cirros running 7 cirros_instance running
可以看到创建成功后,虚拟机 cirros_instance 直接处于运行状态
查看虚拟机
列出所有的虚拟机
[root@geekspeng qemu]# virsh list --all Id Name State ---------------------------------------------------- 5 cirros running 7 cirros_instance running
列出活动状态的虚拟机(将cirros 虚拟机关机)
[root@geekspeng qemu]# virsh shutdown cirros Domain cirros is being shutdown[root@geekspeng qemu]# virsh list --all Id Name State ---------------------------------------------------- 7 cirros_instance running - cirros shut off[root@geekspeng qemu]# virsh list Id Name State ---------------------------------------------------- 7 cirros_instance running
显示虚拟机信息
[root@geekspeng qemu]# virsh dominfo cirros_instance Id: 7 Name: cirros_instance UUID: 734c231f-0cea-497b-8a24-33368f1c10f5 OS Type: hvm State: running CPU(s): 1 CPU time: 223.5s Max memory: 102400 KiB Used memory: 102400 KiB Persistent: no Autostart: disable Managed save: no Security model: none Security DOI: 0
显示虚拟机的内存统计信息
[root@geekspeng qemu]# virsh dommemstat cirros_instance actual 102400 rss 108380
显示虚拟机的 cpu信息
[root@geekspeng qemu]# virsh vcpucount cirros maximum config 1 maximum live 1 current config 1 current live 1 [root@geekspeng qemu]# virsh vcpuinfo cirros_instance VCPU: 0 CPU: 0 State: running CPU time: 219.5s CPU Affinity: y
上面显示的是VCPU,CPU显示的是编号而不是个数,CPU Affinity为 y 显示 VCPU0绑定到CPU0
显示虚拟机的磁盘
[root@geekspeng qemu]# virsh domblklist cirros_instance Target Source ------------------------------------------------ hda /var/lib/libvirt/images/cirros-0.3.4-x86_64-disk.img[root@geekspeng qemu]# virsh domblkinfo cirros_instance hda Capacity: 41126400 Allocation: 14602240 Physical: 14614528
显示虚拟机的网卡接口
[root@geekspeng qemu]# virsh domiflist cirros_instance Interface Type Source Model MAC ------------------------------------------------------- vnet1 network default rtl8139 52:54:00:31:e9:4d[root@geekspeng qemu]# virsh domif-getlink cirros_instance vnet1 vnet1 up
查看虚拟机的 xml 配置文件
[root@geekspeng qemu]# virsh dumpxml cirros_instance <domain type='kvm' id='7'> <name>cirros_instance</name> <uuid>734c231f-0cea-497b-8a24-33368f1c10f5</uuid> <memory unit='KiB'>102400</memory> <currentMemory unit='KiB'>102400</currentMemory> <vcpu placement='static'>1</vcpu> <resource> <partition>/machine</partition> </resource> <os> <type arch='x86_64' machine='pc-i440fx-rhel7.0.0'>hvm</type> <boot dev='hd'/> </os> <features> <acpi/> <apic/> </features> <cpu mode='custom' match='exact' check='full'> <model fallback='forbid'>SandyBridge</model> <feature policy='require' name='hypervisor'/> <feature policy='disable' name='xsaveopt'/> </cpu> <clock offset='utc'> <timer name='rtc' tickpolicy='catchup'/> <timer name='pit' tickpolicy='delay'/> <timer name='hpet' present='no'/> </clock> <on_poweroff>destroy</on_poweroff> <on_reboot>restart</on_reboot> <on_crash>destroy</on_crash> <pm> <suspend-to-mem enabled='no'/> <suspend-to-disk enabled='no'/> </pm> <devices> <emulator>/usr/libexec/qemu-kvm</emulator> <disk type='file' device='disk'> <driver name='qemu' type='qcow2'/> <source file='/var/lib/libvirt/images/cirros-0.3.4-x86_64-disk.img'/> <backingStore/> <target dev='hda' bus='ide'/> <alias name='ide0-0-0'/> <address type='drive' controller='0' bus='0' target='0' unit='0'/> </disk> <controller type='usb' index='0' model='ich9-ehci1'> <alias name='usb'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x7'/> </controller> <controller type='usb' index='0' model='ich9-uhci1'> <alias name='usb'/> <master startport='0'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0' multifunction='on'/> </controller> <controller type='usb' index='0' model='ich9-uhci2'> <alias name='usb'/> <master startport='2'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x1'/> </controller> <controller type='usb' index='0' model='ich9-uhci3'> <alias name='usb'/> <master startport='4'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x2'/> </controller> <controller type='pci' index='0' model='pci-root'> <alias name='pci.0'/> </controller> <controller type='ide' index='0'> <alias name='ide'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/> </controller> <controller type='virtio-serial' index='0'> <alias name='virtio-serial0'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/> </controller> <interface type='network'> <mac address='52:54:00:31:e9:4d'/> <source network='default' bridge='virbr0'/> <target dev='vnet1'/> <model type='rtl8139'/> <alias name='net0'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> </interface> <serial type='pty'> <source path='/dev/pts/4'/> <target type='isa-serial' port='0'> <model name='isa-serial'/> </target> <alias name='serial0'/> </serial> <console type='pty' tty='/dev/pts/4'> <source path='/dev/pts/4'/> <target type='serial' port='0'/> <alias name='serial0'/> </console> <channel type='spicevmc'> <target type='virtio' name='com.redhat.spice.0' state='disconnected'/> <alias name='channel0'/> <address type='virtio-serial' controller='0' bus='0' port='1'/> </channel> <input type='mouse' bus='ps2'> <alias name='input0'/> </input> <input type='keyboard' bus='ps2'> <alias name='input1'/> </input> <graphics type='spice' port='5901' autoport='yes' listen='127.0.0.1'> <listen type='address' address='127.0.0.1'/> <image compression='off'/> </graphics> <sound model='ich6'> <alias name='sound0'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/> </sound> <video> <model type='qxl' ram='65536' vram='65536' vgamem='16384' heads='1' primary='yes'/> <alias name='video0'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/> </video> <redirdev bus='usb' type='spicevmc'> <alias name='redir0'/> <address type='usb' bus='0' port='1'/> </redirdev> <redirdev bus='usb' type='spicevmc'> <alias name='redir1'/> <address type='usb' bus='0' port='2'/> </redirdev> <memballoon model='virtio'> <alias name='balloon0'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/> </memballoon> </devices> <seclabel type='dynamic' model='dac' relabel='yes'> <label>+107:+107</label> <imagelabel>+107:+107</imagelabel> </seclabel> </domain>
连接虚拟机
通过控制窗口登录虚拟机(ctrl + ] 退出登录)
[root@geekspeng qemu]# virsh console cirros_instance Connected to domain cirros_instance Escape character is ^]login as 'cirros' user. default password: 'cubswin:)'. use 'sudo' for root. cirros login:
通过 ssh 连接虚拟机
[root@geekspeng ~]# ssh cirros@192.168.122.157 cirros@192.168.122.157's password: $
远程连接虚拟机
[root@geekspeng ~]# virt-viewer -c qemu+ssh://10.0.0.200/system cirros
管理虚拟机
关闭虚拟机(shutodwn)
[root@geekspeng qemu]# virsh list --all Id Name State ---------------------------------------------------- 1 cirros running 3 cirros_instance running[root@geekspeng qemu]# virsh shutdown cirros Domain cirros is being shutdown[root@geekspeng qemu]# virsh list --all Id Name State ---------------------------------------------------- 3 cirros_instance running - cirros shut off
启动虚拟机(start)
[root@geekspeng qemu]# virsh list --all Id Name State ---------------------------------------------------- 3 cirros_instance running - cirros shut off[root@geekspeng qemu]# virsh start cirros Domain cirros started[root@geekspeng qemu]# virsh list --all Id Name State ---------------------------------------------------- 3 cirros_instance running 4 cirros running
挂起虚拟机(suspend )
[root@geekspeng qemu]# virsh list --all Id Name State ---------------------------------------------------- 3 cirros_instance running 4 cirros running[root@geekspeng qemu]# virsh suspend cirros Domain cirros suspended[root@geekspeng qemu]# virsh list --all Id Name State ---------------------------------------------------- 3 cirros_instance running 4 cirros paused
恢复虚拟机(resume)
[root@geekspeng qemu]# virsh list --all Id Name State ---------------------------------------------------- 3 cirros_instance running 4 cirros paused[root@geekspeng qemu]# virsh resume cirros Domain cirros resumed[root@geekspeng qemu]# virsh list --all Id Name State ---------------------------------------------------- 3 cirros_instance running 4 cirros running
保存虚拟机状态到文件中(save)
[root@geekspeng qemu]# virsh list --all Id Name State ---------------------------------------------------- 3 cirros_instance running 5 cirros running[root@geekspeng qemu]# virsh save cirros testDomain cirros saved to test[root@geekspeng qemu]# virsh list --all Id Name State ---------------------------------------------------- 3 cirros_instance running - cirros shut off
从保存状态的文件还原虚拟机(restore)
[root@geekspeng qemu]# virsh list --all Id Name State ---------------------------------------------------- 3 cirros_instance running - cirros shut off[root@geekspeng qemu]# virsh restore test Domain restored from test[root@geekspeng qemu]# virsh list --all Id Name State ---------------------------------------------------- 3 cirros_instance running 6 cirros running
重置虚拟机(reset )
[root@geekspeng qemu]# virsh reset cirros Domain cirros was reset
重启虚拟机(reboot)
[root@geekspeng qemu]# virsh reboot cirros Domain cirros is being rebooted
创建删除快照
[root@geekspeng dnsmasq]# virsh snapshot-create cirros Domain snapshot 1548304381 created[root@geekspeng dnsmasq]# virsh snapshot-revert cirros 1548304381[root@geekspeng dnsmasq]# virsh snapshot-list cirros Name Creation Time State ------------------------------------------------------------ 1548304381 2019-01-23 20:33:01 -0800 running[root@geekspeng dnsmasq]# virsh snapshot-delete cirros 1548304381 Domain snapshot 1548304381 deleted[root@geekspeng dnsmasq]# virsh snapshot-list cirros Name Creation Time State
冷迁移虚拟机(虚拟机需要关机)
源主机(10.0.0.200)
[root@geekspeng ~]# virsh list --all
Id Name State
----------------------------------------------------
- cirros shut off
- cirros_instance shut off
[root@geekspeng ~]# virsh migrate cirros --offline qemu+ssh://10.0.0.201/system --persistent
root@10.0.0.201's password:
[root@geekspeng ~]# virsh migrate cirros_instance --offline qemu+ssh://10.0.0.201/system --persistent
root@10.0.0.201's password: [root@geekspeng ~]# virsh list --all
Id Name State
----------------------------------------------------
- cirros shut off
- cirros_instance shut off
目标主机(10.0.0.201)
[root@geekspeng1 ~]# virsh list --all
Id Name State
----------------------------------------------------
- cirros shut off
- cirros_instance shut off
迁移完成后,虚拟机同时在源主机和目标主机存在
热迁移虚拟机(需要共享存储)
修改虚拟机配置
重新命名虚拟机(domrename)
[root@geekspeng qemu]# virsh shutdown cirros Domain cirros is being shutdown[root@geekspeng qemu]# virsh domrename cirros cirros1 Domain successfully renamed[root@geekspeng qemu]# virsh list --all Id Name State ---------------------------------------------------- 13 cirros_instance running - cirros1 shut off[root@geekspeng qemu]# virsh domrename cirros1 cirros Domain successfully renamed[root@geekspeng qemu]# virsh start cirros Domain cirros started[root@geekspeng qemu]# virsh list --all Id Name State ---------------------------------------------------- 13 cirros_instance running 14 cirros running
编辑虚拟机的配置文件(edit)
将vcpu 个数从1个改成两个 2
[root@geekspeng qemu]# virsh vcpucount cirros
maximum config 1
maximum live 1
current config 1
current live 1[root@geekspeng qemu]# virsh shutdown cirros
Domain cirros is being shutdown[root@geekspeng qemu]# virsh edit cirros
Domain cirros XML configuration edited.[root@geekspeng qemu]# virsh create /etc/libvirt/qemu/cirros.xml
Domain cirros created from /etc/libvirt/qemu/cirros.xml
[root@geekspeng qemu]# virsh vcpucount cirros
maximum config 2
maximum live 2
current config 2
current live 2
- 设置虚拟机的内存大小(setmaxmem,setmem)
bash [root@geekspeng qemu]# virsh shutdown cirros Domain cirros is being shutdown[root@geekspeng qemu]# virsh dominfo cirros | grep memory Max memory: 131072 KiB Used memory: 131072 KiB [root@geekspeng qemu]# virsh setmaxmem cirros 524288 # 需要关机[root@geekspeng qemu]# virsh dominfo cirros | grep memory Max memory: 524288 KiB Used memory: 131072 KiB[root@geekspeng qemu]# virsh start cirros Domain cirros started[root@geekspeng qemu]# virsh setmem cirros 524288 # 需要开机[root@geekspeng qemu]# virsh dominfo cirros | grep memory Max memory: 524288 KiB Used memory: 524288 KiB
- 设置虚拟机的vcpu个数(setvcpus)
bash [root@geekspeng ~]# virsh vcpucount cirros_instance maximum config 2 maximum live 2 current config 1 current live 1[root@geekspeng ~]# virsh setvcpus cirros_instance 2 --current [root@geekspeng ~]# virsh setvcpus cirros_instance 2 --config [root@geekspeng ~]# virsh vcpucount cirros_instance maximum config 2 maximum live 2 current config 2 current live 2
关闭或打开某个网口(domif-setlink)
[root@geekspeng qemu]# virsh domiflist cirros Interface Type Source Model MAC ------------------------------------------------------- vnet0 bridge br0 rtl8139 52:54:00:b9:bf:4f[root@geekspeng qemu]# virsh domif-setlink cirros vnet0 down Device updated successfully[root@geekspeng qemu]# virsh domif-getlink cirros vnet0 vnet0 down[root@geekspeng qemu]# virsh domif-setlink cirros vnet0 up Device updated successfully[root@geekspeng qemu]# virsh domif-getlink cirros vnet0 vnet0 up
挂载卸载硬盘
创建虚拟硬盘
[root@geekspeng ~]# virsh vol-create-as default cirros.qcow2 100M --format qcow2 Vol cirros.qcow2 created [root@geekspeng ~]# virsh vol-list default Name Path ------------------------------------------------------------------------------ cirros-0.3.4-x86_64-disk.img /var/lib/libvirt/images/cirros-0.3.4-x86_64-disk.img cirros.qcow2 /var/lib/libvirt/images/cirros.qcow2
挂载虚拟硬盘
[root@geekspeng ~]# virsh domblklist cirros Target Source ------------------------------------------------ vda /var/lib/libvirt/images/cirros-0.3.4-x86_64-disk.img [root@geekspeng ~]# virsh attach-disk cirros /var/lib/libvirt/images/cirros.qcow2 vdb Disk attached successfully[root@geekspeng ~]# virsh domblklist cirros Target Source ------------------------------------------------ vda /var/lib/libvirt/images/cirros-0.3.4-x86_64-disk.img vdb /var/lib/libvirt/images/cirros.qcow2
重启后仍然生效
卸载虚拟硬盘
[root@geekspeng ~]# virsh domblklist cirros Target Source ------------------------------------------------ vda /var/lib/libvirt/images/cirros-0.3.4-x86_64-disk.img vdb /var/lib/libvirt/images/cirros.qcow2[root@geekspeng ~]# virsh detach-disk cirros vdb Disk detached successfully[root@geekspeng ~]# virsh domblklist cirros Target Source ------------------------------------------------ vda /var/lib/libvirt/images/cirros-0.3.4-x86_64-disk.img
删除虚拟硬盘
[root@geekspeng ~]# virsh vol-list default Name Path ------------------------------------------------------------------------------ cirros-0.3.4-x86_64-disk.img /var/lib/libvirt/images/cirros-0.3.4-x86_64-disk.img cirros.qcow2 /var/lib/libvirt/images/cirros.qcow2 [root@geekspeng ~]# virsh vol-delete cirros.qcow2 --pool default Vol cirros.qcow2 deleted[root@geekspeng ~]# virsh vol-list default Name Path ------------------------------------------------------------------------------ cirros-0.3.4-x86_64-disk.img /var/lib/libvirt/images/cirros-0.3.4-x86_64-disk.img
挂载卸载网卡
临时挂载虚拟网卡,修改保存在内存中,重启就失效
[root@geekspeng dnsmasq]# virsh domiflist cirros
Interface Type Source Model MAC
-------------------------------------------------------
vnet1 network default virtio 52:54:00:f2:14:b0[root@geekspeng dnsmasq]# virsh attach-interface cirros network default --model virtioInterface attached successfully[root@geekspeng dnsmasq]# virsh domiflist cirros
Interface Type Source Model MAC
-------------------------------------------------------
vnet1 network default virtio 52:54:00:f2:14:b0
vnet2 network default virtio 52:54:00:12:9c:2b
虽然 virsh 看绑定了vnet2,但是虚拟机内部并没有增加一张网卡,手动增加并启动 永久挂载虚拟网卡,修改会保存到配置文件中(也可以直接修改配置文件)
[root@geekspeng dnsmasq]# virsh attach-interface cirros bridge br0 --model virtio --persistent --config
[root@geekspeng dnsmasq]# virsh dumpxml cirros >/etc/libvirt/qemu/cirros.xml
[root@geekspeng dnsmasq]# virsh define /etc/libvirt/qemu/cirros.xml
卸载虚拟网卡
[root@geekspeng dnsmasq]# virsh domiflist cirros
Interface Type Source Model MAC
-------------------------------------------------------
vnet1 network default virtio 52:54:00:f2:14:b0
vnet2 network default virtio 52:54:00:12:9c:2b[root@geekspeng dnsmasq]# virsh detach-interface cirros --type network --mac 52:54:00:12:9c:2b
Interface detached successfully[root@geekspeng dnsmasq]# virsh domiflist cirros
Interface Type Source Model MAC
-------------------------------------------------------
vnet1 network default virtio 52:54:00:f2:14:b0
删除虚拟机
[root@geekspeng ~]# virsh shutdown cirros_instance # 关机
Domain cirros_instance is being shutdown[root@geekspeng ~]# virsh list --all
Id Name State
----------------------------------------------------
23 cirros running
- cirros_instance shut off[root@geekspeng ~]# virsh undefine cirros_instance # 删除定义虚拟机的xml文件
Domain cirros_instance has been undefined[root@geekspeng ~]# virsh list --all
Id Name State
----------------------------------------------------
23 cirros running
遇到的问题
- virsh shutdown 不起作用
如果使用 Xen HVM or QEMU/KVM,需要安装 ACPI 并且启动 ACPI ,同时检查虚拟机的配置文件是否配置了 ACPI
# virsh dumpxml $your-vm-name | grep acpi
<features><acpi/></features>
如果 shutdown 还不起作用需要确定虚拟机此时已经完全启动起来,否则虽然virsh list 显示虚拟机是运行状态,但是还是无法执行virsh shutdown命令
- 如果我更改了正在运行的虚拟机的XML,那么更改是否会立即生效?
不会. 重新定义正在运行的虚拟机的XML不会更改任何内容,更改将在下一次VM启动后生效.。Libvirt 有一组命令用于对正在运行的虚拟机进行实时更改,这些命令具有不同的支持,具体取决于hypervisor,例如 virsh attach- *, virsh detach- *,virsh setmem,virsh setvcpus