你能夠根據低層塊設備的需求配置VDO卷的寫入模式,默認狀況下VDO卷自動選擇
sync模式
當VDO處於sync模式時,上層認爲寫入命令寫入數據到持久化存儲。這樣的結果就是對於文件系統或應用不須要處理嚴重故障點的數據保留,好比出發FLUSH或者force unit access(FUA)請求來保留數據。當底層存儲能夠保證寫入命令完成時數據必定寫入持久化存儲,VDO必須設置成sync模式。也就是說,該存儲設備沒有易失性寫高速緩存,或有直寫高速緩存。緩存
async模式
當VDO處於async模式時,VDO不保證一個寫入命令完成時數據寫入持久化存儲。文件系統或應用必須在每次交互時觸發FLUSH或FUA請求來保證數據在嚴重故障時被持久存儲。若是底層存儲不能保證命令完成時數據持久化,VDO必須設置爲async模式。也就是存儲設備具備易失性寫高速緩存。異步
auto模式
auto模式會根據設備屬性自動選擇sync模式或async模式async
當kvdo內核模塊以同步模式運行時:
1.首先它將請求的數據臨時寫入分配的塊,而後確認該請求。
2.確認完成後,將嘗試經過計算塊數據的hash簽名對塊進行重複數據刪除,而後將其發送到VDO索引。
3.若是VDO索引包含具備相同簽名的塊,則kvdo讀取找到的塊並對兩個塊進行逐字節比較,以驗證他們是否相同。
4.若是他們確實相同,那麼kvdo將更新其塊映射,以使邏輯塊指向相應的物理塊並釋放分配的臨時物理塊
5.若是VDO索引不包含要寫入的塊的簽名,或者指向的塊實際上不包含相同的數據,則kvdo將更新其塊映射以使臨時物理塊永久化。ide
當kvdo內核模塊以異步模式運行時:
1.它會當即確認該請求,而不是寫入數據
2.而後它將嘗試以與上述相同的方式對數據塊進行檢查
3.若是該塊證實是重複塊,則kvdo更新其映射並釋放分配的塊。不然,它將請求中的數據寫入分配的塊,並更新塊映射以使物理塊永久化。code
查看VDO卷的寫入模式索引
$ vdo status --name=my-vdo
能夠經過查看/sys/block/block-device/device/scsi_disk/identifier/cache_type文件檢查易失性緩存同步
設置VDO寫入模式hash
$ vdo changeWritePolicy --writePolicy=sync|async|auto --name=my-vdo