Controlador de ataque do Linux (LVM / MDADM)

3

Hoje estou em um lugar muito ruim. Um array de raids de produção caiu. O controlador falhou. Depois de desmontar os sistemas de arquivos e matar todos os processos, mudei o controlador de hardware. Ao reiniciar o array, os discos voltaram e eu quero tentar montar o array.

No entanto, não consigo parar o array existente.

Eu tenho:

cat /proc/mdstat

Personalities : [raid6] [raid5] [raid4]
md1 : active raid5 sdi1[5](F) sdh1[6](F) sdg1[7](F) sdf1[8](F) sde1[9](F) sdd1[10](F)
      976751616 blocks level 5, 64k chunk, algorithm 2 [5/0] [_____]

md2 : active raid5 sdo1[5](F) sdm1[6](F) sdl1[7](F) sdk1[8](F) sdj1[9](F)
      3907039744 blocks level 5, 64k chunk, algorithm 2 [5/0] [_____]

unused devices: <none>

Os discos agora são / dev / sdn sds sdt sdu sdv e sdw + sdx sdy sdz sdaa e sdab

Tentando parar a matriz, é exibido:

[root@tango ~]# mdadm --stop /dev/md1
mdadm: fail to stop array /dev/md1: Device or resource busy
Perhaps a running process, mounted filesystem or active volume group?

Isso porque os grupos de volumes ainda estão ativos.

lvs dá:

  /dev/md1: read failed after 0 of 4096 at 0: Input/output error
  /dev/md2: read failed after 0 of 4096 at 0: Input/output error
  /dev/raid5_vol2/u03: read failed after 0 of 4096 at 0: Input/output error
  /dev/raid5_vol1/u06: read failed after 0 of 4096 at 0: Input/output error
  LV       VG         Attr   LSize   Origin Snap%  Move Log Copy%  Convert
  LogVol00 VolGroup00 -wi-ao 111.00G
  LogVol01 VolGroup00 -wi-ao  17.50G
  u01      raid1_vol1 -wi-ao 128.00G
  u04      raid1_vol2 -wi-ao 128.00G
  u05      raid5_vol3 -wi-ao 521.00G
  u02      raid5_vol4 -wi-ao 521.00G
  u07      raid5_vol5 -wi-ao 248.00G

tentando definir o lv como inativo falha com:

[root@tango ~]# lvchange -a n /dev/raid5_vol1
  /dev/md1: read failed after 0 of 4096 at 0: Input/output error
  /dev/md2: read failed after 0 of 4096 at 0: Input/output error
  /dev/raid5_vol2/u03: read failed after 0 of 4096 at 0: Input/output error
  /dev/raid5_vol1/u06: read failed after 0 of 4096 at 0: Input/output error
  /dev/md1: read failed after 0 of 4096 at 0: Input/output error
  /dev/md1: read failed after 0 of 4096 at 1000193589248: Input/output error
  /dev/md1: read failed after 0 of 4096 at 1000193646592: Input/output error
  /dev/md1: read failed after 0 of 4096 at 0: Input/output error
  /dev/md1: read failed after 0 of 4096 at 4096: Input/output error
  /dev/md1: read failed after 0 of 4096 at 0: Input/output error
  /dev/md2: read failed after 0 of 4096 at 0: Input/output error
  /dev/md2: read failed after 0 of 4096 at 4000808632320: Input/output error
  /dev/md2: read failed after 0 of 4096 at 4000808689664: Input/output error
  /dev/md2: read failed after 0 of 4096 at 0: Input/output error
  /dev/md2: read failed after 0 of 4096 at 4096: Input/output error
  /dev/md2: read failed after 0 of 4096 at 0: Input/output error
  /dev/raid5_vol2/u03: read failed after 0 of 4096 at 3974992166912: Input/output error
  /dev/raid5_vol2/u03: read failed after 0 of 4096 at 3974992224256: Input/output error
  /dev/raid5_vol2/u03: read failed after 0 of 4096 at 0: Input/output error
  /dev/raid5_vol2/u03: read failed after 0 of 4096 at 4096: Input/output error
  /dev/raid5_vol2/u03: read failed after 0 of 4096 at 0: Input/output error
  /dev/raid5_vol1/u06: read failed after 0 of 4096 at 991063638016: Input/output error
  /dev/raid5_vol1/u06: read failed after 0 of 4096 at 991063695360: Input/output error
  /dev/raid5_vol1/u06: read failed after 0 of 4096 at 0: Input/output error
  /dev/raid5_vol1/u06: read failed after 0 of 4096 at 4096: Input/output error
  /dev/raid5_vol1/u06: read failed after 0 of 4096 at 0: Input/output error
  Volume group "raid5_vol1" not found
  Skipping volume group raid5_vol1

