Linux md RAID:/dev/md0 與 /dev/md/0
在較新的系統上
/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。據我了解,
md%d
命名由核心使用,由驅動程序md.c#L5646直接生成,在/proc/partitions
and中使用sysfs
。因此,它出現在/dev
/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 文件似乎來自mdadm
openSUSE 11.1-rc3
中的這個送出。我已經檢查了這個文件openSUSE 11.0
,但它沒有md/%d
符號連結……