Red Hat Training
A Red Hat training course is available for RHEL 8
2.4. 选择 VDO 写入模式
您可以根据基础块设备的要求,为 VDO 卷配置写入模式。默认情况下,VDO 选择自动写入模式。
2.4.1. VDO 写入模式
VDO 支持以下写入模式:
sync
当 VDO 处于
sync
模式时,其上的层会假定写入命令将数据写入持久性存储。因此,文件系统或应用程序不需要发出 FLUSH 或强制单元访问(FUA)请求来使数据在关键点上变为持久。只有在底层的存储保证数据在写命令完成后写入持久性存储时,才必须将 VDO 设为
sync
模式。也就是说,存储必须没有易变的写缓存,或者不通过缓存进行写入操作。async
当 VDO 处于
async
模式时,VDO 不能保证在确认写命令时数据会被写入持久性存储。文件系统或应用程序必须发出 FLUSH 或 FUA 请求,来确保每次事务中数据在关键点上的持久性。如果底层存储不能保证在写命令完成后数据被写入到持久性存储,必须将 VDO 设为
async
模式;也就是说当存储具有易失性写回缓存时。async-unsafe
这个模式与
async
具有同样的属性,但它与原子性、一致性、隔离、持久性(ACID)不兼容。与async
相比,async-unsafe
具有更好的性能。警告当假设 ACID 合规的应用程序或文件系统在 VDO 卷上运行时,
sync-unsafe
模式可能会导致意外的数据丢失。auto
-
auto
模式根据每个设备的特性自动选择sync
或async
。这是默认选项。
2.4.2. VDO 写入模式的内部处理
VDO 的写入模式是 sync
和 async
。以下信息描述了这些模式的操作。
如果 kvdo
模块在同步(同步)
模式下运行:
- 它会在请求中临时将数据写入分配块中,然后确认请求。
- 确认完成后,会尝试通过计算块数据的 MurmurHash-3 签名来去除重复的块,该签名发送给 VDO 索引。
-
如果 VDO 索引包含具有相同签名的块的条目,
kvdo
会读取指定的块,并对这两个块进行逐字节的比较,以验证它们是否相同。 -
如果它们确实相同,则
kvdo
会更新其块映射,以便逻辑块指向相应的物理块,并释放分配的物理块。 -
如果 VDO 索引没有包含正在写入的块的签名的条目,或者指定的块实际上没有包含相同的数据,则
kvdo
会更新其块映射,以使临时物理块持久。
如果 kvdo
以异步(async
)模式运行:
- 它将立即确认请求而不是写数据。
- 然后它会尝试使用与上述步骤相同的方法来复制块。
-
如果块是重复的,则
kvdo
会更新其块映射,并释放分配的块。否则,它会将请求中的数据写入分配的块,并更新块映射使物理块持久化。
2.4.3. 检查 VDO 卷中的写入模式
此流程列出了所选 VDO 卷中的主动写入模式。
流程
使用以下命令查看 VDO 卷使用的写入模式:
# vdo status --name=my-vdo
输出列表:
-
配置的写入策略,它是从
sync
、async
或auto
中选择的选项 -
写入策略,其是 VDO 应用的特定的写模式,即
sync
或async
-
配置的写入策略,它是从
2.4.4. 检查易变的缓存
这个过程决定块设备是否有易变的缓存。您可以使用这些信息在 sync
和 async
VDO 写模式之间进行选择。
流程
使用以下方法之一确定某个设备是否有写回缓存:
阅读
/sys/block/block-device /device/scsi_disk/标识符/cache_type
sysfs
文件。例如:$ cat '/sys/block/sda/device/scsi_disk/7:0:0:0/cache_type' write back
$ cat '/sys/block/sdb/device/scsi_disk/1:2:0:0/cache_type' None
另外,你可以在内核引导日志中找到上述设备是否有写缓存:
sd 7:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA sd 1:2:0:0: [sdb] Write cache: disabled, read cache: disabled, supports DPO and FUA
在上例中:
-
设备
sda
表示它 有 一个回写缓存。对其使用async
模式。 -
设备
sdb
表示 它没有 一个回写缓存。对其使用sync
模式。
如果
cache_type
的值是None
或writethrough
,您应该将 VDO 配置为使用sync
写模式。-
设备
2.4.5. 设置 VDO 写入模式
此流程为 VDO 卷设置了写模式,可以是对现有卷,也可以是在创建新卷时。
使用不正确的写模式可能会在电源故障、系统崩溃或与磁盘意外失去联系后导致数据丢失。
先决条件
- 决定哪个写入模式适合您的设备。请参阅 第 2.4.4 节 “检查易变的缓存”。
流程
您可以在现有 VDO 卷上或创建新卷时设置写入模式:
要修改现有的 VDO 卷,请使用:
# vdo changeWritePolicy --writePolicy=sync|async|async-unsafe|auto \ --name=vdo-name
-
要在创建 VDO 卷时指定写模式,请在
vdo create
命令中添加--writePolicy=sync|async|async-unsafe|auto
选项。