GRUB은 Ubuntu 및 Arch Linux 설치의 커널 / initramfs를 혼동합니다


9

우분투 (현재 16.04)와 우분투의 GRUB을 부팅 로더로 사용하는 Windows 7을 이중 부팅하는 데 사용되는 시스템이 있습니다.

이제 공식 설치 지침에 따라 아치 리눅스를 세 번째 OS로 추가했습니다. 우분투가 제어하는 ​​것을 사용하고 싶었 기 때문에 아치에서 GRUB을 설치하지 않았습니다. 이 지침에는 mkinitcpio -p linux설명 된대로 실행 된 부팅 파일을 생성 하는 명령 이 포함 되어 있습니다.

이제 GRUB에서 기본 항목을 통해 Ubuntu를 부팅하려고하면이 불쾌한 오류가 발생합니다 (화면 사진이 유감입니다).

에러 메시지

show의 결과로 uname -a아치 커널을 부팅하려고하지만 /dev/sda6우분투 루트 파티션입니다.

우분투를로드 할 수 Advanced options for Ubuntu있는 Ubuntu, with Linux 4.4.0-*항목 중 하나 를 탐색 하고 선택 해야하지만 아치를 올바르게로드하는 항목을 찾을 수 없습니다.

sudo update-grubUbuntu에서 실행 ( " grub2 구성 파일을 생성하기 update-grub위해 실행하는 스텁입니다 grub-mkconfig -o /boot/grub/grub.cfg." )은 아무 것도 변경하지 않습니다. 이 grub-customizer도구는 지금까지 이것을 고치는 데 쓸모가 없었습니다.

GRUB의 혼동을 일으키는 원인은 무엇이며 각 Linux 버전이 올바른 커널과 올바른 파티션으로 부팅되도록 어떻게 수정합니까?

우분투의 / boot가 마운트 된 아치를 어리석게 설치 한 것처럼 보이므로 아마도 부트 파일을 거기에 넣었을 것입니다.

나는 아치와 관련된 모든 것을 지우고 우분투의 부트 로더를 똑바로 다시 가져 와서 나중에 아치를 새로 설치하는 것이 좋습니다.


업데이트 (Ask Ubuntu 채팅에서 자신의 지원을받은 @terdon 덕분에) :

여기 내 /boot/grub/grub.cfg입니다.

모든 Linux 항목은 내 / dev / sda6 파티션 (Ubuntu의 루트)을 가리키는 것 같습니다.

$ grep ' linux /' /boot/grub/grub.cfg
    linux /vmlinuz-linux root=UUID=eee18451-b607-4875-8a88-c9cb6c6544c8 ro
        linux /vmlinuz-linux root=UUID=eee18451-b607-4875-8a88-c9cb6c6544c8 ro
        linux /vmlinuz-linux root=UUID=eee18451-b607-4875-8a88-c9cb6c6544c8 ro
        linux /vmlinuz-linux root=UUID=eee18451-b607-4875-8a88-c9cb6c6544c8 ro init=/sbin/upstart
        linux /vmlinuz-linux root=UUID=eee18451-b607-4875-8a88-c9cb6c6544c8 ro recovery nomodeset
        linux /vmlinuz-4.4.0-21-generic root=UUID=eee18451-b607-4875-8a88-c9cb6c6544c8 ro
        linux /vmlinuz-4.4.0-21-generic root=UUID=eee18451-b607-4875-8a88-c9cb6c6544c8 ro init=/sbin/upstart
        linux /vmlinuz-4.4.0-21-generic root=UUID=eee18451-b607-4875-8a88-c9cb6c6544c8 ro recovery nomodeset
        linux /vmlinuz-4.2.0-35-generic root=UUID=eee18451-b607-4875-8a88-c9cb6c6544c8 ro
        linux /vmlinuz-4.2.0-35-generic root=UUID=eee18451-b607-4875-8a88-c9cb6c6544c8 ro init=/sbin/upstart
        linux /vmlinuz-4.2.0-35-generic root=UUID=eee18451-b607-4875-8a88-c9cb6c6544c8 ro recovery nomodeset

