KVM虚拟机增备 磁盘

一.KVM安装

安装前检查

  • 检查项
cat /proc/cpuinfo | egrep 'vmx|svm'
如果搜索出vmx。则代表已经开启了Intel-vt技术。
如果搜索出svm。则代表已经开启了AMD-V技术。
  • 关闭selinux
setenforce 0
vim /etc/sysconfig/selinux
SELINUX=disabled
  • 静默安装相关依赖
yum install virt-manager libvirt libvirt-python libvirt-client virt-install virt-viewer libguestfs-tools -y
qemu:虚拟化软件,可以虚拟不同的CPU,支持异构(x86的架构可以虚拟化出不是x86架构的)
virt-manager:图形化 KVM 管理软件
libvirt: 提供虚拟机与宿主相互通信的机制
libvirt-python:允许使用 libvirt API
#这两个不用自带的,下面自行编译安装
qemu-kvm:用户态管理kvm,网卡,声卡,PCI设备等都是qemu来管理的,提供用户级KVM环境
qemu-img:VMs磁盘管理
#python-virtinst:CLI下创建KVM的工具
#libvirt-client: 提供client访问kvm服务器的机制 ,并包含 virsh命令进行管理和控制VMs

安装kvm

1.下载2.11版本的包

wget https://download.qemu.org/qemu-2.11.0.tar.xz

2.安装编译所需要的依赖

yum -y install gcc gcc-c++ automake libtool zlib-devel glib2-devel bzip2-devel libuuid-devel spice-protocol spice-server-devel usbredir-devel libaio-devel 

3.开始编译安装QEMU-KVM

tar xvJf qemu-2.11.0.tar.xz
cd qemu-2.11.0
yum install -y libseccomp libseccomp-devel
yum install -y numactl numactl-devel
./configure --enable-seccomp --enable-numa --prefix=/usr/local/qemu.2.11 && make && make install

替换 bin 文件

ln -s /usr/local/qemu.2.11/bin/qemu-system-x86_64 /usr/bin/qemu-kvm
ln -s /usr/local/qemu.2.11/bin/qemu-system-x86_64 /usr/libexec/qemu-kvm
ln -s /usr/local/qemu.2.11/bin/qemu-img /usr/bin/qemu-img

检查版本

qemu-img --version
qemu-kvm -version

注意

问题:seccomp support is disabled

编译需要使用选择 --enable-seccomp,否则会出现 qemu-system-x86_64: -sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,resourcecontrol=deny: seccomp support is disabled 的问题。

解决办法就是安装 libseccomp、libseccomp-devel,执行 ./congfigure 时添加 --enable-seccomp,然后清空 /var/cache/libvirt/qemu/capabilities 重启 libvirtd 即可。

网桥搭建(虚拟机与宿主机的网络映射)

