DLMFS

透過虛擬檔案系統實現的最小DLM使用者空間介面。

dlmfs 使用 OCFS2 構建,因為它需要其大部分基礎設施。

專案網頁:

http://ocfs2.wiki.kernel.org

工具網頁:

https://github.com/markfasheh/ocfs2-tools

OCFS2郵件列表:

https://subspace.kernel.org/lists.linux.dev.html

所有程式碼版權歸 2005 Oracle 所有,除非另有說明。

鳴謝

部分程式碼取自 ramfs,其版權歸 © 2000 Linus Torvalds 和 Transmeta Corp. 所有。

Mark Fasheh <mark.fasheh@oracle.com>

注意事項

  • 目前它只適用於 OCFS2 DLM,但對其他 DLM 實現的支援不應是主要問題。

掛載選項

用法

如果您只對 OCFS2 感興趣,請參閱 OCFS2 檔案系統。本文件的其餘部分將面向那些希望使用 dlmfs 在使用者空間中輕鬆設定和輕鬆使用叢集鎖定的使用者。

設定

dlmfs 要求 OCFS2 叢集基礎架構到位。請從上面的網址下載 ocfs2-tools 並配置叢集。

您需要在一個您的鎖定空間中的所有節點都可以訪問的捲上啟動心跳。最簡單的方法是透過 ocfs2_hb_ctl(與 ocfs2-tools 一起分發)。目前它要求 OCFS2 檔案系統到位,以便它可以自動找到其心跳區域,儘管它最終將支援針對原始磁碟的心跳。

請參閱與 ocfs2-tools 一起分發的 ocfs2_hb_ctl 和 mkfs.ocfs2 手冊頁。

一旦您進行心跳,DLM 鎖“域”可以很容易地建立/銷燬,並且可以訪問其中的鎖。

鎖定

使用者可以透過標準檔案系統呼叫訪問 dlmfs,或者他們可以使用“libo2dlm”(與 ocfs2-tools 一起分發),它抽象了檔案系統呼叫並呈現更傳統的鎖定 API。

dlmfs 自動為使用者處理鎖快取,因此對已獲取鎖的鎖請求不會生成另一個 DLM 呼叫。假定使用者空間程式處理它們自己的本地鎖定。

支援兩個級別的鎖 - 共享讀取和獨佔。也支援嘗試鎖定操作。

有關 libo2dlm 介面的資訊,請參閱與 ocfs2-tools 一起分發的 o2dlm.h。

可以透過 read(2) 從資源讀取鎖值塊,並透過 write(2) 寫入,針對透過 open(2) 呼叫獲得的 fd。目前支援的最大 LVB 長度為 64 位元組(儘管這是 OCFS2 DLM 的限制)。透過這種機制,dlmfs 的使用者可以在他們的節點之間共享少量資料。

mkdir(2) 向 dlmfs 發出加入域的訊號(該域將具有與結果目錄相同的名稱)

rmdir(2) 向 dlmfs 發出離開域的訊號

給定域的鎖由域目錄內的常規 inode 表示。對它們的鎖定是透過 open(2) 系統呼叫完成的。

open(2) 呼叫將不會返回,直到您的鎖已獲得或發生錯誤,除非它已被指示執行 trylock 操作。如果鎖成功,您將獲得一個 fd。

open(2) 與 O_CREAT 一起使用以確保建立資源 inode - dlmfs 不會自動為現有鎖資源建立 inode。

開啟標誌

鎖定請求型別

O_RDONLY

共享讀取

O_RDWR

獨佔

開啟標誌

結果鎖定行為

O_NONBLOCK

嘗試鎖定操作

您必須提供 O_RDONLY 或 O_RDWR 中的一個。

如果還提供了 O_NONBLOCK 並且 trylock 操作有效但無法鎖定資源,則 open(2) 將返回 ETXTBUSY。

close(2) 丟棄與您的 fd 關聯的鎖。

傳遞給 mkdir(2) 或 open(2) 的模式在本地遵守。chown 在本地也受支援。這意味著您可以使用它們來限制透過 dlmfs 訪問本地節點上的資源。

可以透過 read(2) 系統呼叫從 fd 讀取資源 LVB,無論是在共享讀取模式還是獨佔模式下。只有在獨佔模式下開啟時才能透過 write(2) 寫入。

一旦寫入,LVB 將對獲得資源只讀或更高級別鎖的其他節點可見。

參見

http://opendlm.sourceforge.net/cvsmirror/opendlm/docs/dlmbook_final.pdf

有關 VMS 分散式鎖定 API 的更多資訊。