virsh命令学习(一)

  • virsh命令学习(一)已关闭评论
  • 94 次浏览
  • A+
所属分类:linux技术
摘要

kvm主要的工具栈,从大的类别可以分为libvirt和qemu这2大类,其中libvirt中分为virtual machine manager和virsh ,virtual machine manager中的virt-manager是基于图形化界面的管理,其他的都是可以在命令直接使用命令来管理虚拟机,virsh是基于图形化界面的管理,2者都是通过libvirt连接至libvirtd进行管理;对于qemu来说 ,它管理虚拟机上直接调用kvm内核中模块的API进行管理


一:kvm工具栈

virsh命令学习(一)

kvm主要的工具栈,从大的类别可以分为libvirt和qemu这2大类,其中libvirt中分为virtual machine manager和virsh ,virtual machine manager中的virt-manager是基于图形化界面的管理,其他的都是可以在命令直接使用命令来管理虚拟机,virsh是基于图形化界面的管理,2者都是通过libvirt连接至libvirtd进行管理;对于qemu来说 ,它管理虚拟机上直接调用kvm内核中模块的API进行管理

二:virsh工具的使用说明

1、查看virsh命令帮助的信息

都是通过分组来进行管理的

[root@server /]# virsh  help 分组的命令:   Domain Management (help keyword 'domain'):     attach-device                  从一个XML文件附加装置     attach-disk                    附加磁盘设备     attach-interface               获得网络界面     autostart                      自动开始一个域     blkdeviotune                   设定或者查询块设备 I/O 调节参数。     blkiotune                      获取或者数值 blkio 参数     blockcommit                    启动块提交操作。     blockcopy                      启动块复制操作。     blockjob                       管理活跃块操作     blockpull                      使用其后端映像填充磁盘。     blockresize                    创新定义域块设备大小     change-media                   更改 CD 介质或者软盘驱动器     console                        连接到客户会话     cpu-stats                      显示域 cpu 统计数据     create                         从一个 XML 文件创建一个域     define                         从一个 XML 文件定义(但不开始)一个域     desc                           显示或者设定域描述或者标题     destroy                        销毁(停止)域     detach-device                  从一个 XML 文件分离设备     detach-device-alias            detach device from an alias     detach-disk                    分离磁盘设备     detach-interface               分离网络界面     domdisplay                     域显示连接 URI     domfsfreeze                    Freeze domain's mounted filesystems.     domfsthaw                      Thaw domain's mounted filesystems.     domfsinfo                      Get information of domain's mounted filesystems.     domfstrim                      在域挂载的文件系统中调用 fstrim。     domhostname                    输出域主机名     domid                          把一个域名或 UUID 转换为域 id     domif-setlink                  设定虚拟接口的链接状态     domiftune                      获取/设定虚拟接口参数     domjobabort                    忽略活跃域任务     domjobinfo                     域任务信息     domname                        将域 id 或 UUID 转换为域名     domrename                      rename a domain     dompmsuspend                   使用电源管理功能挂起域     dompmwakeup                    从 pmsuspended 状态唤醒域     domuuid                        把一个域名或 id 转换为域 UUID     domxml-from-native             将原始配置转换为域 XML     domxml-to-native               将域 XML 转换为原始配置     dump                           把一个域的内核 dump 到一个文件中以方便分析     dumpxml                        XML 中的域信息     edit                           编辑某个域的 XML 配置     event                          Domain Events     inject-nmi                     在虚拟机中输入 NMI     iothreadinfo                   view domain IOThreads     iothreadpin                    control domain IOThread affinity     iothreadadd                    add an IOThread to the guest domain     iothreaddel                    delete an IOThread from the guest domain     send-key                       向虚拟机发送序列号     send-process-signal            向进程发送信号     lxc-enter-namespace            LXC 虚拟机进入名称空间     managedsave                    管理域状态的保存     managedsave-remove             删除域的管理保存     managedsave-edit               edit XML for a domain's managed save state file     managedsave-dumpxml            Domain information of managed save state file in XML     managedsave-define             redefine the XML for a domain's managed save state file     memtune                        获取或者数值内存参数     perf                           Get or set perf event     metadata                       show or set domain's custom XML metadata     migrate                        将域迁移到另一个主机中     migrate-setmaxdowntime         设定最大可耐受故障时间     migrate-getmaxdowntime         get maximum tolerable downtime     migrate-compcache              获取/设定压缩缓存大小     migrate-setspeed               设定迁移带宽的最大值     migrate-getspeed               获取最长迁移带宽     migrate-postcopy               Switch running migration from pre-copy to post-copy     numatune                       获取或者数值 numa 参数     qemu-attach                    QEMU 附加     qemu-monitor-command           QEMU 监控程序命令     qemu-monitor-event             QEMU Monitor Events     qemu-agent-command             QEMU 虚拟机代理命令     reboot                         重新启动一个域     reset                          重新设定域     restore                        从一个存在一个文件中的状态恢复一个域     resume                         重新恢复一个域     save                           把一个域的状态保存到一个文件     save-image-define              为域的保存状态文件重新定义 XML     save-image-dumpxml             在 XML 中保存状态域信息     save-image-edit                为域保存状态文件编辑 XML     schedinfo                      显示/设置日程安排变量     screenshot                     提取当前域控制台快照并保存到文件中     set-lifecycle-action           change lifecycle actions     set-user-password              set the user password inside the domain     setmaxmem                      改变最大内存限制值     setmem                         改变内存的分配     setvcpus                       改变虚拟 CPU 的号     shutdown                       关闭一个域     start                          开始一个(以前定义的)非活跃的域     suspend                        挂起一个域     ttyconsole                     tty 控制台     undefine                       取消定义一个域     update-device                  从 XML 文件中关系设备     vcpucount                      域 vcpu 计数     vcpuinfo                       详细的域 vcpu 信息     vcpupin                        控制或者查询域 vcpu 亲和性     emulatorpin                    控制火车查询域模拟器亲和性     vncdisplay                     vnc 显示     guestvcpus                     query or modify state of vcpu in the guest (via agent)     setvcpu                        attach/detach vcpu or groups of threads     domblkthreshold                set the threshold for block-threshold event for a given block device or it's backing chain element   Domain Monitoring (help keyword 'monitor'):     domblkerror                    在块设备中显示错误     domblkinfo                     域块设备大小信息     domblklist                     列出所有域块     domblkstat                     获得域设备块状态     domcontrol                     域控制接口状态     domif-getlink                  获取虚拟接口链接状态     domifaddr                      Get network interfaces' addresses for a running domain     domiflist                      列出所有域虚拟接口     domifstat                      获得域网络接口状态     dominfo                        域信息     dommemstat                     获取域的内存统计     domstate                       域状态     domstats                       get statistics about one or multiple domains     domtime                        domain time     list                           列出域   Host and Hypervisor (help keyword 'host'):     allocpages                     Manipulate pages pool size     capabilities                   性能     cpu-baseline                   计算基线 CPU     cpu-compare                    使用 XML 文件中描述的 CPU 与主机 CPU 进行对比     cpu-models                     CPU models     domcapabilities                domain capabilities     freecell                       NUMA可用内存     freepages                      NUMA free pages     hostname                       打印管理程序主机名     hypervisor-cpu-baseline        compute baseline CPU usable by a specific hypervisor     hypervisor-cpu-compare         compare a CPU with the CPU created by a hypervisor on the host     maxvcpus                       连接 vcpu 最大值     node-memory-tune               获取或者设定节点内存参数     nodecpumap                     节点 cpu 映射     nodecpustats                   输出节点的 cpu 状统计数据。     nodeinfo                       节点信息     nodememstats                   输出节点的内存状统计数据。     nodesuspend                    在给定时间段挂起主机节点     sysinfo                        输出 hypervisor sysinfo     uri                            打印管理程序典型的URI     version                        显示版本   Interface (help keyword 'interface'):     iface-begin                    生成当前接口设置快照,可在今后用于提交 (iface-commit) 或者恢复 (iface-rollback)     iface-bridge                   生成桥接设备并为其附加一个现有网络设备     iface-commit                   提交 iface-begin 后的更改并释放恢复点     iface-define                   define an inactive persistent physical host interface or modify an existing persistent one from an XML file     iface-destroy                  删除物理主机接口(启用它请执行 "if-down")     iface-dumpxml                  XML 中的接口信息     iface-edit                     为物理主机界面编辑 XML 配置     iface-list                     物理主机接口列表     iface-mac                      将接口名称转换为接口 MAC 地址     iface-name                     将接口 MAC 地址转换为接口名称     iface-rollback                 恢复到之前保存的使用 iface-begin 生成的更改     iface-start                    启动物理主机接口(启用它请执行 "if-up")     iface-unbridge                 分离其辅助设备后取消定义桥接设备     iface-undefine                 取消定义物理主机接口(从配置中删除)   Network Filter (help keyword 'filter'):     nwfilter-define                使用 XML 文件定义或者更新网络过滤器     nwfilter-dumpxml               XML 中的网络过滤器信息     nwfilter-edit                  为网络过滤器编辑 XML 配置     nwfilter-list                  列出网络过滤器     nwfilter-undefine              取消定义网络过滤器     nwfilter-binding-create        create a network filter binding from an XML file     nwfilter-binding-delete        delete a network filter binding     nwfilter-binding-dumpxml       XML 中的网络过滤器信息     nwfilter-binding-list          list network filter bindings   Networking (help keyword 'network'):     net-autostart                  自动开始网络     net-create                     从一个 XML 文件创建一个网络     net-define                     define an inactive persistent virtual network or modify an existing persistent one from an XML file     net-destroy                    销毁(停止)网络     net-dhcp-leases                print lease info for a given network     net-dumpxml                    XML 中的网络信息     net-edit                       为网络编辑 XML 配置     net-event                      Network Events     net-info                       网络信息     net-list                       列出网络     net-name                       把一个网络UUID 转换为网络名     net-start                      开始一个(以前定义的)不活跃的网络     net-undefine                   undefine a persistent network     net-update                     更新现有网络配置的部分     net-uuid                       把一个网络名转换为网络UUID   Node Device (help keyword 'nodedev'):     nodedev-create                 根据节点中的 XML 文件定义生成设备     nodedev-destroy                销毁(停止)节点中的设备     nodedev-detach                 将节点设备与其设备驱动程序分离     nodedev-dumpxml                XML 中的节点设备详情     nodedev-list                   这台主机中中的枚举设备     nodedev-reattach               重新将节点设备附加到他的设备驱动程序中     nodedev-reset                  重置节点设备     nodedev-event                  Node Device Events   Secret (help keyword 'secret'):     secret-define                  定义或者修改 XML 中的 secret     secret-dumpxml                 XML 中的 secret 属性     secret-event                   Secret Events     secret-get-value               secret 值输出     secret-list                    列出 secret     secret-set-value               设定 secret 值     secret-undefine                取消定义 secret   Snapshot (help keyword 'snapshot'):     snapshot-create                使用 XML 生成快照     snapshot-create-as             使用一组参数生成快照     snapshot-current               获取或者设定当前快照     snapshot-delete                删除域快照     snapshot-dumpxml               为域快照转储 XML     snapshot-edit                  编辑快照 XML     snapshot-info                  快照信息     snapshot-list                  为域列出快照     snapshot-parent                获取快照的上级快照名称     snapshot-revert                将域转换为快照   Storage Pool (help keyword 'pool'):     find-storage-pool-sources-as   找到潜在存储池源     find-storage-pool-sources      发现潜在存储池源     pool-autostart                 自动启动某个池     pool-build                     建立池     pool-create-as                 从一组变量中创建一个池     pool-create                    从一个 XML 文件中创建一个池     pool-define-as                 在一组变量中定义池     pool-define                    define an inactive persistent storage pool or modify an existing persistent one from an XML file     pool-delete                    删除池     pool-destroy                   销毁(删除)池     pool-dumpxml                   XML 中的池信息     pool-edit                      为存储池编辑 XML 配置     pool-info                      存储池信息     pool-list                      列出池     pool-name                      将池 UUID 转换为池名称     pool-refresh                   刷新池     pool-start                     启动一个(以前定义的)非活跃的池     pool-undefine                  取消定义一个不活跃的池     pool-uuid                      把一个池名称转换为池 UUID     pool-event                     Storage Pool Events   Storage Volume (help keyword 'volume'):     vol-clone                      克隆卷。     vol-create-as                  从一组变量中创建卷     vol-create                     从一个 XML 文件创建一个卷     vol-create-from                生成卷,使用另一个卷作为输入。     vol-delete                     删除卷     vol-download                   将卷内容下载到文件中     vol-dumpxml                    XML 中的卷信息     vol-info                       存储卷信息     vol-key                        为给定密钥或者路径返回卷密钥     vol-list                       列出卷     vol-name                       为给定密钥或者路径返回卷名     vol-path                       为给定密钥或者路径返回卷路径     vol-pool                       为给定密钥或者路径返回存储池     vol-resize                     创新定义卷大小     vol-upload                     将文件内容上传到卷中     vol-wipe                       擦除卷   Virsh itself (help keyword 'virsh'):     cd                             更改当前目录     echo                           echo 参数     exit                           退出这个非交互式终端     help                           打印帮助     pwd                            输出当前目录     quit                           退出这个非交互式终端     connect                        连接(重新连接)到 hypervisor 

  

