在上一篇博客中,我们了解了KVM基础架构和部署以及图形管理工具virt-manager安装虚拟机的过程,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/13499801.html;今天我们来聊一下kvm的命令行工具virsh;virsh工具功能非常丰富,它可以全生命周期的管理kvm;比如创建虚拟机,查看虚拟机,动态热插拔硬盘,给虚拟机做快照,迁移、启动、停止、挂起、暂停、删除虚拟机等等操作;

  一、KVM工具栈

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

  二、virsh工具的使用说明

  1、查看virsh命令帮助信息

  1. [root@node1 ~]# virsh help
  2. 分组的命令:
  3.  
  4. Domain Management (help keyword 'domain'):
  5. attach-device 从一个XML文件附加装置
  6. attach-disk 附加磁盘设备
  7. attach-interface 获得网络界面
  8. autostart 自动开始一个域
  9. blkdeviotune 设定或者查询块设备 I/O 调节参数。
  10. blkiotune 获取或者数值 blkio 参数
  11. blockcommit 启动块提交操作。
  12. blockcopy 启动块复制操作。
  13. blockjob 管理活跃块操作
  14. blockpull 使用其后端映像填充磁盘。
  15. blockresize 创新定义域块设备大小
  16. change-media 更改 CD 介质或者软盘驱动器
  17. console 连接到客户会话
  18. cpu-stats 显示域 cpu 统计数据
  19. create 从一个 XML 文件创建一个域
  20. define 从一个 XML 文件定义(但不开始)一个域
  21. desc 显示或者设定域描述或者标题
  22. destroy 销毁(停止)域
  23. detach-device 从一个 XML 文件分离设备
  24. detach-device-alias detach device from an alias
  25. detach-disk 分离磁盘设备
  26. detach-interface 分离网络界面
  27. domdisplay 域显示连接 URI
  28. domfsfreeze Freeze domain's mounted filesystems.
  29. domfsthaw Thaw domain's mounted filesystems.
  30. domfsinfo Get information of domain's mounted filesystems.
  31. domfstrim 在域挂载的文件系统中调用 fstrim。
  32. domhostname 输出域主机名
  33. domid 把一个域名或 UUID 转换为域 id
  34. domif-setlink 设定虚拟接口的链接状态
  35. domiftune 获取/设定虚拟接口参数
  36. domjobabort 忽略活跃域任务
  37. domjobinfo 域任务信息
  38. domname 将域 id 或 UUID 转换为域名
  39. domrename rename a domain
  40. dompmsuspend 使用电源管理功能挂起域
  41. dompmwakeup 从 pmsuspended 状态唤醒域
  42. domuuid 把一个域名或 id 转换为域 UUID
  43. domxml-from-native 将原始配置转换为域 XML
  44. domxml-to-native 将域 XML 转换为原始配置
  45. dump 把一个域的内核 dump 到一个文件中以方便分析
  46. dumpxml XML 中的域信息
  47. edit 编辑某个域的 XML 配置
  48. event Domain Events
  49. inject-nmi 在虚拟机中输入 NMI
  50. iothreadinfo view domain IOThreads
  51. iothreadpin control domain IOThread affinity
  52. iothreadadd add an IOThread to the guest domain
  53. iothreaddel delete an IOThread from the guest domain
  54. send-key 向虚拟机发送序列号
  55. send-process-signal 向进程发送信号
  56. lxc-enter-namespace LXC 虚拟机进入名称空间
  57. managedsave 管理域状态的保存
  58. managedsave-remove 删除域的管理保存
  59. managedsave-edit edit XML for a domain's managed save state file
  60. managedsave-dumpxml Domain information of managed save state file in XML
  61. managedsave-define redefine the XML for a domain's managed save state file
  62. memtune 获取或者数值内存参数
  63. perf Get or set perf event
  64. metadata show or set domain's custom XML metadata
  65. migrate 将域迁移到另一个主机中
  66. migrate-setmaxdowntime 设定最大可耐受故障时间
  67. migrate-getmaxdowntime get maximum tolerable downtime
  68. migrate-compcache 获取/设定压缩缓存大小
  69. migrate-setspeed 设定迁移带宽的最大值
  70. migrate-getspeed 获取最长迁移带宽
  71. migrate-postcopy Switch running migration from pre-copy to post-copy
  72. numatune 获取或者数值 numa 参数
  73. qemu-attach QEMU 附加
  74. qemu-monitor-command QEMU 监控程序命令
  75. qemu-monitor-event QEMU Monitor Events
  76. qemu-agent-command QEMU 虚拟机代理命令
  77. reboot 重新启动一个域
  78. reset 重新设定域
  79. restore 从一个存在一个文件中的状态恢复一个域
  80. resume 重新恢复一个域
  81. save 把一个域的状态保存到一个文件
  82. save-image-define 为域的保存状态文件重新定义 XML
  83. save-image-dumpxml XML 中保存状态域信息
  84. save-image-edit 为域保存状态文件编辑 XML
  85. schedinfo 显示/设置日程安排变量
  86. screenshot 提取当前域控制台快照并保存到文件中
  87. set-lifecycle-action change lifecycle actions
  88. set-user-password set the user password inside the domain
  89. setmaxmem 改变最大内存限制值
  90. setmem 改变内存的分配
  91. setvcpus 改变虚拟 CPU 的号
  92. shutdown 关闭一个域
  93. start 开始一个(以前定义的)非活跃的域
  94. suspend 挂起一个域
  95. ttyconsole tty 控制台
  96. undefine 取消定义一个域
  97. update-device XML 文件中关系设备
  98. vcpucount vcpu 计数
  99. vcpuinfo 详细的域 vcpu 信息
  100. vcpupin 控制或者查询域 vcpu 亲和性
  101. emulatorpin 控制火车查询域模拟器亲和性
  102. vncdisplay vnc 显示
  103. guestvcpus query or modify state of vcpu in the guest (via agent)
  104. setvcpu attach/detach vcpu or groups of threads
  105. domblkthreshold set the threshold for block-threshold event for a given block device or it's backing chain element
  106.  
  107. Domain Monitoring (help keyword 'monitor'):
  108. domblkerror 在块设备中显示错误
  109. domblkinfo 域块设备大小信息
  110. domblklist 列出所有域块
  111. domblkstat 获得域设备块状态
  112. domcontrol 域控制接口状态
  113. domif-getlink 获取虚拟接口链接状态
  114. domifaddr Get network interfaces' addresses for a running domain
  115. domiflist 列出所有域虚拟接口
  116. domifstat 获得域网络接口状态
  117. dominfo 域信息
  118. dommemstat 获取域的内存统计
  119. domstate 域状态
  120. domstats get statistics about one or multiple domains
  121. domtime domain time
  122. list 列出域
  123.  
  124. Host and Hypervisor (help keyword 'host'):
  125. allocpages Manipulate pages pool size
  126. capabilities 性能
  127. cpu-baseline 计算基线 CPU
  128. cpu-compare 使用 XML 文件中描述的 CPU 与主机 CPU 进行对比
  129. cpu-models CPU models
  130. domcapabilities domain capabilities
  131. freecell NUMA可用内存
  132. freepages NUMA free pages
  133. hostname 打印管理程序主机名
  134. hypervisor-cpu-baseline compute baseline CPU usable by a specific hypervisor
  135. hypervisor-cpu-compare compare a CPU with the CPU created by a hypervisor on the host
  136. maxvcpus 连接 vcpu 最大值
  137. node-memory-tune 获取或者设定节点内存参数
  138. nodecpumap 节点 cpu 映射
  139. nodecpustats 输出节点的 cpu 状统计数据。
  140. nodeinfo 节点信息
  141. nodememstats 输出节点的内存状统计数据。
  142. nodesuspend 在给定时间段挂起主机节点
  143. sysinfo 输出 hypervisor sysinfo
  144. uri 打印管理程序典型的URI
  145. version 显示版本
  146.  
  147. Interface (help keyword 'interface'):
  148. iface-begin 生成当前接口设置快照,可在今后用于提交 (iface-commit) 或者恢复 (iface-rollback)
  149. iface-bridge 生成桥接设备并为其附加一个现有网络设备
  150. iface-commit 提交 iface-begin 后的更改并释放恢复点
  151. iface-define define an inactive persistent physical host interface or modify an existing persistent one from an XML file
  152. iface-destroy 删除物理主机接口(启用它请执行 "if-down"
  153. iface-dumpxml XML 中的接口信息
  154. iface-edit 为物理主机界面编辑 XML 配置
  155. iface-list 物理主机接口列表
  156. iface-mac 将接口名称转换为接口 MAC 地址
  157. iface-name 将接口 MAC 地址转换为接口名称
  158. iface-rollback 恢复到之前保存的使用 iface-begin 生成的更改
  159. iface-start 启动物理主机接口(启用它请执行 "if-up"
  160. iface-unbridge 分离其辅助设备后取消定义桥接设备
  161. iface-undefine 取消定义物理主机接口(从配置中删除)
  162.  
  163. Network Filter (help keyword 'filter'):
  164. nwfilter-define 使用 XML 文件定义或者更新网络过滤器
  165. nwfilter-dumpxml XML 中的网络过滤器信息
  166. nwfilter-edit 为网络过滤器编辑 XML 配置
  167. nwfilter-list 列出网络过滤器
  168. nwfilter-undefine 取消定义网络过滤器
  169. nwfilter-binding-create create a network filter binding from an XML file
  170. nwfilter-binding-delete delete a network filter binding
  171. nwfilter-binding-dumpxml XML 中的网络过滤器信息
  172. nwfilter-binding-list list network filter bindings
  173.  
  174. Networking (help keyword 'network'):
  175. net-autostart 自动开始网络
  176. net-create 从一个 XML 文件创建一个网络
  177. net-define define an inactive persistent virtual network or modify an existing persistent one from an XML file
  178. net-destroy 销毁(停止)网络
  179. net-dhcp-leases print lease info for a given network
  180. net-dumpxml XML 中的网络信息
  181. net-edit 为网络编辑 XML 配置
  182. net-event Network Events
  183. net-info 网络信息
  184. net-list 列出网络
  185. net-name 把一个网络UUID 转换为网络名
  186. net-start 开始一个(以前定义的)不活跃的网络
  187. net-undefine undefine a persistent network
  188. net-update 更新现有网络配置的部分
  189. net-uuid 把一个网络名转换为网络UUID
  190.  
  191. Node Device (help keyword 'nodedev'):
  192. nodedev-create 根据节点中的 XML 文件定义生成设备
  193. nodedev-destroy 销毁(停止)节点中的设备
  194. nodedev-detach 将节点设备与其设备驱动程序分离
  195. nodedev-dumpxml XML 中的节点设备详情
  196. nodedev-list 这台主机中中的枚举设备
  197. nodedev-reattach 重新将节点设备附加到他的设备驱动程序中
  198. nodedev-reset 重置节点设备
  199. nodedev-event Node Device Events
  200.  
  201. Secret (help keyword 'secret'):
  202. secret-define 定义或者修改 XML 中的 secret
  203. secret-dumpxml XML 中的 secret 属性
  204. secret-event Secret Events
  205. secret-get-value secret 值输出
  206. secret-list 列出 secret
  207. secret-set-value 设定 secret
  208. secret-undefine 取消定义 secret
  209.  
  210. Snapshot (help keyword 'snapshot'):
  211. snapshot-create 使用 XML 生成快照
  212. snapshot-create-as 使用一组参数生成快照
  213. snapshot-current 获取或者设定当前快照
  214. snapshot-delete 删除域快照
  215. snapshot-dumpxml 为域快照转储 XML
  216. snapshot-edit 编辑快照 XML
  217. snapshot-info 快照信息
  218. snapshot-list 为域列出快照
  219. snapshot-parent 获取快照的上级快照名称
  220. snapshot-revert 将域转换为快照
  221.  
  222. Storage Pool (help keyword 'pool'):
  223. find-storage-pool-sources-as 找到潜在存储池源
  224. find-storage-pool-sources 发现潜在存储池源
  225. pool-autostart 自动启动某个池
  226. pool-build 建立池
  227. pool-create-as 从一组变量中创建一个池
  228. pool-create 从一个 XML 文件中创建一个池
  229. pool-define-as 在一组变量中定义池
  230. pool-define define an inactive persistent storage pool or modify an existing persistent one from an XML file
  231. pool-delete 删除池
  232. pool-destroy 销毁(删除)池
  233. pool-dumpxml XML 中的池信息
  234. pool-edit 为存储池编辑 XML 配置
  235. pool-info 存储池信息
  236. pool-list 列出池
  237. pool-name 将池 UUID 转换为池名称
  238. pool-refresh 刷新池
  239. pool-start 启动一个(以前定义的)非活跃的池
  240. pool-undefine 取消定义一个不活跃的池
  241. pool-uuid 把一个池名称转换为池 UUID
  242. pool-event Storage Pool Events
  243.  
  244. Storage Volume (help keyword 'volume'):
  245. vol-clone 克隆卷。
  246. vol-create-as 从一组变量中创建卷
  247. vol-create 从一个 XML 文件创建一个卷
  248. vol-create-from 生成卷,使用另一个卷作为输入。
  249. vol-delete 删除卷
  250. vol-download 将卷内容下载到文件中
  251. vol-dumpxml XML 中的卷信息
  252. vol-info 存储卷信息
  253. vol-key 为给定密钥或者路径返回卷密钥
  254. vol-list 列出卷
  255. vol-name 为给定密钥或者路径返回卷名
  256. vol-path 为给定密钥或者路径返回卷路径
  257. vol-pool 为给定密钥或者路径返回存储池
  258. vol-resize 创新定义卷大小
  259. vol-upload 将文件内容上传到卷中
  260. vol-wipe 擦除卷
  261.  
  262. Virsh itself (help keyword 'virsh'):
  263. cd 更改当前目录
  264. echo echo 参数
  265. exit 退出这个非交互式终端
  266. help 打印帮助
  267. pwd 输出当前目录
  268. quit 退出这个非交互式终端
  269. connect 连接(重新连接)到 hypervisor
  270.  
  271. [root@node1 ~]#

  提示:从上面的信息可以看到,virsh命令大概分了,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;

  1. [root@node1 ~]# virsh help volume
  2. Storage Volume (help keyword 'volume'):
  3. vol-clone 克隆卷。
  4. vol-create-as 从一组变量中创建卷
  5. vol-create 从一个 XML 文件创建一个卷
  6. vol-create-from 生成卷,使用另一个卷作为输入。
  7. vol-delete 删除卷
  8. vol-download 将卷内容下载到文件中
  9. vol-dumpxml XML 中的卷信息
  10. vol-info 存储卷信息
  11. vol-key 为给定密钥或者路径返回卷密钥
  12. vol-list 列出卷
  13. vol-name 为给定密钥或者路径返回卷名
  14. vol-path 为给定密钥或者路径返回卷路径
  15. vol-pool 为给定密钥或者路径返回存储池
  16. vol-resize 创新定义卷大小
  17. vol-upload 将文件内容上传到卷中
  18. vol-wipe 擦除卷
  19.  
  20. [root@node1 ~]#

  如果查看组里的某个命令的用法,可以使用virsh help +命令即可

  1. [root@node1 ~]# virsh help vol-clone
  2. NAME
  3. vol-clone - 克隆卷。
  4.  
  5. SYNOPSIS
  6. vol-clone <vol> <newname> [--pool <string>] [--prealloc-metadata] [--reflink]
  7.  
  8. DESCRIPTION
  9. Clone an existing volume within the parent pool.
  10.  
  11. OPTIONS
  12. [--vol] <string> 卷名称、密钥或者路径
  13. [--newname] <string> 克隆名称
  14. --pool <string> 池名或 uuid
  15. --prealloc-metadata 预先分配的元数据(用于 qcow2 而不是整个分配)
  16. --reflink use btrfs COW lightweight copy
  17.  
  18. [root@node1 ~]#

  2、virsh管理虚拟机相关命令

  virsh list:列出当前宿主机上的虚拟机列表,默认不加任何选项表示列出当前处于运行状态的虚拟机列表(活跃的)

  1. [root@node1 ~]# virsh help list
  2. NAME
  3. list - 列出域
  4.  
  5. SYNOPSIS
  6. list [--inactive] [--all] [--transient] [--persistent] [--with-snapshot] [--without-snapshot] [--state-running] [--state-paused] [--state-shutoff] [--state-other] [--autostart] [--no-autostart] [--with-managed-save] [--without-managed-save] [--uuid] [--name] [--table] [--managed-save] [--title]
  7.  
  8. DESCRIPTION
  9. 返回域列表
  10.  
  11. OPTIONS
  12. --inactive 列出不活跃的域
  13. --all 不活跃和活跃的域列表
  14. --transient 列出临时域
  15. --persistent 列出持久域
  16. --with-snapshot 列出现有快照的域
  17. --without-snapshot 列出没有快照的域
  18. --state-running 运行状态的域列表
  19. --state-paused 列出暂停状态的域
  20. --state-shutoff 列出关闭状态的域
  21. --state-other 列出其他状态的域
  22. --autostart 列出启用 autostart 的域
  23. --no-autostart 列出禁用 autostart 的域
  24. --with-managed-save 列出有管理的保存状态的域
  25. --without-managed-save 列出没有管理的保存状态的域
  26. --uuid 只列出 uuid
  27. --name 只列出域名
  28. --table 列出表格(默认)
  29. --managed-save 标记有管理的保存状态的域
  30. --title show domain title
  31.  
  32. [root@node1 ~]# virsh list
  33. Id 名称 状态
  34. ----------------------------------------------------
  35.  
  36. [root@node1 ~]# virsh list --all
  37. Id 名称 状态
  38. ----------------------------------------------------
  39. - centos7.0 关闭
  40.  
  41. [root@node1 ~]#

  virsh create:从一个 XML 文件创建一个域(虚拟机)

  1. [root@node1 ~]# virsh help create
  2. NAME
  3. create - 从一个 XML 文件创建一个域
  4.  
  5. SYNOPSIS
  6. create <file> [--console] [--paused] [--autodestroy] [--pass-fds <string>] [--validate]
  7.  
  8. DESCRIPTION
  9. 创建一个域
  10.  
  11. OPTIONS
  12. [--file] <string> 文件包括一个 XML 域描述
  13. --console 创建后附加到控制台
  14. --paused 生成后让虚拟机保持暂停状态
  15. --autodestroy virsh 断开连接时自动销毁虚拟机
  16. --pass-fds <string> 向虚拟机传递文件描述符 NM......
  17. --validate validate the XML against the schema
  18.  
  19. [root@node1 ~]#

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

  1. [root@node1 ~]# virsh help define
  2. NAME
  3. define - 从一个 XML 文件定义(但不开始)一个域
  4.  
  5. SYNOPSIS
  6. define <file> [--validate]
  7.  
  8. DESCRIPTION
  9. 定义一个域。
  10.  
  11. OPTIONS
  12. [--file] <string> 文件包括一个 XML 域描述
  13. --validate validate the XML against the schema
  14.  
  15. [root@node1 ~]#

  示例:复制centos7的配置文件,修改里面的个别参数,用virsh create 创建一个虚拟机

  1. [root@node1 ~]# cd /etc/libvirt/qemu/
  2. [root@node1 qemu]# ls
  3. c1.xml centos7.0.xml networks
  4. [root@node1 qemu]# diff centos7.0.xml c1.xml
  5. 9,10c9
  6. < <name>centos7.0</name>
  7. < <uuid>56a1ecab-ef53-42f8-b7eb-6b4019ea3ee4</uuid>
  8. ---
  9. > <name>c1</name>
  10. 41c40
  11. < <source file='/var/lib/libvirt/images/centos7.0.qcow2'/>
  12. ---
  13. > <source file='/kvm/images/c1.qcow2'/>
  14. 74c73
  15. < <mac address='52:54:00:e3:8d:11'/>
  16. ---
  17. > <mac address='52:54:00:e3:8e:01'/>
  18. [root@node1 qemu]#

  提示:默认kvm上的虚拟机的配置文件都保存在/etc/libvirt/qemu/目录下,以虚拟机名称命名的配置文件;上面主要修改了一些比较私密的配置,比如虚拟机名称、磁盘镜像文件存放位置,mac地址;

  使用virsh 基于c1.xml创建虚拟

  1. [root@node1 qemu]# virsh list --all
  2. Id 名称 状态
  3. ----------------------------------------------------
  4. - centos7.0 关闭
  5.  
  6. [root@node1 qemu]# virsh create c1.xml
  7. 错误:从 c1.xml 创建域失败
  8. 错误:Cannot access storage file '/kvm/images/c1.qcow2' (as uid:107, gid:107): 没有那个文件或目录
  9.  
  10. [root@node1 qemu]#

  提示:上述错误说没有找到我们指定磁盘文件;

  创建c1的磁盘文件

  1. [root@node1 qemu]# ll /kvm/images/
  2. 总用量 0
  3. [root@node1 qemu]# qemu-img create -f qcow2 /kvm/images/c1.qcow2 20G
  4. Formatting '/kvm/images/c1.qcow2', fmt=qcow2 size=21474836480 encryption=off cluster_size=65536 lazy_refcounts=off
  5. [root@node1 qemu]# ll -h /kvm/images/
  6. 总用量 196K
  7. -rw-r--r-- 1 root root 193K 8 15 13:23 c1.qcow2
  8. [root@node1 qemu]#

  提示:qemu-img create 表示使用qemu创建一个磁盘文件,-f指定文件格式,常用的磁盘格式有raw,cow,qcow2;当然qemu-img支持创建很多格式的磁盘文件,这个命令的主要作用就是对磁盘文件的管理,比如创建磁盘,转换磁盘格式,检查磁盘,对磁盘做快照等等操作;

  查看新建磁盘信息

  1. [root@node1 qemu]# qemu-img info /kvm/images/c1.qcow2
  2. image: /kvm/images/c1.qcow2
  3. file format: qcow2
  4. virtual size: 20G (21474836480 bytes)
  5. disk size: 196K
  6. cluster_size: 65536
  7. Format specific information:
  8. compat: 1.1
  9. lazy refcounts: false
  10. [root@node1 qemu]#

  再次使用virsh 来基于c1.xml文件来创建虚拟机

  1. [root@node1 qemu]# virsh list --all
  2. Id 名称 状态
  3. ----------------------------------------------------
  4. - centos7.0 关闭
  5.  
  6. [root@node1 qemu]# virsh create c1.xml
  7. c1 被创建(从 c1.xml
  8.  
  9. [root@node1 qemu]# virsh list --all
  10. Id 名称 状态
  11. ----------------------------------------------------
  12. 1 c1 running
  13. - centos7.0 关闭
  14.  
  15. [root@node1 qemu]#

  提示:可以看到基于c1.xml文件中描述的信息,我们把c1虚拟机创建并启动起来了;这里需要注意,我们在创建虚拟机时,在其配置文件中并没有指定镜像文件在哪里,所以我们现在只创建了一个类似没有安装系统的虚拟机;

  用virt-manager验证,看看c1虚拟机是否有系统运行?

  提示:可以看到我们创建的虚拟机上没有运行系统。通常我们使用virsh来快速创建虚拟机,在创建磁盘文件时,首先把系统装进我们磁盘里,这样基于xml配置文件就可以很快速的启动一台虚拟机;通常我们会把这个磁盘文件做成一个模板,启动虚拟机时,直接拷贝模板命名为虚拟机名称,拷贝配置文件修改私密信息,然后用virsh工具基于这个改好的配置文件创建虚拟机即可;

  测试:拷贝centos7的磁盘文件,命名为c2,然后拷贝centos7.0.xml的配置文件命名为c2.xml,修改c2.xml中的私有配置,然后基于这个配置文件来创建虚拟机

  1. [root@node1 qemu]# cp /var/lib/libvirt/images/centos7.0.qcow2 /kvm/images/c2.qcow2
  2. [root@node1 qemu]# ls /kvm/images/
  3. c1.qcow2 c2.qcow2
  4. [root@node1 qemu]# ls
  5. c1.xml c2.xml centos7.0.xml networks
  6. [root@node1 qemu]# diff centos7.0.xml c2.xml
  7. 9,10c9
  8. < <name>centos7.0</name>
  9. < <uuid>56a1ecab-ef53-42f8-b7eb-6b4019ea3ee4</uuid>
  10. ---
  11. > <name>c2</name>
  12. 41c40
  13. < <source file='/var/lib/libvirt/images/centos7.0.qcow2'/>
  14. ---
  15. > <source file='/kvm/images/c2.qcow2'/>
  16. 74c73
  17. < <mac address='52:54:00:e3:8d:11'/>
  18. ---
  19. > <mac address='52:54:00:e3:85:21'/>
  20. [root@node1 qemu]# virsh list --all
  21. Id 名称 状态
  22. ----------------------------------------------------
  23. 1 c1 running
  24. - centos7.0 关闭
  25.  
  26. [root@node1 qemu]# virsh create c2.xml
  27. c2 被创建(从 c2.xml
  28.  
  29. [root@node1 qemu]# virsh list --all
  30. Id 名称 状态
  31. ----------------------------------------------------
  32. 1 c1 running
  33. 2 c2 running
  34. - centos7.0 关闭
  35.  
  36. [root@node1 qemu]#

  验证:启动图形界面virt-manager,查看c2是否启动,并有系统在运行?

  提示:可以看到现在c2启动以后,就有系统运行着,并且和centos7.0一模一样;

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

  1. [root@node1 qemu]# virsh help console
  2. NAME
  3. console - 连接到客户会话
  4.  
  5. SYNOPSIS
  6. console <domain> [--devname <string>] [--force] [--safe]
  7.  
  8. DESCRIPTION
  9. 连接客户真实串行控制台
  10.  
  11. OPTIONS
  12. [--domain] <string> domain name, id or uuid
  13. --devname <string> 字符设备名称
  14. --force 强制控制台连接(断开已连接的会话)
  15. --safe 只有在支持安全控制台处理时方可连接
  16.  
  17. [root@node1 qemu]# virsh console c2
  18. 连接到域 c2
  19. 换码符为 ^]

  提示:用virsh console c2命令连接c2的控制台,一直处于卡死的状态,这是因为centos7上默认没有允许ttyS0;

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

  1. [root@node1 qemu]# ssh 192.168.122.168
  2. The authenticity of host '192.168.122.168 (192.168.122.168)' can't be established.
  3. ECDSA key fingerprint is SHA256:heUVB8InZ+56B+vMgUz+B7Uus4EgklEU9DVeywf1Z7s.
  4. ECDSA key fingerprint is MD5:0b:b1:75:a4:2b:ba:cf:f1:ac:51:cb:76:2a:74:89:42.
  5. Are you sure you want to continue connecting (yes/no)? yes
  6. Warning: Permanently added '192.168.122.168' (ECDSA) to the list of known hosts.
  7. root@192.168.122.168's password:
  8. Permission denied, please try again.
  9. root@192.168.122.168's password:
  10. Last failed login: Sat Aug 15 03:06:50 EDT 2020 from 192.168.122.1 on ssh:notty
  11. There was 1 failed login attempt since the last successful login.
  12. Last login: Sat Aug 15 02:40:23 2020
  13. [root@localhost ~]#
  14. [root@localhost ~]# grep "ttyS0" /etc/securetty
  15. ttyS0
  16. [root@localhost ~]# grubby --update-kernel=ALL --args="console=ttyS0"
  17. [root@localhost ~]# reboot
  18. PolicyKit daemon disconnected from the bus.
  19. We are no longer a registered authentication agent.
  20. Connection to 192.168.122.168 closed by remote host.
  21. Connection to 192.168.122.168 closed.
  22. [root@node1 qemu]#

  提示:连接虚拟机后,需要看看/etc/securetty这个文件中是否有ttyS0,如果没有就加上,再更改内核参数;如果客户机上centos6,也是一样的步骤,不过在centos6上除了要确定/etc/securetty这个文件是否有ttyS0,还需要确认/etc/inittab文件中是否有S0:12345:respawn:/sbin/agetty ttyS0 115200这项配置,修改内核参数需要修改/etc/grup2.cfg,在启动内核的参数最后加console=ttyS0 保存重启客户机即可;

  验证:现在使用virsh console c2命令看看是否能够连接至c2的控制台?

  1. [root@node1 qemu]# virsh console c2
  2. 连接到域 c2
  3. 换码符为 ^]
  4.  
  5. CentOS Linux 7 (Core)
  6. Kernel 3.10.0-693.el7.x86_64 on an x86_64
  7.  
  8. localhost login: root
  9. Password:
  10. Last failed login: Sat Aug 15 03:08:51 EDT 2020 on ttyS0
  11. There was 1 failed login attempt since the last successful login.
  12. Last login: Sat Aug 15 03:06:53 from 192.168.122.1
  13. [root@localhost ~]# ip a
  14. 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
  15. link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
  16. inet 127.0.0.1/8 scope host lo
  17. valid_lft forever preferred_lft forever
  18. inet6 ::1/128 scope host
  19. valid_lft forever preferred_lft forever
  20. 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
  21. link/ether 52:54:00:e3:85:21 brd ff:ff:ff:ff:ff:ff
  22. inet 192.168.122.168/24 brd 192.168.122.255 scope global dynamic eth0
  23. valid_lft 2883sec preferred_lft 2883sec
  24. inet6 fe80::4c39:5a0f:9800:6314/64 scope link
  25. valid_lft forever preferred_lft forever
  26. [root@localhost ~]#
  27. [root@node1 qemu]#

  提示:可以看到在宿主机上我们可以直接使用virsh console命令来连接指定客户机的串行控制台;退出控制台回到宿主机需要使用Ctrl键+有中括号;

  virsh shutdown:关闭指定虚拟机

  1. [root@node1 ~]# virsh help shutdown
  2. NAME
  3. shutdown - 关闭一个域
  4.  
  5. SYNOPSIS
  6. shutdown <domain> [--mode <string>]
  7.  
  8. DESCRIPTION
  9. 在目标域中执行关闭行为。
  10.  
  11. OPTIONS
  12. [--domain] <string> domain name, id or uuid
  13. --mode <string> shutdown mode: acpi|agent|initctl|signal|paravirt
  14.  
  15. [root@node1 ~]# virsh list --all
  16. Id 名称 状态
  17. ----------------------------------------------------
  18. 1 c1 running
  19. 2 c2 running
  20. - centos7.0 关闭
  21.  
  22. [root@node1 ~]# virsh shutdown c1
  23. c1 被关闭
  24.  
  25. [root@node1 ~]# virsh list --all
  26. Id 名称 状态
  27. ----------------------------------------------------
  28. 1 c1 running
  29. 2 c2 running
  30. - centos7.0 关闭
  31.  
  32. [root@node1 ~]#

  提示:使用shutdown子命令,有时候会关不掉,我们需要使用destroy子命令来强制关机;

  强制对c1进行关机

  1. [root@node1 ~]# virsh list --all
  2. Id 名称 状态
  3. ----------------------------------------------------
  4. 1 c1 running
  5. 2 c2 running
  6. - centos7.0 关闭
  7.  
  8. [root@node1 ~]# virsh destroy c1
  9. c1 被删除
  10.  
  11. [root@node1 ~]# virsh list --all
  12. Id 名称 状态
  13. ----------------------------------------------------
  14. 2 c2 running
  15. - c1 关闭
  16. - centos7.0 关闭
  17.  
  18. [root@node1 ~]#

  提示:强制删除有点类似我们使用kill -9强制杀死一个进程一样,其实kvm上的虚拟在宿主机机上的表现形式就是一个进程,如下所示;

  提示:我们在宿主机上查看进程就可以知道当前宿主机上就运行了台虚拟机,从上面的信息我们也不难理解virsh其实也就是调用qemu来创建虚拟机的;

  virsh start:启动指定非活动虚拟机(开机)

  1. [root@node1 ~]# virsh help start
  2. NAME
  3. start - 开始一个(以前定义的)非活跃的域
  4.  
  5. SYNOPSIS
  6. start <domain> [--console] [--paused] [--autodestroy] [--bypass-cache] [--force-boot] [--pass-fds <string>]
  7.  
  8. DESCRIPTION
  9. 启动域,可以从最后一个 managedsave
  10. state,如果没有 managedsave state
  11. 也可以从全新引导中启动。
  12.  
  13. OPTIONS
  14. [--domain] <string> 非活跃域的名称
  15. --console 创建后附加到控制台
  16. --paused 生成后让虚拟机保持暂停状态
  17. --autodestroy virsh 断开连接时自动销毁虚拟机
  18. --bypass-cache 载入时避免文件系统缓存
  19. --force-boot 采用忽略所有管理保存的方式强制刷新引导
  20. --pass-fds <string> 向虚拟机传递文件描述符 NM......
  21.  
  22. [root@node1 ~]# virsh list --all
  23. Id 名称 状态
  24. ----------------------------------------------------
  25. 2 c2 running
  26. - c1 关闭
  27. - centos7.0 关闭
  28.  
  29. [root@node1 ~]# virsh start centos7.0
  30. centos7.0 已开始
  31.  
  32. [root@node1 ~]# virsh list --all
  33. Id 名称 状态
  34. ----------------------------------------------------
  35. 2 c2 running
  36. 3 centos7.0 running
  37. - c1 关闭
  38.  
  39. [root@node1 ~]#

  virsh suspend:挂起一个虚拟机

  1. [root@node1 ~]# virsh help suspend
  2. NAME
  3. suspend - 挂起一个域
  4.  
  5. SYNOPSIS
  6. suspend <domain>
  7.  
  8. DESCRIPTION
  9. 挂起一个运行的域。
  10.  
  11. OPTIONS
  12. [--domain] <string> domain name, id or uuid
  13.  
  14. [root@node1 ~]# virsh list --all
  15. Id 名称 状态
  16. ----------------------------------------------------
  17. 2 c2 running
  18. 3 centos7.0 running
  19. - c1 关闭
  20.  
  21. [root@node1 ~]# virsh suspend centos7.0
  22. centos7.0 被挂起
  23.  
  24. [root@node1 ~]# virsh list --all
  25. Id 名称 状态
  26. ----------------------------------------------------
  27. 2 c2 running
  28. 3 centos7.0 暂停
  29. - c1 关闭
  30.  
  31. [root@node1 ~]#

  提示:suspend操作是把指定虚拟机挂起,所谓挂起就是把运行状态的虚拟机暂停,并把当前运行状态保存到内存,有点类似时间停止的感觉,外部客户端对它访问它也不会响应;如果此时宿主机掉电,那么之前保存在内存的运行状态数据也将随之丢失;

  virsh resume:恢复指定被挂起的虚拟机;

  1. [root@node1 ~]# virsh help resume
  2. NAME
  3. resume - 重新恢复一个域
  4.  
  5. SYNOPSIS
  6. resume <domain>
  7.  
  8. DESCRIPTION
  9. 重新恢复一个以前被挂起的域。
  10.  
  11. OPTIONS
  12. [--domain] <string> domain name, id or uuid
  13.  
  14. [root@node1 ~]# virsh list --all
  15. Id 名称 状态
  16. ----------------------------------------------------
  17. 2 c2 running
  18. 3 centos7.0 暂停
  19. - c1 关闭
  20.  
  21. [root@node1 ~]# virsh resume centos7.0
  22. centos7.0 被重新恢复
  23.  
  24. [root@node1 ~]# virsh list --all
  25. Id 名称 状态
  26. ----------------------------------------------------
  27. 2 c2 running
  28. 3 centos7.0 running
  29. - c1 关闭
  30.  
  31. [root@node1 ~]#

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

  1. [root@node1 ~]# virsh help save
  2. NAME
  3. save - 把一个域的状态保存到一个文件
  4.  
  5. SYNOPSIS
  6. save <domain> <file> [--bypass-cache] [--xml <string>] [--running] [--paused] [--verbose]
  7.  
  8. DESCRIPTION
  9. 保存运行中的域 RAM 状态
  10.  
  11. OPTIONS
  12. [--domain] <string> domain name, id or uuid
  13. [--file] <string> 数据存到什么地方
  14. --bypass-cache 保存时避免文件系统缓存
  15. --xml <string> 包含为目标更新的 XML 的文件名
  16. --running 设定要在还原中运行的域
  17. --paused 设定要在还原中暂停的域
  18. --verbose 显示保存进程
  19.  
  20. [root@node1 ~]# virsh list --all
  21. Id 名称 状态
  22. ----------------------------------------------------
  23. 2 c2 running
  24. 3 centos7.0 running
  25. - c1 关闭
  26.  
  27. [root@node1 ~]# virsh save c2 ./c2.bin --paused
  28.  
  29. 保存到 c2 的域 ./c2.bin
  30.  
  31. [root@node1 ~]# ls
  32. c2.bin redis-5.0.8.tar.gz
  33. [root@node1 ~]# virsh list --all
  34. Id 名称 状态
  35. ----------------------------------------------------
  36. 3 centos7.0 running
  37. - c1 关闭
  38. - c2 关闭
  39.  
  40. [root@node1 ~]#

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

  1. [root@node1 ~]# virsh help restore
  2. NAME
  3. restore - 从一个存在一个文件中的状态恢复一个域
  4.  
  5. SYNOPSIS
  6. restore <file> [--bypass-cache] [--xml <string>] [--running] [--paused]
  7.  
  8. DESCRIPTION
  9. 恢复一个域。
  10.  
  11. OPTIONS
  12. [--file] <string> 恢复的状态
  13. --bypass-cache 恢复时避免文件系统缓存
  14. --xml <string> 包含为目标更新的 XML 的文件名
  15. --running 将域恢复为运行状态
  16. --paused 将域恢复为暂停状态
  17.  
  18. [root@node1 ~]# virsh list --all
  19. Id 名称 状态
  20. ----------------------------------------------------
  21. 3 centos7.0 running
  22. - c1 关闭
  23. - c2 关闭
  24.  
  25. [root@node1 ~]# virsh restore ./c2.bin
  26. ./c2.bin 恢复域
  27.  
  28. [root@node1 ~]# virsh list --all
  29. Id 名称 状态
  30. ----------------------------------------------------
  31. 3 centos7.0 running
  32. 4 c2 暂停
  33. - c1 关闭
  34.  
  35. [root@node1 ~]#

  提示:恢复后端c2变成了暂停状态,这是因为我们在保存状态信息时,指定了恢复时的状态;当然我们在恢复时也可以使用选项来指定我们要把虚拟机恢复到什么状态;

  virsh reboot:重启指定虚拟机,如同在指定虚拟机上执行reboot命令一样;

  1. [root@node1 ~]# virsh help reboot
  2. NAME
  3. reboot - 重新启动一个域
  4.  
  5. SYNOPSIS
  6. reboot <domain> [--mode <string>]
  7.  
  8. DESCRIPTION
  9. 在目标域中执行重新启动命令。
  10.  
  11. OPTIONS
  12. [--domain] <string> domain name, id or uuid
  13. --mode <string> shutdown mode: acpi|agent|initctl|signal|paravirt
  14.  
  15. [root@node1 ~]# virsh list --all
  16. Id 名称 状态
  17. ----------------------------------------------------
  18. 3 centos7.0 running
  19. 4 c2 暂停
  20. - c1 关闭
  21.  
  22. [root@node1 ~]# virsh reboot centos7.0
  23. centos7.0 正在被重新启动
  24.  
  25. [root@node1 ~]#

  virsh reset:对指定虚拟机执行强制重启,有点类似按机箱上的重置按钮;

  1. [root@node1 ~]# virsh help reset
  2. NAME
  3. reset - 重新设定域
  4.  
  5. SYNOPSIS
  6. reset <domain>
  7.  
  8. DESCRIPTION
  9. 如同使用电源按钮重新设定目标域
  10.  
  11. OPTIONS
  12. [--domain] <string> domain name, id or uuid
  13.  
  14. [root@node1 ~]# virsh list --all
  15. Id 名称 状态
  16. ----------------------------------------------------
  17. 3 centos7.0 running
  18. 4 c2 暂停
  19. - c1 关闭
  20.  
  21. [root@node1 ~]# virsh reset centos7.0
  22. 重新设定域 centos7.0
  23.  
  24. [root@node1 ~]#

  virsh dumpxml:以xml格式输出指定虚拟机的详细配置(把对应虚拟机的配置文件内容输出到标准输出);

  1. [root@node1 ~]# virsh help dumpxml
  2. NAME
  3. dumpxml - XML 中的域信息
  4.  
  5. SYNOPSIS
  6. dumpxml <domain> [--inactive] [--security-info] [--update-cpu] [--migratable]
  7.  
  8. DESCRIPTION
  9. 把域信息作为一个 XML 输出到 stdout
  10.  
  11. OPTIONS
  12. [--domain] <string> domain name, id or uuid
  13. --inactive 显示不活跃定义的 XML
  14. --security-info 包括 XML 转储中与安全性相关的信息
  15. --update-cpu 根据主机 CPU 更新虚拟机 CPU
  16. --migratable 为迁移提供 XML 可用性
  17.  
  18. [root@node1 ~]# virsh dumpxml c1
  19. <domain type='kvm'>
  20. <name>c1</name>
  21. <uuid>c2bd061d-1628-4901-a459-e1cde62ed5b3</uuid>
  22. <memory unit='KiB'>2097152</memory>
  23. <currentMemory unit='KiB'>2097152</currentMemory>
  24. <vcpu placement='static'>2</vcpu>
  25. <os>
  26. <type arch='x86_64' machine='pc-i440fx-rhel7.0.0'>hvm</type>
  27. <boot dev='hd'/>
  28. </os>
  29. <features>
  30. <acpi/>
  31. <apic/>
  32. </features>
  33. <cpu mode='custom' match='exact' check='partial'>
  34. <model fallback='allow'>Broadwell</model>
  35. </cpu>
  36. <clock offset='utc'>
  37. <timer name='rtc' tickpolicy='catchup'/>
  38. <timer name='pit' tickpolicy='delay'/>
  39. <timer name='hpet' present='no'/>
  40. </clock>
  41. <on_poweroff>destroy</on_poweroff>
  42. <on_reboot>restart</on_reboot>
  43. <on_crash>destroy</on_crash>
  44. <pm>
  45. <suspend-to-mem enabled='no'/>
  46. <suspend-to-disk enabled='no'/>
  47. </pm>
  48. <devices>
  49. <emulator>/usr/libexec/qemu-kvm</emulator>
  50. <disk type='file' device='disk'>
  51. <driver name='qemu' type='qcow2'/>
  52. <source file='/kvm/images/c1.qcow2'/>
  53. <target dev='vda' bus='virtio'/>
  54. <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
  55. </disk>
  56. <disk type='file' device='cdrom'>
  57. <driver name='qemu' type='raw'/>
  58. <target dev='hda' bus='ide'/>
  59. <readonly/>
  60. <address type='drive' controller='0' bus='0' target='0' unit='0'/>
  61. </disk>
  62. <controller type='usb' index='0' model='ich9-ehci1'>
  63. <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x7'/>
  64. </controller>
  65. <controller type='usb' index='0' model='ich9-uhci1'>
  66. <master startport='0'/>
  67. <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0' multifunction='on'/>
  68. </controller>
  69. <controller type='usb' index='0' model='ich9-uhci2'>
  70. <master startport='2'/>
  71. <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x1'/>
  72. </controller>
  73. <controller type='usb' index='0' model='ich9-uhci3'>
  74. <master startport='4'/>
  75. <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x2'/>
  76. </controller>
  77. <controller type='pci' index='0' model='pci-root'/>
  78. <controller type='ide' index='0'>
  79. <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
  80. </controller>
  81. <controller type='virtio-serial' index='0'>
  82. <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
  83. </controller>
  84. <interface type='network'>
  85. <mac address='52:54:00:e3:8e:01'/>
  86. <source network='default'/>
  87. <model type='virtio'/>
  88. <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
  89. </interface>
  90. <serial type='pty'>
  91. <target type='isa-serial' port='0'>
  92. <model name='isa-serial'/>
  93. </target>
  94. </serial>
  95. <console type='pty'>
  96. <target type='serial' port='0'/>
  97. </console>
  98. <channel type='unix'>
  99. <target type='virtio' name='org.qemu.guest_agent.0'/>
  100. <address type='virtio-serial' controller='0' bus='0' port='1'/>
  101. </channel>
  102. <channel type='spicevmc'>
  103. <target type='virtio' name='com.redhat.spice.0'/>
  104. <address type='virtio-serial' controller='0' bus='0' port='2'/>
  105. </channel>
  106. <input type='tablet' bus='usb'>
  107. <address type='usb' bus='0' port='1'/>
  108. </input>
  109. <input type='mouse' bus='ps2'/>
  110. <input type='keyboard' bus='ps2'/>
  111. <graphics type='spice' autoport='yes'>
  112. <listen type='address'/>
  113. <image compression='off'/>
  114. </graphics>
  115. <sound model='ich6'>
  116. <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
  117. </sound>
  118. <video>
  119. <model type='qxl' ram='65536' vram='65536' vgamem='16384' heads='1' primary='yes'/>
  120. <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
  121. </video>
  122. <redirdev bus='usb' type='spicevmc'>
  123. <address type='usb' bus='0' port='2'/>
  124. </redirdev>
  125. <redirdev bus='usb' type='spicevmc'>
  126. <address type='usb' bus='0' port='3'/>
  127. </redirdev>
  128. <memballoon model='virtio'>
  129. <address type='pci' domain='0x0000' bus='0x00' slot='0x08' function='0x0'/>
  130. </memballoon>
  131. <rng model='virtio'>
  132. <backend model='random'>/dev/urandom</backend>
  133. <address type='pci' domain='0x0000' bus='0x00' slot='0x09' function='0x0'/>
  134. </rng>
  135. </devices>
  136. </domain>
  137.  
  138. [root@node1 ~]# virsh dumpxml c1 > c1.xml.bak
  139. [root@node1 ~]# diff c1.xml.bak /etc/libvirt/qemu/c1.xml
  140. 0a1,7
  141. > <!--
  142. > WARNING: THIS IS AN AUTO-GENERATED FILE. CHANGES TO IT ARE LIKELY TO BE
  143. > OVERWRITTEN AND LOST. Changes to this xml configuration should be made using:
  144. > virsh edit centos7.0
  145. > or other application using the libvirt API.
  146. > -->
  147. >
  148. 3d9
  149. < <uuid>c2bd061d-1628-4901-a459-e1cde62ed5b3</uuid>
  150. 119d124
  151. <
  152. [root@node1 ~]#

  提示:可以看到到处都配置文件和原有配置文件没有本质的不同,除了注释相差就只是uuid,如果我们在创建虚拟机时指定了uuid,导出的配置和原配置文件都是一样的;

  virsh undefine:删除指定虚拟机(会连同配置文件一并删除)

  1. [root@node1 ~]# virsh help undefine
  2. NAME
  3. undefine - 取消定义一个域
  4.  
  5. SYNOPSIS
  6. undefine <domain> [--managed-save] [--storage <string>] [--remove-all-storage] [--delete-snapshots] [--wipe-storage] [--snapshots-metadata] [--nvram] [--keep-nvram]
  7.  
  8. DESCRIPTION
  9. 取消定义一个域或者将持久转换为临时。
  10.  
  11. OPTIONS
  12. [--domain] <string> domain name, id or uuid
  13. --managed-save 删除域管理的状态文件
  14. --storage <string> 删除关联的存储卷(用逗号分开的目标或者源路径列表)(查看 domblklist
  15. --remove-all-storage 删除关联的存储卷(小心使用)
  16. --delete-snapshots delete snapshots associated with volume(s), requires --remove-all-storage (must be supported by storage driver)
  17. --wipe-storage 擦除删除卷中的数据
  18. --snapshots-metadata 如果不活跃则删除所有域快照元数据
  19. --nvram remove nvram file, if inactive
  20. --keep-nvram keep nvram file, if inactive
  21.  
  22. [root@node1 ~]# ll /kvm/images/
  23. 总用量 20975172
  24. -rw-r--r-- 1 root root 197120 8 15 13:23 c1.qcow2
  25. -rw------- 1 qemu qemu 21478375424 8 15 16:30 c2.qcow2
  26. [root@node1 ~]# ll /etc/libvirt/qemu/
  27. 总用量 24
  28. -rw------- 1 root root 4531 8 15 14:22 c1.xml
  29. -rw------- 1 root root 4531 8 15 14:34 c2.xml
  30. -rw------- 1 root root 4609 8 14 00:10 centos7.0.xml
  31. drwx------ 3 root root 42 8 13 23:31 networks
  32. [root@node1 ~]# virsh undefine c1
  33. c1 已经被取消定义
  34.  
  35. [root@node1 ~]# ll /etc/libvirt/qemu/
  36. 总用量 16
  37. -rw------- 1 root root 4531 8 15 14:34 c2.xml
  38. -rw------- 1 root root 4609 8 14 00:10 centos7.0.xml
  39. drwx------ 3 root root 42 8 13 23:31 networks
  40. [root@node1 ~]# ll /kvm/images/
  41. 总用量 20975172
  42. -rw-r--r-- 1 root root 197120 8 15 13:23 c1.qcow2
  43. -rw------- 1 qemu qemu 21478375424 8 15 16:30 c2.qcow2
  44. [root@node1 ~]# virsh list --all
  45. Id 名称 状态
  46. ----------------------------------------------------
  47. 3 centos7.0 running
  48. 4 c2 暂停
  49.  
  50. [root@node1 ~]#

  提示:默认使用undefine只会把对应配置文件和虚拟机实例删除,如果还需要删除存储卷,可以在后面加上对应的选项指定即可;

  virsh autostart :设置指定虚拟机为随宿主机启动而自动启动

  1. [root@node1 ~]# virsh help autostart
  2. NAME
  3. autostart - 自动开始一个域
  4.  
  5. SYNOPSIS
  6. autostart <domain> [--disable]
  7.  
  8. DESCRIPTION
  9. 设置一个域在启动时自动开始.
  10.  
  11. OPTIONS
  12. [--domain] <string> domain name, id or uuid
  13. --disable 禁止自动启动
  14.  
  15. [root@node1 ~]# virsh list --all
  16. Id 名称 状态
  17. ----------------------------------------------------
  18. 3 centos7.0 running
  19. 4 c2 暂停
  20.  
  21. [root@node1 ~]# virsh autostart c2
  22. c2标记为自动开始
  23.  
  24. [root@node1 ~]# virsh autostart c2 --disable
  25. c2取消标记为自动开始
  26.  
  27. [root@node1 ~]#

虚拟化技术之kvm管理工具virsh常用基础命令(一)的更多相关文章

  1. 虚拟化技术之kvm管理工具virsh常用基础命令(二)

    上一篇博客我们主要聊了下virsh 管理kvm虚拟机的命令相关用法和说明,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/13508231.html:今天我们来继 ...

  2. 虚拟化技术之kvm磁盘管理工具qemu-img

    在前边的博客中,我们大致了解了virsh这个工具对kvm虚拟机的一些操作,回顾请参考https://www.cnblogs.com/qiuhom-1874/tag/virsh/:今天我们来了解下kvm ...

  3. 虚拟化技术之kvm WEB管理工具kimchi

    在前面的博客中,我们介绍了kvm的各种工具,有基于图形管理的virt-manager.有基于命令行管理的virt-install .qemu-kvm.virsh等等:今天我们来介绍一款基于web界面的 ...

  4. 虚拟化技术之kvm虚拟机创建工具qemu-kvm

    在前边的博客中我们介绍了如何创建kvm虚拟机,以及一些常用的工具的介绍和使用,今天我们来了解下kvm原始工具qemu-kvm:为什么说qemu-kvm是一个原始的工具呢,如果你用kvm虚拟机,心细的你 ...

  5. 虚拟化技术之KVM

    虚拟化技术之KVM 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.什么是虚拟化 其实虚拟化技术已经不是一个新技术了,上个世纪六十年代IBM公司已经在使用,只不过后来(上个世纪八 ...

  6. showdoc 开源在线api&&技术文档管理工具

    showdoc 是一个很不错的api 以及技术文档管理工具 环境准备 doker-copose 文件 version: "3" services: doc: image: regi ...

  7. 无法从命令行或调试器启动服务,必须首先安装Windows服务(使用installutil.exe),然后用ServerExplorer、Windows服务器管理工具或NET START命令启动它

    无法从命令行或调试器启动服务,必须首先安装Windows服务(使用installutil.exe),然后用ServerExplorer.Windows服务器管理工具或NET START命令启动它 1. ...

  8. Linux常用基础命令整理:关机命令、查看目录下文件命令等

    Linux常用基础命令整理:关机命令.查看目录下文件命令等 整理了一些Linux常用基础命令,欢迎指正. 首先记住四个热键,学会这四个键,收益一辈子. Tab按键---命令补齐功能Ctrl+c按键-- ...

  9. CentOS常用基础命令大全

    这篇文章主要介绍了CentOS常用基础命令大全,学习centos的朋友需要掌握的知识,需要的朋友可以参考下 1.关机 (系统的关机.重启以及登出 ) 的命令shutdown -h now 关闭系统(1 ...

随机推荐

  1. 一个有趣的问题, 你知道SqlDataAdapter中的Fill是怎么实现的吗

    一:背景 1. 讲故事 最近因为各方面原因换了一份工作,去了一家主营物联柜的公司,有意思的是物联柜上的终端是用 wpf 写的,代码也算是年久失修,感觉技术债还是蛮重的,前几天在调试一个bug的时候,看 ...

  2. 数字货币交易所(火币为例)如何使用二次验证码/虚拟MFA/两步验证/谷歌验证器?

    一般点账户名——设置——安全设置中开通虚拟MFA两步验证 具体步骤见链接  数字货币交易所(火币为例)如何使用二次验证码/虚拟MFA/两步验证/谷歌验证器? 二次验证码小程序于谷歌身份验证器APP的优 ...

  3. DJANGO-天天生鲜项目从0到1-006-首页-内容展示

    本项目基于B站UP主‘神奇的老黄’的教学视频‘天天生鲜Django项目’,视频讲的非常好,推荐新手观看学习 https://www.bilibili.com/video/BV1vt41147K8?p= ...

  4. vue学习(九) 使用内联样式设置style样式

    /html <div id="app"> //对象就是无序键值对的集合 <h1 :style="{ color:red, 'font-weight':2 ...

  5. 雪碧图——CSS Sprites(精灵)

    在日常开发打开文件包,打开static文件夹,有一张图片,里面融合了这个应用都会用到的小图标,其实,主要是减少应用渲染出现繁多的请求,加速页面渲染. 解决方案:使用css背景定位 icon {widt ...

  6. 艺术鬼才,Unicode 字符还能这么玩?

    上周的时候,朋友圈的直升飞机不知道为什么就火了,很多朋友开着各种花式飞机带着起飞. 还没来得及了解咋回事来着,这个直升飞机就到的微博热搜. 后面越来越多人开来他们的直升飞机,盘旋在朋友圈上方.于是很多 ...

  7. vuex多多,怎么当好一个奶妈

    前言 vue 本身更偏向于 view 层的框架,尤大大并没有一开始就给他一个完整的 mvvm 架构. 在 vue 的世界里 vuex 是用来实现 mvvm 中关键的 vm 层(视图模型层),你甚至可以 ...

  8. 《Python编程快速上手 —让繁琐工作自动化》|百度网盘免费下载|Python自动化办公

    Python编程快速上手—让繁琐工作自动化 提取码:u8vj 如今,人们面临的大多数任务都可以通过编写计算机软件来完成. Python 是一种解释型.面向对象.动态数据类型的高级程序设计语言.通过 P ...

  9. Robot Framework 使用常见问题汇总

    一 安装过程 windows可以使用pip命令进行一系列安装,一定要使用管理员打开cmd窗口进行安装,不然可能后续会有很多自定义库无法使用的问题. 1 ride安装后打不开  解决方案 https:/ ...

  10. CF R 635 div2 1337D Xenia and Colorful Gems 贪心 二分 双指针

    LINK:Xenia and Colorful Gems 考试的时候没想到一个很好的做法. 赛后也有一个想法. 可以考虑答案的样子 x,y,z 可以发现 一共有 x<=y<=z,z< ...