multipathing e mdadm ocultar dispositivos / dev / sdX.

1

Temos um servidor linux que usa vários caminhos

temos algo que eu acho que é uma condição de corrida entre o multipathing e o mdadm

se construirmos o ataque em dispositivos powerpath como / dev / mapper / mpathab .. após a reinicialização, o ataque será degradado ou em dispositivos como / dev / sdX, portanto, por um motivo ou outro, ele não mantém a configuração inicial.

instalamos o emp powerpath como o san é um vnx e criamos o raid assim:

mdadm --verbose --create /dev/md0 --level=mirror --raid-devices=2  /dev/emcpowera /dev/emcpowerb

mas depois da reinicialização, esse é o status da invasão:

# mdadm --detail /dev/md0
/dev/md0:
           Version : 1.2
     Creation Time : Mon Jun 11 15:14:47 2018
        Raid Level : raid1
        Array Size : 419298304 (399.87 GiB 429.36 GB)
     Used Dev Size : 419298304 (399.87 GiB 429.36 GB)
      Raid Devices : 2
     Total Devices : 2
       Persistence : Superblock is persistent

     Intent Bitmap : Internal

       Update Time : Tue Jun 12 15:25:02 2018
             State : clean
    Active Devices : 2
   Working Devices : 2
    Failed Devices : 0
     Spare Devices : 0

Consistency Policy : unknown

              Name : cjlnwp01:0  (local to host cjlnwp01)
              UUID : d2779403:bd8d370b:bdea907e:bb0e3c72
            Events : 567

    Number   Major   Minor   RaidDevice State
       0      65        0        0      active sync   /dev/sdq
       1       8      160        1      active sync   /dev/sdk

parece que o mdadm na reinicialização pega os primeiros dispositivos encontrados?

como se certificar de que quando um dispositivo faz parte do multipath, ele não aparece como um dispositivo separado / dev / sdX.

por dispositivos de instalação sdc para sdq na saída lsblk abaixo não deve aparecer.

sdc                   8:32   0   400G  0 disk
sde                   8:64   0   400G  0 disk
sdg                   8:96   0   400G  0 disk
sdi                   8:128  0   400G  0 disk
sdk                   8:160  0   400G  0 disk
sdm                   8:192  0   400G  0 disk
sdo                   8:224  0   400G  0 disk
sdq                  65:0    0   400G  0 disk
emcpowera           120:0    0   400G  0 disk
└─md0                 9:0    0 399.9G  0 raid1
emcpowerb           120:16   0   400G  0 disk
└─md0                 9:0    0 399.9G  0 raid1

existe algum tipo de condição de corrida entre o mdadm e o multipathing que pode ser organizado adicionando dependências no systemd?

para registro de que o sistema operacional é o OEL 7.5 em um servidor HP3 proliant DL380 G9.

    
por danidar 13.06.2018 / 16:33

1 resposta

0

Você pode usar a entrada DEVICE em mdadm.conf para considerar apenas nomes de dispositivos específicos e ignorar todo o resto. Por padrão, mdadm aceita todos os dispositivos de bloco listados em /proc/partitions .

DEVICE /dev/emc*

Infelizmente, isso só pode ser considerado uma solução ruim. Ainda é uma grande confusão, pois há muitos casos que podem acabar usando o dispositivo errado.

Este também é um problema que você encontra em dispositivos de loop:

# losetup --find --show /dev/sdi2
/dev/loop4

Agora, /dev/loop4 e /dev/sdc3 são idênticos, o que também significa que eles compartilham o mesmo UUID:

# blkid /dev/sdi2 /dev/loop4
/dev/sdi2: UUID="0a73725c-7e29-4171-be5d-be31d56bf8fe" TYPE="ext2"
/dev/loop4: UUID="0a73725c-7e29-4171-be5d-be31d56bf8fe" TYPE="ext2"

Agora, qual dispositivo deve ser usado quando você mount UUID=0a73725c-7e29-4171-be5d-be31d56bf8fe ?

# mount UUID=0a73725c-7e29-4171-be5d-be31d56bf8fe /mnt/tmp
# df -h /mnt/tmp
Filesystem      Size  Used Avail Use% Mounted on
/dev/loop4      2.0G  490M  1.4G  26% /mnt/tmp

Acabou escolhendo o dispositivo de loop neste caso, o que pode ou não ter sido minha intenção.

A duplicação de dispositivos como esse é um problema enorme porque, de repente, os UUIDs supostamente únicos não são mais exclusivos e, portanto, o dispositivo errado pode acabar sendo usado.

O LVM também se depara com esse problema. Ele é descrito em detalhes aqui: link

Infelizmente, essa documentação também não fornece uma solução adequada, ela simplesmente sugere uma solução alternativa de filtro de dispositivo.

Para uma solução adequada, seria melhor evitar completamente ter dois dispositivos de bloco diferentes representando os mesmos dados. Geralmente isso envolve colocar dados em um deslocamento. Eu não sei se o multipath tem um recurso de deslocamento por padrão.

Com as tabelas de partições, mdadm, LUKS, LVM, você geralmente obtém o offset de graça, já que eles têm um cabeçalho no início do dispositivo pai, e os dispositivos de bloqueio secundários que eles fornecem são diferentes disso.

Assim, em / dev / sdx você só vê a tabela de partição, / dev / sdx1 você vê apenas o cabeçalho mdadm, / dev / md1 você vê apenas o cabeçalho LUKS, / dev / mapper / cryptomd1 você só vê o cabeçalho LVM e / dev / VG / LV você só vê o sistema de arquivos porque cada um desses dispositivos é deslocado de seus dados pais.

Se você fizesse o mesmo para a configuração de vários caminhos, os metadados do mdadm seriam visíveis apenas no /dev/emcpowera , mas não no /dev/sdk , e não haveria maneira de os últimos serem montados em um RAID por engano. / p>     

por 13.06.2018 / 18:02