分为domain management(域管理),domain monitoring(域监控),Host and Hypervisor(主机及虚拟化),interface(网卡接口),network filter(网络防火墙),networking(网络),node device(节点设备驱动),secret,snapshot(快照),storage pool(存储池或存储策略),storage volume(存储卷),virsh itself(virsh shell自身相关的组),查看特定的帮助信息,可以使用,virsh help +组名,比如查看storage volume组相关的命令,可以使用virsh help volume来进行查看

2:命令模式创建虚拟机

错误的示范,先创建一个新的磁盘文件,然后再来创建一个虚拟机,发现启动不了,原因就是这个在创建虚拟机的时候,没有指定这个镜像文件在哪里,因此启动不来

方法:在创建磁盘文件的时候,需要将系统(镜像)装进磁盘里面才行,否则创建不出来

正确的示范,直接拷贝已有的虚拟机的配置文件,和已有的磁盘文件,修改一些小的参数即可

操作:

#复制已有的配置文件 [root@server qemu]# ls c7-1.xml  networks [root@server qemu]# cp c7-1.xml c7-2.xml [root@server images]# pwd /var/lib/libvirt/images [root@server images]# cp c7-1.qcow2 c7-2.qcow2 [root@server images]# ls c7-1.qcow2  c7-2.qcow2  #修改虚拟机的配置文件 虚拟机的名字,uuid,磁盘的存放的路径,mac地址(网卡的地址,物理地址)  <name>c7-2</name>   <uuid>4743040a-6a6c-4259-b29d-e5d3798667e4</uuid> <source file='/var/lib/libvirt/images/c7-2.qcow2'/>  <mac address='52:54:00:32:16:db'/>  #基于xml配置文件创建虚拟机 [root@server qemu]# virsh  create c7-2.xml  域 c7-2 被创建(从 c7-2.xml)  [root@server qemu]# virsh  list --all  Id    名称                         状态 ----------------------------------------------------  2     c7-1                           running  3     c7-2                           running  

