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
.
- Copie o script para o diretório de substituição local
- Corrija o script com algumas linhas adicionais para executar
mdadm --run
em cada array individualmente se a primeira tentativa falhar. - 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.