linux-运维进阶-30 KVM

linux-运维进阶-30 KVM

KVM

概念解析

  Kernel-based Virtual Machine的简称,是一个开源的系统虚拟化模块,自Linux 2.6.20之后集成在Linux的各个主要发行版本中。它使用Linux自身的调度器进行管理,所以相对于Xen,其核心源码很少。KVM目前已成为学术界的主流VMM( Virtual Machine Monitor,虚拟机监控器)之一。

检测虚拟化功能

  如下图,把这个勾勾上,另外,做实验用的Server处理器和内存调大一些,因为接下来咱们要在虚拟机Server里新建虚拟机,也就是所谓的“虚拟机里的虚拟机”。

加一张桥接模式的网卡

  KVM 是基于 x86 虚拟化扩展(Intel VT 或者 AMD-V) 技术的虚拟机软件,所以查看 CPU 是否支持 VT 技术,就可以判断是否支持KVM。有返回结果,如果结果中有vmx(Intel)或svm(AMD)字样,就说明CPU的支持的。

1
2
3
[root@localhost ~]# cat /proc/cpuinfo | egrep 'vmx|svm'

请看下图:

  关掉防火墙,关闭SELinux,将 /etc/sysconfig/selinux 中的 SELinux=enforcing 修改为 SELinux=disabled,这里注意,改了重启后才生效。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# systemctl disable firewalld
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@localhost ~]#
[root@localhost ~]# vim /etc/sysconfig/selinux
SELINUX=disabled

保存退出
[root@localhost ~]# getenforce
Enforcing
[root@localhost ~]# reboot


重启后再次查看:
[root@localhost ~]# getenforce
Disabled
[root@localhost ~]#

说明已经关闭了selinux

安装kvm环境

通过 yum 安装 kvm 基础包和管理工具

kvm相关安装包及其作用:

  • qemu-kvm 主要的KVM程序包
  • python-virtinst 创建虚拟机所需要的命令行工具和程序库
  • virt-manager GUI虚拟机管理工具
  • virt-top 虚拟机统计命令
  • virt-viewer GUI连接程序,连接到已配置好的虚拟机
  • libvirt C语言工具包,提供libvirt服务
  • libvirt-client 为虚拟客户机提供的C语言工具包
  • virt-install 基于libvirt服务的虚拟机创建命令
  • bridge-utils 创建和管理桥接设备的工具
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
安装kvm基础包和管理工具

[root@localhost ~]# yum -y install qemu-kvm python-virtinst libvirt libvirt-python virt-manager libguestfs-tools bridge-utils virt-install python-virtualenv


其中有一个安装包python-virtinst特别坑,以前是可以直接用yum安装成功的,但是现在yum软件仓库里已经没有这个包了,即使是用命令:yum install epel-release安装并启用EPEL源后,也依然会提示没有可用包python-virtinst。yum软件仓库里没有,rpm软件仓库里倒是有,但是我尝试了n个版本,不是与这个冲突就是和那个矛盾,能把人气死,最后利用github开源出来的python-virtinst包安装终于成功了,实验才得以继续下去。
另外,如果你的python-virtinst包没有安装成功的话,后面虚拟机里安装虚拟机的时候,会总是报错:Kernel panic - not syncing: Fatal exception in inter,无论怎么也装不好。



关机,保存快照,以防后面实验手滑敲错。
[root@localhost ~]# poweroff

开机,查看KVM模块是否被正确加载
[root@localhost ~]# lsmod | grep kvm
kvm_intel 174841 0
kvm 578518 1 kvm_intel
irqbypass 13503 1 kvm
[root@localhost ~]#

如下图,将上述yum命令再次执行,可以发现其他包都装好了,就python-virtinst最坑,我们后面再来安装它。

开启kvm服务,并且设置其开机自动启动

1
2
[root@localhost ~]# systemctl restart libvirtd
[root@localhost ~]# systemctl enable libvirtd

安装Linux虚拟机

  安装前要设置环境语言为英文LANG=”en_US.UTF-8”,如果是中文的话某些版本可能会报错。CentOS 7 在这里修改 /etc/locale.conf。

1
2
[root@localhost ~]# vim /etc/locale.conf 
LANG="en_US.UTF-8"

准备安装目录和系统镜像

1
2
3
[root@localhost ~]# mkdir /kvm/
[root@localhost ~]# mkdir /kvm/vms
[root@localhost ~]# mkdir /kvm/iso

