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


19

在较新的系统上/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



@frostschutz啊,因此mdadm -E当前unassigned:0在新服务器上的阵列名称在处拆分,:第二部分成为/dev/md/<name>?的一部分。因此,如果将数组名称更改为unassigned:asdf,则将调用符号链接/dev/md/asdf?实际的设备始终称为/dev/mdN,其中N是下一个空闲号码?
Martin von Wittich 2014年

1
您可以那样使用它,但没有人这样做。它实际上并没有用,因为md通常是从没有设置主机名的Live CD创建的,等等unassigned:0
弗罗斯特斯2014年

Answers:


1

您可以将数组命名为自己的名称(不仅是0-127),而且自mdadm 3.0.3起,您只能使用名称。如果更改了思维路径,则可以使用子文件夹/dev/md/$name来提高灵活性,或者使用某种干净的数组或组数组。如果md数组以格式创建,/dev/mdX则添加符号链接以使与新格式兼容。


1

关于设备名称,最好询问udev。据我了解

  1. md%d命名由内核使用,由驱动程序md.c#L5284直接生成,并在/proc/partitions和中使用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文件是openSUSE 11.1-rc3根据mdadm中的提交而来的。我已经在中检查了此文件openSUSE 11.0,但是它没有md/%d符号链接...


0

原始路径可能会有所不同,具体取决于Linux内核版本或Unix系统。/dev/md/N出于兼容性原因,可能存在符号链接。可能使用此路径而不是的程序或脚本/dev/mdN

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.