copy on write
-
linux中的cow
linux系统中,fork()会生成一个和父进程完全相同的子进程,子进程的执行时间不确定。处于效率考虑,Linux中引入了COW机制。
在fork之后exec之前,父进程和子进程共用物理空间(内存),数据段,代码段和堆栈公用。
当父进程或子进程将要更改相应段之前,再为子进程相应的段单独分配物理空间并拷贝。在子进程执行之前,子进程和父进程始终共用代码段,执行时子进程的代码段也会单独分配物理空间。 -
文件系统中的COW
如果一直write的话,磁盘I/O性能就会大大降低。
COW举个例子,编辑文件的时候,读写操作在内存(或者缓存)中进行,只有关闭文件的时候才会写到磁盘上。因为cow如果不正常关闭文件,修改就会丢失。
另外就是突然掉电的话,因为读写操作没有在磁盘原位置进行,不会破坏文件系统,不需要fsck,保证数据的一致性。 -
KVM镜像格式 qcow2中的COW
qcow2的增量镜像,可以只保存后备镜像中修改的部分,而不影响后备镜像,看着是一个独立的镜像,但是其所有的数据都是从后备镜像获取。
cow也挺简单,增量镜像开始只保存偏移地址,当有修改的时候,先检查增量镜像中是否存在,如果没有,就是后备镜像中读取。
这也是为什么增量镜像一开始很小,越来越大的原因。