这种创建,不需要再次进行安装的流程,创建后,就能直接使用,并且使用的都是一个磁盘,原来的数据文件也被保留在上面

创建一个虚拟磁盘的命令为:

查看虚拟磁盘的命令:

 

virsh-define:从指定的配置文件中创建虚拟机,但是不运行,create是创建并运行

 

3:连接虚拟机(virsh console)

从宿主机连接到指定虚拟的串行控制台

[root@server qemu]# virsh  help console   NAME     console - 连接到客户会话    SYNOPSIS     console <domain> [--devname <string>] [--force] [--safe]    DESCRIPTION     连接客户真实串行控制台    OPTIONS     [--domain] <string>  domain name, id or uuid     --devname <string>  字符设备名称     --force          强制控制台连接(断开已连接的会话)     --safe           只有在支持安全控制台处理时方可连接 

直接进行连接的话,会一直处于卡死的状态,因为centos7上默认没有允许ttySO

在宿主机用ssh连接至虚拟机(当然,svn或者使用virt-manager也行),修改内核的参数,然后重启虚拟机

[root@server qemu]# ssh 172.25.250.130 root@172.25.250.130's password:  Last login: Sun Apr 28 10:06:37 2024 from 172.25.250.10 [root@localhost ~]# grep "ttyS0" /etc/securetty   //这个文件里面定义一些能被root用户直接登录的终端 ttyS0 [root@localhost ~]# grubby --update-kernel=ALL --args="console=ttyS0" [root@localhost ~]# reboot ##进行连接的操作 [root@server qemu]# virsh console c7-1  连接到域 c7-1 换码符为 ^]   CentOS Linux 7 (Core) Kernel 3.10.0-862.el7.x86_64 on an x86_64  localhost login: root Password:  Last login: Sun Apr 28 10:10:10 from 172.25.250.10 [root@localhost ~]# ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000     link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00     inet 127.0.0.1/8 scope host lo        valid_lft forever preferred_lft forever     inet6 ::1/128 scope host         valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000     link/ether 52:54:00:32:16:da brd ff:ff:ff:ff:ff:ff  

