在迁移到虚拟化基础设施的过程中,我遇到了以下有趣的问题。
我们希望首先评估一切。这包括创建所有所需系统的虚拟映像,在隔离环境中一起运行它们,并对该环境进行广泛的测试。然后,如果一切顺利,我们将真正重复一切。
这次我要虚拟化的服务器非常关键。即使是在非高峰时段,也不应该让它停止服务。它在 Linux (RHEL) 上运行 Oracle 数据库,它与另一台相同的机器配对,它们位于负载平衡器后面,但我们仍然不想关闭它。但是,一段时间内稍微增加负载是可以的。
幸运的是,一切都部署在 LVM 上,并且 VG 中有足够的空间来创建卷的快照并拍摄这些快照。但是,空间限制不允许创建全部卷,所以我将按顺序执行此操作;每个单独的卷都将保持一致,并且创建多个卷的快照之间的“时间扭曲”并不重要。每个快照都将通过dd
SSH 映像到某个临时空间。
最后,单个 LVM LV 将会有多个快照。但为了将其作为 VM 运行,我们需要一个完整的单个磁盘映像,其中应包括所有创建的快照作为部分。
使用 qemu 可以通过指定背景图像为 Qemu 创建“覆盖” qcow2 快照:qemu-img create -f qcow2 -b original-image -F raw new-image.qcow2
,因此原始图像是不可变的,并且所有更改都将写入覆盖new-image.qcow2
。
是否可以以某种方式对多个备份映像执行此操作?例如,如果我有一堆代表原始 LVM 卷“VolGroup00/root”、“VolGroup00/var”等的映像文件,是否可以创建一个覆盖映像将它们表示为 LVM 卷(磁盘的一部分)?下图说明了目标:
我希望 的 LBA 1GiB+31GiBvm-assembled-image.qcow2
引用 的 LBA 0÷30GiB VolGroup-root.raw
,也就是正好 30GiB(读取时;但如果向这些 LBA 写入任何内容,则应转到 qcow2,且后续读取也应返回先前写入 qcow2 的数据),组装图像的 LBA 50GiB÷100GiB 引用 的 LBA 0÷50GiB VolGroup00-var.raw
,也就是正好 50GiB(同样,任何要写入该区域的内容都应存储到 qcow2,且应首先从 qcow2 读取,如果该块没有存储任何内容,则应针对原始基础图像部分执行读取),其余部分在写入之前应读取为零,在这种情况下,它将写入 qcow2。
可以直接这样做吗?或者可以使用 Device Mapper 框架来做到这一点:定义一些虚拟空间,将其区域映射到这些文件中,然后我将使用该虚拟空间作为 Qemu 基础映像?