¿Cómo arreglar el arranque en el indicador initramfs y "montar: no se puede leer '/ etc / fstab': No existe tal archivo o directorio" y "No se encontró init"?

25

Instalar un nuevo sistema utilizando un disco particionado GPT dedicado a una única partición, con formato ext4 , extlinux (versión 4.05) como gestor de arranque, Ubuntu Core versión 13.10 amd64 como rootfs y Ubuntu linux-image-3.11.0-18-generic como kernel, y extlinux-update para generar la configuración del cargador de arranque.

El resultado después del reinicio (aún dentro de una máquina virtual basada en KVM) es un aviso (initramfs) y estos mensajes:

mount: can't read '/etc/fstab': No such file or directory
mount: mounting /dev on /root/dev failed: No such file or directory
mount: mounting /sys on /root/sys failed: No such file or directory
mount: mounting /proc on /root/proc failed: No such file or directory
The filesystem doesn't have requested /sbin/init.
No init found. Try passing init= bootarg.

BusyBox es v1.20.2.

Regresión:

  • el sistema de archivos ha sido verificado con fsck.ext4

Verifique la existencia de la raíz

(initramfs) ls -l /dev/[hs]da*
ls: /dev/[hs]da*: No such file or directory

Argumento de arranque de raíz

(initramfs) cat /proc/cmdline
initrd=/boot/initrd.img-3.11.0-18-generic ro quiet BOOT_IMAGE=/boot/vmlinuz-3.11.0-18-generic

Verificar módulos cargados

(initramfs) cat /proc/modules
e1000 145368 0 - Live 0xffffffffa0000000

/ contenido de la carpeta de arranque

$ sudo ls -l boot
-rw------- 1 root root 3296162 Feb 18 22:37 System.map-3.11.0-18-generic
-rw-r--r-- 1 root root 1007681 Feb 18 22:37 abi-3.11.0-18-generic
-rw-r--r-- 1 root root  163258 Feb 18 22:37 config-3.11.0-18-generic
drwxr-xr-x 2 root root    4096 Mar 17 20:13 extlinux
-rw-r--r-- 1 root root 4995000 Mar 16 23:35 initrd.img-3.11.0-18-generic
-rw------- 1 root root 5634192 Feb 18 22:37 vmlinuz-3.11.0-18-generic

¿Cómo hacer que este sistema arranque al bash prompt predeterminado esperado?

Pro Backup
fuente
¿Por qué dos imágenes init? ¿Puedes poner esto en un disco real e intentar arrancarlo? Qemu y EFI tienen problemas, por ejemplo, si no usa una imagen de firmware de arranque EFI, no llegará muy lejos.
mikeserv
Y si todo lo que quieres es un indicador de bash, siempre puedes incluir bash en tus initramfs ...
mikeserv
De hecho, recuerdo haber visto las particiones GPT GRANDES en Ubuntu y haberlas registrado como completamente vacías. Después de mantener shift en el reinicio para obtener la selección de grub para su disco en vivo, pude seleccionar la opción Efi, después de lo cual tuve un disco.
mikeserv

Respuestas:

11

Modifique su parámetro de arranque del kernel configurando la root=/dev/sdaXopción. sdaXSería tu /o rootpartición. Al iniciar la próxima vez, verá que initramfsintenta montar la partición antes de intentar acceder /etc/fstaby montar los sistemas de archivos.

Consulte la pregunta " ¿initramfs usa / etc / fstab? " Para obtener más detalles.

Alex
fuente
Agregar root=/dev/sdaX mejora la situación, ya no hay un mensaje de inicio de sesión (initramfs)sino un bashinicio de sesión.
Pro Backup
1
Además de agregar manualmente root=/dev/sdaXal arranque del kernel, necesito actualizar /mnt/etc/default/extlinuxy cambiar EXTLINUX_ROOT=""a lo sugerido EXTLINUX_ROOT="/dev/sdaX"y ejecutar de extlinux-updatenuevo.
Pro Backup
10

Lo que necesita entender initramfses que es un sistema de archivos. Desde el kernel 2.6 es, básicamente, el único sistema de archivos impuesto por el kernel (dejando de lado VFS, que posiblemente también sea un sistema de archivos) en su máquina. Tu initramfs imagees una imagen de disco.

Dentro de su initramfs imagearchivo habrá los archivos que su distribución decidió que eran lo suficientemente cruciales como para requerir antes de encontrar su disco raíz. Por lo general, eso es Busybox y cualquier módulo del núcleo que necesite para encontrar y montar su dispositivo raíz. Esto no está funcionando para ti.

