우분투 (현재 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-grub
Ubuntu에서 실행 ( ” 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 메뉴 구조 :
내 /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
내 아치 루트 디렉토리에 파일이나 링크가 없습니다.
답변
마침내 우분투 /boot
디렉토리 의 아치 파티션과 부팅 파일 을 궤도에서 압축하여 문제를 해결했습니다 . 우분투는 이제 괜찮습니다. 남아있는 모든 GRUB 항목이 다시 작동합니다.
내가 한 일의 목록은 다음과 같습니다.
-
아치
initramfs
파일 삭제 :sudo rm /boot/initramfs-linux*
-
아치
vmlinuz
파일 삭제 :sudo rm vmlinuz-linux
-
/dev/sda8
GParted를 사용하여 아치 파티션 ( ) 포맷 -
GRUB 구성 업데이트 :
sudo update-grub
-
재부팅하고 즐기십시오!
답변
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 커널이 디스크 어딘가에 있다고 가정하면 c
grub 프롬프트에서을 누르고 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는 실제로 그러한 문제에 대한 포럼이 아니므로 유용한 리소스를 언급하는 “일반적인”답변입니다.
이해할 수 없다면, 아치 포럼에 들러서 최선을 다해 미리 문서를 읽었다면 도움을 얻을 수 있습니다.
아치를 통해이 모든 것을하는 것은 저에게 기본적인 학습 경험이었습니다.
답변
내 솔루션이 더 간단합니다. 터미널을 사용하고 다음을 수행합니다.
sudo rm /boot/grub/grub.cfg
sudo update-grub
추가 문제 boot-repair
가있는 경우 CD 디스크에 구울 수있을 정도로 작은 무료 다운로드 인을 사용하십시오.