virsh的日常管理命令

简介: 文章介绍了如何使用virsh命令来管理KVM虚拟机,包括创建、查看、关闭、启动、强制关机、重启、备份、删除、恢复、修改名称、挂起、恢复挂起、查询VNC端口号、设置开机自启动和禁用开机自启动等操作,以及如何配置KVM的console来替代VNC连接虚拟机。

一.虚拟机日常使用命令

1.创建虚拟机

    1.启动虚拟机
virt-install --virt-type kvm \
    --os-type=linux \
    --os-variant rhel7 \
    --name yinzhengjie-kvm01 \
    --memory 2048 \
    --vcpus 2 \
    --disk /opt/yinzhengjie-kvm01.raw,format=raw,size=10 \
    --cdrom /opt/CentOS-7-x86_64-DVD-2009.iso \
    --network  network=default \
    --graphics vnc,listen=0.0.0.0 \
    --noautoconsole


相关参数说明:
    --virt-type:
        指定虚拟机的类型,支持kvm,qemu,xen等虚拟机。
    --os-type:
        指定系统的类型。
    --os-variant: 
        指定系统的版本号。
    --name:
        指定虚拟机的名称,每个虚拟机的名称必须唯一。
    --memory:
        指定虚拟机的内存大小。
    --vcpus
        指定CPU的核心数。
    --disk:
        指定磁盘的路径,使用format指定磁盘的格式,使用size自定磁盘大小,默认单位为GB。
    --cdrom 
        自定ISO镜像文件连接。
    --network  
        指定网络,可以自定多块网卡设备。
    --graphics 
        指定图形化使用的协议及监听地址,如果不指定监听地址,默认监听地址为"127.0.0.1"。
    --noautoconsole
        不自动连接虚拟机的console,该参数可有可无。


    2.使用vnc连接虚拟机
systemctl disable --now firewalld
netstat -untalp | grep 5900  # 注意,VNC服务端监听的默认端口为"5900",连接测试。


温馨提示:
    - 每次启动虚拟机都会监听一个端口,默认监听的端口是从5900开始,依次递增;
        该端口可以直接通过vnc客户端工具进行连接即可。

    - 每次启动虚拟机都会启动一个qemu-kvm进程。
        ps -ef  | grep qemu-kvm

2.查看所有状态的虚拟机

[root@yinzhengjie-kvm189 ~]# virsh list --all
 Id    Name                           State
----------------------------------------------------
 1     yinzhengjie-kvm01              running

[root@yinzhengjie-kvm189 ~]#

3.关闭虚拟机

[root@yinzhengjie-kvm189 ~]# virsh shutdown yinzhengjie-kvm01 
Domain yinzhengjie-kvm01 is being shutdown

[root@yinzhengjie-kvm189 ~]# 


温馨提示:
    这种关机的方式要求被关闭的虚拟机是有操作系统的,可以对其执行关闭虚拟机的相关命令。

4.启动虚拟机

[root@yinzhengjie-kvm189 ~]# virsh start yinzhengjie-kvm01 
Domain yinzhengjie-kvm01 started

[root@yinzhengjie-kvm189 ~]#

5.断电强制关机

[root@yinzhengjie-kvm189 ~]# virsh destroy yinzhengjie-kvm01 
Domain yinzhengjie-kvm01 destroyed

[root@yinzhengjie-kvm189 ~]# 


温馨提示:
    这种关机类似拔掉电源强制关机的效果。这种命令适合在虚拟机司机或者虚拟机没有安装操作系统的情况下执行。

6.重启虚拟机

[root@yinzhengjie-kvm189 ~]# virsh reboot yinzhengjie-kvm01
Domain yinzhengjie-kvm01 is being rebooted

[root@yinzhengjie-kvm189 ~]# 


温馨提示:
    这种重启虚拟机的操作,也是要求虚拟机已经安装过操作系统哟,否则执行该命令也是无效的哟~

7.备份虚拟机

    1.KVM虚拟机的组成
如上图所示,一台KVM虚拟由磁盘文件(该文件安装了操作系统及数据存储)和配置文件(存放了虚拟机配置信息)组成。


    2.备份虚拟机
[root@yinzhengjie-kvm189 ~]# virsh dumpxml yinzhengjie-kvm01 > /mnt/vm_yinzhengjie-kvm01.xml

