Como iniciar automaticamente o Degraded Software RAID1 no Debian 8.0.0 durante a inicialização?

6

Se você remover um HDD de componente de um array, ele cai em um shell "busy box" sob "initramfs" dizendo algo semelhante a "não é possível montar o dispositivo root" quando o array RAID1 se torna "inativo".

É possível iniciá-lo usando:

(initramfs): mdadm --run /dev/md0
(initramfs): exit

depois do que, ele inicializa normalmente usando o RAID1 iniciado (o sistema de arquivos está no array RAID1) e continuará inicializando normalmente até que você remova outra unidade (nesse caso, ele fará exatamente o mesmo).

O Google divulgou várias postagens sobre o UBUNTU usando " BOOT_DEGRADED = true ", mas isso não funciona no DEBIAN.

Há também um post sobre o uso de md-mod. start_dirty_degraded = 1 "como um argumento de inicialização para a imagem do kernel . Eu tentei passá-lo na opção de menu GRUB, sem sucesso.

Pode haver algo que explica , mas eu sou um novato para entender: (

Alguma idéia?

    
por Bob 03.05.2015 / 04:24

1 resposta

9

O initramfs executa / scripts / local-top / mdadm para manipular o raid. Nesse script é a declaração

if $MDADM --assemble --scan --run --auto=yes${extra_args:+ $extra_args};
  then
    verbose && log_success_msg "assembled all arrays."
  else
    log_failure_msg "failed to assemble all arrays."
fi

Com a versão do pacote mdadm com Debian Jessie, o parâmetro --run parece ser ignorado quando usado em conjunto com --scan. De acordo com a página do manual, é suposto que ele ative todas as matrizes, mesmo se elas estiverem degradadas. Mas, em vez disso, todas as matrizes degradadas são marcadas como "inativas". Se o sistema de arquivos raiz estiver em uma dessas matrizes inativas, o processo de inicialização será interrompido.

É possível modificar este script e depois reconstruir o initramfs com o comando update-initramfs -u .

  1. Copie o script para o diretório local de substituição
  2. Corrigir o script com algumas linhas adicionais para executar mdadm --run em cada matriz individualmente se a primeira tentativa falhar.
  3. Atualize o initramfs.

Os seguintes comandos executarão as etapas anteriores. Verifique se você não possui um arquivo / etc / initramfs-tools / scripts / local-top / mdadm antes de copiar em cima dele.

cd /etc/initramfs-tools/scripts/local-top
cp /usr/share/initramfs-tools/scripts/local-top/mdadm .
patch --verbose --ignore-whitespace <<'EndOfPatch'
--- mdadm
+++ mdadm
@@ -76,7 +76,15 @@
   if $MDADM --assemble --scan --run --auto=yes${extra_args:+ $extra_args}; then
     verbose && log_success_msg "assembled all arrays."
   else
-    log_failure_msg "failed to assemble all arrays."
+    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
+        verbose && log_success_msg "started $dev"
+      else
+        log_failure_msg "failed to start $dev"
+      fi
+    done
   fi
   verbose && log_end_msg

EndOfPatch
update-initramfs -u

Com este initramfs atualizado, é possível inicializar sem intervenção quando um RAID1 contendo o sistema de arquivos raiz não tiver uma unidade.

    
por 21.05.2015 / 23:39