우분투에서 GRUB 구성을 업데이트하려고했습니다.

$ sudo grub-mkconfig -o /boot/grub/grub.cfg 
Generating grub configuration file ...
dpkg: warning: version 'linux' has bad syntax: version number does not start with a digit
Found linux image: /boot/vmlinuz-linux
Found initrd image: /boot/initramfs-linux.img
Found linux image: /boot/vmlinuz-4.4.0-21-generic
Found initrd image: /boot/initrd.img-4.4.0-21-generic
Found linux image: /boot/vmlinuz-4.2.0-35-generic
Found initrd image: /boot/initrd.img-4.2.0-35-generic
Found memtest86+ image: /memtest86+.elf
Found memtest86+ image: /memtest86+.bin
Found Windows 7 (loader) on /dev/sda1
Found Arch on /dev/sda8
done

Ubuntu에서 GRUB을 MBR에 다시 설치하려고했습니다.

$ sudo grub-install /dev/sda
Installing for i386-pc platform.
Installation finished. No error reported.

$ sudo grub-install --recheck /dev/sda
Installing for i386-pc platform.
Installation finished. No error reported.

그것들은 설치되어있는 우분투 커널 패키지입니다. dpkg-reconfigure모든 문제를 시도 했지만 문제에는 영향을 미치지 않습니다.

$ dpkg -l linux-image* | grep ^ii
ii  linux-image-4.2.0-35-generic       4.2.0-35.40  amd64        Linux kernel image for version 4.2.0 on 64 bit x86 SMP
ii  linux-image-4.4.0-21-generic       4.4.0-21.37  amd64        Linux kernel image for version 4.4.0 on 64 bit x86 SMP
ii  linux-image-extra-4.2.0-35-generic 4.2.0-35.40  amd64        Linux kernel extra modules for version 4.2.0 on 64 bit x86 SMP
ii  linux-image-extra-4.4.0-21-generic 4.4.0-21.37  amd64        Linux kernel extra modules for version 4.4.0 on 64 bit x86 SMP

또한 우분투 initramfs를 재생성하려고 시도했습니다.

$ sudo update-initramfs -u -k all
update-initramfs: Generating /boot/initrd.img-4.4.0-21-generic
update-initramfs: Generating /boot/initrd.img-4.2.0-35-generic

내 파티션 레이아웃 :

우분투 시스템에서 확인했습니다. 라벨 자체를 설명해야합니다.

$ lsblk -f /dev/sda
NAME    FSTYPE LABEL       UUID                                 MOUNTPOINT
sda                                                             
├─sda1  ntfs   win7-boot   90DCF3A5DCF3842E                     /win/boot
├─sda2  ntfs   windows7    482C7A572C7A3FCC                     /win/c
├─sda3  ext4   grub-boot   6dbb8633-dadd-4b5e-8d85-b0895fde9dfb /boot
├─sda5  ext4   images      81dc42c4-a161-4ccd-b704-6e5c09298943 /images
├─sda6  ext4   ubuntu-1604 eee18451-b607-4875-8a88-c9cb6c6544c8 /
├─sda7  ext4   ubuntu-home 485b3ef1-7216-4053-b25c-f656d529e8e6 /home
├─sda8  ext4   arch-root   8d281a0c-969c-44cf-ba6a-1d3c7b4be7ec 
├─sda9  ext4   arch-home   32522902-a53d-44c8-90f2-6bbf14c40f1f 
└─sda10 swap   linux-swap  8b05bd9b-bc42-46f6-8c18-50711a3c48b9 [SWAP]

내 GRUB 메뉴 구조 :

GRUB 메인 페이지

우분투 고급 옵션 :
우분투 GRUB 고급 옵션

아치에 대한 고급 옵션 :
아치 용 GRUB 고급 옵션


/boot디렉토리 :

