Device-Mapper 日志¶
Device-mapper 日志代码被一些 device-mapper RAID 目标用来跟踪磁盘上不一致的区域。磁盘的一个区域(或地址空间的一部分)可能不一致,因为 RAID 条带当前正在操作中,或者机器在区域被修改时崩溃。在镜像的情况下,当您向一个区域写入时,该区域会被认为是脏的/不一致的,因为写入需要复制到镜像的所有腿,并且可能不会同时到达所有腿。一旦所有写入完成,该区域就会再次被认为是干净的。
存在一个通用的日志接口,device-mapper RAID 实现使用它来执行日志操作(参见 include/linux/dm-dirty-log.h 中的 dm_dirty_log_type)。提供了各种不同的日志实现,并提供不同的功能。列表包括
类型 |
文件 |
---|---|
disk |
drivers/md/dm-log.c |
core |
drivers/md/dm-log.c |
userspace |
drivers/md/dm-log-userspace* include/linux/dm-log-userspace.h |
“disk”日志类型¶
此日志实现将日志状态提交到磁盘。这样,日志状态在重启/崩溃后仍能保留。
“core”日志类型¶
此日志实现将日志状态保存在内存中。日志状态在重启或崩溃后不会保留,但可能会带来少量的性能提升。如果没有可用于存储日志状态的存储设备,也可以使用此方法。
“userspace”日志类型¶
这种日志类型只是提供了一种将日志 API 导出到用户空间的方式,以便日志实现可以在用户空间中完成。这是通过将大多数日志请求转发到用户空间来完成的,用户空间中的守护进程会接收并处理这些请求。
内核和用户空间之间用于通信的结构位于 include/linux/dm-log-userspace.h 中。由于内核和用户空间之间交换的频率、多样性和双向通信性质,‘connector’ 被用作通信接口。
目前有两种利用此框架的用户空间日志实现——“clustered-disk”和“clustered-core”。这些实现为共享存储提供了集群一致的日志。当采用集群日志实现时,Device-mapper 镜像可以在共享存储环境中使用。