8.删除虚拟机

[root@yinzhengjie-kvm189 ~]# virsh list --all  # 擅长虚拟机前查看信息
 Id    Name                           State
----------------------------------------------------
 3     yinzhengjie-kvm01              running

[root@yinzhengjie-kvm189 ~]# 
[root@yinzhengjie-kvm189 ~]# virsh destroy yinzhengjie-kvm01   # 断电关机
Domain yinzhengjie-kvm01 destroyed

[root@yinzhengjie-kvm189 ~]# 
[root@yinzhengjie-kvm189 ~]# virsh list --all
 Id    Name                           State
----------------------------------------------------
 -     yinzhengjie-kvm01              shut off

[root@yinzhengjie-kvm189 ~]# 
[root@yinzhengjie-kvm189 ~]# virsh undefine yinzhengjie-kvm01  # 删除虚拟机
Domain yinzhengjie-kvm01 has been undefined

[root@yinzhengjie-kvm189 ~]# 
[root@yinzhengjie-kvm189 ~]# ll -h /opt/ /etc/libvirt/qemu/
/etc/libvirt/qemu/:
total 0
drwx------. 3 root root 42 Apr 28  2021 networks

/opt/:
total 4.4G
-rw-r--r--. 1 qemu qemu 4.4G Apr  7 19:33 CentOS-7-x86_64-DVD-2009.iso
drwxr-xr-x. 2 root root    6 Oct 31  2018 rh
-rw-------. 1 root root  10G Apr  7 19:46 yinzhengjie-kvm01.raw
[root@yinzhengjie-kvm189 ~]# 
[root@yinzhengjie-kvm189 ~]# virsh list --all  # 删除虚拟机后查看信息
 Id    Name                           State
----------------------------------------------------

[root@yinzhengjie-kvm189 ~]# 


温馨提示:
    - 删除虚拟机,一定要先断电(destroy)再删除(undefine),否则直接执行undefine我们查看虚拟机时依旧是存在的哟;
    - 如果直接undefine删除虚拟机,我们查看虚拟机是存在的,这样当我们重启虚拟机时,就会发现重启一台少一台虚拟机的"灵异事件";
    - 综上所述,建议大家生产环境中一定要做好虚拟机的备份哟,避免虚拟机被误删除的场景;
    - 当然,如果你真的是想要删除虚拟机的话,别忘记删除磁盘哟,因为磁盘文件很占用空间。

9.恢复虚拟机

[root@yinzhengjie-kvm189 ~]# virsh list --all
 Id    Name                           State
----------------------------------------------------

[root@yinzhengjie-kvm189 ~]# 
[root@yinzhengjie-kvm189 ~]# virsh define /mnt/vm_yinzhengjie-kvm01.xml 
Domain yinzhengjie-kvm01 defined from /mnt/vm_yinzhengjie-kvm01.xml

[root@yinzhengjie-kvm189 ~]# 
[root@yinzhengjie-kvm189 ~]# virsh list --all
 Id    Name                           State
----------------------------------------------------
 -     yinzhengjie-kvm01              shut off

[root@yinzhengjie-kvm189 ~]# 
[root@yinzhengjie-kvm189 ~]# ll -h /opt/ /etc/libvirt/qemu/
/etc/libvirt/qemu/:
total 8.0K
drwx------. 3 root root   42 Apr 28  2021 networks
-rw-------. 1 root root 4.6K Apr  8 00:28 yinzhengjie-kvm01.xml

/opt/:
total 4.4G
-rw-r--r--. 1 qemu qemu 4.4G Apr  7 19:33 CentOS-7-x86_64-DVD-2009.iso
drwxr-xr-x. 2 root root    6 Oct 31  2018 rh
-rw-------. 1 root root  10G Apr  7 19:46 yinzhengjie-kvm01.raw
[root@yinzhengjie-kvm189 ~]#

10.修改虚拟机名称

    1.给虚拟机重命名
[root@yinzhengjie-kvm189 ~]# virsh list --all
 Id    Name                           State
----------------------------------------------------
 -     yinzhengjie-kvm01              shut off

