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 物件僅用於建立裝置和連線之間的連結;它們的生命週期由它們所引用的裝置和連線的生命週期決定。