RAID md do Linux: / dev / md0 vs. / dev / md / 0

19

Em sistemas mais recentes /usr/share/mdadm/mkconf(o script usado para gerar /etc/mdadm/mdadm.conf) tende a usar o nome do dispositivo em /dev/md/0vez de /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

Isso pode causar alguma irritação para os usuários que esperam por /dev/md0lá, mas aparentemente funciona bem porque o servidor é inicializado sem problemas.

No /proc/mdstatdispositivo ainda é chamado /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>

lsmostra que /dev/md/0é um link simbólico para /dev/md0:

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

Em outro sistema mais antigo, ele mkconfainda usa /dev/md0e /dev/mdestá vazio:

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

Gostaria de saber a diferença entre esses nomes de dispositivo e não consigo encontrar nenhuma explicação no Google. É /dev/mdNo nome antigo e mdplaneja mudar para /dev/md/Nnomes de dispositivos? Essa alteração está relacionada aos metadados 1.2 (observei que o novo servidor está usando o md 1.2, enquanto o antigo ainda está usando 0.90)?


EDIT 11-09-2017: Acho que a resposta de Krzysztof Stasiak é a correta. Eu já tinha esquecido totalmente dessa questão. Enquanto brincava com um RAID de teste na última sexta-feira, pensei "por que não nomear minha matriz em vez de memorizar o que md0, md1, md2, ... etc. faz em configurações complexas?" E tentei:

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

E de fato isso funciona:

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>

(Você também pode fazer mdadm --assemble foobar DEV...).

Há uma explicação detalhada na man mdadmseção DEVICE NAMES.

Martin von Wittich
fonte
@frostschutz ah, então o nome da matriz mdadm -Eque está atualmente unassigned:0no novo servidor é dividido no :e a segunda parte se torna parte do /dev/md/<name>? Então, se eu mudasse o nome da matriz para unassigned:asdf, o link simbólico seria chamado /dev/md/asdf? E o dispositivo real é sempre chamado /dev/mdN, onde N é o próximo número gratuito?
Martin von Wittich
1
Você poderia usá-lo dessa maneira, mas ninguém o faz; ele realmente não funciona, já que geralmente o md é criado a partir de um CD ao vivo que não possui o nome do host definido, etc. Um nome como unassigned:0é apenas braindead.
frostschutz

Respostas:

1

você pode nomear a matriz como nome próprio (não apenas 0-127) e, desde o mdadm 3.0.3, você pode usar apenas o nome. Se o caminho think foi alterado para usar a subpasta /dev/md/$namepara aumentar a flexibilidade ou algum tipo de arrays limpos ou de grupo. Se o md array for criado no formato /dev/mdX, será adicionado um link simbólico para tornar a compabilidade para o novo formato.

Krzysztof Stasiak
fonte
1

Quando se trata de nomes de dispositivos, é melhor perguntar ao udev . Para meu entendimento,

  1. md%dnomeação é usada pelo kernel, é gerada diretamente pelo driver md.c # L5284 e é usada em /proc/partitionse sysfs. Portanto, aparece em/dev

  2. /dev/md/... e /dev/disk/by-id/... são gerados como links simbólicos pelo udevd. No meu sistema, as regras correspondentes são mantidas em /usr/lib/udev/rules.d/63-md-raid-arrays.rules:

    ...
    ENV{DEVTYPE}=="disk", ENV{MD_DEVNAME}=="?*", SYMLINK+="md/$env{MD_DEVNAME}"
    ...
    

Parece que o arquivo udev vem de openSUSE 11.1-rc3acordo com este commit no mdadm. Eu verifiquei este arquivo emopenSUSE 11.0 , mas ele não possui md/%dlinks simbólicos ...

myaut
fonte
0

Provavelmente, o caminho original varia dependendo da versão do kernel do Linux ou do sistema Unix. O link simbólico /dev/md/Npode existir por motivos de compatibilidade. Programas ou scripts que podem usar esse caminho em vez de /dev/mdN.

hongo
fonte