问题描述
在存储快照技术中,为什么LUN快照采用的是COW方式,而文件系统快照采用的是ROW的方式?
期望答案
采用上述设计是基于什么考虑,如果交换下LUN和文件系统快照方式会引入什么问题?
我的理解
基本概念
COW,是copy on write,写前拷贝;
1、1次写变1读2写(读原数据块,旧数据写到新数据块,新数据写旧数据块);但是最终数据块连续,无碎片;
2、写前要拷贝数据,对于传统的机械硬盘,会相对消耗更多的IO资源; 当然如果是SSD,那么cow的影响会大幅度下降;
ROW:
1、不会有额外的写入(新数据写新数据库块);但是最终数据不连续,有碎片;
考虑角度
从快照后,数据写入角度:
1、文件系统不直接管理底层扇区,而是将山扇区整合为block,虽然有一定空间浪费,但是节省了管理成本;由于文件系统处理的是文件名和block之间的映射,这本身就比存储处理块与块之间映射复杂;所以ROW产生的数据离散分布,影响不大;反而对文件系统使用COW,后续写入时拷贝会增加了存储端IO压力,对前端反应的是写延迟增大;
2、存储使用块与块之间映射表管理,使用ROW照成数据随机分布,会导致连续IO写入情况下,性能会严重下降;虽然COW第一次写入,涉及数据拷贝,会消耗更多的IO资源,但是维持了LUN中block的连续,对后续的顺序IO写入性能更好,副作用更小;
从快照后,数据读取角度;
1、顺序读:
COW,顺序读写时,lun数据连续,所以性能较好; ROW,顺序读写,由于映射表的重定向,最终数据还是不连续,只能随机读取,性能相对较差;
2、随机读时,COW和ROW情况下,性能差不多;
3、对文件系统而言,数据本身更多的是随机分布,更多时候都为随机读写,所以ROW和COW性能差不多; 而对于LUN而言,COW对顺序读性能更好;
综合来看,文件系统使用ROW,LUN使用COW快照,更符合实际使用情况;