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

14

Em sistemas mais recentes /usr/share/mdadm/mkconf (o script usado para gerar /etc/mdadm/mdadm.conf ) tende a usar o nome do dispositivo /dev/md/0 em vez 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 /dev/md0 , mas aparentemente funciona bem porque o servidor inicializa sem problemas.

Em /proc/mdstat , o dispositivo ainda é chamado de /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 mostra 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 antigo, mkconf ainda usa /dev/md0 e /dev/md está 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 dispositivos e não encontro nenhuma explicação no Google. /dev/mdN é o nome antigo e md está planejando migrar para /dev/md/N nomes de dispositivos? Esta alteração está relacionada aos metadados 1.2 (notei que o novo servidor está usando o md 1.2, enquanto o antigo ainda usa 0.90)?

EDIT 2017-09-11: Eu acho que a resposta de Krzysztof Stasiak é a correta. Eu já tinha esquecido totalmente sobre essa questão. Enquanto brincava com um RAID de teste na última sexta-feira, pensei "por que não nomear meu array em vez de memorizar o que md0, md1, md2, ... etc. fazem em configurações complexas?", E então 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 em man mdadm , seção DEVICE NAMES .

    
por Martin von Wittich 29.01.2014 / 14:59

3 respostas

1

você pode nomear array como nome próprio (não apenas 0-127) e como mdadm 3.0.3 você pode usar somente name. Se o caminho de reflexão foi alterado para usar a subpasta /dev/md/$name para aumentar a flexibilidade ou algum tipo de matriz limpa ou de grupo. Se a matriz md for criada no formato /dev/mdX , será adicionado symlink para tornar a compatibilidade com o novo formato.

    
por 03.07.2017 / 15:49
1

Quando se trata de nomes de dispositivos, é melhor perguntar udev . No meu entender,

  1. md%d nomeação é usada pelo kernel, é gerada diretamente pelo driver md.c # L5284 e é usado em /proc/partitions e sysfs . Por isso, 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-rc3 de acordo com este commit no mdadm. Eu verifiquei este arquivo em openSUSE 11.0 , mas ele não tem md/%d symlinks ...

    
por 10.09.2017 / 12:42
0

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

    
por 14.12.2016 / 22:02

Tags