Como iniciar automaticamente o RAID1 de software degradado no Debian 8.0.0 na inicialização?

Como iniciar automaticamente o RAID1 de software degradado no Debian 8.0.0 na inicialização?

Se você remover um HDD componente de um array, ele cairá em um shell de "caixa ocupada" em "(initramfs)", dizendo algo semelhante a "não é possível montar o dispositivo raiz", pois o array RAID1 se torna "inativo".

É possível iniciá-lo usando:

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

depois disso, ele inicializa normalmente usando o RAID1 iniciado (o sistema de arquivos está na matriz RAID1) e continuará inicializando normalmente até você remover outra unidade (nesse caso, fará exatamente o mesmo).

O Google publicou um monte de postagens sobre o UBUNTU usando "BOOT_DEGRADED = verdadeiro" mas isso não funciona para o DEBIAN.

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

Pode haveralgo que explica isso, mas sou um novato para entender :(

Alguma ideia?

Responder1

O initramfs executa /scripts/local-top/mdadm para lidar com o ataque. Nesse script está 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 mdadm enviada com Debian Jessie, o parâmetro --run parece ser ignorado quando usado em conjunto com --scan. De acordo com a página de manual, é suposto ativar todos os arrays, mesmo que estejam degradados. Mas, em vez disso, quaisquer matrizes degradadas são marcadas como 'inativas'. Se o sistema de arquivos raiz estiver em um desses arrays inativos, o processo de inicialização será interrompido.

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

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

Os comandos a seguir executarão as etapas anteriores. Verifique se você ainda não possui um arquivo /etc/initramfs-tools/scripts/local-top/mdadm antes de copiá-lo.

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 está faltando uma unidade.

informação relacionada