下载centos镜像的网站:

https://www.centos.org/download/

下载个Minimal的就行,迷你版比较小,下载起来比较快嘛!我这里用的是1804版本的。

安装上传下载工具lrzsz,然后上传系统镜像到/kvm/iso目录中

1
2
3
4
5
6
7
8
[root@localhost ~]# yum install lrzsz -y
[root@localhost ~]# cd /kvm/iso/
[root@localhost iso]# ls
[root@localhost iso]# rz

[root@localhost iso]# ls
CentOS-7-x86_64-Minimal-1810.iso
[root@localhost iso]#

定义一个储存池,绑定目录,建立并激活存储池,后面会用这个存储池创建虚拟机

1
2
3
4
5
6
7
8
[root@localhost iso]# virsh pool-define-as vmspool --type dir --target /kvm/vms
Pool vmspool defined

[root@localhost iso]# virsh pool-build vmspool
Pool vmspool built

[root@localhost iso]# virsh pool-start vmspool
Pool vmspool started

现在来安装python-virtinst

1
2
3
4
5
6
7
8
[root@localhost ~]# yum install git -y
[root@localhost ~]# git clone https://github.com/palli/python-virtinst.git
[root@localhost ~]# ls
anaconda-ks.cfg python-virtinst
[root@localhost ~]# cd python-virtinst/
[root@localhost python-virtinst]# python setup.py install
[root@localhost python-virtinst]# cd
[root@localhost ~]#

先安装ntp服务,下面虚拟机里安装虚拟机的时候才方便,不用再另外添加ntp服务器。

1
yum install ntp -y

接下来关机保存快照,以防下面实验手滑

1
[root@localhost ~]# poweroff

安装linux虚拟机,名字就叫centos7_01吧:

1
[root@localhost ~]# virt-install --virt-type=kvm --name=centos7_01 --vcpus=2 --ram=512 --location=/kvm/iso/CentOS-7-x86_64-Minimal-1810.iso --disk  path=/kvm/vms/centos7_01.qcow2,device=disk,format=qcow2,bus=virtio,cache=writeback,size=100 --network bridge=virbr0 --graphics none --extra-args='console=ttyS0' --force

命令说明:

  • –name 指定虚拟机的名称
  • –ram 指定分配给虚拟机的内存资源大小
  • maxmemory 指定可调节的最大内存资源大小,因为KVM支持热调整虚拟机的资源
  • –vcpus 指定分配给虚拟机的CPU核心数量
  • maxvcpus 指定可调节的最大CPU核心数量
  • –os-type 指定虚拟机安装的操作系统类型
  • –os-variant 指定系统的发行版本
  • –location 指定ISO镜像文件所在的路径,支持使用网络资源路径,也就是说可以使用URL
  • –disk path 指定虚拟硬盘所存放的路径及名称,size 则是指定该硬盘的可用大小,单位是G
  • –bridge 指定使用哪一个桥接网卡,也就是说使用桥接的网络模式
  • –graphics 指定是否开启图形
  • –console 定义终端的属性,target_type 则是定义终端的类型
  • –extra-args 定义终端额外的参数

系统配置

  带 [!] 基本都是要配置的,按照顺序往下配置,按对用的数字以此进行设置。配置一下时间时区,第三第四第五第六项会自动检测好,接下来配置一下第八项的密码即可。

  此处配置截图太多,可参考这个教程里的截图:http://blog.51cto.com/zero01/2083896

详细步骤:

1.首先,一开始我们看到的是:

这里设置语言建议设置成英文的,不然后面玩虚拟机的时候会有乱码。

2.设置语言,按数字1,回车进入以下界面,例如我要选Chinese就按数字68并回车即可,回车之后会让你选择是中文简体还是繁体,也是按下相应的数字并回车即可:

3.配置完成之后又会再次回到配置界面,这次我们来设置时区:

4.设置成亚洲上海的时区即可。

5.设置系统安装盘:

选择标准分区

6.设置root用户的密码:

7.设置完root密码后,可以看到1到9所有选项都没有感叹号了,这表是要求你设置的选项你都设置完毕了,敲b开始安装系统:

8.安装完成之后就会停止在以下这个界面,按一下回车即可,这时就会重启安装完的系统:

重启成功之后就会入到登录界面,可以看到我这里是成功登录的,登录上去,将它改名为centos。

  这时我们是处于一个虚拟终端的,因为安装了虚拟机,如果要退出来的话,应该说是切出来,按 Ctrl + ]即可。然后再次登录,如下图:

