首页 > 代码库 > XEN的clone和copy那点事

XEN的clone和copy那点事

一、XEN API

•VDI clone (session session_id, VDI vdi, Map[string,string] driver_params)

  Take an exact copy of the VDI and return a reference to the new disk. If any driver_params are specified then these are passed through to the storage-specific substrate driver that implements the clone operation. NB the clone lives in the same Storage Repository as its parent.

 

•VDI copy (session session_id, VDI vdi, SR sr)

  Make a fresh VDI in the specified SR and copy the supplied VDI‘s data to the new disk

 

二、vdi clone步骤

•1、vdi最初的克隆

           首先,vdi将自身重命名为Base Copy,并生成一块新的vdi替代自己,该新生成的vdi指向Base Copy(vdi);其次,生成一个新的vdi(即克隆出来的vdi),这个克隆出来的vdi也指向Base Copy。

•2、再次对vdi进行克隆(vdi中数据没有发生什么变化)

           如果vdi中的数据没有发生任何变化,那么将直接生成一个新的克隆出来的vdi,这个克隆出来的vdi也指向Base Copy;

           如果vdi中的数据发生了变化,那么首先,vdi再次将自身重命名为Base Copy(我们称之为Base Copy 2,之前的那块Base Copy我们称之为Base Copy 1),并生成一块新的vdi替代自己,该新生成的vdi指向Base Copy 2,而Base Copy 2指向Base Copy 1,其次,生成一个新的vdi(即克隆出来的vdi),这个克隆出来的vdi指向Base Copy 2。

                       图2.1:Clone流程图

                      图2.1-1:Clone流程图的附图(子图)

 

三、vdi Copy步骤

•1、简单Copy

                如果只是对一块普通的vdi(没有进行过克隆)进行Copy的话,那么比较简单,完整的生成一个全新的、独立的vdi即可;

•2、复杂Copy
•如果是对vdi-clone-2这样的vdi进行的克隆的话,那么要找到其克隆链上的所有vdi( Base Copy 1、 Base Copy 2、 vdi-clone-2 ),收集到所有信息后再完整的生成一个全新的、独立的vdi。
 
                      图3.1:简单Copy
 
                      图3.2:复杂Copy