¿Cómo md
se ensamblan los dispositivos durante el arranque en Ubuntu? ¿Es /etc/mdadm/mdadm.conf
realmente el factor relevante aquí?
Mi mdadm.conf
sonido es y lo comprobé mientras estaba en el entorno del CD de rescate. Al ejecutarlo mdadm -A --scan
, encuentra y asigna los nombres de los dispositivos según lo deseado. El mdadm.conf
contiene AUTO -all
a sacar todo el automatismo de montaje de las matrices.
Lo que necesito hacer es poder ensamblar automáticamente los md
dispositivos como se describe en mdadm.conf
el momento del arranque o que al ensamblar respeta el super-minor
valor de la matriz 0.9 y name
(aparentemente <hostname>:<super-minor>
) para las matrices 1.2 y hace lo correcto sin él mdadm.conf
. ¿Qué pieza del rompecabezas me estoy perdiendo?
Tengo el siguiente problema. Hay dos md
dispositivos con RAID1 ( md0
y md1
) y uno con RAID6 ( md2
). Me refiero a ellos por los nombres de dispositivo deseados . md0
tiene metadatos versión 0.9, los otros dos tienen versión 1.2. md0
los mapas /
y los otros dos no son relevantes para el arranque .
La unidad de arranque tiene particiones GPT. Hay un pegamento "BIOS Boot Partition" ( sda1
) en él. grub-install --no-floppy /dev/sda
informa de éxito.
md0 == sda3 + sdb3
md1 == sda2 + sdb2
md2 == sdc + sdd + sde + sdf + sdg + sdh
sda1
ysdb1
son "BIOS Boot Partition" cada uno
GRUB2 está contento con el /boot/grub/devicemap
lo di y añadí part_gpt
, raid
, mdraid09
y ext2
a los módulos de precarga en GRUB2.
Como todavía tenía mi volumen raíz en el entorno de rescate, simplemente monté todo y luego lo chroot
edité:
mkdir /target
mount /dev/md0 /target
mount -o bind /dev /target/dev
mount -o bind /dev/pts /target/dev/pts
mount -o bind /sys /target/sys
mount -o bind /proc /target/proc
chroot /target /bin/bash
Desde allí reinicio el super-minor
encendido md0
(con metadatos 0.9) y el name
encendido md1
y md2
. También verifiqué que funcionó usando mdadm --detail ...
. Aparte de eso, ajusté /etc/default/grub
, corrí update-grub
y también grub-install --no-floppy /dev/sda
y grub-install --no-floppy /dev/sdb
.
Después de eso, al arrancar, siempre me dejo caer en el initramfs
shell de rescate, porque el sistema de archivos raíz no se pudo montar. La razón, después de verificar, /proc/mdstat
parece ser que el md
dispositivo respectivo ni siquiera se ensambla y ejecuta. Sin mencionar que las otras dos unidades (metadatos versión 1.2) reciben un número de dispositivo en algún lugar en el rango de 125..127.
Nota: GRUB2 sale del disco de arranque. Por lo menos, se ha incrustado correctamente. El problema es la transición del rootfs
sistema de archivos raíz inicial al correcto.
/dev/mdX
exactamente por esta razón. Usar en su/dev/md/NAME
lugar. Eso nunca cambiará./etc/fstab
. La configuración no depende de los nombres, todavía me gustaría que fueran así;)Not to mention that the other two (meta-data version 1.2) drives receive a device number somewhere in the 125..127 range
. No sé lo suficiente sobre cómo ubuntu ensambla volúmenes de incursión para responder al problema más grande.Respuestas:
Proceso básico de arranque
Comida
Hay un modo alternativo, para cuando Grub no puede leer el sistema de archivos, ya sea porque no había suficiente espacio para incrustar todo ese código en el registro de arranque, o porque no conoce el sistema de archivos o las capas debajo de él. En este caso, GRUB incorpora una lista de sectores y lee el código de ellos. Esto es mucho menos robusto y es mejor evitarlo. Incluso puede hacer kernel e initramfs de esa manera (no estoy seguro).
Núcleo
El kernel luego toma el control y realiza una gran cantidad de hardware básico init. Esta etapa es bastante rápida. A continuación, el núcleo desempaqueta initramfs a tmpfs y busca un
/init
tmpfs en ese. Luego se ejecuta (en el sentido normal, el núcleo se está ejecutando por completo en este punto)/init
. Este es, por cierto, un antiguo script de shell.Initramfs
Puede extraer los initramfs a mano haciendo algo como
mkdir /tmp/foo; cd /tmp/foo; zcat /boot/initrd.img-3.8-trunk-amd64 | cpio -idmv
.Initramfs es responsable de cargar todos los controladores, iniciar udev y encontrar el sistema de archivos raíz. Este es el paso que le está fallando: no puede encontrar el sistema de archivos raíz, por lo que se rescata.
Una vez que el initramfs ha finalizado, tiene el sistema de archivos raíz montado y entrega el control a / sbin / init.
Sistema de arranque
En este punto, su init se hace cargo: creo que Ubuntu está usando el sistema de arranque actualmente.
Que esta roto
No estoy completamente seguro de lo que está roto (parte, lo confieso, porque estoy mucho más familiarizado con Debian que Ubuntu, aunque es similar), pero tengo un par de sugerencias:
mdadm.conf
. Es posible que solo necesite ejecutarupdate-initramfs -u
para solucionarlo.fuente
De acuerdo, descubrí que me faltaba simplemente una pieza. Las
initrd
imágenes no habían sido actualizadas después de jugarmdadm.conf
.¿Entonces qué hice?
Arranqué en el sistema de rescate del CD de instalación del servidor Ubuntu. Elija ejecutar un shell desde el entorno del instalador y no usar un sistema de archivos raíz. Luego (comentarios precedidos por
#
):Esto suena complicado, pero se puede hacer también con una
bash
sola línea (aunque sea larga):Esto utiliza los nombres actuales de los
md
dispositivos y sus UUID y crea unadevicemap
lectura de GRUB2. Asumiendo que lo anterior se hizo correctamente, ya debería tener los nombres de dispositivo correctos.Más allá:
Asegúrese de que contenga:
si ha configurado su
/
o/boot
partición para ser metadatos versión 1.2, use enmdraid1x
lugar demdraid09
.Más lejos:
Este paso anterior era el eslabón perdido . Aparentemente, esto se asegura de que
mdadm.conf
tenga efecto en el arranque.Después de eso, deje el
chroot
y reinicie.fuente