DRBD-9 的内核数据结构

这描述了 DRBD-9 的内核数据结构。从 Linux v3.14 开始,我们正在重新组织 DRBD 以使用此数据结构。

基本数据结构

一个节点有多个 DRBD 资源。每个这样的资源都有多个设备(也称为卷)和与其他节点(“对等节点”)的连接。每个 DRBD 设备在本地由一个块设备表示。

DRBD 对象相互连接,形成如下所示的矩阵;一个 drbd_peer_device 对象位于 drbd_device 和 drbd_connection 之间的每个交叉点

/--------------+---------------+.....+---------------\
|   resource   |    device     |     |    device     |
+--------------+---------------+.....+---------------+
|  connection  |  peer_device  |     |  peer_device  |
+--------------+---------------+.....+---------------+
:              :               :     :               :
:              :               :     :               :
+--------------+---------------+.....+---------------+
|  connection  |  peer_device  |     |  peer_device  |
\--------------+---------------+.....+---------------/

在此表中,水平方向上,可以通过卷号从资源访问设备。同样,可以通过卷号从连接访问 peer_devices。垂直方向上的对象通过双向链表连接。从 peer_devices 到其连接和设备,以及从连接和设备到其资源都有后向指针。

所有资源都在 drbd_resources 双向链表中。此外,可以通过其次设备号通过 drbd_devices idr 访问所有设备。

drbd_resource、drbd_connection 和 drbd_device 对象是引用计数的。 peer_device 对象仅用于建立设备和连接之间的链接;它们的生命周期由它们引用的设备和连接的生命周期决定。