管理虚拟机
1. Libvirt
什么是Libvirt
libvirt是用来管理虚拟机或虚拟化功能的软件集合,便于使用者管理虚拟机和其他虚拟化功能,比如存储和网络接口管理等等。Libvirt概括起来包括一个API库(libvirt API)、一个 daemon(libvirtd进程)和一个命令行工具(virsh //'versh//工具集)。
Libvirt的主要目标是:提供一种单一的方式管理多种不同的虚拟化提供方式和 hypervisor。
Hypervisor——一种运行在基础物理服务器和操作系统之间的中间软件层,可允许多个操作系统和应用共享硬件。也可叫做VMM( virtual machine monitor ),即虚拟机监视器。
2. virt-manager
简介
virt-manager应用程序是一个桌面用户接口,用于通过libvirt管理虚拟机。它的主要目标是管理KVM,不过也可以管理Xen和LXC(Linux容器)。它提供了运行域的汇总视图,当前性能和资源利用统计。向导可以允许创建新域,以及配置、调整域的资源分配和虚拟硬 件。内嵌的VNC和SPICE的客户端提供了一个全图形控制台。
主要功能
1. 定义和创建虚拟机
2. 硬件管理
3. 性能监视
4. 虚拟机的保存和恢复、暂停和继续、关闭和启动
5. 控制台
6. 在线和离线迁移启用virt-manager
使用
应用程序----系统工具----虚拟系统管理器
输入virt-manager命令
3. virsh
简介
virsh是使用libvirt management API构建的管理工具
**工作模式 **
# 立即模式
virsh [选项][参数]
# 交互模式
virsh
连接虚拟机
# 如果是CentOS7,需要在虚拟机里运行以下命令
# ttyS0串行终端 grubby[ˈɡrʌbi](肮脏的)
# grubby是一个命令行工具,用于更新和显示有关grub,lilo,elilo (ia64),yaboot(powerpc)和zipl(s390)引导加载程序的配置文件的信息。它主要设计用于安装新内核的脚本,并需要查找有关当前引导环境的信息。
# --update-kernel 指定针对的内核版本。ALL为针对所有内核版本修改参数
# --args新内核的默认参数或正在更新的内核的新参数
$ grubby --update-kernel=ALL --args="console=ttyS0"
$ reboot
# 如果想退出虚拟机连接,按“Ctrl ]”可以随时退出。如果是CentOS6的系统,需要做以下修改:
# 1. 添加ttyS0的许可,允许root登陆
$ echo "ttyS0" >> /etc/securetty
# 2. 编辑/etc/grub.conf文件,在内核启动参数后面加上console=ttyS0
# 3. reboot重启
4. KVM文件管理
通过文件管理可以直接查看、修改、复制虚拟机的内部文件。
例如,当系统因为配置文件无法启动时,可以直接修改虚拟机的文件。
实例:
创建一个raw格式的磁盘文件
$ qemu-img create /kvm-vm/vmtest01.img 8G
Formatting '/kvm-vm/vmtest01.img', fmt=raw size=8589934592
查看一下
$ls -lh
总用量 3.0G
-rw-------. 1 qemu qemu 11G 9 月 28 22:40 centos7-vm001.qcow2
-rw-r--r--. 1 qemu qemu 1.3G 9 月 29 09:28 centos7-vm002.qcow2
drwx------. 2 root root 16K 9 月 27 10:45 lost found
-rw-r--r--. 1 root root 8.0G 9 月 29 09:27 vmtest01.img
$ qemu-img info vmtest01.img
image: vmtest01.img
file format: raw
virtual size: 8.0G (8589934592 bytes)
disk size: 0
# 虽然通过ls命令看到磁盘为8G,但是实际空间大小为0,所以通过qemu-img创建的磁盘为稀疏模式磁盘。
# 通过virt-manager或者virt-install命令创建新虚拟机并安装好
$virt-install --name vmtest02 --vcpus 1 --ram 1024 --disk /kvm-vm/vmtest01.img,format=raw --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole --os-type=linux --os-variant=centos7.0 --location=/iso/CentOS-7-x86_64-DVD-1908.iso
开始安装......
搜索文件 .treeinfo...... | 366 B
00:00:00
搜索文件 vmlinuz...... | 5.1
MB 00:00:00
搜索文件 initrd.img...... | 41
MB 00:00:01
域安装仍在进行。您可以重新连接到控制台以便完成安装进程。
安装完成后,查看虚拟机状态
$ virsh list --all
Id 名称 状态
----------------------------------------------------
2 vm002 running
4 vmtest01 running
- centos7.0 关闭关闭虚拟机:
$ virsh shutdown vmtest01
域 vmtest01 被关闭
$ virsh list --all
Id 名称 状态
----------------------------------------------------
2 vm002 running
- centos7.0 关闭
- vmtest01 关闭
# 转换磁盘格式为qcow2
$ qemu-img convert -f raw -O qcow2 /kvm-vm/vmtest01.img /kvm-vm/vmtest01.qcow2
$ ls -lh 总用量 5.5G
-rw-------. 1 qemu qemu 11G 9 月 28 22:40 centos7-vm001.qcow2
-rw-r--r--. 1 qemu qemu 1.3G 9 月 29 10:01 centos7-vm002.qcow2
drwx------. 2 root root 16K 9 月 27 10:45 lost found
-rw-r--r--. 1 root root 8.0G 9 月 29 09:59 vmtest01.img
-rw-r--r--. 1 root root 1.3G 9 月 29 10:01 vmtest01.qcow2
$ qemu-img info vmtest01.qcow2
image: vmtest01.qcow2
file format: qcow2
virtual size: 8.0G (8589934592 bytes) disk size: 1.2G
cluster_size: 65536
Format specific information:
compat: 1.1 lazy refcounts: false
# 修改vmtest01的xml配置文件,主要是修改type和source部分
$ virsh edit vmtest01
# 然后启动vmtest01虚拟机
$ virsh start vmtest01
域 vmtest01 已开始
5. guestfish
主要参数
# guestfish [--ro|--rw] -i -a /path/to/disk.img
# guestfish [--ro|--rw] -i -d name-of-libvirt-domain
# Guestfish是用于检查和修改虚拟机文件系统的shell程序和命令行工具。
# -r --ro 只读模式
# -i --inspector 检查寻找操作系统的磁盘,并像在真正的虚拟机上一样装载文件系统。
# -d --domain 指定域
# -a --add 指定磁盘文件
guestfish --ro -i -d vm_01
6. KVM虚拟机克隆
实例
# 查看虚拟机状态
$ virsh list --all
Id 名称 状态
----------------------------------------------------
17 vmtest01 running
- centos7.0 关闭
- vm002 关闭
# 从vm002克隆到vm003
$ virt-clone -o vm002 -n vm003 -f /kvm-vm/vm003.qcow2
# 查看虚拟机状态
$ virt-clone -o vm002 -n vm003 -f /kvm-vm/vm003.qcow2
# 查看虚拟机状态
$ virsh list --all
Id 名称 状态
----------------------------------------------------
17 vmtest01 running
- centos7.0 关闭
- vm002 关闭
- vm003 关闭
# 启动虚拟机
$ virsh start vm003
域 vm003 已开始
$ virsh list --all
Id 名称 状态
----------------------------------------------------
17 vmtest01 running
18 vm003 running
- centos7.0 关闭
- vm002 关闭
7. KVM虚拟机快照
简介
快照实际上做的是虚拟机的XML配置文件,默认快照XML文件在/var/lib/libvirt/qemu/snapshot/虚拟机名/下,快照只支持qcow2磁盘格式的系统。
实例
对虚拟机vm002做快照
```shell
$ virsh snapshot-create vm002
已生成域快照 1507040414
或者在创建快照的同时给快照一个名字
$ virsh snapshot-create-as vm002 firsh_snap
已生成域快照 firsh_snap
```
查看快照信息
```shell
$ virsh snapshot-list vm002
名称 生成时间 状态
------------------------------------------------------------ 1507040414 2017-10-03 22:20:14 0800 shutoff
firsh_snap 2017-10-03 22:26:49 0800 shutoff
```
查看当前快照信息
```shell
$ virsh snapshot-current vm002
<domainsnapshot>
<name>firsh_snap</name> //快照版本号
<state>shutoff</state>
<parent>
<name>1507040414</name>
</parent>
<creationTime>1507040809</creationTime>
<memory snapshot='no'/>
```
恢复虚拟机状态到1507040414
```shell
$ virsh snapshot-revert vm002 1507040414
# 验证是否恢复
$ virsh snapshot-current vm002
<domainsnapshot>
<name>1507040414</name> //快照版本号
<state>shutoff</state>
<creationTime>1507040414</creationTime>
<memory snapshot='no'/>
```
删除快照
```shell
$ virsh snapshot-list vm002
名称 生成时间 状态
------------------------------------------------------------ 1507040414 2017-10-03 22:20:14 0800 shutoff
firsh_snap 2017-10-03 22:26:49 0800 shutoff
$ virsh snapshot-delete vm002 firsh_snap
已删除域快照 firsh_snap
$ virsh snapshot-list vm002
名称 生成时间 状态
------------------------------------------------------------ 1507040414 2017-10-03 22:20:14 0800 shutoff
```