如何使 LVM 配置能夠透過連接的 USB 隨身碟進行引導

如何使 LVM 配置能夠透過連接的 USB 隨身碟進行引導

設定:DELL PowerEdge R520、oVirt 節點 4.4.1 x86_64

# pvs
  PV         VG          Fmt  Attr PSize    PFree   
  /dev/sda2  onn_ovirt01 lvm2 a--   105.26g   20.77g
  /dev/sda3  VG_he_nfs   lvm2 a--  <100.00g  <10.00g
  /dev/sda4  VG_data_nfs lvm2 a--    <1.50t <206.00g

# lsblk
...

sdb                                                            8:16   0   1.4T  0 disk 
└─sdb1                                                         8:17   0   1.4T  0 part /exports/nfs/backups

問題:當系統重新啟動時,SATA 轉 USB 連接的 1.4T 備份磁碟機變為 sda,其中 lvm 找不到實體磁碟區所需的分割區。然後系統啟動進入救援模式,我必須透過連接的顯示器/鍵盤登錄,卸載並彈出SATA轉USB驅動器,將其從fstab中註解掉,拔下插頭,然後重新啟動系統。然後,一旦使用正確的裝置作為 sda 正確啟動,我就必須撤銷我在救援模式下使用 SATA 轉 USB 裝置所做的一切。

一切都是 fstab 已經定義為透過 UUID 或 /dev/mapper/ 掛載。

問題:是否可以更改 LVM 配置,以便無論哪個設備成為 sda,它都能為系統取得正確的實體磁碟區?是否可以無需重新建立和遷移(我的系統資料位於具有熱備用的 RAID 1(鏡像)上,因此機箱中沒有更多空間用於更換磁碟機佈置)?我願意接受任何不需要刪除資料或建立新的 RAID 安排進行替換的解決方案。如果這是不可能的,那麼我對任何事情都持開放態度,真的 - 或者每次意外重新啟動時都會繼續在救援模式下解決它。

答案1

  1. LVM 不會儲存設備路徑。元件 UUID 儲存在 LVM 超級區塊中,這些 UUID 專門用於識別元件(PV、VG、LV)。 LVM 僅掃描所有可用的區塊設備(允許掃描的區塊設備在 /etc/lvm/lvm.conf 中配置),檢測實體磁碟區並從中組裝磁碟區組。它只是不查看這次物理卷的類型/設備路徑。它對於設備重新索引等非常穩健。因此,如果您將磁碟區移至 /dev/cciss/cXdYpZ (舊的 HP/Compaq SmartArray 區塊驅動程式建立此類裝置)或 /dev/hdXY 或 /dev/sdXY 或 /dev/mapper/... (任何基於DM 建置的東西都會將裝置節點放置在那裡— 加密、多路徑等)、/dev/md/... (Linux MD RAID) 等等。你的擔心是錯的,你的問題在其他地方。

  2. 問題的原因可能是 USB 速度慢。延遲較大;外部硬碟的啟動速度也非常慢(這樣做是為了限制其在旋轉過程中的功耗峰值)。 USB 不在於效能,而是對於沒有經驗的使用者來說,它的穩健性。所以,初始化速度很慢。您需要配置初始化腳本(可能是 initramfs 初始化腳本)以允許較大的延遲/逾時,以便 USB 裝置有足夠的時間來啟動和穩定。

  3. 另一個典型的原因是引導程式的配置錯誤;例如,它可能期望在“第一個硬碟的第一個分區”上找到其數據,並且如果“第一個硬碟”碰巧是錯誤的設備,則它沒有配置和內核映像來啟動和啟動把你丟進引導程式救援外殼。核心的命令列或放入 initramfs 中的某些內容可能與某些特定的裝置路徑相關聯,因此裝置的交換會導致它無法找到 / 並將您帶入初始化檔案系統救援外殼。注意這些是不同的救援砲彈,以及對哪一個你看到了嗎,這很重要。

  4. 帶備用的 RAID0 是一個矛盾的說法。 RAID0 沒有冗餘,沒有定義的降級狀態,無法將陣列從設備故障中恢復到最佳狀態,因此備用設備不可能提供幫助。任何組件設備問題通常都會導致整個陣列直接進入故障狀態。任何其他 RAID 等級都具有冗餘,如果元件發生故障,它將首先轉換為降級狀態,因此它將受益於備件,但 RAID0 則不然。

答案2

我解決了這個問題。我所要做的就是將 sdb 分區添加到過濾器中/etc/lvm/lvm.conf

曾是:

filter = ["a|^/dev/sda2$|", "a|^/dev/sda3$|", "a|^/dev/sda4$|", "r|.*|"]

變成:

filter = ["a|^/dev/sda2$|", "a|^/dev/sda3$|", "a|^/dev/sda4$|", "a|^/dev/sdb2$|", "a|^/dev/sdb3$|", "a|^/dev/sdb4$|", "r|.*|"]

其他嘗試此操作的人,請確保驗證您的更改並使用以下命令重新生成緩存vgscan

我的第一次(忘了|之後的$):

[root@host lvm]# vgscan
  Invalid separator at end of regex.
  Invalid filter pattern "a|^/dev/sdb2$".
  Failed to create regex device filter

我的第二次:

[root@host lvm]# vgscan
  Found volume group "VG_data_nfs" using metadata type lvm2
  Found volume group "VG_he_nfs" using metadata type lvm2
  Found volume group "onn_ovirt01" using metadata type lvm2

sata-to-usb 磁碟機仍然顯示為 sda,但這並不重要 - 當 sda 上找不到任何內容時,LVM 會跳到 sdb 分割區。我確實必須手動安裝 SATA 轉 USB 驅動器,但因為它/etc/fstab正確,所以我只需發出mount -a.我稍後必須解決這個問題並暫時獲得這場勝利。

相關內容