GNU/Linux >> Tutoriales Linux >  >> Ubuntu

Ubuntu:después de instalar un nuevo kernel en Ubuntu 14.04, reiniciar me lleva a Busybox Initramfs. ¿Cómo montar un sistema de archivos después de eso?

Tengo una máquina virtual con Ubuntu 14.04. Recientemente construí e instalé el kernel linux-3.14.5 en él, e intenté iniciarlo, pero me deja en el shell incorporado de BusyBox v1.21.1.

Esto es lo que hice:

    wget https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.14.5.tar.xz 
    mkdir ~/linux 
    mv linux-3.14.5.tar.xz ~/linux 
    tar -xJf linux-3.14.5.tar.xz 
    mkdir linux-3.14.5 
    cd linux-3.14.5_src/ 
    make defconfig O=../linux-3.14.5
    make menuconfig O=../linux-3.14.5  /* i didn't change anything */
    make O=../linux-3.14.5
    cd ../linux-3.14.5
    sudo make install

Pude ver un archivo llamado initrd.img-3.14.5 en /arranque junto con intrd.img-3.13.0-24-generic (que supongo, es el kernel de Ubuntu 14.04).

También había 2 archivos llamados vmlinuz-3.14.5 y vmlinuz-3.13.0-24-genérico.

Después de eso, corrió

    sudo blkid

y obtuve lo siguiente:

    /dev/sda1: UUID="92ec153c-cb92-4300-8d2a-f63b747ddd35" TYPE="ext4" 
    /dev/sda5: UUID="439a6423-28dc-4363-b47e-580f1e65e951" TYPE="swap"

Yo también corrí

    sudo fdisk -l

que me dio

    Disk /dev/sda: 21.5 GB, 21474836480 bytes
    255 heads, 63 sectors/track, 2610 cylinders, total 41943040 sectors
    Units = sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disk identifier: 0x000268be

       Device Boot      Start         End      Blocks   Id  System
    /dev/sda1   *        2048    39845887    19921920   83  Linux
    /dev/sda2        39847934    41940991     1046529    5  Extended
    /dev/sda5        39847936    41940991     1046528   82  Linux swap / Solaris

Revisé el /boot/grub/grub.cfg archivo que tenía la siguiente entrada:

    menuentry 'Ubuntu, with Linux 3.13.0-24-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.13.0-24-generic-advanced-92ec153c-cb92-4300-8d2a-f63b747ddd35' {
            recordfail
            load_video
            gfxmode $linux_gfx_mode
            insmod gzio
            insmod part_msdos
            insmod ext2
            set root='hd0,msdos1'
            if [ x$feature_platform_search_hint = xy ]; then
              search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1  92ec153c-cb92-4300-8d2a-f63b747ddd35
            else
              search --no-floppy --fs-uuid --set=root 92ec153c-cb92-4300-8d2a-f63b747ddd35
            fi
            echo    'Loading Linux 3.13.0-24-generic ...'
            linux   /boot/vmlinuz-3.13.0-24-generic root=UUID=92ec153c-cb92-4300-8d2a-f63b747ddd35 ro find_preseed=/preseed.cfg auto noprompt priority=critical locale=en_US quiet
            echo    'Loading initial ramdisk ...'
            initrd  /boot/initrd.img-3.13.0-24-generic
    }

Entonces, seguí adelante y agregué las siguientes líneas a /etc/grub.d/40_custom (acabo de cambiar las líneas 1, 14, 15 y 17)

    menuentry 'MyNewKernel' {
        recordfail
        load_video
        insmod gzio
        insmod part_msdos
        insmod ext2
        set root='hd0,msdos1'
        if [ x$feature_platform_search_hint = xy ]; then
          search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1  92ec153c-cb92-4300-8d2a-f63b747ddd35
        else
          search --no-floppy --fs-uuid --set=root 92ec153c-cb92-4300-8d2a-f63b747ddd35
        fi
        echo    'Loading My New Kernel ...'
        linux   /boot/vmlinuz-3.14.5 root=UUID=92ec153c-cb92-4300-8d2a-f63b747ddd35 ro recovery nomodeset find_preseed=/preseed.cfg auto noprompt priority=critical locale=en_US
        echo    'Loading initial ramdisk ...'
        initrd  /boot/initrd.img-3.14.5
}