$ ls -la /boot
total 118480
drwxr-xr-x  4 root root     4096 Apr 24 20:50 .
drwxr-xr-x 28 root root     4096 Apr 24 19:44 ..
-rw-r--r--  1 root root  1313029 Mär 16 01:45 abi-4.2.0-35-generic
-rw-r--r--  1 root root  1239577 Apr 19 00:21 abi-4.4.0-21-generic
-rw-r--r--  1 root root   184888 Mär 16 01:45 config-4.2.0-35-generic
-rw-r--r--  1 root root   189412 Apr 19 00:21 config-4.4.0-21-generic
drwxr-xr-x  6 root root     4096 Apr 26 19:58 grub
-rw-r--r--  1 root root 18598360 Apr 24 20:59 initramfs-linux-fallback.img
-rw-r--r--  1 root root  3516429 Apr 24 20:59 initramfs-linux.img
-rw-r--r--  1 root root 33642388 Apr 24 18:31 initrd.img-4.2.0-35-generic
-rw-r--r--  1 root root 36143341 Apr 24 19:51 initrd.img-4.4.0-21-generic
drwx------  2 root root    16384 Okt 28 17:43 lost+found
-rw-r--r--  1 root root   182704 Jan 28 13:44 memtest86+.bin
-rw-r--r--  1 root root   184380 Jan 28 13:44 memtest86+.elf
-rw-r--r--  1 root root   184840 Jan 28 13:44 memtest86+_multiboot.bin
-rw-------  1 root root  3745312 Mär 16 01:45 System.map-4.2.0-35-generic
-rw-------  1 root root  3853719 Apr 19 00:21 System.map-4.4.0-21-generic
-rw-------  1 root root  6829104 Mär 16 01:45 vmlinuz-4.2.0-35-generic
-rw-------  1 root root  7013968 Apr 19 00:21 vmlinuz-4.4.0-21-generic
-rw-r--r--  1 root root  4435552 Apr 14 19:20 vmlinuz-linux

4.4.0 및 4.2.0 커널은 Ubuntu 여야하고 Arch는 4.5.0 커널이어야합니다. 그러나 커널 버전이없는 파일 이름을 어떻게 찾을 수 있습니까?


내 우분투 루트 디렉토리 (디렉토리 제외) :

$ ls -la / | grep ^[^d]
total 124
lrwxrwxrwx   1 root      root         32 Apr 24 19:44 initrd.img -> boot/initrd.img-4.4.0-21-generic
lrwxrwxrwx   1 root      root         32 Apr  5 17:45 initrd.img.old -> boot/initrd.img-4.2.0-35-generic
lrwxrwxrwx   1 root      root         29 Apr 24 19:44 vmlinuz -> boot/vmlinuz-4.4.0-21-generic
lrwxrwxrwx   1 root      root         29 Apr  5 17:45 vmlinuz.old -> boot/vmlinuz-4.2.0-35-generic

아치 루트 디렉토리에 파일이나 링크가 없습니다.


우분투, 윈도우 및 아치 리눅스의 트리플 부팅과 같은 문제가있었습니다. 필요한 경우 grub을 수동으로 수정하고, 아치 리눅스로 부팅 한 다음 grub을 다시 빌드해야합니다 os-prober. 이들를 실행 sudo mkinitcpio -p linux한 후 sudo grub-mkconfig -o /boot/grub/grub.cfg마지막으로sudo grub-install /dev/sda
에드워드 토발즈

랩톱에 다양한 Linux 배포판을 설치할 때 (이전 버전을 바꾸고 창을 건드리지 않은 상태) 비슷한 문제가 발생했습니다 .efi에서 이전 OS의 각 폴더를 삭제하고 grub-update를 수행하면됩니다. 그러나 내 경우에는 1. UEFI 시스템 2였습니다. 여러 Linux OS를 유지하지 않았습니다.
등록 된 사용자

부팅하는 동안 커널과 initrd를 동적으로 수정하여 Ubuntu로 부팅 할 수 있습니까? 그렇게하면 오류가 무엇입니까?
SHW

