Depois de instalar um novo Kernel no Ubuntu 14.04, a reinicialização me leva ao busybox initramfs. Como faço para montar um sistema de arquivos depois disso?

4

Eu tenho uma máquina virtual com o Ubuntu 14.04. Eu recentemente construí e instalei o kernel linux-3.14.5 nele, e tentei inicializar nele, mas ele me colocou no shell interno do BusyBox v1.21.1.

Veja o que eu fiz:

    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

Eu pude ver um arquivo chamado initrd.img-3.14.5 em / boot ao lado do intrd.img-3.13.0-24-generic (que eu acho, é o kernel do Ubuntu 14.04).

Havia também dois arquivos chamados vmlinuz-3.14.5 e vmlinuz-3.13.0-24-generic.

Depois disso, corri

    sudo blkid

e recebi o seguinte:

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

Eu também corri

    sudo fdisk -l

que me deu

    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

Eu verifiquei o arquivo /boot/grub/grub.cfg que tinha a seguinte 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
    }

Então, prossegui e adicionei as seguintes linhas ao /etc/grub.d/40_custom (alterei as linhas 1, 14, 15 e 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
}

e correu

    sudo update-grub
    sudo reboot

Não funcionou! A mensagem de erro dizia

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

Então, tentei substituir o UUID por / dev / sda1 , resultando no seguinte arquivo.

    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
    }

Isso também não funcionou e me deu uma mensagem de erro muito semelhante.

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

Eu acho que estou cometendo algum erro estúpido, mas não consigo entender o que é essa desde a primeira vez. Eu apreciaria qualquer ajuda.

Obrigado por ler o longo post. Por favor, deixe-me saber se você precisar de mais alguma informação.

    
por user288409 04.06.2014 / 21:01

1 resposta

3

Você perdeu duas etapas antes do make install , que instala os drivers necessários. Antes de make install do make modules e make modules_install nessa ordem. Isso instala drivers com base em seus arquivos .config.

O erro também pode acontecer devido à configuração incorreta no arquivo .config e, portanto, alguns drivers ausentes. Então, aqui está uma maneira legal de fazer a compilação do kernel. Uma das melhores maneiras de obter a configuração correta é copiar uma configuração de trabalho do diretório / boot para o seu arquivo .config na pasta do código-fonte do kernel. Seu arquivo de configuração do kernel em funcionamento é

/boot/config-'uname -r'

Em seguida, faça a compilação com make . make solicitará algumas configurações, que não estão no arquivo .config, porque esse arquivo .config pode corresponder a um kernel antigo e não possui algumas configurações no novo kernel que você está tentando compilar. Basta digitar Enter para todos os prompts de configuração - que selecionam as configurações padrão. Em seguida, faça make modules , make modules_install e finalmente make install . Isso deve resolver seus problemas.

Esta forma de compilação não é adequada para um profissional, mas ajudará os novatos sem muito conhecimento de diferentes opções de configuração para começar a compilar o kernel.

    
por 31.08.2014 / 11:01