y corrió

    sudo update-grub
    sudo reboot

¡No funcionó! El mensaje de error decía

    ALERT! /dev/disk/by-uuid/92ec153c-cb92-4300-8d2a-f63b747ddd35 does not exist.
    Dropping to a shell!

Así que intenté reemplazar el UUID por /dev/sda1 resultando en el siguiente archivo.

    menuentry 'MyNewKernel' {
            recordfail
            load_video
            insmod gzio
            insmod part_msdos
            insmod ext2
            set root='hd0,msdos1'
            if [ x$feature_platform_search_hint = xy ]; then
              search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1  /dev/sda1
            else
              search --no-floppy --fs-uuid --set=root /dev/sda1
            fi
            echo    'Loading Linux 3.13.0-24-generic ...'
            linux   /boot/vmlinuz-3.14.5 root=/dev/sda1 ro recovery nomodeset find_preseed=/preseed.cfg auto noprompt priority=critical locale=en_US
            echo    'Loading initial ramdisk ...'
            initrd  /boot/initrd.img-3.14.5
    }

Eso tampoco funcionó y me dio un mensaje de error muy similar.

    ALERT! /dev/sda1 does not exist.
    Dropping to a shell!

Creo que estoy cometiendo un error estúpido, pero no puedo entender qué, ya que esta es mi primera vez. Agradecería cualquier ayuda.

Relacionado:Ubuntu – ¿Cómo se limpia el directorio /tmp?

Gracias por leer la larga publicación. Por favor, hágamelo saber si necesita más información.

Respuesta aceptada:

Te has saltado dos pasos antes de make install , que instala los controladores necesarios. Antes de make install hacer make modules y make modules_install en ese orden. Esto instala controladores basados ​​en sus archivos .config.

El error también puede ocurrir debido a una configuración incorrecta en el archivo .config y, por lo tanto, faltan algunos controladores. Así que aquí hay una manera de hacer la compilación del núcleo. Una de las mejores formas de obtener la configuración correcta es copiar una configuración funcional desde el directorio /boot a su .config en la carpeta de código fuente del kernel. Su archivo de configuración de kernel en funcionamiento es

/boot/config-`uname -r`

Luego haz la compilación con make . make solicitará algunas configuraciones, que no están en el archivo .config, porque este archivo .config puede corresponder a un núcleo antiguo y no tiene algunas configuraciones en el nuevo núcleo que está tratando de compilar. Simplemente escriba Enter para todas las solicitudes de configuración, que seleccionarán las configuraciones predeterminadas. Luego haz make modules , make modules_install y finalmente make install . Esto debe resolver sus problemas.

Esta forma de compilación no es adecuada para un profesional, pero ayudará a los novatos sin mucho conocimiento de las diferentes opciones de configuración para comenzar con la compilación del kernel.


Ubuntu
  1. Cosas que hacer después de instalar Ubuntu 18.04 y 19.10

  2. Cómo actualizar el kernel de Linux en Ubuntu

  3. ¡Lanzamiento del kernel de Linux 5.13! Cómo instalar en Ubuntu 21.04

  4. ¿Cómo reparar Grub? (¿Cómo recuperar Ubuntu después de instalar Windows?)?

  5. ¿Cómo inicio Ubuntu desde Initramfs?

Cómo reparar el error Busybox Initramfs en Ubuntu

Cómo instalar Linux kernel 5.15 en Ubuntu 20.04

Cómo verificar la versión del kernel en Ubuntu 20.04

Cómo instalar el último Linux Kernel 5.15 en Ubuntu 20.04

Cómo reparar un sistema de archivos dañado en Ubuntu

Cómo instalar el último kernel de Linux 4.8 en Ubuntu 16.04