宿主机连上虚拟机后,退出控制台使用ctrl+] 

4:virsh常见的操作

1、virsh shutdown(关闭虚拟机)

[root@server qemu]# virsh  help shutdown    NAME     shutdown - 关闭一个域    SYNOPSIS     shutdown <domain> [--mode <string>]    DESCRIPTION     在目标域中执行关闭行为。    OPTIONS     [--domain] <string>  domain name, id or uuid     --mode <string>  shutdown mode: acpi|agent|initctl|signal|paravirt [root@server qemu]# virsh shutdown c7-1  域 c7-1 被关闭  [root@server qemu]# virsh  list --all  Id    名称                         状态 ----------------------------------------------------  3     c7-2                           running  -     c7-1                           关闭 

 

有的时候使用shutdown关机的时候,关不掉,需要使用destory来进行强制的关机

当然,如果对于已经关机的虚拟机,使用destory的话,会将这个虚拟机删除掉,直接使用destory的话,会进行强制关机的操作

[root@server qemu]# virsh  shutdown  c7-2  域 c7-2 被关闭  [root@server qemu]# virsh  list  Id    名称                         状态 ----------------------------------------------------  3     c7-2                           running  virsh destory c7-2 

2、启动非活动的虚拟机(virsh start)

[root@server qemu]# virsh  start c7-1  域 c7-1 已开始  [root@server qemu]# virsh list  Id    名称                         状态 ----------------------------------------------------  4     c7-1                           running 

