一.虚拟机日常使用命令
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;