[root@yinzhengjie-kvm189 ~]# 
[root@yinzhengjie-kvm189 ~]# virsh dumpxml yinzhengjie-kvm01 | grep raw
      <driver name='qemu' type='raw'/>
      <source file='/opt/yinzhengjie-kvm01.raw'/>
      <driver name='qemu' type='raw'/>
[root@yinzhengjie-kvm189 ~]# 
[root@yinzhengjie-kvm189 ~]# virsh domrename yinzhengjie-kvm01 kvm-web01
Domain successfully renamed

[root@yinzhengjie-kvm189 ~]# 
[root@yinzhengjie-kvm189 ~]# virsh list --all
 Id    Name                           State
----------------------------------------------------
 -     kvm-web01                      shut off

[root@yinzhengjie-kvm189 ~]# 
[root@yinzhengjie-kvm189 ~]# virsh dumpxml kvm-web01 | grep raw
      <driver name='qemu' type='raw'/>
      <source file='/opt/yinzhengjie-kvm01.raw'/>
      <driver name='qemu' type='raw'/>
[root@yinzhengjie-kvm189 ~]# 


    2.修改虚拟机的磁盘文件名称和虚拟机名称相同
[root@yinzhengjie-kvm189 ~]# ll -h /opt/
total 4.4G
-rw-r--r--. 1 qemu qemu 4.4G Apr  7 19:33 CentOS-7-x86_64-DVD-2009.iso
drwxr-xr-x. 2 root root    6 Oct 31  2018 rh
-rw-------. 1 root root  10G Apr  7 19:46 yinzhengjie-kvm01.raw
[root@yinzhengjie-kvm189 ~]# 
[root@yinzhengjie-kvm189 ~]# 
[root@yinzhengjie-kvm189 ~]# mv /opt/{yinzhengjie-kvm01.raw,kvm-web01.raw} 
[root@yinzhengjie-kvm189 ~]# 
[root@yinzhengjie-kvm189 ~]# ll -h /opt/
total 4.4G
-rw-r--r--. 1 qemu qemu 4.4G Apr  7 19:33 CentOS-7-x86_64-DVD-2009.iso
-rw-------. 1 root root  10G Apr  7 19:46 kvm-web01.raw
drwxr-xr-x. 2 root root    6 Oct 31  2018 rh
[root@yinzhengjie-kvm189 ~]# 


    3.编辑虚拟机的配置文件
[root@yinzhengjie-kvm189 ~]# virsh edit kvm-web01 
...
<devices>
  ...
  <disk type='file' device='disk'>
    ...
    <!-- 注意哈,如下图所示,大概在45行左右,标签的名称为source,修改file的值为我们修改后的虚拟机磁盘文件即可。 -->
    <source file='/opt/kvm-web01.raw'/>
    ...
  </disk>
...


    4.启动虚拟机
[root@yinzhengjie-kvm189 ~]# virsh list --all
 Id    Name                           State
----------------------------------------------------
 -     kvm-web01                      shut off

[root@yinzhengjie-kvm189 ~]# 
[root@yinzhengjie-kvm189 ~]# virsh start kvm-web01 
Domain kvm-web01 started

[root@yinzhengjie-kvm189 ~]# 
[root@yinzhengjie-kvm189 ~]# virsh list --all
 Id    Name                           State
----------------------------------------------------
 4     kvm-web01                      running

[root@yinzhengjie-kvm189 ~]# 


    温馨提示:
        - 修改虚拟机磁盘文件一定要先关机虚拟机,修改后在启动虚拟机配置就会生效。

11.挂起虚拟机

[root@yinzhengjie-kvm189 ~]# virsh list --all
 Id    Name                           State
----------------------------------------------------
 5     yinzhengjie-kvm01              running

[root@yinzhengjie-kvm189 ~]# 
[root@yinzhengjie-kvm189 ~]# virsh suspend yinzhengjie-kvm01 
Domain yinzhengjie-kvm01 suspended

[root@yinzhengjie-kvm189 ~]# 
[root@yinzhengjie-kvm189 ~]# virsh list --all
 Id    Name                           State
----------------------------------------------------
 5     yinzhengjie-kvm01              paused

[root@yinzhengjie-kvm189 ~]# 


