3.2.4 快照与克隆技术
快照(Snapshot)和克隆(Clone)技术可以应用于整个文件系统或单个文件,本节以文件为例进行介绍。快照技术可以实现文件的可读备份,而克隆技术则可以实现文件的可写备份。针对文件,用的更多的是克隆技术。
文件的克隆技术用途非常广泛,最常见的是对一个虚拟机打快照。在给一个虚拟机打快照时,其实就是对所有的虚拟磁盘做克隆。而对桌面版的虚拟机而言,虚拟磁盘其实就是宿主机中的一个文件。因此虚拟磁盘的快照其实就是文件的克隆。
很多文件系统具有快照或克隆的功能,如Linux中的Btrfs可以实现文件系统级的快照,OCFS2可以实现单个文件的克隆(又被称为链接克隆)。Solaris中的ZFS(目前已经移植到Linux)可以实现对快照和克隆的完整支持。并非所有的文件系统都支持克隆功能,如ExtX和XFS等文件系统是没有克隆功能的。
3.2.4.1 快照技术原理简析
接下来介绍一下快照技术的基本原理。目前快照技术有两种实现方式:一种是写时拷贝(Copy-On-Write,简称COW),这种技术是对做过快照的原始文件写数据时会将原始数据拷贝到新的地方。当然,并不是每次写数据都会拷贝,只是第一次写数据时才会拷贝。通常会有一个位图记录已经拷贝过的数据,如果已经拷贝过数据,则下次写数据时将不会再拷贝。
图3-35所示为COW原理示意图。当刚开始创建快照时原始文件和快照文件指向相同的存储区域(图A)。当原始文件被修改时,如某个地方写入新的数据,此时需要将该位置的原始数据拷贝到新的位置,并且更新快照文件中的地址信息(图B)。这样,虽然原始文件发生了变化,而快照文件的内容却没有发生变化。
图3-35 COW原理示意图
另一种实现方式为写时重定向(Redirect-On-Write,简称ROW),这种实现方式的基本原理是当原始文件写数据时并不在原始位置写入数据,而是分配一个新的位置。在这种情况下更新文件逻辑地址与实际数据位置的对应关系即可。图3-36所示为ROW原理示意图。
图3-36 ROW原理示意图
3.2.4.2 克隆技术原理简析
克隆技术的原理与快照技术的原理类似,其相同点在于其实现方式依然是ROW或COW,而差异点则主要表现在两个方面:一个方面,克隆生成的克隆文件是可以写的;另一个方面,克隆的数据最终会与原始文件的数据完全隔离。
对文件系统而言,用得最多的是ROW方式。我们知道,每个inode本身包含一个指针信息用于记录文件中每个逻辑块对应的物理块。当打快照时,我们只需要拷贝该部分数据就可以表示一个快照文件。而当原始文件的数据发生变化时,只需要将数据写入新的位置,并将原始文件中的地址信息进行变更即可。
3.2.4.3 应用实例
文件的快照技术与克隆技术在云计算和虚拟化方面有着非常普遍的应用,使用最多的是基于模板镜像的虚拟机快速发放和虚拟机的整体快照等相关特性。
以克隆技术在虚拟机快速发放中的应用为例,某公司有云模板镜像(如CentOS或Ubuntu镜像),其实就是文件系统中的一个文件。而基于该模板镜像创建虚拟机其实就是基于该镜像创建系统盘的过程,如图3-37所示。
图3-37 克隆技术在虚拟机发放中的应用
这里系统盘使用的其实就是模板镜像文件所生成的克隆文件。由于克隆可以瞬间完成,为虚拟机提供与模板镜像一致的数据,因此虚拟机可以基于该镜像完成虚拟机启动的过程。在后续,文件系统通过其内部的克隆模块完成原始文件到克隆文件数据的拷贝,最终完成数据的隔离。