게시 한 화면에 오류 메시지가 포함되어 있습니다 Root device mounted successfully, but /sbin/init does not exists.. 이것을 조사 했습니까? 되어 init정말 실종? 그렇다면, 반드시 설치해야합니다. 대신 존재한다면 왜 찾을 수 없는지 아십니까?
MariusMatutiae

답변:


5

마침내 우분투 /boot디렉토리 의 아치 파티션과 부팅 파일 을 궤도에서 압축하여 문제를 해결했습니다 . 우분투는 이제 괜찮습니다. 남아있는 모든 GRUB 항목이 다시 작동합니다.

내가 한 일의 목록은 다음과 같습니다.

  • 아치 initramfs파일 삭제 :

    sudo rm /boot/initramfs-linux*
    
  • 아치 vmlinuz파일 삭제 :

    sudo rm vmlinuz-linux
    
  • /dev/sda8GParted를 사용하여 아치 파티션 ( ) 포맷

  • GRUB 구성 업데이트 :

    sudo update-grub
    
  • 재부팅하고 즐기십시오!


첫 번째 코드 라인은 포함 initramfs-linux하지 않아야한다고 생각합니다...ranfs...
Anwar

1
@Anwar 물론, 관심을 가져 주셔서 감사합니다. 나는 오타를 고쳤다.
바이트 사령관

1

grub.cfg를 수동으로 수정 (권장되지 않음)

당신을보고 grub.cfg

우분투 항목이 깨졌습니다 (그리고 다음 중 일부도)

menuentry 'Ubuntu' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-eee18451-b607-4875-8a88-c9cb6c6544c8' {
    recordfail
    load_video
    gfxmode $linux_gfx_mode
    insmod gzio
    if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
    insmod part_msdos
    insmod ext2
    set root='hd0,msdos3'
    if [ x$feature_platform_search_hint = xy ]; then
      search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos3 --hint-efi=hd0,msdos3 --hint-baremetal=ahci0,msdos3  6dbb8633-dadd-4b5e-8d85-b0895fde9dfb
    else
      search --no-floppy --fs-uuid --set=root 6dbb8633-dadd-4b5e-8d85-b0895fde9dfb
    fi
    linux   /vmlinuz-linux root=UUID=eee18451-b607-4875-8a88-c9cb6c6544c8 ro  
    initrd  /initramfs-linux.img
}

마지막 두 줄은 커널과 initrd를로드하는 grub 명령으로 현재 ARCH 커널과 initiramfs를 찾고 있습니다. 또한 의도 한 Ubuntu 파일을 호스팅하거나 호스팅하지 않을 /파티션으로 식별 uuid=eee18451-b607-4875-8a88-c9cb6c6544c8합니다.

다음을 통해이 문제를 해결할 수 있습니다.

sudo blkid

우분투 루트 파티션의 UUID를 얻으려면.

그런 다음 마지막 두 줄을 최신 커널 및 initrd 이미지에 대한 simlink로 바꾸십시오 (이것은 우분투가 예상하는 방식이므로)

linux   /vmlinuz root=UUID=<correct-uuid-ubuntu-partition> ro  
initrd  /initrd.img

그래도 문제가 해결되지 않으면 다른 수정이 필요할 수 있습니다. 테스트되고 작동하는 항목 중 하나를 "복사"하여 찾을 수 있으며, 가장 바닐라를 사용하는 것이 좋습니다 (예 : 시작되지 않거나 nomodeset이 전달되는 것과 같은 기타 커널 매개 변수 없음).

이것은 좋은 후보가되어야합니다 :

menuentry 'Ubuntu, with Linux 4.4.0-21-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.0-21-generic-advanced-eee18451-b607-4875-8a88-c9cb6c6544c8'

아치 항목은 우분투 루트 파티션에서 아치 initramfs와 커널을 찾을 수 있다는 점에서 비슷합니다. 이들의 기본 위치는 / boot에 있습니다. 위치를 수정하고 루트 파티션 uuid가 아치 루트를 포함하는 파티션인지 확인하여 아치 항목의 마지막 두 줄을 조정하십시오.