温馨提示:
    - 虚拟机挂起后,如果没有配置时间同步,挂起后的服务器时间是不会同步的。因此建议大家生产环境中一定要配置时间同步哟~
    - 挂起虚拟机后,该虚拟机将不能对外提供服务了哟;

12.恢复挂起

[root@yinzhengjie-kvm189 ~]# virsh list --all
 Id    Name                           State
----------------------------------------------------
 5     yinzhengjie-kvm01              paused

[root@yinzhengjie-kvm189 ~]# 
[root@yinzhengjie-kvm189 ~]# virsh resume yinzhengjie-kvm01 
Domain yinzhengjie-kvm01 resumed

[root@yinzhengjie-kvm189 ~]# 
[root@yinzhengjie-kvm189 ~]# virsh list --all
 Id    Name                           State
----------------------------------------------------
 5     yinzhengjie-kvm01              running

[root@yinzhengjie-kvm189 ~]#

13.查询VNC端口号

[root@yinzhengjie-kvm189 ~]# virsh list --all
 Id    Name                           State
----------------------------------------------------
 6     yinzhengjie-kvm01              running

[root@yinzhengjie-kvm189 ~]# 
[root@yinzhengjie-kvm189 ~]# ss -ntl | grep 5900
LISTEN     0      1            *:5900                     *:*                  
[root@yinzhengjie-kvm189 ~]# 
[root@yinzhengjie-kvm189 ~]# 
[root@yinzhengjie-kvm189 ~]# virsh vncdisplay yinzhengjie-kvm01 
:0

[root@yinzhengjie-kvm189 ~]# 



温馨提示:
    我们可以使用长端口(例如":5900")或者短端口(例如":0")进行来链接VNC哟~

14.KVM虚拟机启用开机自启动

    1.默认情况下,当虚拟机关机后,重启时是不会自动启动KVM虚拟机的
[root@yinzhengjie-kvm189 ~]# virsh list --all
 Id    Name                           State
----------------------------------------------------
 6     yinzhengjie-kvm01              running

[root@yinzhengjie-kvm189 ~]# 
[root@yinzhengjie-kvm189 ~]# virsh destroy yinzhengjie-kvm01 
Domain yinzhengjie-kvm01 destroyed

[root@yinzhengjie-kvm189 ~]# 
[root@yinzhengjie-kvm189 ~]# virsh list --all
 Id    Name                           State
----------------------------------------------------
 -     yinzhengjie-kvm01              shut off

[root@yinzhengjie-kvm189 ~]# 
[root@yinzhengjie-kvm189 ~]# systemctl restart libvirtd
[root@yinzhengjie-kvm189 ~]# 
[root@yinzhengjie-kvm189 ~]# virsh list --all
 Id    Name                           State
----------------------------------------------------
 -     yinzhengjie-kvm01              shut off

[root@yinzhengjie-kvm189 ~]# 



    2.配置KVM虚拟机开机自启动
[root@yinzhengjie-kvm189 ~]# ll /etc/libvirt/qemu/
total 8
drwx------. 3 root root   42 Apr 28  2021 networks
-rw-------. 1 root root 4253 Apr  8 01:16 yinzhengjie-kvm01.xml
[root@yinzhengjie-kvm189 ~]# 
[root@yinzhengjie-kvm189 ~]# virsh autostart yinzhengjie-kvm01  # 配置虚拟机开机自启动
Domain yinzhengjie-kvm01 marked as autostarted

[root@yinzhengjie-kvm189 ~]# 
[root@yinzhengjie-kvm189 ~]# ll /etc/libvirt/qemu/
total 8
drwxr-xr-x. 2 root root   35 Apr  8 01:29 autostart
drwx------. 3 root root   42 Apr 28  2021 networks
-rw-------. 1 root root 4253 Apr  8 01:16 yinzhengjie-kvm01.xml
[root@yinzhengjie-kvm189 ~]# 
[root@yinzhengjie-kvm189 ~]# ll /etc/libvirt/qemu/autostart/  # 开机自启动本质上是对应一个软连接哟~
total 0
lrwxrwxrwx. 1 root root 39 Apr  8 01:29 yinzhengjie-kvm01.xml -> /etc/libvirt/qemu/yinzhengjie-kvm01.xml
[root@yinzhengjie-kvm189 ~]# 
[root@yinzhengjie-kvm189 ~]# virsh destroy yinzhengjie-kvm01 
Domain yinzhengjie-kvm01 destroyed

