
내 노트북(Asus Zenbook UX305)에서 기본 OS와 Windows를 듀얼 부팅하려고 합니다. 이를 위해 Windows 디스크 관리자를 사용하여 Windows 파티션을 축소한 다음 기본 설치 프로그램의 "Windows로 설치" 옵션을 사용하여 Linux 파티션을 자동으로 설정했습니다. 설치 후 재부팅하면 grub 콘솔에 들어갔습니다. 다음 명령을 사용하여 Linux를 수동으로 부팅할 수 있었습니다.
grub> set root=(hd0,gpt4)
grub> linux /boot/vmlinuz-3.19.0-26-generic root=/dev/sda4
grub> initrd /boot/initrd.img-3.19.0-26-generic
grub> boot
나는 명령을 실행하는 것을 발견했습니다
grub> configfile (hd0,gpt4)/boot/grub/grub.cfg
일반적인 grub 메뉴는 예상대로 로드되므로 구성 파일 자체에는 아무런 문제가 없는 것 같습니다. 또한 루트와 접두사가 모두 (hd0,gpt1)에 있음을 확인하여 다음을 실행했습니다.
grub> set root=(hd0,gpt4)
grub> set prefix=(hd0,gpt4)/boot/grub
grub> insmod normal
grub> normal
일반 그럽 메뉴도 로드됩니다. 그렇다면 문제는 grub이 잘못된 파티션을 찾는 것일 수 있습니까?
내 BIOS에는 grub 및 Windows 부트로더를 사용하여 부팅할 수 있는 옵션이 있습니다. Windows 부트로더를 선택하면 문제 없이 Windows로 직접 부팅됩니다.
그러나 재부팅 시 수정 사항을 보존할 방법을 찾을 수 없습니다. 다시 실행하고 grub-install /dev/sda
, 구성 파일을 다시 만들고 grub-mkconfig
, Ubuntu 부팅 복구 GUI 도구를 사용해 보았지만 이 중 어느 것도 작동하지 않습니다. 운영 체제 중 하나 또는 둘 다를 다시 설치하는 방법이 있습니까? 가능하다면 Windows를 다시 설치할 필요가 없습니다.
답변1
나는 같은 문제가 있었고 해결책을 찾았습니다.
1) grub 복구 모드에서 "set"을 실행하십시오.
2) prefix=(hd1,gp1)/boot/efi/EFI/ubuntu/ 가 표시됩니다.
3) 제 경우에는 KDE NEON이 있으므로 /boot/efi/EFI/ubuntu/ 폴더는 존재하지 않지만 폴더는 / /boot/efi/EFI/neon/ 존재합니다. 그래서 문제는 존재하지 않는 폴더를 가리키고 있었습니다.
4) 그래서 모든 폴더 /boot/efi/EFI/neon/을 /boot/efi/EFI/ubuntu/에 복사했습니다. 제 경우에는
hd1,gpt5를 가리켜야 하므로 이것도 잘못된 것입니다(hd1,gp1). 하지만 저는 DINDT를 변경했고 효과가 있었습니다.
내가 변경한 것은 msdos 형식을 사용하기 위해 /boot/efi/EFI/ubuntu/grub.cfg 파일이었습니다.
search.fs_uuid xkjdiw-18e9-4d0a-ac55-2skjdh8425f root hd1,gpt5
set prefix=($root)'/grub'
configfile $prefix/grub.cfg
답변2
GRUB 메뉴를 읽는 동안 로드할 수 없는 것 같습니다 /boot/efi/EFI/grub/
.
ElementaryOS로 부팅한 후 다음 명령을 실행하여 grubx64.efi
이 폴더의 파일을 교체합니다.
cd /boot/efi/EFI/grub
sudo cp grubx64.efi grubx64.efi.backup (just in case)
sudo rm grubx64.efi
sudo cp /boot/grub/x86_64-efi/grub.efi /boot/efi/EFI/grub/grubx64.efi
이 솔루션은 ElementaryOS에서 보고된 버그를 논의하는 사용자로부터 나온 것입니다. 자세한 내용은 다음을 참조하세요.https://bugs.launchpad.net/elementaryos/+bug/1492801
나는 당신과 똑같은 문제를 겪었고(Windows 10과 함께 ElementaryOS Freya 0.3.1을 설치했습니다) 당신이 설명한 단계를 따라 이 해결책을 찾았습니다.
수정 사항을 적용하기 전에 Windows 10에서 빠른 시작을 비활성화했다는 점은 주목할 가치가 있습니다. 이는 영향을 미칠 수도 있고 그렇지 않을 수도 있습니다. 바라보다http://www.tenforums.com/tutorials/4189-fast-startup-turn-off-windows-10-a.html
게다가 보안 부팅이 작동하려면 비활성화해야 했습니다. 보안 부팅을 활성화한 후 UX305가 grub을 완전히 로드할 수 없습니다. 시작 시 첫 번째 화면에서 Esc 키를 누른 다음 설정으로 이동하여 거기서 보안 부팅을 끄세요. 또는 보안 부팅을 작동시키는 방법이 있을 수 있지만 지금은 이 솔루션에 만족합니다. 이제 UX305는 Windows 옵션과 함께 GRUB 메뉴를 로드합니다!
답변3
우리는 할 수 있다
접두사를 영구적으로 변경하는 방법을 찾았습니다. 그러나 다음과 같은 주의 사항이 있습니다. grubx64.efi 바이너리에서 직접 변경해야 하며 파일 길이를 동일하게 유지해야 합니다. 제공되는 공간의 양은 배포판에 따라 달라질 수 있습니다. 자세한 설명을 읽어보시기 바랍니다. 디스크 및 파티션 설정은 시작 시 선택한 UEFI 부팅 옵션에 의해 로드된 파티션에 따라 다릅니다.
부인 성명
- 이 작업을 수행하려면 다음을 수행해야 합니다.보안 부팅 끄기해시 값이 변경되고 바이너리가 거부되기 때문입니다. 자체 해시를 설치하여 이 문제를 해결할 수 있는지 확실하지 않습니다(MOK 검색).
- 항상 백업해두세요변경하려는 파일 수. 나같으면 합격할듯부팅 가능한 USB 플래시 드라이브. 다른 시스템이 없으면 지금 부팅 가능한 USB를 만들고 부팅할 수 있는지 테스트하세요.
먼저 질문:
기본적으로 전체 질문은 다음과 같습니다.안전한 부팅 제한. 보안 부팅이 grubx64.efi 파일을 허용하려면서명이 필요합니다인정된 기관에 의해. 따라서 grub 실행 파일이 서명되고미리 구운. 이 접두사 설정에 대한 현재 표준은 입니다 /EFI/$(lsb_release -i -s)
. 물론 이는 efibootmgr--loader \\EFI\\other\\SSHIMX64.efi
새 부팅 옵션을 생성할 때 어떤 로더 경로를 지정하더라도(예: ) grub 부트 로더의 접두사 변수에 영향을 미치지 않는다는 것을 의미합니다.
해결책:
배포판이 이고 ubuntu
어떤 이유로 이름을 로 바꾸려고 한다고 가정해 보겠습니다 longubuntu
. 다음 단계를 수행하면 됩니다.
# List contents of EFI directory
find /boot/efi/EFI;
# Rename the directory
mv /boot/efi/EFI/ubuntu /boot/efi/EFI/longubuntu;
# List contents of EFI/longubuntu for easy access
find /boot/efi/EFI/longubuntu;
# Always make a copy of the original
cp /boot/efi/EFI/longubuntu/BOOTX64.CSV /boot/efi/EFI/longubuntu/BOOTX64.CSV.bak
# Inside the .csv-file change 'ubuntu' to 'longubuntu'
nano /boot/efi/EFI/longubuntu/BOOTX64.CSV
계속하기 전에:
있는지 확인하세요.사용 가능한 null 문자가 충분합니다.바이너리 파일에서. 다음이 중요합니다.전체 길이는 동일하게 유지하세요.. 이렇게 하지 않으면 오류가 발생합니다. 이런 일이 발생하면원래 grubx64.efi로 다시 복사하세요.그런 다음 다시 시도해 보세요. 언제VS Code를 사용하여 grubx64.efi-binary를 확인하세요.접두사를 마음대로 변경할 수 있을 만큼 충분한 여유 공간이 있습니다.
이제 흥미롭고 중요한 부분을 살펴보겠습니다.
이미 말했듯이 바이너리 파일의 길이가 동일하게 유지되어야 합니다. 새 접두사를 nul-chars( )로 채우 거나 텍스트를 nul-chars로 채워서 \0
바꿀 수 있습니다.
따라서 내 경우처럼 더 긴 접두사를 지정하려면 다음과 같이 하면 됩니다.
# Parameter -pi.bak will create a backup for you
perl -pi.perlbak -e 's/EFI\/ubuntu\0\0\0\0/EFI\/longubuntu/g' /boot/efi/EFI/longubuntu/grubx64.efi
더 짧은 접두사(예 bent
: )를 선택하면 새 값은 다음으로 채워집니다 \0
.
# Parameter -pi.bak will create a backup for you
perl -pi.perlbak -e 's/EFI\/ubuntu/EFI\/bent\0\0/g' /boot/efi/EFI/longubuntu/grubx64.efi
작업 결과를 확인할 수 있으며 접두사가 포함된 줄이 인쇄됩니다.
$~: grep -a 'EFI\/longubuntu' /boot/efi/EFI/longubuntu/grubx64.efi
새로운 시작 옵션을 추가하는 것을 잊지 마세요!
나는 그것을 사용할 것이다 efibootmgr
. efibootmgr
이전 부팅 옵션을 제거하고 새 부팅 옵션을 추가할 수 있습니다 .
# Print current boot options
:~# efibootmgr -v
BootCurrent: 0000
Timeout: 1 seconds
BootOrder: 0000
Boot0000* ubuntu HD(1,GPT,28bd5547-5802-4f9c-97da-22ddd968dea6,0x800,0x100000)/File(\EFI\UBUNTU\SHIMX64.EFI)
# Delete current
:~# efibootmgr -b 0 -B
# List disks
:~# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
[...]
nvme0n1 259:0 0 238.5G 0 disk
├─nvme0n1p1 259:1 0 512M 0 part /boot/efi
└─nvme0n1p2 259:2 0 238G 0 part /
# Create new boot option
:~# efibootmgr --create --disk /dev/nvme0n1 --part 1 --label "Long Ubuntu Name" --loader \\EFI\\longubuntu\\shimx64.efi
즐기다:
지금 재부팅하면. 여전히 이전처럼 배포판으로 부팅해야 합니다.
그렇지 않은 경우 USB 스틱으로 부팅하고 EFI 파티션을 마운트하십시오. 그런 다음 변경 사항을 취소하거나 원본 파일로 다시 복사하세요. 내 장치에서 다음과 같이 EFI 파티션을 마운트했습니다.
:~# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
[...]
nvme0n1 259:0 0 238.5G 0 disk
├─nvme0n1p1 259:1 0 512M 0 part /boot/efi
└─nvme0n1p2 259:2 0 238G 0 part /
:~# mkdir -p /media/efi; mount /dev/nvme0n1p1 /media/efi