提议的用于在 Linux 中创建块设备快照的 blksnap 机制

生产备份和灾难恢复软件的 Veeam 公司提出将 blksnap 模块包含在 Linux 内核中,并实现创建块设备快照和跟踪块设备变化的机制。 为了使用快照,已准备好 blksnap 命令行实用程序和 blksnap.so 库,允许您通过用户空间的 ioctl 调用与内核模块进行交互。

创建该模块的目的是在不停止工作的情况下组织驱动器和虚拟磁盘的备份 - 该模块允许您在快照中捕获整个块设备的当前状态,为备份提供不依赖于正在进行的更改的隔离片。 blksnap的一个重要特性是能够同时为多个块设备创建快照,这不仅可以保证块设备级别的数据完整性,还可以实现备份中不同块设备状态的一致性。

为了跟踪块设备子系统 (bdev) 的更改,添加了附加过滤器的功能,该过滤器允许您拦截 I/O 请求。 blksnap 实现一个过滤器,用于拦截写入请求、读取旧值并将其保存在确定快照状态的单独更改列表中。 通过这种方法,使用块设备的逻辑不会改变,无论快照如何,都会按原样在原始块设备中进行记录,这消除了数据损坏的可能性,即使在出现不可预测的严重错误时也避免了问题在 blksnap 中和为更改分配的空间溢出。

该模块还允许您确定在最后一个快照和任何以前的快照之间更改了哪些块,这对于实施增量备份非常有用。 为了保存相对于快照状态的更改,可以在任何块设备上分配任意范围的扇区,这允许您将更改保存到块设备上 FS 内的单独文件中。 用于存储更改的区域的大小可以随时增加,甚至在创建快照之后也是如此。

Blksnap 基于 veeamsnap 模块的代码,该模块是 Veeam Agent for Linux 产品的一部分,但针对 Linux 内核主要部分中的交付细节进行了重新设计。 blksnap 和 veeamsnap 之间的概念差异在于使用附加到块设备的过滤器系统,而不是拦截 I/O 的单独 bdevfilter 组件。

来源: opennet.ru

添加评论