Como habilitar a inicialização RAID1 degradada no 16.04LTS?

14

Nas versões anteriores do ubuntu, adicionar BOOT_DEGRADED=trueao /etc/initramfs-tools/conf.d/mdadmsistema permitia a inicialização automática quando o sistema de arquivos raiz estava em uma matriz degradada. Isso não parece mais funcionar no 16.04 LTS.

A documentação ( https://help.ubuntu.com/lts/serverguide/advanced-installation.html ) parece estar desatualizada; sudo dpkg-reconfigure mdadmnão pede mais para permitir inicializações degradadas e o bootdegraded=trueargumento do kernel também não parece mais funcionar. O sistema sempre inicializa no initramfs quando a matriz do sistema de arquivos raiz é degradada. A partir daí, mdadm -IRspermite que o sistema inicialize.

Como habilito a inicialização automática quando o sistema de arquivos raiz está em uma matriz RAID1 degradada no 16.04LTS?

vdyvp
fonte
O bug de configuração real parece estar corrigido, mas a documentação ainda está incorreta conforme bugs.launchpad.net/serverguide/+bug/1310162 Até onde eu entendi, nenhuma configuração extra é necessária para permitir a inicialização com RAID degradado a partir de agora (18.04).
21918 Diego Diego

Respostas:

9

O bug mencionado aparece no mdadm 3.3-2ubuntu7 e foi corrigido no 3.4-2.

A versão mais recente do mdadm para yakkety (16.10) 3.4-4 já contém a correção e está disponível para 16.10, mas não (ainda?) Para 16.04LTS.

Assim, atualizei o mdadm do meu 16.04LTS manualmente:

wget http://launchpadlibrarian.net/275652884/mdadm_3.4-4_amd64.deb
sudo dpkg -i mdadm_3.4-4_amd64.deb

Para verificar eu

  • desligar o computador
  • desconectado um dos discos / ssd
  • Ligue o computador

Observando o console: A inicialização a partir de uma matriz de ataque degradada funciona !

Bug: https://bugs.launchpad.net/ubuntu/+source/mdadm/+bug/1635049 https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=784070

Jan Dev
fonte
Você acabou de resolver minhas 1 semanas pesquisando ... Obrigado, cara.
Fahad Ahammed
Esse bug é uma leitura deprimente.
precisa
1

Parece que a causa raiz é a /usr/share/initramfs-tools/scripts/local-top/mdadmausência de script - no Debian-8 ele está incluído no mdadmpacote, mas foi perdido no mesmo pacote para Ubuntu-16.04 ;-(

Então, depois que eu criei sua versão do dirty-hack e recriei initramfs- meu servidor Ubuntu-16.04 LTS de teste foi capaz de inicializar completamente usando o único segundo HDD da matriz RAID1.

#!/bin/sh
# 2016-07-13 [email protected] - missed mdadm script for Ubuntu-16.04
# see debian8_host:/usr/share/initramfs-tools/scripts/local-top/mdadm for full version

MDADM=/sbin/mdadm 
. /scripts/functions

echo "===>"
cat /proc/mdstat
echo "===>"
log_begin_msg "Assembling all MD arrays"
if $MDADM --assemble --scan --run --auto=yes
then
  log_success_msg "assembled all arrays."
else
  log_warning_msg "failed to assemble all arrays, attempting individual starts"
  for dev in $(cat /proc/mdstat | grep md | cut -d ' ' -f 1)
  do
    log_begin_msg "attempting mdadm --run $dev"
    if $MDADM --run $dev; then
      log_success_msg "started $dev"
    else
      log_failure_msg "failed to start $dev"
    fi
  done
fi
log_end_msg
echo "===>"
cat /proc/mdstat
echo "===>"

sleep 5

# TODO: run mdadm --readwrite /dev/mdN
# if array is in 'auto-read-only' mode
Andrey Kopeyko
fonte
1
Você coloca esse script /usr/share/initramfs-tools/scripts/local-top/mdadme instala com update-initramfs -k all -u. No entanto, isso gerará um aviso. para desativar o aviso colocado case ${1:-} in prereqs) echo "multipath"; exit 0;; esacantes da . /scripts/functionslinha.
precisa
Sim, gera um aviso - mas esse aviso é inofensivo. Eu acho que hackear functionsnão é uma boa ideia por causa de possíveis efeitos colaterais. Então, simplesmente ignoro esse aviso.
Andrey Kopeyko
0

Eu tive o mesmo problema com o 16.04, o array RAID se recusou a ficar ativo no modo degradado.

Aqui está uma solução fácil:

  1. crie um novo arquivo: / etc / initramfs-tools / scripts / init-premount / delay_mounting (lembre-se de definir o + x)

adicionar

dormir 20 (ou segundos que você preferir)

  1. crie um novo arquivo: / etc / initramfs-tools / scripts / local-top / mdadm (lembre-se de definir o + x)

adicione o seguinte (force start array, se você tiver / dev / md0, / dev / md1 e / dev / md2)

mdadm --run / dev / md0
mdadm --run / dev / md1
mdadm --run / dev / md2

então

update-initramfs -k all -u , então está tudo pronto.

Observe que, apenas 1) é necessário para 14.04, mas não custa fazer as duas coisas. diferente de você pode receber alguma mensagem de aviso como:

mdadm: falha ao executar a matriz / dev / md0: Dispositivo ou recurso ocupado

o que é inofensivo, já que apenas diz que porque / dev / md0 está ativo, você pode definitivamente escrever scripts mais inteligentes, apenas execute --run quando necessário.

Ying-Hung Chen
fonte