GNU/Linux >> Znalost Linux >  >> Ubuntu

Ubuntu – Po instalaci nového jádra v Ubuntu 14.04 mě restart zavede do Busybox Initramfs. Jak poté připojit souborový systém?

Mám virtuální stroj s Ubuntu 14.04 v něm. Nedávno jsem na něm postavil a nainstaloval jádro linux-3.14.5 a pokusil jsem se do něj nabootovat, ale vrhlo mě to na vestavěný shell BusyBox v1.21.1.

Udělal jsem toto:

    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

Viděl jsem soubor s názvem initrd.img-3.14.5 v /boot vedle intrd.img-3.13.0-24-generic (což je, myslím, jádro Ubuntu 14.04).

Byly zde také 2 soubory s názvem vmlinuz-3.14.5 a vmlinuz-3.13.0-24-generic.

Poté běž

    sudo blkid

a dostal následující:

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

Taky jsem běhal

    sudo fdisk -l

který mi dal

    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

Zkontroloval jsem /boot/grub/grub.cfg soubor, který měl následující záznam:

    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
    }

Takže jsem pokračoval a přidal následující řádky do /etc/grub.d/40_custom (Právě jsem změnil řádky 1, 14, 15 a 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
}

a běžel

    sudo update-grub
    sudo reboot

Nefunguje! V chybové zprávě bylo uvedeno

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

Pokusil jsem se tedy nahradit UUID od /dev/sda1 výsledkem je následující soubor.

    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
    }

Ani to nefungovalo a zobrazilo se mi velmi podobné chybové hlášení.

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

Myslím, že dělám nějakou hloupou chybu, ale nemůžu přijít na to, co, protože je to poprvé. Ocenil bych jakoukoli pomoc.

Související:Ubuntu – Jak se čistí adresář /tmp?

Děkuji za přečtení dlouhého příspěvku. Pokud potřebujete další informace, dejte mi vědět.

Přijatá odpověď:

Vynechali jste dva kroky před make install , který nainstaluje požadované ovladače. Před make install make modules a make modules_install v tomto pořadí. Tím se nainstalují ovladače na základě vašich souborů .config.

Chyba může také nastat v důsledku nesprávné konfigurace v souboru .config a tím i některých chybějících ovladačů. Zde je tedy hackerský způsob, jak provést kompilaci jádra. Jedním z nejlepších způsobů, jak získat správnou konfiguraci, je zkopírovat funkční konfiguraci z adresáře /boot do vašeho .config ve složce zdrojového kódu jádra. Váš pracovní konfigurační soubor jádra je

/boot/config-`uname -r`

Poté proveďte kompilaci pomocí make . make vyzve k zadání některých konfigurací, které nejsou v souboru .config, protože tento soubor .config může odpovídat starému jádru a nemá některé konfigurace v novém jádře, které se pokoušíte zkompilovat. Stačí zadat Enter pro všechny konfigurační výzvy – což vybere výchozí konfigurace. Poté make modules , make modules_install a nakonec make install . To musí vyřešit vaše problémy.

Tento způsob kompilace není vhodný pro profesionály, ale pomůže začátečníkům bez velkých znalostí různých konfiguračních možností začít s kompilací jádra.


Ubuntu
  1. Vydáno Linuxové jádro 5.13! Jak nainstalovat v Ubuntu 21.04

  2. Jak opravit Grub? (Jak získat Ubuntu zpět po instalaci Windows?)?

  3. Jak spustím Ubuntu z Initramfs?

  1. Co dělat po instalaci Ubuntu 18.04 a 19.10

  2. Jak aktualizovat jádro Linuxu v Ubuntu

  3. Jak odstranit stará jádra na Ubuntu

  1. Jak vyzkoušet nové téma Ubuntu

  2. Musíte udělat věci po instalaci Ubuntu 13.04

  3. Co dělat po instalaci Ubuntu 13.10