[root@yinzhengjie-kvm189 ~]# 
[root@yinzhengjie-kvm189 ~]# virsh list --all
 Id    Name                           State
----------------------------------------------------
 -     yinzhengjie-kvm01              shut off

[root@yinzhengjie-kvm189 ~]# 
[root@yinzhengjie-kvm189 ~]# systemctl restart libvirtd  # 重启libvirtd软件,用于模拟重启宿主机的场景。
[root@yinzhengjie-kvm189 ~]# 
[root@yinzhengjie-kvm189 ~]# virsh list --all
 Id    Name                           State
----------------------------------------------------
 1     yinzhengjie-kvm01              running

[root@yinzhengjie-kvm189 ~]# 




温馨提示:
    - 我们使用的VMware Workstation pro是不支持虚拟机开机自启动的,但是我们的KVM虚拟机是支持开机自动的哟;
    - KVM虚拟机的开机自启动配置本质上就是创建了一个软连接文件,我们可以不使用autostart命令,直接创建软连接也可以达到相同的目的;

15.KVM虚拟机禁用开机自启动

[root@yinzhengjie-kvm189 ~]# ll /etc/libvirt/qemu/autostart/
total 0
lrwxrwxrwx. 1 root root 39 Apr  8 01:29 yinzhengjie-kvm01.xml -> /etc/libvirt/qemu/yinzhengjie-kvm01.xml
[root@yinzhengjie-kvm189 ~]# 
[root@yinzhengjie-kvm189 ~]# virsh autostart yinzhengjie-kvm01 --disable  # 执行该命令可以移除虚拟机开机自启动的效果
Domain yinzhengjie-kvm01 unmarked as autostarted

[root@yinzhengjie-kvm189 ~]# 
[root@yinzhengjie-kvm189 ~]# ll /etc/libvirt/qemu/autostart/  # 移除开机自启动本质上是移除了软连接文件。
total 0
[root@yinzhengjie-kvm189 ~]# 
[root@yinzhengjie-kvm189 ~]# virsh destroy yinzhengjie-kvm01 
Domain yinzhengjie-kvm01 destroyed

[root@yinzhengjie-kvm189 ~]# 
[root@yinzhengjie-kvm189 ~]# virsh list --all
 Id    Name                           State
----------------------------------------------------
 -     yinzhengjie-kvm01              shut off

[root@yinzhengjie-kvm189 ~]# 
[root@yinzhengjie-kvm189 ~]# systemctl restart libvirtd
[root@yinzhengjie-kvm189 ~]# 
[root@yinzhengjie-kvm189 ~]# virsh list --all
 Id    Name                           State
----------------------------------------------------
 -     yinzhengjie-kvm01              shut off

[root@yinzhengjie-kvm189 ~]# 


温馨提示:
    移除开机自启动功能本质上就是删除对应的软连接即可。

二.配置KVM的console替换VNC

1.连接KVM虚拟机

如上图所示,我们目前想要连接KVM虚拟机,则需要通过KVM宿主机来进行连接哟~

[root@yinzhengjie-kvm189 ~]# lscpu 
...
CPU(s):                4
...
Model name:            Intel(R) Core(TM) i7-8750H CPU @ 2.20GHz
...
Virtualization:        VT-x
Hypervisor vendor:     VMware
Virtualization type:   full
...
[root@yinzhengjie-kvm189 ~]# 

[root@yinzhengjie-kvm189 ~]# 
[root@yinzhengjie-kvm189 ~]# virsh list --all
 Id    Name                           State
----------------------------------------------------
 3     yinzhengjie-kvm01              running

[root@yinzhengjie-kvm189 ~]# 
[root@yinzhengjie-kvm189 ~]# ssh root@192.168.122.133
The authenticity of host '192.168.122.133 (192.168.122.133)' can't be established.
ECDSA key fingerprint is SHA256:8MKis0ft5XJlzznr4YirhjhlryeSf7rlzuO7eQOVYNk.
ECDSA key fingerprint is MD5:6e:d2:ee:ee:3f:7d:5b:42:f4:d6:b7:3a:9c:01:1e:e9.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.122.133' (ECDSA) to the list of known hosts.
root@192.168.122.133's password: 
Last login: Sun Apr  7 18:47:50 2024
[root@localhost ~]# 
[root@localhost ~]# lscpu 
...
CPU(s):                2
...
Model name:            Intel Core Processor (Broadwell, IBRS)
...
Hypervisor vendor:     KVM
Virtualization type:   full
...
[root@localhost ~]#

