XenServer中Fast Copy与Full Copy的区别

转载 2016年05月30日 22:12:14

原文地址:http://xenme.com/1170


详细跟踪了一下LVM-Based VDI与File-Based VDI的复制与链接过程,我们可以发现,Fast Copy与Full Copy有很大的区别,不同的形式对虚机VBD的性能具有一定的影响。

关于VM的VDI的格式,请参考另外一篇文章:

XenServer中VM的存储格式对空间以及性能的影响

我们可以知道快照是基于链接形式管理的,而copy是完整的copy,里面没有详细区分Fast Copy和full copy的区别,VM在copy的情况下有两种形式,一是Fast copy,一种为Full copy 。

我们可以简单来看下VDI的复制过程。

在最开始Original-VM的VDI:

  1. 在Full Copy的情况下,XenServer会直接完整复制Original-VM的VDI,并生成UUID,附加到VM
  2. 在第一次Fast Copy的情况下,XenServer首先会把Original VM的VDI(UUID=1……)的重命名为Base Copy(UUID=2……),并生成新的VDI文件,作为Original VM的VDI(UUID=1……),也就是说,原始 VDI会转换成基本节点,原始VM也会链接到Base Copy,此时完成了链接的创建,而Fast-Copy虚机,会创建新的VDI(UUID=3……),并链接到Base Copy,也就是基本节点。
  3. 此时,如果对VDI(UUID=3……)进行Full Copy,也就是对虚机进行完整复制的时候,XenServer会根据Fast Copy以及其链接的Base Copy节点进行合并,然后完整转换成full Copy的新VDI(UUID=4……)
  4. 如果对VDI(UUID=3……)进行Fast copy,那么,如果Fast Copy相对于Original VM没有变化,那么Fast Copy,任然会连接到原始VM的Base Copy(UUID=2……)
  5. 如果对VDI(UUID=3……)进行Fast Copy,而且前一个Fast Copy相对于Original VM有发生数据变化,那么类似于第一次Fast Copy,此时,会对VDI(UUID=3……)重命名为Base Copy(UUID=5……),然后生成新的VDI(使用UUID=3……),也就是fast Copy VDI(UUID=3……)变成了,VDI(UUID=3……)连接到Fast Copy转换成的Base Copy VDI(UUID=5……),然后VDI(UUID=5……)又链接到原始VM生成的Base VDI(UUID=2……)
  6. 最后生成新Fast copy虚机的Fast Copy VDI(UUID=6……),然后连接到VDI(UUID=5……),再链接到VDI(UUID=2……)
所以,在XenServer中,对Fast Copy的处理方式全部采用链接的方式,而Full Copy采用完整的copy方式。
性能的影响,就很明显了,链接越长,性能越差。
Full copy的复制速度取决于存储性能,因为需要Full Copy需要完整复制所有的数据。
Fast copy的速度则基本是瞬间完成,因为Fast Copy直接是连接到现在的或者经过重命名的Base Copy VDI。
BTW:在XenServer中,Fast Copy其实是VM Clone,而Full Copy,在XenServer中称为VM Copy复制。

Python中copy和deepcopy中的区别

最近在学习 Python编程,遇到copy和deepcopy感到很困惑,现在针对这两个方法进行区分,一种是浅复制(copy),一种是深度复制(deepcopy)。 首先说一下deepcopy,所谓的深...
  • u014645717
  • u014645717
  • 2016年08月04日 10:31
  • 3202

关于copy和clone

在软件世界中,这两个概念对于我们来说并不陌生,如.NET中的Object.MemberwiseClone()、prototype设计模式的clone等,copy就更常见了,如copy一段文字等。从本质...
  • soudog
  • soudog
  • 2007年12月11日 16:11
  • 3809

copy() 与 clone() 的区别

clone 是传递一个引用,相当于创建一个指向元字符串的一个指针,而copy使赋值一个对象. DataTable dt = new Data Table(); DataTable dtco...
  • zxf13598202302
  • zxf13598202302
  • 2015年11月16日 21:12
  • 1533

批处理中Copy与Xcopy的区别

###Date: 2017/6/20 ###Author: Soaringlee 1):copy不能在有子目录存在的文件中拷贝文件的同时重命名此文件名(注:这里C:为根目录,bat为子目录),而x...
  • SoaringLee_fighting
  • SoaringLee_fighting
  • 2017年06月20日 10:28
  • 2387

iOS开发-------属性用copy、strong修饰的区别

Copy,Strong的区别需要了解点内存管理的知识,Strong是ARC下引入的修饰,相当于手动管理内存(MRC)下的retain,在相关代码下,常常看到有的人用copy修饰NSString,NSA...
  • RunIntoLove
  • RunIntoLove
  • 2016年02月29日 19:49
  • 3524

Dockerfile COPY指令和ADD指令的区别

COPY 复制文件 格式: COPY ... COPY ["",... ""] COPY 指令将从构建上下文目录中  的文件/目录复制到新的一层的镜像内的  位置。比如: COPY package....
  • small_to_large
  • small_to_large
  • 2017年08月20日 22:54
  • 511

iOS中assign,copy,retain之间的区别以及weak和strong的区别

@property (nonatomic, assign) NSString *title;  什么是assign,copy,retain之间的区别?  assign: 简单赋值,不更改索...
  • getchance
  • getchance
  • 2014年12月28日 13:26
  • 23029

Oracle索引之index full scan 和index fast full scan的区别

在oracle里索引里有两种类型的索引扫描方式,非常类似,但也有稍许的区别:      index full scan表示索引扫描时,读取的索引块是一个一个的读取,为了保证排序。      ind...
  • fycghy0803
  • fycghy0803
  • 2017年06月26日 16:57
  • 194

strong 和 copy关键字的区别

内存管理 1.什么是ARC? ARC是automatic reference counting自动引用计数,在程序编译时自动加入retain/release。在对象被创建时retain c...
  • luyangMVP
  • luyangMVP
  • 2016年08月11日 19:29
  • 722

iOS 浅拷贝和深拷贝的区别? copy和mutableCopy的区别?

1.概念       我们在声明一个变量时怎么给变量赋值呢?      第一种情况:将其它变量的值直接拿过来赋值,例如Person *person = 0x100104520;      Person...
  • vbirdbest
  • vbirdbest
  • 2016年07月09日 16:54
  • 1111
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:XenServer中Fast Copy与Full Copy的区别
举报原因:
原因补充:

(最多只允许输入30个字)