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: Я думаю, что ответ Кшиштофа Стасяка является правильным. Я уже полностью забыл об этом вопросе. Играя с тестовым 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 - следующий свободный номер?
Мартин фон Виттих
1
Вы можете использовать это таким образом, но никто не делает это; на самом деле это не работает, так как обычно md создается из живого компакт-диска, для которого не задано имя вашего хоста и т. unassigned:0д. Такое имя просто braindead.
frostschutz

Ответы:

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символических ссылок ...

myaut
источник
0

Вероятно, оригинальный путь зависит от версии ядра Linux или системы Unix. Символическая ссылка /dev/md/Nможет существовать по причинам совместимости. Программы или сценарии, которые могут использовать этот путь вместо /dev/mdN.

Хонго
источник