Encontrei uma pergunta sobrediscos sobressalentes mdadmo que quase responde à minha pergunta, mas não está claro para mim o que está acontecendo.
Temos um RAID5 configurado com 4 discos - e todos são rotulados em operação normal como active/sync
:
Update Time : Sun Sep 29 03:44:01 2013
State : clean
Active Devices : 4
Working Devices : 4
Failed Devices : 0
Spare Devices : 0
...
Number Major Minor RaidDevice State
0 202 32 0 active sync /dev/sdc
1 202 48 1 active sync /dev/sdd
2 202 64 2 active sync /dev/sde
4 202 80 3 active sync /dev/sdf
Mas então, quando um dos discos falhou, o RAID parou de funcionar:
Update Time : Sun Sep 29 01:00:01 2013
State : clean, FAILED
Active Devices : 2
Working Devices : 3
Failed Devices : 1
Spare Devices : 1
...
Number Major Minor RaidDevice State
0 202 32 0 active sync /dev/sdc
1 202 48 1 active sync /dev/sdd
2 0 0 2 removed
3 0 0 3 removed
2 202 64 - faulty spare /dev/sde
4 202 80 - spare /dev/sdf
O que realmente está acontecendo aqui??
A solução foi reinstalar o RAID - felizmente posso fazer isso. Da próxima vez provavelmente haverá alguns dados sérios sobre isso. Preciso entender isso para poder ter um RAID que não falhe devido a uma falha em um único disco.
Percebi que não listei o que esperava versus o que aconteceu.
Espero que um RAID5 com 3 discos bons e 1 ruim opere em modo degradado - 3 ativos/sincronizados e 1 com defeito.
O que aconteceu foi que um sobressalente foi criado do nada e declarado com defeito - então um novo sobressalente foitambémcriado do nada e declarado som - após o qual o RAID foi declarado inoperante.
Esta é a saída de blkid
:
$ blkid
/dev/xvda1: LABEL="/" UUID="4797c72d-85bd-421a-9c01-52243aa28f6c" TYPE="ext4"
/dev/xvdc: UUID="feb2c515-6003-478b-beb0-089fed71b33f" TYPE="ext3"
/dev/xvdd: UUID="feb2c515-6003-478b-beb0-089fed71b33f" SEC_TYPE="ext2" TYPE="ext3"
/dev/xvde: UUID="feb2c515-6003-478b-beb0-089fed71b33f" SEC_TYPE="ext2" TYPE="ext3"
/dev/xvdf: UUID="feb2c515-6003-478b-beb0-089fed71b33f" SEC_TYPE="ext2" TYPE="ext3"
O TYPE e SEC_TYPE são interessantes porque o RAID possui XFS, não ext3....
Os logs de uma tentativa de montagem neste disco - que resultou no resultado final listado anteriormente, como todas as outras montagens fizeram - têm estas entradas de log:
Oct 2 15:08:51 it kernel: [1686185.573233] md/raid:md0: device xvdc operational as raid disk 0
Oct 2 15:08:51 it kernel: [1686185.580020] md/raid:md0: device xvde operational as raid disk 2
Oct 2 15:08:51 it kernel: [1686185.588307] md/raid:md0: device xvdd operational as raid disk 1
Oct 2 15:08:51 it kernel: [1686185.595745] md/raid:md0: allocated 4312kB
Oct 2 15:08:51 it kernel: [1686185.600729] md/raid:md0: raid level 5 active with 3 out of 4 devices, algorithm 2
Oct 2 15:08:51 it kernel: [1686185.608928] md0: detected capacity change from 0 to 2705221484544
Oct 2 15:08:51 it kernel: [1686185.615772] md: recovery of RAID array md0
Oct 2 15:08:51 it kernel: [1686185.621150] md: minimum _guaranteed_ speed: 1000 KB/sec/disk.
Oct 2 15:08:51 it kernel: [1686185.627626] md: using maximum available idle IO bandwidth (but not more than 200000 KB/sec) for recovery.
Oct 2 15:08:51 it kernel: [1686185.634024] md0: unknown partition table
Oct 2 15:08:51 it kernel: [1686185.645882] md: using 128k window, over a total of 880605952k.
Oct 2 15:22:25 it kernel: [1686999.697076] XFS (md0): Mounting Filesystem
Oct 2 15:22:26 it kernel: [1686999.889961] XFS (md0): Ending clean mount
Oct 2 15:24:19 it kernel: [1687112.817845] end_request: I/O error, dev xvde, sector 881423360
Oct 2 15:24:19 it kernel: [1687112.820517] raid5_end_read_request: 1 callbacks suppressed
Oct 2 15:24:19 it kernel: [1687112.821837] md/raid:md0: read error not correctable (sector 881423360 on xvde).
Oct 2 15:24:19 it kernel: [1687112.821837] md/raid:md0: Disk failure on xvde, disabling device.
Oct 2 15:24:19 it kernel: [1687112.821837] md/raid:md0: Operation continuing on 2 devices.
Oct 2 15:24:19 it kernel: [1687112.821837] md/raid:md0: read error not correctable (sector 881423368 on xvde).
Oct 2 15:24:19 it kernel: [1687112.821837] md/raid:md0: read error not correctable (sector 881423376 on xvde).
Oct 2 15:24:19 it kernel: [1687112.821837] md/raid:md0: read error not correctable (sector 881423384 on xvde).
Oct 2 15:24:19 it kernel: [1687112.821837] md/raid:md0: read error not correctable (sector 881423392 on xvde).
Oct 2 15:24:19 it kernel: [1687112.821837] md/raid:md0: read error not correctable (sector 881423400 on xvde).
Oct 2 15:24:19 it kernel: [1687112.821837] md/raid:md0: read error not correctable (sector 881423408 on xvde).
Oct 2 15:24:19 it kernel: [1687112.821837] md/raid:md0: read error not correctable (sector 881423416 on xvde).
Oct 2 15:24:19 it kernel: [1687112.821837] md/raid:md0: read error not correctable (sector 881423424 on xvde).
Oct 2 15:24:19 it kernel: [1687112.821837] md/raid:md0: read error not correctable (sector 881423432 on xvde).
Oct 2 15:24:19 it kernel: [1687113.432129] md: md0: recovery done.
Oct 2 15:24:19 it kernel: [1687113.685151] Buffer I/O error on device md0, logical block 96
Oct 2 15:24:19 it kernel: [1687113.691386] Buffer I/O error on device md0, logical block 96
Oct 2 15:24:19 it kernel: [1687113.697529] Buffer I/O error on device md0, logical block 64
Oct 2 15:24:20 it kernel: [1687113.703589] Buffer I/O error on device md0, logical block 64
Oct 2 15:25:51 it kernel: [1687205.682022] Buffer I/O error on device md0, logical block 96
Oct 2 15:25:51 it kernel: [1687205.688477] Buffer I/O error on device md0, logical block 96
Oct 2 15:25:51 it kernel: [1687205.694591] Buffer I/O error on device md0, logical block 64
Oct 2 15:25:52 it kernel: [1687205.700728] Buffer I/O error on device md0, logical block 64
Oct 2 15:25:52 it kernel: [1687205.748751] XFS (md0): last sector read failed
Não vejo xvdf listado lá ...
Responder1
Este é um problema fundamental do RAID5 – blocos defeituosos na reconstrução são fatais.
Oct 2 15:08:51 it kernel: [1686185.573233] md/raid:md0: device xvdc operational as raid disk 0
Oct 2 15:08:51 it kernel: [1686185.580020] md/raid:md0: device xvde operational as raid disk 2
Oct 2 15:08:51 it kernel: [1686185.588307] md/raid:md0: device xvdd operational as raid disk 1
Oct 2 15:08:51 it kernel: [1686185.595745] md/raid:md0: allocated 4312kB
Oct 2 15:08:51 it kernel: [1686185.600729] md/raid:md0: raid level 5 active with 3 out of 4 devices, algorithm 2
Oct 2 15:08:51 it kernel: [1686185.608928] md0: detected capacity change from 0 to 2705221484544
⋮
A matriz foi montada, degradada. Ele foi montado com xvdc, xvde e xvdd. Aparentemente, há uma peça sobressalente:
Oct 2 15:08:51 it kernel: [1686185.615772] md: recovery of RAID array md0
Oct 2 15:08:51 it kernel: [1686185.621150] md: minimum _guaranteed_ speed: 1000 KB/sec/disk.
Oct 2 15:08:51 it kernel: [1686185.627626] md: using maximum available idle IO bandwidth (but not more than 200000 KB/sec) for recovery.
Oct 2 15:08:51 it kernel: [1686185.634024] md0: unknown partition table
Oct 2 15:08:51 it kernel: [1686185.645882] md: using 128k window, over a total of 880605952k.
A mensagem 'tabela de partição' não está relacionada. As outras mensagens informam que o md está tentando fazer uma recuperação, provavelmente em um hot spare (que pode ser o dispositivo que falhou antes, se você tentou removê-lo/adicioná-lo novamente).
⋮
Oct 2 15:24:19 it kernel: [1687112.817845] end_request: I/O error, dev xvde, sector 881423360
Oct 2 15:24:19 it kernel: [1687112.820517] raid5_end_read_request: 1 callbacks suppressed
Oct 2 15:24:19 it kernel: [1687112.821837] md/raid:md0: read error not correctable (sector 881423360 on xvde).
Oct 2 15:24:19 it kernel: [1687112.821837] md/raid:md0: Disk failure on xvde, disabling device.
Oct 2 15:24:19 it kernel: [1687112.821837] md/raid:md0: Operation continuing on 2 devices.
E isso aqui é uma tentativa de ler um setor do xvde (um dos três dispositivos restantes). Isso falha [setor defeituoso, provavelmente] e md (já que a matriz está degradada) não consegue se recuperar. Assim, ele expulsa o disco do array e, com uma falha de disco duplo, seu RAID5 morre.
Não sei por que está sendo rotulado como sobressalente - isso é estranho (embora eu normalmente olhe /proc/mdstat
, então talvez seja assim que o mdadm o rotula). Além disso, pensei que os kernels mais novos hesitavam muito mais em eliminar blocos defeituosos - mas talvez você esteja executando algo mais antigo?
O que você pode fazer em relação à isso?
Bons backups. Essa é sempre uma parte importante de qualquer estratégia para manter os dados vivos.
Certifique-se de que a matriz seja limpa rotineiramente em busca de blocos defeituosos. Seu sistema operacional já pode incluir um cron job para isso. Você faz isso ecoando ou repair
ou check
para /sys/block/md0/md/sync_action
. "Reparar" também reparará quaisquer erros de paridade descobertos (por exemplo, o bit de paridade não corresponde aos dados nos discos).
# echo repair > /sys/block/md0/md/sync_action
#
O progresso pode ser observado com cat /proc/mdstat
ou com os vários arquivos nesse diretório sysfs. (Você pode encontrar documentação um tanto atualizada noArtigo mdstat do Linux Raid Wiki.
NOTA: Em kernels mais antigos – não tenho certeza da versão exata – a verificação pode não corrigir blocos defeituosos.
Uma última opção é mudar para RAID6. Isso exigirá outro disco (vocêpodeexecutar um RAID6 de quatro ou até três discos, você provavelmente não vai querer). Com kernels novos o suficiente, os blocos defeituosos são corrigidos instantaneamente quando possível. O RAID6 pode sobreviver a duas falhas de disco, portanto, quando um disco falhar, ele ainda poderá sobreviver a um bloco defeituoso – e, portanto, mapeará o bloco defeituoso e continuará a reconstrução.
Responder2
Estou imaginando que você está criando seu array RAID5 assim:
$ mdadm --create /dev/md0 --level=5 --raid-devices=4 \
/dev/sda1 /dev/sdb1 /dev/sdc1 /dev/sdd1
O que não é exatamente o que você quer. Em vez disso, você precisa adicionar os discos assim:
$ mdadm --create /dev/md0 --level=5 --raid-devices=4 \
/dev/sda1 /dev/sdb1 /dev/sdc1
$ mdadm --add /dev/md0 /dev/sdd1
Ou você pode usar mdadm
a opção de adicionar peças sobressalentes como esta:
$ mdadm --create /dev/md0 --level=5 --raid-devices=3 --spare-devices=1 \
/dev/sda1 /dev/sdb1 /dev/sdc1 /dev/sdd1
A última unidade da lista será a sobressalente.
trecho dopágina de manual do mdadm
-n, --raid-devices=
Specify the number of active devices in the array. This, plus the
number of spare devices (see below) must equal the number of
component-devices (including "missing" devices) that are listed on
the command line for --create. Setting a value of 1 is probably a
mistake and so requires that --force be specified first. A value
of 1 will then be allowed for linear, multipath, RAID0 and RAID1.
It is never allowed for RAID4, RAID5 or RAID6. This number can only
be changed using --grow for RAID1, RAID4, RAID5 and RAID6 arrays, and
only on kernels which provide the necessary support.
-x, --spare-devices=
Specify the number of spare (eXtra) devices in the initial array.
Spares can also be added and removed later. The number of component
devices listed on the command line must equal the number of RAID devices
plus the number of spare devices.