4. kvm存储虚拟化

kvm存储虚拟化

一、命令行工具管理虚拟磁盘

1、查看虚拟磁盘

bash 复制代码
[root@martin-host ~]# virsh domblklist vm01_centos79 
Target     Source
------------------------------------------------
hda        /var/lib/libvirt/images/vm01_centos79.qcow2
hdb        /kvm/iso/CentOS-7.9-x86_64-Everything-2009.iso
vda        /var/lib/libvirt/images/vm01_centos79-1.qcow2

2、添加磁盘

bash 复制代码
[root@martin-host ~]# qemu-img create -f qcow2 /var/lib/libvirt/images/vm01_centos79-2.qcow2 5G 
Formatting '/var/lib/libvirt/images/vm01_centos79-2.qcow2', fmt=qcow2 size=5368709120 encryption=off cluster_size=65536 lazy_refcounts=off 

[root@martin-host ~]# ls /var/lib/libvirt/images/
vm01_centos79-1.qcow2  vm01_centos79-2.qcow2  vm01_centos79.qcow2  vm02_centos79.qcow2

[root@martin-host ~]# virsh attach-disk vm01_centos79 --source /var/lib/libvirt/images/vm01_centos79-2.qcow2 --target vdb --subdriver qcow2 --cache writeback --persistent 
Disk attached successfully

磁盘缓存的工作模式:
1、writeback	回写
2、writethrough	通写,默认


[root@martin-host ~]# virsh domblklist vm01_centos79 
Target     Source
------------------------------------------------
hda        /var/lib/libvirt/images/vm01_centos79.qcow2
hdb        /kvm/iso/CentOS-7.9-x86_64-Everything-2009.iso
vda        /var/lib/libvirt/images/vm01_centos79-1.qcow2
vdb        /var/lib/libvirt/images/vm01_centos79-2.qcow2

3、删除磁盘

bash 复制代码
[root@martin-host ~]# virsh detach-disk vm01_centos79 vda --persistent
Disk detached successfully

[root@martin-host ~]# virsh detach-disk vm01_centos79 vdb --persistent
Disk detached successfully

二、qcow2格式的磁盘文件

1、创建磁盘文件

bash 复制代码
[root@martin-host ~]# qemu-img create -f qcow2 /opt/disk01.qcow2 8G
Formatting '/opt/disk01.qcow2', fmt=qcow2 size=8589934592 encryption=off cluster_size=65536 lazy_refcounts=off 

[root@martin-host ~]# qemu-img info /opt/disk01.qcow2 
image: /opt/disk01.qcow2
file format: qcow2
virtual size: 8.0G (8589934592 bytes)
disk size: 196K
cluster_size: 65536
Format specific information:
    compat: 1.1
    lazy refcounts: false

2、差量镜像/快速创建虚机

2.1 创建差量镜像

bash 复制代码
[root@martin-host ~]# qemu-img create -f qcow2 -b /var/lib/libvirt/images/vm01_centos79.qcow2 /var/lib/libvirt/images/test1_centos79.qcow2
Formatting '/var/lib/libvirt/images/test1_centos79.qcow2', fmt=qcow2 size=8589934592 backing_file='/var/lib/libvirt/images/vm01_centos79.qcow2' encryption=off cluster_size=65536 lazy_refcounts=off 

[root@martin-host ~]# qemu-img info /var/lib/libvirt/images/test1_centos79.qcow2 
image: /var/lib/libvirt/images/test1_centos79.qcow2
file format: qcow2
virtual size: 8.0G (8589934592 bytes)
disk size: 196K
cluster_size: 65536
backing file: /var/lib/libvirt/images/vm01_centos79.qcow2
Format specific information:
    compat: 1.1
    lazy refcounts: false

2.2 准备配置文件

bash 复制代码
[root@martin-host qemu]# cp vm01_centos79.xml test1_centos79.xml
虚拟名称、UUID、磁盘文件位置、MAC地址、VNC

2.3 创建虚拟机

bash 复制代码
[root@martin-host ~]# virsh define /etc/libvirt/qemu/test1_centos79.xml 
Domain test1_centos79 defined from /etc/libvirt/qemu/test1_centos79.xml

[root@martin-host ~]# virsh list --all
 Id    Name                           State
----------------------------------------------------
 -     test1_centos79                 shut off
 -     vm01_centos79                  shut off
 -     vm02                           shut off

[root@martin-host ~]# virsh start test1_centos79 
Domain test1_centos79 started

[root@martin-host ~]# virsh autostart test1_centos79
Domain test1_centos79 marked as autostarted

2.4 批量部署虚拟机

bash 复制代码
#!/bin/bash
#

# 删除所有虚拟机

for vm_name in $(virsh list --all | awk 'NR>2{print $2}')
do
  virsh destroy ${vm_name} &> /dev/null
  virsh undefine ${vm_name} &> /dev/null
done