2.KVM虚拟机配置console控制台登录

[root@localhost ~]# grep console /etc/grub2.cfg  
terminal_output console
[root@localhost ~]# 
[root@localhost ~]# grubby --update-kernel=ALL --args="console=ttyS0,115200n8"
[root@localhost ~]# 
[root@localhost ~]# grep console /etc/grub2.cfg  
terminal_output console
    linux16 /boot/vmlinuz-3.10.0-1160.el7.x86_64 root=UUID=7b105f99-6f5f-4e9d-aebd-ed8277aff1a4 ro rhgb quiet LANG=en_US.UTF-8 console=ttyS0,115200n8
    linux16 /boot/vmlinuz-0-rescue-deba0e3c7486424a9dd7b4f0488f7ec9 root=UUID=7b105f99-6f5f-4e9d-aebd-ed8277aff1a4 ro rhgb quiet console=ttyS0,115200n8
[root@localhost ~]# 
[root@localhost ~]# reboot 
Connection to 192.168.122.133 closed by remote host.
Connection to 192.168.122.133 closed.
[root@yinzhengjie-kvm189 ~]# 


温馨提示:
    上述两条命令必须在KVM虚拟机中执行,不能在KVM的宿主机执行哟~

3.连接console虚拟机

如上图所示,我们已经成功连接到console虚拟机啦~


温馨提示:
    - kvm的console功能,是字符界面的连接管理工具,支持复制粘贴;
    - 有了console功能,基本上可以不使用vnc客户端啦;
    - vnc有使用限制,要求VNC客户端和KVM虚拟机网络必须互通,如果不互通的话就无法使用,因此建议大家生产环境中多用console少用VNC;
目录
相关文章
49Linux - 系统管理(关机重启:reboot、shutdown、init)
49Linux - 系统管理(关机重启:reboot、shutdown、init)
33 0
|
3月前
|
Shell KVM 虚拟化
shell kvm 虚拟机镜像管理-自动创建删除停止和启动 qcow2 虚拟机
这是一个用于自动创建 KVM 虚拟机的 Bash 脚本。用户可以选择创建、删除、启动、关闭虚拟机或查看虚拟机的 IP 地址。脚本支持 Debian 12 和 Ubuntu 22.04 系统,并允许用户配置 CPU 线程数和内存大小。脚本会检查服务器的资源情况,确保输入的配置不会超过可用资源。
57 0
|
5月前
|
存储 XML KVM
Libvirt的virsh工具常用命令
Libvirt的virsh工具常用命令
|
6月前
|
XML 数据格式
virsh一个管理虚拟机的命令行工具
virsh是一个管理虚拟机的命令行工具,提供了丰富的命令来查看、创建、管理虚拟机。以下是一些常用的virsh命令: 1. **查看帮助和版本**: - `virsh --help`:查看virsh命令的帮助信息。 - `virsh -version`:查看virsh的版本信息。 2. **查看虚拟机**: - `virsh list`:显示当前正在运行的虚拟机。 - `virsh list --all`:显示主机下的所有虚拟机,包括未运行的。 3. **创建和管理虚拟机**: - `virsh define xml`:使用XML文件定义(创建)虚拟机。
323 0
|
XML Shell API
【KVM虚拟化】· virsh管理命令
【KVM虚拟化】· virsh管理命令
374 0
|
KVM 虚拟化
KVM管理命令
KVM管理
127 0
Linux Command dmsetup管理LVM
Linux Command dmsetup管理LVM
|
存储 XML 运维
|
KVM 虚拟化
KVM学习之 virsh常用命令记录
KVM学习之 virsh常用命令记录
278 0
|
Linux KVM 虚拟化
【CentOS】配置kvm虚拟机virsh Console连接
配置KVM虚拟化中,虚拟机的console串口连接终端
827 0
【CentOS】配置kvm虚拟机virsh Console连接