1.virsh查看/管理虚拟机
问题
本案例要求熟悉KVM虚拟化的virsh管理工具的的基本使用,从命令行来操作虚拟机,完成以下基本任务:
1)查看KVM服务器信息
2)列出有哪些虚拟机、指定虚拟机的状态
3)基本的开关机操作
4)将虚拟机设置为自动运行
方案
virsh命令行管理的常见用法:
1)virsh:直接进交互模式
2)virsh nodeinfo:查看KVM节点(服务器)信息
3)virsh list:列出正在运行的虚拟机
4)virsh list --all:列出所有虚拟机(包括未启动的)
5)virsh dominfo 虚拟机名称:查看指定虚拟机的信息
6)virsh start 虚拟机名称:将指定的虚拟机开机
7)virsh reboot 虚拟机名称:将指定的虚拟机重启
8)virsh shutdown 虚拟机名称:将指定的虚拟机正常关机
9)virsh destroy 虚拟机名称:将指定的虚拟机强制关机(相当于拔电源)
10)virsh autostart 虚拟机名称:将指定的虚拟机设置随KVM自动开机
11)virsh autostart --disable 虚拟机名称:禁止自动开机
步骤
实现此案例需要按照如下步骤进行。
步骤一:直接使用virsh交互模式
执行不带任何参数的virsh命令,即可进入交互模式。在virsh交互模式下,可以快速、连续地执行多条虚拟机管理指令,不用每次都指定virsh,最后再exit退出;这种方式与在Shell命令行执行virsh时后面跟上虚拟机管理指令的作用是等效的。
[root@kvmsvr ~]# virsh //进入virsh交互模式
欢迎使用 virsh,虚拟化的交互式终端。
输入:‘help’ 来获得命令的帮助信息
‘quit’ 退出
3 rh6_n1 running
3 rh6_n1 running
testpc 关闭
rh6_n1 关闭
testpc 关闭
4 rh6_n1 running
testpc 关闭
5 rh6_n1 running
testpc 关闭
[root@kvmsvr ~]# virsh destroy rh6_n1 //强制关闭rh6_n1虚拟机
域 rh6_n1 被删除
rh6_n1 关闭
testpc 关闭
5)虚拟机rh6_n1的自动开机设置
一台KVM虚拟机的“自动启动”状态,决定了当KVM服务器启动的时候,这台虚拟机是否也随之一起开机。启用此功能的virsh指令为autostart:
[root@kvmsvr ~]# virsh dominfo rh6_n1 //查看默认的状态
Id: -
名称: rh6_n1
… …
自动启动: 禁用 //不随KVM自动开机
… …
[root@kvmsvr ~]# virsh autostart rh6_n1 //设置rh6_n1为自启动
域 rh6_n1标记为自动开始
[root@kvmsvr ~]# virsh dominfo rh6_n1 //确认配置结果
Id: -
名称: rh6_n1
… …
自动启动: 启用 //随KVM自动开机
… …
若要关闭指定虚拟机的自动开机设置,需要执行virsh指令autostrt --disable:
[root@kvmsvr ~]# virsh autostart --disable rh6_n1 //取消rh6_n1的自启动
域 rh6_n1取消标记为自动开始
[root@kvmsvr ~]# virsh dominfo rh6_n1 //确认取消结果
Id: -
名称: rh6_n1
… …
自动启动: 禁用 //不随KVM自动开机
… …
2.利用XML调整/复制虚拟机
问题
在KVM服务器上,利用XML描述文件来调整/复制虚拟机,主要任务如下:
1)将虚拟机 rh6_n1 改名为 rhel6_node1
2)将虚拟机 rhel6_node1 复制为rh6_n2
方案
要运行一台KVM虚拟机,需要提供虚拟机的磁盘文件,还需要指定这台虚拟机的硬件配置。通常情况下,虚拟机的磁盘文件和配置文件放在下列位置:
1)配置文件:/etc/libvirt/qemu/虚拟机名.xml
2)磁盘文件:/var/lib/libvirt/images/虚拟机名.img
其中,用来记录虚拟机硬件的配置文件采用了XML(eXtensible Markup Language,可扩展标记语言)格式,也叫做描述文件。当我们从“虚拟系统管理器”新建虚拟机以后,对应的XML文件也就自动建好了。
也正因为如此,从命令行来管理KVM虚拟机的时候,就可以利用XML描述文件,来快速修改虚拟机的设置,也可以复制虚拟机。
利用XML文件修改虚拟机配置的基本思路:
1)virsh dumpxml 原虚拟机名 > /路径/new.xml
2)修改 /路径/new.xml 文件(name、uuid)
3)virsh define /路径/new.xml
4)virsh destroy 原虚拟机名,如果虚拟机未运行则跳过此步
5)virsh undefine 原虚拟机名
利用XML文件复制虚拟机的基本思路:
1)virsh dumpxml 原虚拟机名 > /路径/new.xml
2)修改 /路径/new.xml 文件(name、uuid、disk、mac address)
3)拷贝原虚拟机磁盘文件为新的虚拟机磁盘文件
4)virsh define /路径/new.xml
步骤
实现此案例需要按照如下步骤进行。
步骤一: 了解查看/导出XML描述的基本操作
1)查看虚拟机rh6_n1的XML描述信息
[root@kvmsvr ~]# virsh dumpxml rh6_n1
… …
rh6_n1 //名称
dae4cb37-0a80-75c3-5853-07d5187073c7 //UUID值
1048576
1048576 //内存大小
1 //CPU数量
… …
2)将虚拟机rh6_1的XML描述导出到/root/new.xml文件
[root@kvmsvr ~]# virsh dumpxml rh6_n1 > /root/new.xml //导出XML文件
[root@kvmsvr ~]# less /root/new.xml //确认结果
… …
rh6_n1
dae4cb37-0a80-75c3-5853-07d5187073c7
1048576
1048576
1
… …
步骤二:将虚拟机 rh6_n1 改名为 rhel6_node1
1)导出虚拟机 rh6_n1 的XML描述信息,保存为 new.xml 文件
[root@kvmsvr ~]# virsh dumpxml rh6_n1 > new.xml
2)修改导出的new.xml文件
[root@kvmsvr ~]# uuidgen //获取新的UUID值
c33a4aad-c555-48b3-a0a9-893ad0b4775e
[root@kvmsvr ~]# vim new.xml
rhel6_node1 //修改为新的虚拟机名称
c33a4aad-c555-48b3-a0a9-893ad0b4775e //修改UUID值
… …
3)根据 new.xml 建立新的虚拟机
[root@kvmsvr ~]# virsh define new.xml //导入新虚拟机描述
定义域 rhel6_node1(从 new.xml)
1 rh6_n1 启用
rhel6_node1 关闭
… …
4)删除原虚拟机的 XML 描述
[root@kvmsvr ~]# virsh destroy rh6_n1 //强制关机
域 rh6_n1 被删除
[root@kvmsvr ~]# virsh undefine rh6_n1 //删除虚拟机定义
域 rh6_n1 已经被取消定义
rhel6_node1 关闭
… …
步骤三:将虚拟机 rhel6_node1 复制为rh6_n2
1)导出虚拟机 rhel6_node1 的XML描述信息,保存为 rh6_n2.xml 文件
[root@kvmsvr ~]# virsh dumpxml rhel6_node1 > rh6_n2.xml
2)修改导出的 rh6_n2.xml文件
[root@kvmsvr ~]# uuidgen //获取新的UUID值
bfdce427-fca8-48a7-ae6c-0dd94daa2ceb
rhel6_node1 关闭
rh6_n2 关闭
… …
3.虚拟机其他操作
问题
关于KVM虚拟机管理的其他操作:
1)通过virt-viewer直接访问虚拟机
2)使用virt-clone为现有的虚拟机创建克隆
方案
在KVM虚拟化服务器的桌面环境中,可以绕过virt-manager虚拟系统管理器,通过virt-viewer工具直接访问指定的虚拟机,基本用法:
virt-viewer 虚拟机名称
另外可以通过virt-clone命令来克隆一台虚拟机,效果相当于练习二中的虚拟机复制,但是操作要更加简单:
virt-clone -o 模板虚拟机名称 -n 新虚拟机名称 -f 指定虚拟磁盘路径
步骤
实现此案例需要按照如下步骤进行。
步骤一:virt-viewer直接访问
假设虚拟机rhel6_node1正在运行中,可以执行virt-viewer rhel6_node1来直接访问此虚拟机的图形控制台,如图-2所示。
步骤二:将虚拟机rhel6_node1克隆为新虚拟机rhel6_node2
1)将被克隆的虚拟机rhel6_node1关机
[root@kvmsvr ~]# virsh destroy rhel6_node1
域 rhel6_node1 被删除
2)执行克隆操作
[root@kvmsvr ~]# virt-clone -o rhel6_node1 -n rhel6_node2
-f /data/images/rhel6-clone.img
正在克隆 node1.img 46% [========- ] 7.7 MB/s | 4.5 GB //显示克隆进度
Clone ‘rhel6_node2’ created successfully.
8 rhel6_node2 running
rhel6_node1 关闭
rh6_n2 关闭
… …
4.qemu-img磁盘管理
问题
在KVM服务器上练习qemu-img磁盘管理工具的使用:
1)创建不同格式的磁盘镜像,查看属性、转换格式
2)为现有的磁盘镜像制作增量盘
3)为qcow2磁盘镜像使用快照备份,管理快照
方案
qcow2格式的磁盘可以实现增量备份,其依据是Copy On Write(写时复制)策略:
1)增量盘可以直接映射原始盘的数据内容,几乎零延时备份
2)当原始盘的数据有改动时,被改动的旧数据才会写入到增量盘里边
3)增量盘可以像正常的磁盘镜像一样给虚拟机使用,但是新增的内容并不会回写到原始盘
qcow2格式的磁盘可以实现快照备份,创建的快照只是一个状态记录,并不作为独立的磁盘文件,快照是依附在原始磁盘文件上的。
步骤
实现此案例需要按照如下步骤进行。
步骤一:磁盘镜像的基本管理
1)新建两个不同格式的磁盘镜像文件,大小均为10G
[root@kvmsvr ~]# mkdir -p /data/images
[root@kvmsvr ~]# cd /data/images/
[root@kvmsvr images]# qemu-img create -f raw disk1.raw 10G
Formatting ‘disk1.raw’, fmt=raw size=10737418240
[root@kvmsvr images]# qemu-img create -f qcow2 disk2.qcow2 10G
Formatting ‘disk2.qcow2’, fmt=qcow2 size=10737418240 encryption=off cluster_size=65536
2)确认两个镜像文件
分别使用ls命令、qemu-img命令查看:
[root@kvmsvr images]# ls -lh disk*
-rw-r–r--. 1 root root 10G 12月 17 02:14 disk1.raw
-rw-r–r--. 1 root root 193K 12月 17 02:15 disk2.qcow2
[root@kvmsvr images]# qemu-img info disk1.raw
image: disk1.raw
file format: raw
virtual size: 10G (10737418240 bytes)
disk size: 0
[root@kvmsvr images]# qemu-img info disk2.qcow2
image: disk2.qcow2
file format: qcow2
virtual size: 10G (10737418240 bytes)
disk size: 136K
cluster_size: 65536
3)转换磁盘格式
[root@kvmsvr images]# qemu-img convert -c -O qcow2 disk1.raw disk1.qcow2
[root@kvmsvr images]# ls -lh disk*
-rw-r–r--. 1 root root 193K 12月 17 02:18 disk1.qcow2
-rw-r–r--. 1 root root 10G 12月 17 02:14 disk1.raw
-rw-r–r--. 1 root root 193K 12月 17 02:15 disk2.qcow2
步骤二:制作增量盘
1)为disk2.qcow2制作增量镜像disk2-A.qcow2
[root@kvmsvr images]# qemu-img create -f qcow2 -b disk2.qcow2 disk2-A.qcow2
Formatting ‘disk2-A.qcow2’, fmt=qcow2 size=10737418240 backing_file=‘disk2.qcow2’ encryption=off cluster_size=65536
[root@kvmsvr images]# qemu-img info disk2-A.qcow2 //查看结果
image: disk2-A.qcow2
file format: qcow2
virtual size: 10G (10737418240 bytes)
disk size: 196K
cluster_size: 65536
backing file: disk2.qcow2 //后端盘为disk2.qcow2
2)为disk2.qcow2制作增量镜像disk2-B.qcow2
[root@kvmsvr images]# qemu-img create -f qcow2 -b disk2.qcow2 disk2-B.qcow2
Formatting ‘disk2-B.qcow2’, fmt=qcow2 size=10737418240 backing_file=‘disk2.qcow2’ encryption=off cluster_size=65536
[root@kvmsvr images]# qemu-img info disk2-B.qcow2 //查看结果
image: disk2-B.qcow2
file format: qcow2
virtual size: 10G (10737418240 bytes)
disk size: 196K
cluster_size: 65536
backing file: disk2.qcow2 //后端盘为disk2.qcow2
步骤三:快照管理
1)为disk1.qcow2制作快照,名称分别为snap1、snap2、snap3
[root@kvmsvr images]# qemu-img snapshot -c snap1 disk1.qcow2
[root@kvmsvr images]# qemu-img snapshot -c snap2 disk1.qcow2
[root@kvmsvr images]# qemu-img snapshot -c snap3 disk1.qcow2
2)查看创建的快照列表
[root@kvmsvr images]# qemu-img snapshot -l disk1.qcow2
Snapshot list:
ID TAG VM SIZE DATE VM CLOCK
1 snap1 0 2015-12-17 02:26:41 00:00:00.000
2 snap2 0 2015-12-17 02:26:45 00:00:00.000
3 snap3 0 2015-12-17 02:26:47 00:00:00.000
3)将disk1.qcow2的数据恢复到快照snap2
[root@kvmsvr images]# qemu-img snapshot -a snap2 disk1.qcow2
4)删除快照snap1、snap3
[root@kvmsvr images]# qemu-img snapshot -d snap1 disk1.qcow2
[root@kvmsvr images]# qemu-img snapshot -d snap3 disk1.qcow2
[root@kvmsvr images]# qemu-img snapshot -l disk1.qcow2
Snapshot list:
ID TAG VM SIZE DATE VM CLOCK
2 snap2 0 2015-12-17 02:26:45 00:00:00.000
5.快建新虚拟机
问题
本案例要求利用LVM逻辑卷来提供虚拟机磁盘,并用来构建模板虚拟机,其中创建并安装RHEL6虚拟机的操作要从命令行来实现。主要任务如下:
1)新建模板虚拟机muban1,名称为muban1,磁盘类型qcow2、大小20G,并配置出厂初始化
2)快建两台新虚拟机,作为后续练习环境,其中一台为svr5.tarena.com、另一台为pc205.tarena.com,完成配置后将新虚拟机关机,做快照备份
方案
新建的qcow2格式磁盘可以直接作为KVM虚拟机的磁盘来使用,不需要格式化。
而从命令行创建并安装虚拟机的操作需要使用virt-install命令,基本用法如下:
virt-install
–name 虚拟机名称 --vcpus=CPU核心数 --ram=内存大小
–disk path=虚拟机磁盘文件路径,format=格式
–network network=网络接口名称 --pxe
如果采用的虚拟机磁盘是默认的RAW格式,则上述操作中的format=可以省略;另外–pxe表示采用PXE方式来装系统,对于非PXE安装来说,应把 --pxe改成 --location=安装源URL。关于virt-install命令的更多用法,可参考man手册页。
步骤
实现此案例需要按照如下步骤进行。
步骤一:为模板虚拟机准备磁盘
新建一个qcow2格式的磁盘镜像文件muban1.qcow2,容量大小设为20G:
[root@kvmsvr ~]# mkdir -p /data/images
[root@kvmsvr ~]# cd /data/images/
[root@kvmsvr images]# qemu-img create -f qcow2 muban1.qcow2 20G
… …
[root@kvmsvr images]# qemu-img info muban1.qcow2
… …
virtual size: 20G (21474836480 bytes)
disk size: 136K
步骤二:为模板虚拟机安装RHEL6操作系统
将虚拟机的名称设为muban1,配单颗CPU、内存1024MB,使用的磁盘为步骤一新建的muban1.qcow2,同时通过PXE的方式安装操作系统:
[root@kvmsvr ~]# virt-install --name muban1
–vcpus=1 --ram=1024
–disk path=/data/images/muban1.qcow2,format=qcow2
–network network=network1 --pxe
开始安装…
创建域… | 0 B 00:00
… …
注意:此处将虚拟机的网卡类型设为隔离的network1,若要设为桥接方式,应该将上述操作中的network=network1改成bridge=br0。
成功新建虚拟机以后,会自动弹出virt-viewer窗口,启动新虚拟机进行装机,如图-3所示。
后续过程与正常的PXE选择装机一样,此处不再赘述。
步骤三:模板机的出厂设置
为虚拟机muban1装好RHEL6系统以后,可以根据实际需要做一些应用或服务配置方面的调整,最后将其关机作为模板虚拟机(平时应关闭不启用),以便用来快速创建装配好的新虚拟机。比如,建议清空网卡的udev规则文件、删除网卡配置文件中的MAC地址及UUID设置语句。
[root@localhost ~]# > /etc/udev/rules.d/70-persistent-net.rules
[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0
EVICE=eth0
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=no
#UUID=5db61050-18d7-423a-b478-95ddc99584e0 //移除此行
#HWADDR=00:0C:29:65:21:3C //移除此行
在实际应用当中,根据模板建立的虚拟机会要求管理员做一些基本设置,比如选择键盘类型、设置系统时区、重设root口令、配置网络等相关信息。要达到这个效果的话,只需要在模板虚拟机的根目录下建立一个.unconfigured隐藏文件即可:
[root@localhost ~]# touch /.unconfigured //先标记为未配置
[root@localhost ~]# shutdown -h now //再关闭系统
步骤四:快建新虚拟机
由于模板虚拟机是已经装配好系统的,因此可以利用qcow2增量盘方式来快速生成新虚拟机的磁盘,这个时间是非常短的;然后只要为新虚拟机建立相应的XML描述文件,一台装配好系统的新虚拟机就迅速诞生了。
1)模板机的处理
在使用增量盘作为新虚拟机的磁盘时,为了减少COW带来的负担,最好不要对模板机的磁盘再有所更改。因此,可以先导出muban1的XML配置,然后删除此模板机的定义。
[root@kvmsvr ~]# virsh dumpxml muban1 > /root/muban1.xml
[root@kvmsvr ~]# virsh undefine muban1
域 muban1 已经被取消定义
2)从模板机的磁盘建立两个qcow2增量盘
[root@kvmsvr ~]# cd /data/images/
[root@kvmsvr images]# qemu-img create -f qcow2 -b muban1.qcow2 svr5.qcow2
… …
[root@kvmsvr images]# qemu-img create -f qcow2 -b muban1.qcow2 pc205.qcow2
… …
3)建立新虚拟机svr5
[root@kvmsvr images]# vim /root/muban1.xml
… … //注意修改name、uuid、disk、mac
svr5
9d00dfd7-9070-b891-7f86-640e2c15d555
… …
… …
… …
[root@kvmsvr images]# virsh define /root/muban1.xml
定义域 svr5(从 /root/muban1.xml)
4)建立新虚拟机pc205
[root@kvmsvr images]# vim /root/muban1.xml
… … //注意修改name、uuid、disk、mac
pc205
9d00dfd7-9070-b891-7f86-640e2c15d666
… …
… …
… …
[root@kvmsvr images]# virsh define /root/muban1.xml
定义域 pc205(从 /root/muban1.xml)
5)新虚拟机的设置及备份
将新建的两台虚拟机svr5、pc205开机,并登入系统,按照网络服务实验环境的要求进行设置,其中svr5.tarena.com的IP地址设为192.168.4.5、pc205.tarena.com的IP地址设为192.168.4.205,并配置好YUM仓库,然后将这两台虚拟机关机。
为虚拟机svr5、pc205的磁盘制作好快照备份:
[root@svr5 images]# qemu-img snapshot -c snap1 svr5.qcow2
[root@svr5 images]# qemu-img snapshot -l svr5.qcow2
Snapshot list:
ID TAG VM SIZE DATE VM CLOCK
1 snap1 0 2015-12-17 02:54:45 00:00:00.000
[root@svr5 images]# qemu-img snapshot -c snap1 pc205.qcow2
[root@svr5 images]# qemu-img snapshot -l pc205.qcow2
Snapshot list:
ID TAG VM SIZE DATE VM CLOCK
1 snap1 0 2015-12-17 02:54:50 00:00:00.000