rm -rf /var/lib/libvirt/images/*

# 新建虚拟机 
kvm_config_file=/opt/kvm/vm_base.xml
kvm_disk_file=/opt/kvm/vm_base.qcow2


read -p "虚拟机数量: " number

for i in $(seq $number)
do
  vm_name=vm${i}_centos79
  cp ${kvm_config_file} /etc/libvirt/qemu/${vm_name}.xml
  qemu-img create -f qcow2 -b ${kvm_disk_file} /var/lib/libvirt/images/${vm_name}.qcow2 &> /dev/null

  sed -ri "s/vm_base/${vm_name}/g" /etc/libvirt/qemu/${vm_name}.xml
  sed -ri "/uuid/c \  <uuid>$(uuidgen)</uuid>" /etc/libvirt/qemu/${vm_name}.xml

  vm_mac=52:54:00:$(openssl rand -hex 10 | sed -r 's/(..)(..)(..).*/\1:\2:\3/')
  sed -ri "/<mac/c \      <mac address='${vm_mac}'/>" /etc/libvirt/qemu/${vm_name}.xml

  virsh define /etc/libvirt/qemu/${vm_name}.xml &> /dev/null

done

三、存储池 storage pool

存储磁盘文件的路径/位置

1、类型

本地存储池

网络存储池, 虚拟机在线迁移(必须)

bash 复制代码
[root@martin-host ~]# virsh pool-list --all 
 Name                 State      Autostart 
-------------------------------------------
 default              active     yes       
 iso                  active     yes       


[root@martin-host ~]# virsh pool-dumpxml default 
<pool type='dir'>
  <name>default</name>
  <uuid>1328db51-967c-4696-a63c-88814221c3ad</uuid>
  <capacity unit='bytes'>211654430720</capacity>
  <allocation unit='bytes'>20023582720</allocation>
  <available unit='bytes'>191630848000</available>
  <source>
  </source>
  <target>
    <path>/var/lib/libvirt/images</path>
    <permissions>
      <mode>0711</mode>
      <owner>0</owner>
      <group>0</group>
      <label>system_u:object_r:virt_image_t:s0</label>
    </permissions>
  </target>
</pool>

2、在线迁移

2.1 规划后端存储

bash 复制代码
[root@kvm_nfs ~]# cat /etc/exports
/kvm_image	192.168.140.200(rw,no_root_squash)	192.168.140.10(rw,no_root_squash)

2.2 运行虚拟机的主机挂载测试存储

bash 复制代码
[root@martin-host ~]# mount 192.168.140.11:/kvm_image /mnt/
[root@martin-host ~]# touch /mnt/a
[root@martin-host ~]# ls /mnt/
a
[root@martin-host ~]# umount /mnt 

3、创建存储池


bash 复制代码
[root@martin-host ~]# df -hT | grep nfs
192.168.140.11:/kvm_image nfs4      100G   33M  100G   1% /pool_by_nfs
[root@martin-host ~]# 

4、添加主机名解析

bash 复制代码
[root@martin-host ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

192.168.140.200	martin-host.linux.com
192.168.140.10	new-host.linux.com

[root@martin-host ~]# scp /etc/hosts root@192.168.140.10:/etc/hosts
root@192.168.140.10's password: 
hosts  

5、测试迁移

bash 复制代码
[root@martin-host ~]# virsh migrate vm1_centos79 --live qemu+ssh://192.168.140.10/system --unsafe 
root@192.168.140.10's password: 
相关推荐
团儿.2 个月前
KVM磁盘配置:构建高效虚拟环境的基石
linux·运维·centos·kvm·kvm磁盘
小哈里2 个月前
【虚拟化】内核级虚拟化技术KVM介绍,全/半虚拟化的区别,使用libvirt搭建虚拟化平台(go/java/c++)
java·c++·golang·虚拟化·kvm
igcllq3 个月前
ubuntu 安装kvm 创建windos虚拟机
linux·运维·服务器·ubuntu·虚拟机·kvm
清瞳清3 个月前
KVM环境下制作ubuntu qcow2格式镜像
ubuntu·kvm·qcow2
西京刀客3 个月前
kvm 虚拟机命令行虚拟机操作、制作快照和恢复快照以及工作常用总结
linux·服务器·kvm
开着拖拉机回家3 个月前
【虚拟化】KVM-virsh离线工具进行客户机虚拟机磁盘访问
虚拟化·虚拟机·kvm·virt-df·virt-sparsify
开着拖拉机回家4 个月前
【虚拟化】KVM常用命令操作(virsh虚拟机常用操作之开关|连接|自启|克隆|快照)
kvm·libvirt·kvm快照·kvm克隆·kvm常用命令
为了待会去码头整点薯条4 个月前
云计算虚拟化Libvirt Domain XML Format中文版—对照学习使用
云计算·openstack·iaas·kvm·libvirt
小哈里5 个月前
【虚拟化】计算虚拟化技术简介,CentOS使用KVM、QEMU安装并管理虚拟机
linux·运维·centos·虚拟化·kvm
henan程序媛5 个月前
部署KVM虚拟化平台
linux·运维·服务器·虚拟化·kvm