如何创建qcow2格式的磁盘镜像并填充数据?

前言

本次文章的机缘来自于这次在做的qb的Oracle备库部分的功能,需要提供RedHat7.4,Oracle数据库以及MySQL数据库的qcow2磁盘镜像。由于RedHat7.4的镜像已经有了,今天来讲一下怎么制作非OS数据盘的qcow2磁盘镜像。

整体流程介绍

一个qcow2镜像的生成是很容易的,不过如何格式化以及填充数据,就会稍显麻烦,因为需要在虚拟机而不是宿主机中进行。
当然使用guestmount的话,是可以将qcow2的镜像文件直接mount到宿主机的,但是这要求你的镜像是OS镜像,如果不是的话,就爱莫能助了。
因此我们这次的流程,简单说就是:

  1. 创建qcow2镜像
  2. 将镜像attach到vm中,假设为sde设备
  3. 在vm中格式化sde(注意OS的版本,不同版本的格式化可能是不兼容的)
  4. 将sde mount到随意一个路径,这里假设为/mnt/Ethan
  5. 通过rsync命令将想要的数据传输到该目录中
  6. umount该目录
  7. 在宿主机中detach该镜像

具体命令的执行

1. 创建qcow2镜像

在当前目录下创建一个预期大小为20G的qcow2镜像,命名为:mysql-5.7.21.qcow2

宿主机
qemu-img create -f qcow2 ./mysql-5.7.21.qcow2 20G

2. 将镜像attach到vm中

通过以下命令,将mysql-5.7.21.qcow2镜像attach到sun_xxx这台虚拟机中,并作为sde设备。此处注意,要选择虚拟机中尚未被占用的盘符

宿主机
virsh attach-disk sun_xxx /qbackup/repo/Ethan/oracle-10.2.0.1.0.qcow2 sda --subdriver qcow2 --serial sda

3. 在vm中格式化sda

虚拟机
mkfs.xfs -f /dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_sda

4. 将sda设备mount到vm的/mnt/Ethan路径

虚拟机
mount /dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_sda /mnt/Ethan/

5. 通过rsync命令将想要的数据传输到该目录中

rsync可以完全替代掉scp,-a可以保证把对应的用户权限也一起复制过来
在我这里的话,60.5下的/mnt/Ethan目录,里面的数据是从zfs的volume里面mount过来的,不过和主题无关,就不讲太多了。

虚拟机
rsync -avP  [email protected]:/mnt/Ethan/ /mnt/Ethan

6. umount该目录

umount /mnt/Ethan/

7. 在宿主机中detach该镜像

virsh detach-disk sun_xxx sda

你可能感兴趣的:(如何创建qcow2格式的磁盘镜像并填充数据?)