Ubuntu 14.04에 새 커널을 설치한 후 재부팅하면 busybox initramfs로 이동됩니다. 나중에 파일 시스템을 어떻게 마운트합니까?

Ubuntu 14.04에 새 커널을 설치한 후 재부팅하면 busybox initramfs로 이동됩니다. 나중에 파일 시스템을 어떻게 마운트합니까?

Ubuntu 14.04가 설치된 가상 머신이 있습니다. 최근에 linux-3.14.5 커널을 빌드하고 설치한 후 부팅을 시도했지만 BusyBox v1.21.1 내장 셸에 빠졌습니다.

이것이 내가 한 일입니다:

    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

라는 파일이 보입니다initrd.img-3.14.5존재하다/시작하다가까운intrd.img-3.13.0-24-일반(아마도 이것은 Ubuntu 14.04 커널인 것 같습니다).

이름이 2개 파일도 있습니다.vmlinuz-3.14.5그리고vmlinuz-3.13.0-24-일반.

그러다가 도망갔어

    sudo blkid

다음과 같은 결과를 얻었습니다.

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

나도 도망쳤어

    sudo fdisk -l

이것은 나에게 준다

    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

나는 확인했다/boot/grub/grub.cfg파일에는 다음 항목이 있습니다.

    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
    }

그래서 계속해서 다음 줄을 추가했습니다./etc/grub.d/40_custom(방금 1, 14, 15, 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
}

그러다가 도망갔어

    sudo update-grub
    sudo reboot

작동 안함! 오류 메시지는 다음과 같습니다

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

그래서 교체하려고보편적으로 고유한 식별자통과/dev/sda1아래와 같은 파일이 생성됩니다.

    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
    }

이것도 작동하지 않았고 나에게 매우 유사한 오류 메시지를 표시했습니다.

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

제가 멍청한 실수를 한 것 같은데 처음이라 뭔지 모르겠어요. 도움을 주시면 감사하겠습니다.

이렇게 긴 글을 읽어주셔서 감사합니다. 더 많은 정보가 필요하면 알려주시기 바랍니다.

답변1

make install필요한 드라이버를 설치하기 전에 두 단계를 놓쳤습니다 . make install실행 전 이 순서대로 make modules. make modules_install그러면 .config 파일을 기반으로 드라이버가 설치됩니다.

이 오류는 .config 파일의 잘못된 구성 및 일부 드라이버 누락으로 인해 발생할 수도 있습니다. 따라서 이것은 커널 컴파일을 수행하는 해킹적인 방법입니다. 올바른 구성을 얻는 가장 좋은 방법 중 하나는 작업 구성을 /boot 디렉터리에서 커널 소스 폴더의 .config로 복사하는 것입니다. 작업 커널 구성 파일은 다음과 같습니다.

/boot/config-`uname -r`

그런 다음 make. make.config 파일에 없는 일부 구성을 묻는 메시지가 표시됩니다. 이 .config 파일은 이전 커널에 해당할 수 있고 컴파일하려는 새 커널에 일부 구성이 없기 때문입니다. 모든 구성 프롬프트를 보려면 Enter를 입력하기만 하면 됩니다. 이렇게 하면 기본 구성이 선택됩니다. 그럼 해보세요 make modules, make modules_install드디어 make install. 이렇게 하면 문제가 해결되어야 합니다.

이 컴파일 방법은 전문가에게는 적합하지 않지만 다양한 구성 옵션을 잘 이해하지 못하는 초보자가 커널 컴파일을 시작하는 데 도움이 될 수 있습니다.

관련 정보