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 对象仅用于建立设备和连接之间的链接;它们的生命周期由它们引用的设备和连接的生命周期决定。