1
2
3
4
5
6
7
8
9
10
11
[root@localhost ~]# 	#这里按Ctrl + ],然后回车,就退出了虚拟终端
[root@localhost ~]# virsh console --domain centos7_01 #再次连接虚拟终端
Connected to domain centos7_01
Escape character is ^]

[root@localhost ~]# hostname #在虚拟终端里查看主机名称
centos
[root@localhost ~]# #这里再次按Ctrl + ],然后回车,就退出了虚拟终端
[root@localhost ~]# hostname #现在查看咱们虚拟机的主机名称
localhost.localdomain
[root@localhost ~]#

现在关机保存快照(给宿主机保存快照)

1
[root@localhost ~]# poweroff

使用以下命令可以列出当前有多少个虚拟机,以及其状态,但是无法列出关机状态的虚拟机:

1
2
3
4
5
6
[root@localhost ~]# virsh list
Id Name State
----------------------------------------------------
2 centos7_01 running

[root@localhost ~]#

需要列出关机状态的虚拟机需要加多一个–all参数

查看所有虚拟机和进入控制台

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[root@localhost ~]# virsh list --all
Id Name State
----------------------------------------------------
6 centos7_01 running
[root@localhost ~]# virsh console --domain centos7_01
Connected to domain centos7_01
Escape character is ^]

CentOS Linux 7 (Core)
Kernel 3.10.0-862.el7.x86_64 on an x86_64

localhost login: root
Password:
Last login: Sun Sep 2 10:34:40 on ttyS0
[root@localhost ~]#

以下介绍一下管理虚拟机的一些常用命令:

1
2
3
4
5
6
7
8
9
[root@localhost ~]# virsh console centos7_01 # 进入指定的虚拟机,进入的时候还需要按一下回车
[root@localhost ~]# virsh start centos7_01 # 启动虚拟机
[root@localhost ~]# virsh shutdown centos7_01 # 关闭虚拟机
[root@localhost ~]# virsh destroy centos7_01 # 强制停止虚拟机
[root@localhost ~]# virsh undefine centos7_01 # 彻底销毁虚拟机,会删除虚拟机配置文件,但不会删除虚拟磁盘
[root@localhost ~]# virsh autostart centos7_01 # 设置宿主机开机时该虚拟机也开机
[root@localhost ~]# virsh autostart --disable centos7_01 # 解除开机启动
[root@localhost ~]# virsh suspend centos7_01 # 挂起虚拟机
[root@localhost ~]# virsh resume centos7_01 # 恢复挂起的虚拟机

以下实验很乱,可以不做

配置宿主机网络

1.KVM 虚拟机是基于 NAT 的网络配置;

2.只有同一宿主机的虚拟机之间可以互相访问,跨宿主机是不能访问;

3.虚拟机需要和宿主机配置成桥接模式,以便虚拟机可以在局域网内可见;

4.宿主机指的是我们用VMware Workstation Pro安装的虚拟机,它相对于虚拟机里面的虚拟机就是宿主。

5.我们之前virt install 的时候,有个参数是bridge=virbr0,用的桥接网卡已经指定为virbr0了。

Bridge模式配置

  Bridge方式即虚拟网桥的网络连接方式,是客户机和子网里面的机器能够互相通信。可以使虚拟机成为网络中具有独立IP的主机。桥接网络(也叫 物理设备共享)被用作把一个物理设备复制到一台虚拟机。网桥多用作高级设置,特别是主机多个网络接口的情况。

1
2
3
4
5
6
7
[root@localhost ~]# yum install -y net-tools	#装了网络工具才能用命令:ifconfig
[root@localhost ~]# systemctl restart libvirtd



[root@localhost ~]# virsh iface-bridge ens33 br0
[root@localhost ~]# ifconfig

修改宿主机物理网卡配置(UUID不用改,它是设备标识号)

