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