第一次重新啟動後,MD 設備名稱更改為包含“HOSTNAME:”。如何獲得一致的名稱?
在 Ubuntu 18.04 上,我創建了一個 RAID 1 陣列,如下所示:
mdadm --create /dev/md/myarray --level=1 --run --raid-devices=2 /dev/sdc /dev/sdd
然後我將輸出添加
mdadm --detail --scan /dev/md/myarray
到 /etc/mdadm/mdadm.conf。它看起來像這樣:ARRAY /dev/md/myarray metadata=1.2 name=MYHOSTNAME:myarray UUID=...
設備名稱以“MYHOSTNAME:”為前綴。此時符號連結
/dev/md/myarray
仍然存在,但在我第一次重新啟動後它變成了/dev/md/MYHOSTNAME:myarray
,破壞了一些東西。更糟糕的是,這只發生在某些機器上——在其他機器上,符號連結仍然存在/dev/md/myarray
。所有人都在執行 Ubuntu 18.04,所以我不知道為什麼。如何為我的 MD 設備獲得一致的設備路徑,最好是我指定的確切路徑(“/dev/md/myarray”)?我嘗試編輯 mdadm.conf 以刪除主機名,但即使該行顯示
ARRAY /dev/md/myarray metadata=1.2 name=myarray UUID=...
重新啟動時符號連結仍然會發生變化 - 在“想要”主機名的機器上。我也嘗試過另一種方式並在兩個地方添加主機名:
ARRAY /dev/md/HOSTNAME:myarray metadata=1.2 name=HOSTNAME:myarray UUID=...
但再次在“不想要”主機名的機器上,符號連結在重新啟動後變為 /dev/md/myarray !
我也不能使用數字設備(/dev/md127),因為當有多個像這樣創建的 MD 設備時,它們也傾向於在 md126 和 md127 之間交替!這太瘋狂了!
如何為我的 MD 設備獲得一致的設備路徑,最好是我指定的確切路徑(“/dev/md/myarray”)?
之後
mdadm --create /dev/md/foobar ...
,hostname
和name
都儲存在 mdadm 元數據中,您應該使用mdadm --examine
or進行驗證mdadm --detail
:# mdadm --detail /dev/md/foobar Name : ALU:foobar (local to host ALU)
ALU
恰好是我的 ArchLinux 機器的主機名:# hostname ALU
您可以指定應在創建時儲存的主機:
# mdadm --create /dev/md/foobar --homehost=barfoo # mdadm --detail /dev/md/foobar Name : barfoo:foobar
…但通常沒有人記得這樣做。
這已經是問題開始的地方……您可能已經從一些 LiveCD 或其他設備創建了您的 RAID 陣列,並且該環境中的主機名與您的主安裝完全不匹配。然後元數據儲存一些完全不相關的主機名。
同樣,如果您正確設置了所有內容,但隨後遇到 RAID 問題並啟動救援系統進行檢查,那麼主機名再次不匹配。
或者相反,即使是錯誤的機器,主機名也可能匹配 - 如果您為兩個獨立的系統使用相同的主機名,然後遷移驅動器。然後外星人陣列接管了原始陣列的名稱……
現在,元數據也可以在以後使用
mdadm --assemble --update=homehost
or更改--update=name
,這是處理問題的一種方法。它應該設置正確,但由於(出於某種原因)直接缺少十六進制編輯元數據很難更改,只能在組裝時完成。另一種方法是忽略系統
hostname
,而是--homehost
在程序集上指定或設置HOMEHOST
在mdadm.conf
. 這在 mdadm.conf 聯機幫助頁中有詳細描述。HOMEHOST
homehost 行為 mdadm 提供了 –homehost= 選項的預設值。通常應該只有一個其他單詞。它應該是主機名,或者是特殊詞之一
<system>
,<none>
和<ignore>
。如果<system>
給出,則 gethostname(2) 系統呼叫用於獲取主機名。這是預設設置。$$ … $$
創建數組時,此主機名將儲存在元數據中。當使用自動組裝組裝陣列時,未在其元數據中記錄正確宿主主機名稱的陣列將使用“外來”名稱進行組裝。“外來”名稱總是以數字字元串結尾,前面帶有下劃線,以將其與任何可能的本地名稱區分開來。例如 /dev/md/1_1 或 /dev/md/home_0。
因此,您可以嘗試設置
HOMEHOST ALU
(在我的情況下),HOMEHOST <ignore>
或者HOMEHOST <none>
在mdadm.conf
. 但它只有在存在時才會起作用mdadm.conf
。同樣,如果您設置忽略,然後從另一台機器連接一個數組,您可能會遇到名稱衝突。所以最好在元數據和 mdadm.conf 中正確設置主機名,不要忽略它,最好在組裝之前在 initramfs 中設置實際主機名,但很難付諸實踐。
我個人的偏好是堅持經典的數字風格。通過 UUID 辨識,僅此而已:
ARRAY /dev/md1 UUID=8fe790ca:f3fa3388:4ae125b6:2c3a5d44 ARRAY /dev/md2 UUID=f14bef5b:a5356e51:25fde128:09983091 ARRAY /dev/md3 UUID=0639c68d:4c844bb1:5c02b33e:00ab4a93
這也是一致的(但也取決於它是否以這種方式創建和/或在元數據中相應地設置,否則您也可能不得不這樣
--update
做)。與給定 UUID 不匹配的外來數組應以/dev/md127+
.歸根結底,無論你做什麼,你都不應該盲目依賴,
/dev/mdX
或者/dev/md/name
就像你不盲目依賴/dev/sdX
字母一樣。始終使用文件系統 UUID 來辨識這些陣列上的任何內容。名稱可能會意外更改的極端情況太多,因此充其量,這可能是對系統管理員的定位幫助或提示,它並不是所有問題的答案。