경고의 여러 단어 :

우분투 사용자는 일반적 grub.cfg으로 손 으로 엉망으로 만드는 것은 권장하지 않습니다 . 명확하게 사본을 만들고 편집에주의하십시오. 시스템을 부팅 할 수 없게 될 가능성에 대비하십시오 (그러나 이전 답변에 설명 된 부팅 절차를 사용하여 시스템을 복구 할 수 있습니다).

또한 이번에는 문제를 해결할 수 있지만 다음 번에 메뉴를 다시 채워야 할 때 다시 물릴 수 있습니다. 어떤 이유로, 우분투에서 grub의 OS 검사는 / boot 아래에 아치 커널이 있기 때문에 혼동됩니다. boot-repair와 같은 유틸리티를 사용하면 모든 배포판을 올바르게 부팅 할 수 있어야하지만 올바르게 기억하면 작동하지 않습니다.

하나의 영구적 인 수정은 기본 / boot와 다른 디렉토리에 아치 커널과 이미지를 설치하는 것으로 구성 될 수 있습니다. 이것은 어리석은 일이므로 Arch wiki의 grub 항목을 참조하여 올바르게 수행하는 방법에 대해 문의해야합니다.

OLD ANSWER (오래된 아치로 전환 할 계획이라면 권장) 여기에 내가 해야 할 일이 몇 달 전인 것 같습니다 .

arch wiki grub 페이지로 이동 하여 파티션 테이블 관련 섹션을 읽으십시오 (UEFI 일 가능성이 있으므로 ESP 등에 대해 읽어보십시오).

수동으로 아치로 부팅

이것은 시도하는 것이 좋습니다. Arch Linux 커널이 디스크 어딘가에 있다고 가정하면 cgrub 프롬프트에서을 누르고 ls를 입력하여 다음과 같은 장치 및 파티션 목록을 봅니다 (hd0,msdos1),(hd1,gpt1),.... 컨텐츠를보기 위해 각각을 ls 할 수 있습니다.

세 가지를 찾아야합니다.

  • 아치 /루트 파티션 은 어디에 있습니까
  • 아치 커널은 어디에 있습니까 vmlinuz
  • 당신의 아치는 어디에 있습니까 intiramfs-linux.img

이 세 가지를 소유하면, grub> 프롬프트에서 이와 비슷한 것을 실행하는 세 가지 명령을 실행합니다.

grub> set root=(hd0,1)
grub> linux /vmlinuz root=/dev/sda1
grub> initrd /intiramfs-linux.img
grub> boot

예를 들어 grub은 다음을 찾을 수 있습니다.

grub> find /sbin/init

(하나의 grub은 자동으로 찾을 수 없으며 커널 패닉을 제공합니다.)

이 모든 것을 여기서 배웠습니다 . 내가 추천하는 소스입니다. 관리 할 수 ​​있다면 grub 수정으로 건너 뛰십시오! 그렇지 않으면...

라이브 키로 부팅 아치! chroot처음으로 한 것과 거의 같은 방식으로 라이브 아치 환경을 구축하고 설치 위키 를 아치로 가져갑니다.

그루브 고정

아치 내부에서 관련 grub 패키지를 설치하고 특히 다른 시스템을 감지 할 os-prober수 있도록 grub-install합니다. 설치 안내서를주의 깊게 따르십시오. 최소한 최소한 grub 메뉴에서 아치와 우분투를 부팅 할 수 있어야합니다. 명령을 설치하면 다음과 같이 보입니다.

** 경고 **이 명령을 실행하지 마십시오. 예를 들어 시스템에 적합한 명령을 실행해야합니다.

# grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=grub --recheck
# grub-mkconfig -o /boot/grub/grub.cfg

** 다른 모든 것이 실패하면 **

불행히도 이것은 제한된 수의 정보가 제공되는 한 구체적이며 SE는 실제로 그러한 문제에 대한 포럼이 아니므로 유용한 리소스를 언급하는 "일반적인"답변입니다.