- 添加桥接设备br0:相当于一个二层交换机
- ==关闭NetworkManager== (重要,踩过的坑)
```
service NetworkManager stop
```
- 添加ifcfg-br0
```
DEVICE=br0
TYPE=Bridge
ONBOOT=yes
BOOTPROTO=static
DEFROUTE=yes
GATEWAY=145.170.34.254
DNS1=8.8.8.8
PREFIX=24
IPADDR=145.170.34.38
NETMASK=255.255.255.0   
```
```
DEVICE=eth1
HWADDR=00:1E:67:C7:0F:22
TYPE=Ethernet
UUID=0128d2c6-126c-4227-a981-136f69d4a7f4
ONBOOT=yes
NM_CONTROLLED=no
BRIDGE=br0
```
- 检查网桥是否配置
```
brctl show
删除网桥
ifconfig <网桥名> down
brctl delbr <网桥名>

启动libvirt

service libvirtd start
service libvirtd enable

安装后检查

  • 验证kvm是否安装成功

    lsmod | grep kvm
    
  • 图形界面

    virt-manager
    
  • 通过iso创建虚拟机命令

virt-install --name redhat6.5-test2 --ram 512 --vcpus=1 --os-type=linux --os-variant=rhel6 --accelerate --hvm --disk path=/var/lib/libvirt/images/template-centos6-4.qcow2,size=6,bus=virtio --location /opt/iso/redhat6.5.rhel-server-6.5-x86_64-dvd.iso --network bridge=br0,model=virtio -x "console=ttyS0"--nographics
①--name 虚拟机名字
②--location 镜像地址
③--disk 系统磁盘镜像存储位置
④--network 网络模式(这里配置的是桥接模式),和对应桥接的网卡  
⑤--extra-args 配置控制台会话

二.增备虚拟机

增备原理

kvm虚拟机由xml定义文件和磁盘文件两大部分组成。

xml文件路径:/etc/libvirt/qemu/generic.xml   #默认路径
磁盘文件路径:/var/liv/libvirt/images/generic.qcow2

需要增备虚拟机,就需要把xml定义文件保存,和把对应的磁盘进行整备+后续增备即可。

所以这里只说对磁盘的增备 对应的xml修改即可

增备流程

(DOMAIN:主机名)

0.以paused状态启动虚拟机

virsh start DOMAIN --paused

1.先获取到对应的磁盘信息 (暂停或者运行状态)

virsh qemu-monitor-command DOMAIN --pretty '{ "execute": "query-block" }'
virsh qemu-monitor-command DOMAIN --hmp 'info block'
# 获取到磁盘drive-ide0-0-0
  1. 对磁盘进行完整备份(“sync”:“top”)

    virsh qemu-monitor-command DOMAIN '{ "execute" : "drive-backup" , "arguments" : { "device" : "drive-ide0-0-0" , "sync" : "full" , "target" : "/home/full.qcow2" } }'
    
  2. 对磁盘创建bitmap(block-dirty-bitmap-add)

    virsh qemu-monitor-command DOMAIN --pretty '{ "execute": "block-dirty-bitmap-clear", "arguments": {"node": "drive-ide0-0-0","name": "bitmap0"}}'
    
  3. 恢复虚拟机状态(virsh resume DOMAIN)

    virsh resume DOMAIN
    
  4. 接下来可以做incremental备份(“sync”:“incremental”)

     virsh qemu-monitor-command generic '{ "execute" : "drive-backup" , "arguments" : { "device" : "drive-ide0-0-0" , "sync" : "incremental" , "bitmap" : "bitmap0" , "target" : "/home/inc1.qcow2" } }'
    

正在运行的虚拟机需要以事务的方式进行增备

1.以事务方式对磁盘创建bitmap(block-dirty-bitmap-add)及对磁盘做完整备份(“sync”:“top”)

QMP部分功能支持事务性(事务的目的是当其中一件事失败后,会自动回滚,保证数据一致性,但这里也可用于保证创建bitmap和开始备份之间没有缺少数据)

virsh qemu-monitor-command DOMAIN --pretty '{ "execute": "transaction", "arguments": { "actions": [ { "type": "block-dirty-bitmap-add", "data": {"node":"drive-virtio-disk0", "name":"bitmap0"}}, { "type": "drive-backup", "data": {"device": "drive-virtio-disk0", "target": "/home/full.qcow2","sync":"top" }} ]} }'

2.接下来可以做incremental备份(“sync”:“incremental”)

# ...运行一段时间...
virsh qemu-monitor-command DOMAIN --pretty '{ "execute" : "drive-backup" , "arguments" : { "device" : "drive-virtio-disk0" , "sync" : "incremental" , "bitmap" : "bitmap0" , "target" : "/home/inc.0.qcow2" } }'

# ...又运行一段时间...
virsh qemu-monitor-command DOMAIN --pretty '{ "execute" : "drive-backup" , "arguments" : { "device" : "drive-virtio-disk0" , "sync" : "incremental" , "bitmap" : "bitmap0" , "target" : "/home/inc.1.qcow2" } }'

如果之前已经创建过bitmap,此刻想忽略bitmap,重新做一次完整备份,并重置bitmap(用于接下来的增量备份),则可以

{ "execute": "transaction",
  "arguments": {
    "actions": [
      {"type": "block-dirty-bitmap-clear",
       "data": {"node": "drive-virtio-disk0", "name": "bitmap0"} },
      {"type": "drive-backup",
       "data": {"device": "drive-virtio-disk0", "target": "home/new_full_backup.img", "sync": "top"} }
    ]
  }
}

三.磁盘恢复

备份完成后

备份链

经过增量备份后,会形成一条备份链:full.qcow2 <- inc0.qcow2 <- inc1.qcow2

full.qcow2 :全量备份

inc0.qcow2 inc0.qcow2 :增量备份

数据恢复

当需要使用备份进行数据恢复时候,就可以使用该链上的文件进行恢复,比如要恢复到inc.1.qcow2的末尾,那么有2种方案:保持链、合并

▷ 保持链

  1. 将full.qcow2、inc0.qcow2、inc1.qcow2拷贝到目标宿主机上

  2. 通过qemu-img rebase -u来确保链的顺序

    # 确保链的完整性
    qemu-img rebase -u -b inc1.qcow2 inc0.qcow2
    # 合并
    qemu-img commit inc1.qcow2
    
    # 确保链的完整性
    qemu-img rebase -u -b full.qcow2 inc1.qcow2
    # 合并
    qemu-img commit full.qcow2
    
  3. 虚拟机xml里指定full.qcow2

virsh edit xxx.xml
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值