1
2
3
4
5
6
7
8
9
10
11
12
[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33

删掉其他无用的行,保留下列4行,另外加一行BRIDGE=“virbr0",保存退出即可

TYPE=Ethernet
BOOTPROTO=none
NAME="ens33"
UUID="005e11a3-2859-4497-adc1-d531ddc2675f"
DEVICE="ens33"
ONBOOT="yes"
BRIDGE=“virbr0"
NM_CONTROLLED="no"

  修改宿主机网桥配置(宿主机里面的虚拟机与宿主机是桥接关系,我的ens33网卡之前是192.168.141.72,这里将virbr0改为这个ip之后,ens33网卡就没有ip了,重启网络后Xshell也会断开,接下来在vmware workstation里继续实验)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-virbr0

TYPE="Bridge"
BOOTPROTO="static"
DEFROUTE="yes"
PEERDNS="yes"
PEERROUTES="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_PEERDNS="yes"
IPV6_PEERROUTES="yes"
IPV6_PRIVACY="no"
IPV6_FAILURE_FATAL="no"
UUID="005e11a3-2859-4497-adc1-d531ddc2675f"
STP="yes"
DELAY="0"
NAME="virbr0"
DEVICE="virbr0"
ONBOOT="yes"
IPADDR="192.168.141.72"
PREFIX="24"
GATEWAY="192.168.141.2"

两个网卡都修改完成后重启网络

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

[root@localhost ~]# systemctl restart network

现在Xshell断开,我们接下来在vmware workstation里继续实验

[root@localhost ~]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
ether 00:0c:29:d3:48:93 txqueuelen 1000 (Ethernet)
RX packets 7606 bytes 649199 (633.9 KiB)
RX errors 0 dropped 2 overruns 0 frame 0
TX packets 7392 bytes 1114718 (1.0 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0


virbr0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.141.72 netmask 255.255.255.0 broadcast 192.168.9.255
ether 00:0c:29:d3:48:93 txqueuelen 1000 (Ethernet)
RX packets 2157 bytes 153841 (150.2 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 1109 bytes 146573 (143.1 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

[root@localhost ~]# brctl show
bridge name bridge id STP enabled interfaces
virbr0 8000.000c29d34893 yes ens33
virbr0-nic
vnet1

可以看到ens33网卡已经没有ip了,也可以看到virbr0的接口变成ens33了

进入虚拟机centos7_01测试(如果它关机了的话,virsh start centos7_01 # 启动虚拟机)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[root@localhost ~]# virsh console centos7_01
Connected to domain centos7_01
Escape character is ^]

CentOS Linux 7 (Core)
Kernel 3.10.0-862.el7.x86_64 on an x86_64

localhost login: root
Password:
Last login: Sun Sep 2 10:35:29 on ttyS0
[root@localhost ~]# ping 192.168.141.72
PING 192.168.141.72 (192.168.141.72) 56(84) bytes of data.
64 bytes from 192.168.141.72: icmp_seq=1 ttl=64 time=0.310 ms
64 bytes from 192.168.141.72: icmp_seq=2 ttl=64 time=0.231 ms

如果之前装系统选的是中文简体,这里改回英文,重启虚拟机,注意宿主机不用重启。

1
2
[root@localhost ~]# vim /etc/locale.conf 
LANG="en_US.UTF-8"

配置宿主机网络-NAT模式

  NAT(Network Address Translation网络地址翻译),NAT方式是kvm安装后的默认方式。它支持主机与虚拟机的互访,同时也支持虚拟机访问互联网,但不支持外界访问虚拟机。

  其中virbr0是由宿主机虚拟机支持模块安装时产生的虚拟网络接口,也是一个switch和bridge,负责把内容分发到各虚拟机。几个虚拟机管理模块产生的接口关系如下图:

1KQX5j.png

  从图上可以看出,虚拟接口和物理接口之间没有连接关系,所以虚拟机只能在通过虚拟的网络访问外部世界,无法从网络上定位和访问虚拟主机。

virbr0是一个桥接器,接收所有到网络192.168.122.*的内容。从下面命令可以验证:

1
2
3
4
5
6
7
8
9
10
11
12
[root@localhost ~] brctl show
# 输出结果
# ---------------------
# bridge name bridge id STP enabled interfaces
# br0 8000.3863bb44cf6c no eno1
# vnet0
# virbr0 8000.525400193f0f yes virbr0-nic
ip route
# default via 192.168.188.1 dev br0
# 169.254.0.0/16 dev br0 scope link metric 1012
# 192.168.122.0/24 dev virbr0 proto kernel scope link src 192.168.122.1
# 192.168.188.0/24 dev br0 proto kernel scope link src 192.168.188.132

同时,虚拟机支持模块会自动修改iptables规则,通过命令可以查看:

1
2
[root@localhost ~] iptables -t nat -L -nv
[root@localhost ~] iptables -t filter -L -nv

创建名为management的NAT网络,vi /usr/share/libvirt/networks/management.xml

1
2
3
4
5
6
7
8
9
10
<network>
<name>management</name>
<bridge name="virbr1"/>
<forward/>
<ip address="192.168.123.1" netmask="255.255.255.0">
<dhcp>
<range start="192.168.123.2" end="192.168.123.254"/>
</dhcp>
</ip>
</network>

启用新建的NAT网络

1
2
3
[root@localhost ~] virsh net-define /usr/share/libvirt/networks/management.xml
[root@localhost ~] virsh net-start management
[root@localhost ~] virsh net-autostart management

安装windows虚拟机

1
[root@localhost vms]# virt-install -n windowsxp -r 512 --disk /kvm/vms/winxp.img,format=qcow2,size=5 --network bridge=virbr1 --os-type=windows --os-variant=winxp --cdrom /kvm/iso/winxp.iso --vnc --vncport=5900 --vnclisten=0.0.0.0

windows用vnc远程屏幕

克隆虚拟机

  • virt-clone 参数介绍
  • –version 查看版本。
  • -h,–help 查看帮助信息。
  • –connect=URI 连接到虚拟机管理程序 libvirt 的URI。
  • -o 原始虚拟机名称 原始虚拟机名称,必须为关闭或者暂停状态。
  • -n 新虚拟机名称 –name 新虚拟机名称。
  • –auto-clone 从原来的虚拟机配置自动生成克隆名称和存储路径。
  • -u NEW_UUID, –uuid=NEW_UUID 克隆虚拟机的新的UUID,默认值是一个随机生成的
  • UUID。
  • -m NEW_MAC, –mac=NEW_MAC 设置一个新的mac地址,默认为随机生成 MAC。
  • -f NEW_DISKFILE, –file=NEW_DISKFILE 为新客户机使用新的磁盘镜像文件地址。
  • –force-copy=TARGET 强制复制设备。
  • –nonsparse 不使用稀疏文件复制磁盘映像。
1
2
3
4
# 暂停原始虚拟机
[root@localhost ~] virsh shutdown centos7_01
[root@localhost ~] virt-clone -o centos7_01 -n centos7_02 -f /kvm/vms/centos7_02.qcow2 -m 00:00:00:00:00:01
[root@localhost ~] virt-clone -o centos7_01 -n centos7_03 --file /kvm/vms/centos7_03.qcow2 --nonsparse

通过镜像创建虚拟机

创建虚拟机镜像文件

1
2
3
4
5
6
# 复制第一次安装的干净系统镜像,作为基础镜像文件,
# 后面创建虚拟机使用这个基础镜像
[root@localhost ~]# mkdir /kvm/img
[root@localhost ~]# cp /kvm/vms/centos7_01.qcow2 /kvm/img/centos7_base.qcow2
# 使用基础镜像文件,创建新的虚拟机镜像
[root@localhost ~]# cp /kvm/img/centos7_base.qcow2 /kvm/vms/centos7_05.qcow2

创建虚拟机配置文件

1
2
3
4
5
6
7
8
# 复制第一次安装的干净系统镜像,作为基础配置文件。
[root@localhost ~] virsh dumpxml centos7_01 > /kvm/img/centos7_base.xml

# 使用基础虚拟机镜像配置文件,创建新的虚拟机配置文件
[root@localhost ~] cp /kvm/img/centos7_base.xml /kvm/vms/centos7_05.xml

# 编辑新虚拟机配置文件
[root@localhost ~] vi /kvm/vms/centos7_05.xml

主要是修改虚拟机文件名,UUID,镜像地址和网卡地址,其中 UUID 在 Linux 下可以使用 uuidgen 命令生成

1
2
3
4
5
6
7
8
9
10
11
12
<domain type='kvm'>
<name>centos7_05</name>
<uuid>1e86167a-33a9-4ce8-929e-58013fbf9122</uuid>
<devices>
<disk type='file' device='disk'>
<source file='/kvm/vms/centos7_05.img'/>
</disk>
<interface type='bridge'>
<mac address='00:00:00:00:00:04'/>
</interface>
</devices>
</domain>
1
2
[root@localhost ~] virsh define /kvm/vms/centos7_05.xml
# Domain centos7_05 defined from /kvm/vms/centos7_05.xml

挂载磁盘

创建镜像文件

1
[root@localhost ~] qemu-img create /kvm/vms/centos7_01_1.img 5G

创建普通的qcow2格式镜像文件

1
2
3
4
# 创建 centos7_01_1 所需的磁盘
# create 表示创建,-f qcow2 表示创建一个格式为 qcow2 的磁盘,
# /kvm/vms/centos7_05.qcow2 表示创建的磁盘名称及磁盘文件,10G 表示该磁盘可用大小。
qemu-img create -f qcow2 -o preallocation=metadata /kvm/vms/centos7_05_1.qcow2 5G

挂载方法:

1
[root@localhost ~] virsh attach-disk centos7_05 /kvm/vms/centos7_05_1.qcow2 vdb  --cache none

常用命令说明

virt-install

常用参数说明1

1
2
3
4
5
6
7
8
9
10
11
12
–name指定虚拟机名称
–memory分配内存大小。
–vcpus分配CPU核心数,最大与实体机CPU核心数相同
–disk指定虚拟机镜像,size指定分配大小单位为G。
–network网络类型,此处用的是默认,一般用的应该是bridge桥接。
–accelerate加速
–cdrom指定安装镜像iso
–vnc启用VNC远程管理,一般安装系统都要启用。
–vncport指定VNC监控端口,默认端口为5900,端口不能重复。
–vnclisten指定VNC绑定IP,默认绑定127.0.0.1,这里改为0.0.0.0。
–os-type=linux,windows
–os-variant=rhel6

virt-install

常用参数说明2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
--name      指定虚拟机名称
--ram 虚拟机内存大小,以 MB 为单位
--vcpus 分配CPU核心数,最大与实体机CPU核心数相同
–-vnc 启用VNC远程管理,一般安装系统都要启用。
–-vncport 指定VNC监控端口,默认端口为5900,端口不能重复。
–-vnclisten 指定VNC绑定IP,默认绑定127.0.0.1,这里改为0.0.0.0。
--network 虚拟机网络配置
# 其中子选项,bridge=br0 指定桥接网卡的名称。

–os-type=linux,windows
–os-variant=rhel7.2

--disk 指定虚拟机的磁盘存储位置
# size,初始磁盘大小,以 GB 为单位。

--location 指定安装介质路径,如光盘镜像的文件路径。
--graphics 图形化显示配置
# 全新安装虚拟机过程中可能会有很多交互操作,比如设置语言,初始化 root 密码等等。
# graphics 选项的作用就是配置图形化的交互方式,可以使用 vnc(一种远程桌面软件)进行链接。
# 我们这列使用命令行的方式安装,所以这里要设置为 none,但要通过 --extra-args 选项指定终端信息,
# 这样才能将安装过程中的交互信息输出到当前控制台。
--extra-args 根据不同的安装方式设置不同的额外选项

virsh

基础命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
virsh list                 # 查看在运行的虚拟机
virsh dumpxml vm-name # 查看kvm虚拟机配置文件
virsh start vm-name # 启动kvm虚拟机
virsh shutdown vm-name # 正常关机

virsh destroy vm-name # 非正常关机,强制关闭虚拟机(相当于物理机直接拔掉电源)
virsh undefine vm-name # 删除vm的配置文件

ls /etc/libvirt/qemu
# 查看删除结果,Centos的配置文件被删除,但磁盘文件不会被删除

virsh define file-name.xml # 根据配置文件定义虚拟机
virsh suspend vm-name # 挂起,终止
virsh resumed vm-name # 恢复被挂起的虚拟机
virsh autostart vm-name # 开机自启动vm
virsh console <虚拟机名称> # 连接虚拟机

错误解决

如果出现以下字符串使用 CTRL+Shift+5或者CTRL+Shift+]

1
2
3
console test
Connected to domain test
Escape character is ^]

彻底删除一个虚拟机(以centos7_01为例)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
[root@localhost ~]# virsh
Welcome to virsh, the virtualization interactive terminal.

Type: 'help' for help with commands
'quit' to quit

virsh # list
Id Name State
----------------------------------------------------
7 windowsxp running
12 centos7_01 running

virsh # shutdown centos7_01
Domain centos7_01 is being shutdown

virsh # destroy centos7_01
Domain centos7_01 destroyed

virsh # undefine centos7_01
Domain centos7_01 has been undefined

virsh # exit

[root@localhost ~]# rm -rf /kvm/vms/centos7_01.qcow2
[root@localhost ~]#

本篇到此结束。

欢迎打赏,谢谢
------ 本文结束------
0%