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_device 可以按卷号从连接中访问。纵向的对象通过双向链表连接。从 peer_device 到其连接和设备有反向指针,从连接和设备到其资源也有反向指针。
所有资源都位于 drbd_resources 双向链表中。此外,所有设备都可以通过 drbd_devices idr 访问其次设备号。
drbd_resource、drbd_connection 和 drbd_device 对象是引用计数的。peer_device 对象仅用于建立设备和连接之间的链接;它们的生命周期由它们所引用的设备和连接的生命周期决定。