No hay ningún misterio real aquí, considerando todas las cosas. Si puede orientarse por un indicador de terminal, puede navegar por el botón initramfs.Pero primero debe desmitificarlo.

Primero y ante todo y una vez más, esto es solo /.Es la raíz de Linux haciendo cosas de tipo raíz de Linux. De hecho, si está en un archivo separado de su núcleo, en realidad ya es su segundo dispositivo raíz. Cada kernel de Linux contiene básicamente un /todo vacío que primero se monta antes de extraer suinitramfs.

Lo que es más, initramfses la raíz real . Es donde el kernel de Linux inicializa el espacio de usuario al ejecutar inity posteriormente renunciar a toda responsabilidad por cualquier problema que pueda encontrar a partir de entonces. Tu initparece ser Busybox, como muchos, lo que significa que controlar sus acciones debería ser tan simple como editar los scripts de shell que lo acompañan.

Entonces, ¿por qué el error de no encontrar? init?Definitivamente se refiere a un programa llamado initque initse ha instruido a su real a través del script de shell para que se ejecute.

Lo más sorprendente para mí es que los sistemas de pseudo archivos del núcleo dev sys proc- no se montan. Esto es muy preocupante o una muy buena pista. Usted menciona KVM, lo que me lleva a cuestionar las capacidades del kernel, pero antes de ir por ese camino oscuro y lleno de baches, ¿podemos intentar algo más?

cd /root || mkdir /root

Me parece que el mensaje de error es repetidamente:

El fichero o directorio no existe

De lo contrario, necesita reconstruir su initramfsimagen. Inicie en un disco en vivo para hacerlo y ejecute cualquier herramienta que su distribución proporcione para lograr ese fin. Ah, y asegúrese de que este disco en vivo esté cargado en modo EFI .

Así que aquí está lo único verdaderamente fuera de lo común sobre initramfs - switchroot.

El kernel de Linux proporciona una llamada al sistema muy especial destinada al espacio de usuario temprano y al manejo del traslado desde initramfssu dispositivo de disco raíz. Funciona montando primero el disco raíz en un punto de montaje initramfsy luego girando el sistema de archivos raíz. Supongo que su initramfs'spunto de montaje objetivo se rootbasa en la forma en que sigue gimiendo al respecto. ¿Por qué no asegurarse de que esté allí?

Para una mayor investigación, necesitará ponerse un poco valiente. Ajuste su gestor de arranque para pasar ...

init=/bin/sh

... como un parámetro del núcleo.

mikeserv
fuente
... el punto de montaje objetivo es la raíz ... ¿Por qué no asegurarse de que esté allí? No tengo la menor idea de cómo verificar esto.
Pro Backup
Ya no necesitas más. Tienes bash, lo que significa que has pasado initramfs. ¿Pero sigues en kvm?
mikeserv
Sí, todavía estoy en kvm.
Pro Backup
@ProBackup Si llegaste allí, debes darle al otro tipo tu recompensa; de todos modos, ese es tu objetivo. No importa, aparentemente ya lo has hecho. Tengo curiosidad por saber por qué necesita especificar dos imágenes de inicio: ¿por qué initrd y boot? ¿Que es eso? También me gustaría saber qué, en todo caso, puede dejar de ejecutar efibootmgren su solicitud en su máquina virtual.
mikeserv
He hecho una nueva pregunta SE para el por qué: unix.stackexchange.com/questions/120999/… Nota: Creo que este KVM (Parallels Desktop v8) solo tiene un BIOS (no UEFI) debido al mensaje de arranque del BIOS.
Pro Backup
0

Yo tuve el mismo problema. Lo que dijo Alex es correcto. Primero ajusté mi fstab pero eso no ayudó. Entonces, revisé mi comida. Si tiene la posibilidad de acceder al menú de grub.

  • Seleccione Linux, lo que desea comenzar y lo que causa problemas.
  • Presione 'e' y busque 'boot_image' o 'boot ... root'.
  • Verifique el ' uuid '.
  • En mi caso, estuvo mal. Hago una foto en initramfs escribiendo 'blkid' y tomo el uuid en qué partición está instalado mi linux.
  • Pase el uuid correcto de blkid a grub -> boot_image.

Eso resolvió mi problema. Después de reiniciar, mi Linux necesitó más tiempo para comenzar a verificar el disco. Pero ahora funciona de nuevo.

Espero que te pueda ayudar.

Saludos

Abe Nudel
fuente