Si elimina un componente HDD de una matriz, cae en un shell de "caja ocupada" debajo de "(initramfs)" que dice algo similar a "no se puede montar el dispositivo raíz" ya que la matriz RAID1 se vuelve "inactiva".
Es posible iniciarlo usando:
(initramfs): mdadm --run /dev/md0
(initramfs): exit
después de eso, se inicia normalmente usando el RAID1 iniciado (el sistema de archivos está en la matriz RAID1) y seguirá arrancando normalmente hasta que retire otra unidad (en cuyo caso hará exactamente lo mismo).
Google publica un montón de publicaciones sobre UBUNTU usando "BOOT_DEGRADED=verdadero" pero eso no funciona para DEBIAN.
También hayuna publicación sobre el uso de "md-mod.start_dirty_degraded=1" como argumento de arranque para la imagen del kernel. Intenté pasarlo en la opción del menú GRUB, sin éxito.
Podría haberalgo que lo explique, pero soy un novato en entender :(
¿Algunas ideas?
Respuesta1
El initramfs ejecuta /scripts/local-top/mdadm para manejar el raid. En ese guión está la declaración.
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
Con la versión de mdadm incluida con Debian Jessie, el parámetro --run parece ignorarse cuando se usa junto con --scan. Según la página de manual, se supone que activa todas las matrices incluso si están degradadas. Pero en cambio, cualquier matriz que esté degradada se marca como "inactiva". Si el sistema de archivos raíz está en una de esas matrices inactivas, el proceso de arranque se detiene.
Es posible modificar este script y luego reconstruir initramfs con el comando update-initramfs -u
.
- Copie el script al directorio de anulación local
- Parchee el script con algunas líneas adicionales para ejecutarlo
mdadm --run
en cada matriz individualmente si falla el primer intento. - Actualice initramfs.
Los siguientes comandos realizarán los pasos anteriores. Verifique que no tenga un archivo /etc/initramfs-tools/scripts/local-top/mdadm antes de copiarlo encima.
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
Con este initramfs actualizado, es posible arrancar sin intervención cuando a un RAID1 que contiene el sistema de archivos raíz le falta una unidad.