GNU/Linux >> Linux Esercitazione >  >> Ubuntu

Ubuntu – Dopo aver installato un nuovo kernel in Ubuntu 14.04, il riavvio mi porta a Busybox Initramfs. Come montare un filesystem dopo?

Ho una macchina virtuale con Ubuntu 14.04. Di recente ho compilato e installato il kernel linux-3.14.5 su di esso e ho provato ad avviarlo, ma mi porta alla shell integrata di BusyBox v1.21.1.

Ecco cosa ho fatto:

    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

Potevo vedere un file chiamato initrd.img-3.14.5 in /avvio insieme al intrd.img-3.13.0-24-generico (che suppongo sia il kernel di Ubuntu 14.04).

C'erano anche 2 file chiamati vmlinuz-3.14.5 e vmlinuz-3.13.0-24-generico.

Dopodiché, corri

    sudo blkid

e ho ottenuto quanto segue:

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

Ho anche corso

    sudo fdisk -l

che mi ha dato

    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

Ho controllato /boot/grub/grub.cfg file che aveva la seguente voce:

    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
    }

Quindi, sono andato avanti e ho aggiunto le seguenti righe a /etc/grub.d/40_custom (ho appena cambiato le righe 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
}

ed è corso

    sudo update-grub
    sudo reboot

Non ha funzionato! Il messaggio di errore diceva

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

Quindi ho provato a sostituire l'UUID di /dev/sda1 risultante nel seguente file.

    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
    }

Neanche quello ha funzionato e mi ha dato un messaggio di errore molto simile.

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

Penso di aver commesso uno stupido errore, ma non riesco a capire cosa dato che questa è la mia prima volta. Apprezzerei qualsiasi aiuto.

Correlati:Ubuntu – Come viene pulita la directory /tmp?

Grazie per aver letto il lungo post. Per favore fatemi sapere se avete bisogno di ulteriori informazioni.

Risposta accettata:

Hai saltato due passaggi prima di make install , che installa i driver richiesti. Prima di make install fai make modules e make modules_install in questo ordine. Questo installa i driver in base ai tuoi file .config.

L'errore può verificarsi anche a causa di una configurazione errata nel file .config e quindi di alcuni driver mancanti. Quindi ecco un modo hacker per eseguire la compilazione del kernel. Uno dei modi migliori per ottenere la giusta configurazione è copiare una configurazione funzionante dalla directory /boot al tuo .config nella cartella del codice sorgente del kernel. Il tuo file di configurazione del kernel funzionante è

/boot/config-`uname -r`

Quindi fai la compilazione con make . make richiederà alcune configurazioni, che non sono nel file .config, perché questo file .config potrebbe corrispondere a un vecchio kernel e non ha alcune configurazioni nel nuovo kernel che stai tentando di compilare. Basta digitare Invio per tutte le richieste di configurazione, che selezioneranno le configurazioni predefinite. Quindi fai make modules , make modules_install e infine make install . Questo deve risolvere i tuoi problemi.

Questo modo di compilazione non è adatto a un professionista, ma aiuterà i neofiti che non conoscono molto le diverse opzioni di configurazione per iniziare con la compilazione del kernel.


Ubuntu
  1. Cose da fare dopo aver installato Ubuntu 18.04 e 19.10

  2. Come aggiornare il kernel Linux in Ubuntu

  3. Rilasciato il kernel Linux 5.13! Come installare in Ubuntu 21.04

  4. Come riparare Grub? (come recuperare Ubuntu dopo aver installato Windows?)?

  5. Come faccio ad avviare Ubuntu da Initramfs?

Come correggere l'errore Busybox Initramfs su Ubuntu

Come installare il kernel Linux 5.15 su Ubuntu 20.04

Come controllare la versione del kernel in Ubuntu 20.04

Come installare l'ultimo kernel Linux 5.15 su Ubuntu 20.04

Come riparare un filesystem danneggiato in Ubuntu

Come installare l'ultimo kernel Linux 4.8 su Ubuntu 16.04