Eu também tentei:

[root@tango ~]# mdadm --assemble --force /dev/md1 /dev/sdn /dev/sds /dev/sdt /dev/sdu /dev/sdv /dev/sdw
mdadm: device /dev/md1 already active - cannot assemble it

Então estou sem ideias! Alguém pode ajudar?

Katie

[root@tango ~]# cat /etc/mdadm.conf
DEVICE partitions
ARRAY /dev/md2 level=raid5 num-devices=5 metadata=0.90 spares=1 UUID=dce41d37:804dea59:e5727503:733c194b
ARRAY /dev/md1 level=raid5 num-devices=5 metadata=0.90 spares=2 UUID=9e8a7463:ea5942af:abf7ab25:de5bb614
    
por user131012 09.08.2012 / 13:10

1 resposta

2

Eu finalmente resolvi isso, 24 horas de dor, então pensei em compartilhar:

Estas são as informações, se você perder um controlador de disco, todos os seus discos entrarão em estado de falha. Quando você desliga a matriz e substitui o controlador na reinicialização, todos os discos têm rótulos diferentes. Repare que eu não disse reiniciar. Eu reiniciei o array RAID, pois o sistema não pode ser reinicializado.

Passo 1 - Diga ao mdadm para esquecer o disco separado assim:

$ & mt: mdadm / dev / md1 --remove desanexado

Se você tentar usar o mdadm / dev / md1 --remove / dev / sdX, isso falhará, então você terá que usar o 'desanexado'. Se isso não desanexar todos os discos em seu grupo de ataque, provavelmente será necessário executá-lo mais de uma vez. Eu fiz. No terceiro gato / proc / mdstat, todos eles foram removidos.

Etapa 2 - Se você tentar desligar o array e tiver algum volume lógico ou usuário ativo no momento em que o controlador falhou, você não poderá:

$ & mt; mdadm --stop / dev / md1

No entanto, se isso funcionar, ignore o passo 3.

Passo 3 - usando o dmsetup remove para liberar o array

Então ... você precisa executar o comando dmsetup remove -f -j 1234 -m 1. Esses números vêm da execução de informações do dmsetup e da procura dos volumes que falharam. No meu caso, eles eram fáceis de identificar porque os quebrados tinham uma bandeira aberta de zero como essa. Executar isso em um sistema ativo é uma forma assustadora, portanto, certifique-se de obter esses números corretamente. Esse comando ajudará:

$ > dmsetup info .. .. .. Nome: raid5_vol2-u03 Estado: ACTIVE Leia adiante: 1024 Tabelas presentes: LIVE Contagem aberta: 0 Número do evento: 0 Maior, menor: 253, 6 Número de alvos: 1 UUID: LVM-fPJWYWhBhTO7tzHMBbc01qR20Nazc8N93S0bMPqstrg0sFFVtipaWYi7NYzas12d

O volume na caixa que estava ativa tinha um 1 em contagem aberta. Os quebrados tiveram uma contagem aberta de 0.

Se você tiver certeza de que tem o volume correto, poderá emitir o comando. No meu caso, os dois números eram 253 e 6.

$ > dmsetup remove -f -j 253 -m 6 aguarde 30 segundos $ & mt; mdadm --stop / dev / md1

Passo 4 - supondo que você foi capaz de parar o array que você precisa para tentar montá-lo novamente.

Para fazer isso, você precisa saber quais são as novas etiquetas de disco, se você sabe os números de série dos seus discos antes da falha, o que é uma boa prática, você pode executar

$ > smartctl -i / dev / sdN para descobrir qual etiqueta corresponde a qual disco agora. Alternativamente, você pode desligar o array novamente e verificá-los fisicamente.

Quando souber:

$ > mdadm --assemble / dev / md1 / dev / sdn1 / dev / sds1 / dev / sdt1 ... etc.

Se isso funcionar, você receberá um ataque iniciado com mensagens, se não for hmm ... Não tenho certeza!

espere um pouco ...

$ > cat / proc / mdstat

O array deve estar sincronizando / reconstruindo. Meu pequeno levou minutos o grande levou horas. Se isso funciona.

Passo 5 - neste momento, os grupos de volumes, os volumes lógicos, etc, estarão todos em um estado para corrigi-los. Eu corri:

$ > pvscan $ > vgscan $ > lvscan

Para minha sorte, isso identificou minha matriz e ligou as coisas, mas deixou o grupo de volumes inativo.

Então lvs mostrou:

inactive raid5_vol1 ...

Etapa 6 - reativar o grupo de volumes:

vgchange -a y raid5_vol1

Passo 7 - Se tudo correu bem, isso não seria montável novamente e você pode me agradecer neste post por ajudar.

Boa sorte!

Katie

    
por 10.08.2012 / 19:37