3、挂起和恢复挂起的(virsh suspend 和virsh resume)

挂起就是把指定的虚拟机挂起,就是把运行状态的虚拟机暂停,并把当前运行状态保存到内存,外部的客户端对它访问也不会响应,如果此时宿主机断电,那么之前保存在内存中运行状态数据也会随之丢失

[root@server qemu]# virsh  suspend c7-1  域 c7-1 被挂起  [root@server qemu]# virsh  list  Id    名称                         状态 ----------------------------------------------------  5     c7-1                           暂停  [root@server qemu]# virsh resume  c7-1  域 c7-1 被重新恢复  [root@server qemu]# virsh  list  Id    名称                         状态 ----------------------------------------------------  5     c7-1                           running 

4、基于磁盘的挂起和取消(virsh save和virsh restore) 

virsh save:把指定的虚拟机运行状态的信息保存到指定的文件,vmware的挂起操作是把运行状态保存到磁盘,宿主机掉电,它不会丢失数据

virsh restore:从指定文件恢复虚拟机(该文件是使用save命令保存下来的虚拟机运行状态信息文件)

[root@server qemu]# virsh help save   NAME     save - 把一个域的状态保存到一个文件    SYNOPSIS     save <domain> <file> [--bypass-cache] [--xml <string>] [--running] [--paused] [--verbose]    DESCRIPTION     保存运行中的域 的 RAM 状态    OPTIONS     [--domain] <string>  domain name, id or uuid     [--file] <string>  数据存到什么地方     --bypass-cache   保存时避免文件系统缓存     --xml <string>   包含为目标更新的 XML 的文件名     --running        设定要在还原中运行的域     --paused         设定要在还原中暂停的域     --verbose        显示保存进程  [root@server qemu]# virsh save c7-1  /opt/c2.bin --paused   保存到 c7-1 的域 /opt/c2.bin   [root@server qemu]# ls /opt/ c2.bin  rh  [root@server qemu]# virsh list --all  Id    名称                         状态 ----------------------------------------------------  -     c7-1                           关闭    #恢复 [root@server qemu]# virsh  restore  /opt/c2.bin   从 /opt/c2.bin 恢复域  [root@server qemu]# virsh  list   Id    名称                         状态 ----------------------------------------------------  6     c7-1                           暂停  

