你可以根据低层块设备的需求配置VDO卷的写入模式,默认情况下VDO卷自动选择
VDO卷的写入模式
sync模式
当VDO处于sync模式时,上层认为写入命令写入数据到持久化存储。这样的结果就是对于文件系统或应用不需要处理严重故障点的数据保留,比如出发FLUSH或者force unit access(FUA)请求来保留数据。当底层存储可以保证写入命令完成时数据一定写入持久化存储,VDO必须设置成sync模式。也就是说,该存储设备没有易失性写高速缓存,或有直写高速缓存。
async模式
当VDO处于async模式时,VDO不保证一个写入命令完成时数据写入持久化存储。文件系统或应用必须在每次交互时触发FLUSH或FUA请求来保证数据在严重故障时被持久存储。如果底层存储不能保证命令完成时数据持久化,VDO必须设置为async模式。也就是存储设备具有易失性写高速缓存。
auto模式
auto模式会根据设备属性自动选择sync模式或async模式
VDO写入模式的内部处理过程
当kvdo内核模块以同步模式运行时:
1.首先它将请求的数据临时写入分配的块,然后确认该请求。
2.确认完成后,将尝试通过计算块数据的hash签名对块进行重复数据删除,然后将其发送到VDO索引。
3.如果VDO索引包含具有相同签名的块,则kvdo读取找到的块并对两个块进行逐字节比较,以验证他们是否相同。
4.如果他们确实相同,那么kvdo将更新其块映射,以使逻辑块指向相应的物理块并释放分配的临时物理块
5.如果VDO索引不包含要写入的块的签名,或者指向的块实际上不包含相同的数据,则kvdo将更新其块映射以使临时物理块永久化。
当kvdo内核模块以异步模式运行时:
1.它会立即确认该请求,而不是写入数据
2.然后它将尝试以与上述相同的方式对数据块进行检查
3.如果该块证明是重复块,则kvdo更新其映射并释放分配的块。否则,它将请求中的数据写入分配的块,并更新块映射以使物理块永久化。
查看VDO卷的写入模式
$ vdo status --name=my-vdo
可以通过查看/sys/block/block-device/device/scsi_disk/identifier/cache_type文件检查易失性缓存
设置VDO写入模式
$ vdo changeWritePolicy --writePolicy=sync|async|auto --name=my-vdo