이해할 수 없다면, 아치 포럼에 들러서 최선을 다해 미리 문서를 읽었다면 도움을 얻을 수 있습니다.

아치를 통해이 모든 것을하는 것은 저에게 기본적인 학습 경험이었습니다.


1
답변 주셔서 감사합니다. 첫째, MBR 파티션 디스크가있는 BIOS 시스템입니다. 둘째, 우분투에서 grub 패키지와 구성을 사용하고 싶습니다. 아치에서 GRUB을 다시 설치하는 것은 내가 계획 한 것이 아닙니다. 또한 이것이 변경 될 것이라는 점을 의심합니다. 그리고 Advanced 옵션의 GRUB 항목을 통해 Ubuntu로 부팅 할 수 있습니다. 문제는 GRUB이 어떤 커널이나 초기 램 디스크 또는 어떤 파티션에 어떤 시스템에 속하는 것이 있는지 판단 할 수 없다는 것입니다.
바이트 사령관

기본적으로 동일한 단계가 적용됩니다. grub-install 및 grub-mkconfig (새 grub.cfg 파일을 만듭니다)는 우분투에서도 사용할 수있는 grub 명령입니다. os-prober가 사용 가능한지 또는 유사한 것이 있는지 확인하십시오 (mkconfig는 다른 파일 시스템을 찾을 수 있습니다). 커널 이미지가 올바른 위치에 있다고 가정하고 게시물을 다시 읽은 것으로 가정합니다. / boot 파티션을 검사하여 모든 커널과 .img가 있는지 확인하십시오. linux initrd.img를 arch의 initramfs로 덮어 썼을 수도 있습니다. 우분투 포럼이나 askubuntu를 치십시오.
Three Diag

필자가 쓴 것처럼 grub-mkconfig를 이미 사용하지 않았지만 집에 돌아 왔을 때 / boot에서 사용 가능한 이미지를 확인합니다. 그리고 os-prober 스크립트가 있습니다.
바이트 사령관

죄송합니다. 그렇다면 우분투 커널과 initrd를 아치 커널로 덮어 썼을 것입니다. 우분투 폴백 커널에서 업그레이드 / 업데이트 시퀀스를 실행하여 해당 위치에 팝업을 표시 할 수 있습니다 (제 생각에)
Three Diag

우분투 커널은 "우분투 고급 옵션"메뉴에서 모든 것을 부팅 할 수 있으므로 괜찮습니다. 문제가 있으면 기본 커널에 대한 심볼릭 링크 일 수 있습니다. 오늘 저녁에 확인하려고합니다.
바이트 사령관

0

내 솔루션이 더 간단합니다. 터미널을 사용하고 다음을 수행합니다.

sudo rm /boot/grub/grub.cfg
sudo update-grub

추가 문제 boot-repair가있는 경우 CD 디스크에 구울 수있을 정도로 작은 무료 다운로드 인을 사용하십시오.


OP가 이미 실행되었습니다 update-grub. 부팅 복구는이 특정 문제에 도움이되지 않습니다.
terdon

grub 및 일부 부팅 복구 또는 업데이트 프로세스는 /boot/grub/grub.cfg의 내용이 정확하고 정확하다고 가정합니다. 그러나 파티션을 다시 포맷하는 것과 같이 변경하면 새로운 UUID가 생겨 grub-rescue로 전환됩니다.>이를 처리하려면 다음과 같이하십시오. sudo rm /boot/grub/grub.cfg; sudo update-grub. grub.cfg의 모든 항목은 새로운 것입니다.
BAD-Boop

예, 그러나 OP는 이미이 작업을 수행했지만 도움이되지 않았습니다. 나는 질문이 크다는 것을 깨닫고 놓치기 쉽지만 sudo grub-mkconfig -o /boot/grub/grub.cfg바로 거기에 있습니다. update-grub매우 간단한 셸 스크립트가 실행됩니다 grub-mkconfig -o /boot/grub/grub.cfg . 로 볼 수 있습니다 cat /usr/sbin/update-grub.
terdon
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.