Lvm

共享儲存上的兩個 LVM 卷。會不會導致數據損壞?

  • August 25, 2016

我有一個設置,其中一個通過 FibreChannel 連接的 SAN 儲存可由兩台主機訪問(在塊級別)。我想在儲存上創建兩個 lvm2 物理卷:pv1pv2,現在分別是兩個卷組的唯一成員:vg1vg2。我的主人應該專門使用它們並且“不要碰另一個”。

由於 SAN 對兩個主機都是可見的,因此 lvm 結構對兩個主機都是可見的。(我對其進行了測試:在一台主機上創建邏輯卷會導致它們在 /dev/mapper 下對另一台主機可見)。我想確保host1只會修改vg1並且host2只會修改vg2以防止數據損壞。

是否保證當我沒有明確執行任何 lvm 命令時,lvm 守護程序和核心不會重新洗牌/優化屬於另一台主機的捲組,從而破壞它?

不,僅通過在兩個系統上都顯示 VG 不會損壞任何東西,但是在兩個主機上都顯示 VG 是危險的(由於某些程序、腳本或人為搞砸並選擇錯誤的磁碟進行操作的可能性在)。您可以將它們過濾掉,這樣在執行 PV 掃描時,每個主機都會忽略它不應該接觸的 LUN。因此,每個人一次只能檢測一個 VG。這在您的場景和許多其他場景中很有用。

順便說一句(在我深入研究之前),您可能會考慮在 SAN 級別處理此問題並將這些 LUN 分成單獨的目標。這樣一來,基本塊設備就永遠不會被“錯誤”的發起者拾取。我會推薦此選項而不是其他選項,除非您有充分的理由希望 LUN 同時在兩台主機上可見。

接下來,我們正在研究在 LVM 配置中創建過濾器。這是通過一系列正則表達式控制的,以限制“pvscan”檢測某些塊設備(或塊設備類)。我們進行此更改的文件是 /etc/lvm/lvm.conf

在該配置中,您會發現(大約一半以下)一條聲明“global_filter =”的行。該文件應該給出一些關於如何使用它的提示,但讓我們回顧一些概念。

首先,您應該根據不會更改的路徑來允許和限制塊設備。不要使用 /dev/sda 之類的東西來選擇磁碟。這可能會改變,您的過濾器將不可靠。相反,請使用 /dev/disk/by-id/ 或 /dev/disk/by-path/ 之類的內容。這兩個目錄都包含符號連結,這些符號連結使用有關 LUN 的實際資訊來辨識它們。by-id 使用 SCSI ID,by-path 使用物理主機路徑和匯流排類型。盡可能使用 by-id,因為它是最可靠的。因為這些是上述目錄中的符號連結,所以您可以使用 `ls -l’ 將它們與它們對應的 /dev/sd* 路徑匹配。

使用該按 ID 路徑,您可以創建一個全域 LVM 過濾器,以使掃描在以後的掃描中拒絕不需要的塊設備。建構此行時,首先放置允許條目(用“a”表示),然後拒絕條目(用“r”表示)。該過濾器的範例可能如下所示:

global_filter=[ "a|.*|","r|/dev/disk/by-id/id-of-unwanted-disk.*|" ]

語句用方括號封裝。語句用引號封裝,並用逗號分隔。條用於打開和關閉包含斜杠的語句(就像這些一樣)。根據正則表達式標準,在該拒絕語句中的星號之前放置一個點,以定義一個包羅萬象的萬用字元。這一行說,“允許除此驅動器之外的所有內容,以及可能來自此驅動器的所有分區。” 這個有問題的拒絕驅動器將是您不希望 LVM 查看的 LUN。

保存此編輯後,使用“pvscan”對其進行測試。如果它按照你想要的方式進行,你不受歡迎的 VG 將不再顯示。在另一台主機上做同樣的事情,你就有了一個安全的過濾器。

但說真的,如果可以的話,請使用 iSCSI 目標隔離這些 LUN。這要容易得多,並且不需要兩台主機上的配置即可成功。

引用自:https://serverfault.com/questions/798946