恢复C7-1变成了暂停的状态,这是因为在保存状态信息时,指定了恢复的状态,当然我们也可以在恢复的时候使用选项来进行指定虚拟机的状态

[root@server qemu]# virsh  restore /opt/c2.bin  --running  从 /opt/c2.bin 恢复域  [root@server qemu]# virsh  list  Id    名称                         状态 ----------------------------------------------------  7     c7-1                           running 

5、重启虚拟机(virsh reboot,virsh reset)

virsh reboot重启虚拟机

virsh reset:对指定的虚拟机执行强制重启的操作

[root@server qemu]# virsh  reboot  c7-1  域 c7-1 正在被重新启动  您在 /var/spool/mail/root 中有邮件  [root@server mail]# virsh  reset c7-1  重新设定域 c7-1

6、查看虚拟机详细信息(virsh dumpxml)

[root@server mail]# virsh dumpxml c7-1  <domain type='kvm' id='7'>   <name>c7-1</name>   <uuid>4743040a-6a6c-4259-b29d-e5d3798667e3</uuid>   <memory unit='KiB'>1048576</memory>   <currentMemory unit='KiB'>1048576</currentMemory>   <vcpu placement='static'>1</vcpu>   <resource>

7、删除虚拟机(virsh undefine)  

删除的时候,配置文件都会被删除掉,如果还要删除存储卷的话,需要加上选项即可

现将虚拟机进行关机的操作,然后取消定义,即可删除虚拟机,网络的配置文件也一样

[root@server mail]# virsh help undefine   NAME     undefine - 取消定义一个域    SYNOPSIS     undefine <domain> [--managed-save] [--storage <string>] [--remove-all-storage] [--delete-snapshots] [--wipe-storage] [--snapshots-metadata] [--nvram] [--keep-nvram]    DESCRIPTION     取消定义一个域或者将持久转换为临时。    OPTIONS     [--domain] <string>  domain name, id or uuid     --managed-save   删除域管理的状态文件     --storage <string>  删除关联的存储卷(用逗号分开的目标或者源路径列表)(查看 domblklist)     --remove-all-storage  删除关联的存储卷(小心使用)     --delete-snapshots  delete snapshots associated with volume(s), requires --remove-all-storage (must be supported by storage driver)     --wipe-storage   擦除删除卷中的数据     --snapshots-metadata  如果不活跃则删除所有域快照元数据     --nvram          remove nvram file, if inactive     --keep-nvram     keep nvram file, if inactive   [root@server qemu]# virsh  shutdown  c7-1  域 c7-1 被关闭 [root@server qemu]# ls c7-1.xml  c7-2.xml  networks [root@server qemu]# ls /var/lib/libvirt/images/ c7-1.qcow2  c7-2.qcow2 [root@server qemu]# virsh undefine  c7-1  域 c7-1 已经被取消定义  [root@server qemu]# ls c7-2.xml  networks [root@server qemu]# ls /var/lib/libvirt/images/ c7-1.qcow2  c7-2.qcow2 [root@server qemu]# virsh list --all  Id    名称                         状态 ---------------------------------------------------- 

8、设置虚拟机开机自启(virsh autostart)

[root@server qemu]# virsh  help autostart   NAME     autostart - 自动开始一个域    SYNOPSIS     autostart <domain> [--disable]    DESCRIPTION     设置一个域在启动时自动开始.    OPTIONS     [--domain] <string>  domain name, id or uuid     --disable        禁止自动启动