Debian

Linux md RAID:/dev/md0 與 /dev/md/0

  • July 28, 2020

在較新的系統上/usr/share/mdadm/mkconf(用於生成的腳本/etc/mdadm/mdadm.conf)傾向於使用設備名稱/dev/md/0而不是/dev/md0

new-system ~ # /usr/share/mdadm/mkconf | grep ARRAY
ARRAY /dev/md/0 metadata=1.2 UUID=a0021927:0e4f10bf:2c47dc72:ca0b352e name=unassigned:0

這可能會對期望在那裡的使用者造成一些刺激/dev/md0,但顯然它工作正常,因為伺服器啟動沒有問題。

/proc/mdstat設備中仍然被稱為/dev/md0

new-system ~ # cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 sdb2[2] sda2[0]
     1953381184 blocks super 1.2 [2/2] [UU]

unused devices: <none>

ls表明這/dev/md/0是一個符號連結/dev/md0

new-system ~ # ls -l /dev/md/0 
lrwxrwxrwx 1 root root 6 Nov 20 14:06 /dev/md/0 -> ../md0

在另一個舊系統上mkconf仍然使用/dev/md0,並且/dev/md是空的:

old-system ~ # /usr/share/mdadm/mkconf | grep ARRAY
ARRAY /dev/md0 UUID=76472cf5:83fd8e5a:ad617046:69b2ebf1
old-system ~ # ls -l /dev/md
total 0

我想知道這些設備名稱之間的區別,我在Google上找不到任何解釋。是/dev/mdN舊名稱,併md計劃移動到/dev/md/N設備名稱?此更改是否與 1.2 元數據有關(我注意到新伺服器使用 md 1.2,而舊伺服器仍在使用 0.90)?


編輯 2017-09-11:我認為Krzysztof Stasiak 的答案是正確的。我現在已經完全忘記了這個問題。上週五在玩測試 RAID 時,我想“為什麼不命名我的陣列,而不是記住 md0、md1、md2 等在復雜設置中的作用?”,所以我嘗試了:

test-server ~ # mdadm --assemble /dev/mdfoobar /dev/loop[01]
mdadm: /dev/mdfoobar is an invalid name for an md device.  Try /dev/md/mdfoobar

確實有效:

test-server ~ # mdadm --assemble /dev/md/foobar /dev/loop[01]
mdadm: /dev/md/foobar has been started with 2 drives.

test-server ~ # ll /dev/md/foobar 
lrwxrwxrwx 1 root root 6 Sep 11 10:45 /dev/md/foobar -> ../md0

test-server ~ # cat /proc/mdstat 
Personalities : [raid1]
md0 : active (auto-read-only) raid1 loop0[0] loop1[1]
     102272 blocks super 1.2 [2/2] [UU]

unused devices: <none>

(你也可以這樣做mdadm --assemble foobar DEV...)。

man mdadm節中有詳細說明DEVICE NAMES

您可以將數組命名為自己的名稱(不僅是 0-127),並且從 mdadm 3.0.3 開始,您只能使用名稱。如果將思考路徑更改為使用子文件夾/dev/md/$name以提供更大的靈活性或某種干淨或組數組。如果 md 數組是以格式創建的,/dev/mdX則會添加符號連結以兼容新格式。

當涉及到設備名稱時,最好詢問udev。據我了解,

  1. md%d命名由核心使用,由驅動程序md.c#L5646直接生成,在/proc/partitionsand中使用sysfs。因此,它出現在/dev
  2. /dev/md/...並由/dev/disk/by-id/...udevd 生成為符號連結。在我的系統中,相應的規則保存在/usr/lib/udev/rules.d/63-md-raid-arrays.rules
ENV{DEVTYPE}=="disk", ENV{MD_DEVNAME}=="?*", SYMLINK+="md/$env{MD_DEVNAME}"

udev 文件似乎來自mdadmopenSUSE 11.1-rc3中的這個送出。我已經檢查了這個文件openSUSE 11.0,但它沒有md/%d符號連結……

引用自:https://unix.stackexchange.com/questions/111479