답변:
UEFI 중심의 질문이지만 GRUB 문서와 같은 "BIOS"지브에 대해 더 잘 이야기하기 때문에 최신 UEFI 시스템과 기존 BIOS 시스템 모두에 대해 동일한 개념을 언급 할 때 아래 BIOS 라는 용어를 사용 하겠습니다. "BIOS / UEFI"가 너무 어색합니다. GRUB (실제로 GRUB 2-종종 모호하게 사용됨)은 리눅스에 의해 설치되고 Windows를 이중 부팅하는 데 사용되는 부트 로더입니다.
먼저 드라이브 순서와 부팅 순서에 대한 단어입니다. 드라이브 순서 는 드라이브가 마더 보드의 버스에 물리적으로 연결된 순서를 나타냅니다 (첫 번째 드라이브, 두 번째 드라이브 등). 이 정보는 BIOS에 의해보고됩니다. 부팅 순서BIOS가 부팅 가능한 드라이브를 확인하는 순서를 나타냅니다. 반드시 드라이브 순서와 같을 필요는 없으며 일반적으로 BIOS 설정 화면을 통해 구성 할 수 있습니다. 드라이브 순서는 부팅 순서에 의해 구성되거나 영향을받지 않아야합니다. 부팅 순서는 운영 체제에 매우 친숙하지 않기 때문입니다 (그러나 이론적으로는 불분명 한 BIOS 일 수 있습니다). 또한 첫 번째 드라이브를 분리하면 두 번째 드라이브가 첫 번째 드라이브가 될 수 있습니다. 부트 로더를 구성 할 때 UUID를 사용하여 이와 같은 문제를 피하고 시도 할 것입니다 (현대 Linux 설치 프로그램도이를 수행함).
원하는 것을 얻는 가장 좋은 방법은 드라이브 순서 측면에서 리눅스를 두 번째 드라이브에 설치 한 다음 UEFI 설정을 사용하여 부팅 순서 측면에서 먼저 리눅스 를 선택하는 것입니다. 이것의 또 다른 장점은 BIOS / UEFI 부팅 순서를 사용하여 Windows 드라이브를 선택하고 원하는 경우 grub을 무시할 수 있다는 것입니다. 두 번째 드라이브에서 Linux를 권장하는 이유는 GRUB이 Windows 기본 부트 로더를 "체인로드"해야하며 Windows 부트 로더는 항상 첫 번째 드라이브에 있다고 가정하기 때문입니다. 그러나 다른 방법으로 선호하거나 필요로하는 경우이를 속이는 방법이 있습니다.
바라건대, 라이브 CD 또는 다른 것을 사용하고 GUI 설치 프로그램을 사용 하여이 작업을 수행 할 수 있기를 바랍니다. 그러나 모든 설치 프로그램이 동일하게 생성되는 것은 아니며 이것이 잘못되어 다음과 같은 문제가 발생하는 경우 :
첫 번째 디스크에 리눅스를 설치했는데 창을 부팅 할 수 없거나
리눅스를 두 번째 디스크에 설치했지만 부트 로더에 첫 번째 디스크를 사용했는데 아무 것도 부팅 할 수 없습니다!
그런 다음 계속 읽으십시오. 두 번째 경우에는 먼저 두 번째 디스크에 리눅스를 설치하고 다시 설치해야합니다. 이번에는 부트 로더가 어디 있는지 확인하십시오. 가장 쉽고 확실한 방법은 시스템에서 Windows 드라이브를 일시적으로 제거하는 것입니다. 드라이브 순서와 상관없이 추가 드라이브가 설치되어 있지 않기 때문입니다.
리눅스를 설치하고 부팅 할 수 있는지 확인한 후에는 Windows 드라이브를 다시 연결하십시오 (제거한 경우-드라이브 순서 측면에서 먼저, 두 번째 드라이브 측면에서 먼저 원함). 부팅 순서)를 확인하고 다음 단계로 진행하십시오.
리눅스를 부팅하고 터미널을 열고
> su root
루트 비밀번호를 묻는 메시지가 표시됩니다. 이 시점부터, 당신은 해당 터미널의 수퍼 유저 (확인, 시도 whoami
)이므로 어리석은 짓을하지 마십시오. 그러나 GUI의 일반 사용자는 여전히 텍스트 파일을 편집 할 것이므로 GUI 편집기를 선호하는 경우 해당 파일과 디렉토리의 소유권을 임시로 변경해야합니다.
> chown -R yourusername /etc/grub.d/
"작업이 허용되지 않습니다"라는 메시지가 표시되면 su
제대로 작동 하지 않은 것입니다. 당신이 얻을 경우 chown: invalid user: ‘yourusername’
, 당신은 문자 그대로 마지막 명령을했다.
이제 /etc/grub.d
파일 브라우저에서로 이동하여 이라는 파일을 찾을 수 있습니다 40_custom
. 다음과 같아야합니다.
#!/bin/sh
exec tail -n +3 $0
# This file provides an easy way to add custom menu entries. Simply type the
# menu entries you want to add after this comment. Be careful not to change
# the 'exec tail' line above.
찾을 수없는 경우 루트 터미널에서 다음 명령을 입력하십시오.
> touch /etc/grub.d/40_custom
> chmod 755 /etc/grub.d/40_custom
> chown yourusername /etc/grub.d/40_custom
텍스트 편집기에서 열고 위의 부분을 복사하여 붙여 #!/bin/sh
넣고 다음 단계로 넘어갑니다.
파일 끝에 텍스트 편집기를 사용하여 복사하여 붙여 넣습니다.
menuentry "MS Windows" {
insmod part_gpt
insmod search_fs_uuid
insmod ntfs
insmod chain
}
GRUB이 작업을 수행하는 데 필요한 모듈 목록입니다 ( ntfs
불필요 할 수도 있지만 아무 것도 아프지 않아야 함). 이것은 불완전한 항목이므로 중요한 명령을 추가해야합니다.
Linux 설치가 Windows 파티션을 자동 마운트했을 가능성이 있으며 파일 브라우저에서 찾을 수 있어야합니다. 그렇지 않은 경우, 그렇게하는 방법을 알아 내십시오 (어떻게 확실하지 않은 경우이 사이트에서 질문하십시오). 이 작업이 완료되면 마운트 지점을 알아야합니다 /media/ASDF23SF23/
. 이는 파일 브라우저에서 분명해야합니다 (예 :) . 타이핑을 저장하기 위해 쉘 변수에 입력합니다 :
win="/whatever/the/path/is"
등호의 양쪽에 공백이 없어야합니다. 여기에 Windows 경로의 요소를 포함 시키지 마십시오 . Windows 파티션의 최상위 폴더를 가리켜 야합니다. 지금:
cd $win
find . -name bootmgfw.efi
큰 파티션이있는 경우 몇 분이 걸릴 수 있지만 가장 먼저 나오는 것은 우리가 찾는 것입니다. 긴 goobledygook 문자열을 포함하는 파일 시스템에 추가 참조가있을 수 있습니다. 사용 Ctrl-c
하면 같은 뭔가 짧고 간단 참조하면 찾기를 중지 ./Windows/Boot/EFI/bootmgfw.efi
하거나 ./EFI/HP/boot/bootmgfw.efi
.
을 제외하고 .
이후에이 경로를 기억, 처음에; 하단의 빈 줄에 텍스트 편집기로 복사 할 수 있습니다. 이전 디렉토리로 돌아가려면을 사용 cd -
하십시오. 쉘의 현재 위치는 중요하지 않습니다.
GRUB은 부팅 프로세스를 찾아서 2 단계 Windows 부트 로더로 전달할 수 있어야합니다. 우리는 이미 Windows 파티션에 경로가 있지만 GRUB에게 해당 파티션이 어디에 있는지 알려주는 매개 변수도 필요합니다. 시스템에 grub-probe
또는 (예 : Fedora) 라는 도구가 설치되어 있어야합니다 grub2-probe
. 타이핑 grub
한 다음 Tab두세 번 누르십시오 . 둘 중 하나를 포함하는 목록이 나타납니다.
> grub-probe --target=hints_string $win
다음과 같은 문자열이 표시되어야합니다.
--hint-bios=hd1,msdos1 --hint-efi=hd1,msdos1 --hint-baremetal=ahci1,msdos1
GRUB 구성이 포함 된 텍스트 편집기로 돌아가서 모든 insmod
명령 뒤에 줄 (중괄호 닫기)을 추가하여 다음과 같이 표시하십시오.
insmod chain
search --fs-uuid --set=root [the complete "hint bios" string]
}
그 줄을 끊거나 텍스트 편집기에서 허용하지 마십시오. 디스플레이에서 줄 바꿈 될 수 있습니다. 차이점을 쉽게 알 수있는 방법은 줄 번호를 설정하는 것입니다. 다음:
> grub-probe --target=fs_uuid $win
"123A456B789X6X"또는 "b942fb5c-2573-4222-acc8-bbb883f19043"과 같이 짧은 문자, 숫자 및 가능한 대시를 반환해야합니다. 의 끝에 그 추가 search --fs-uuid
공백으로 구분 된 힌트 BIOS 문자열 후 라인.
경우 다음으로, (그리고 경우에만) 윈도우의 측면에서 두 번째 드라이브에 드라이브 순서 의 뒤에 줄을 추가 search --fs-uuid
라인 :
drivemap -s hd0 hd1
이것은 앞에서 언급 한 "트릭"입니다. 작동한다고 보장되지는 않지만 시도해도 아프지 않습니다.
마지막으로 마지막 줄은 다음과 같아야합니다.
chainloader (${root})[the Windows path to the bootloader]
}
예를 들어 명확하게하기 위해 :
chainloader (${root})/Windows/Boot/EFI/bootmgfw.efi
그게 다야. 파일을 저장하고 파일 브라우저에서 체크인하여 파일이 실제로 저장되어 있는지 확인하십시오.
이것은 grub-mkconfig
또는 라는 도구로 수행됩니다 grub2-mkconfig
. Tab이전에 찾은 목록에있을 것 입니다. 라는 명령이있을 수도 있습니다 update-grub
. 이를 확인하려면 루트 터미널에 입력하십시오. "명령을 찾을 수 없음"이 표시되면 grub-mkconfig
직접 사용해야 합니다. 그렇지 않은 경우 (더 긴 오류 포함) 구성을 설정 한 후 약간 줄어 듭니다.
grub-mkconfig
직접 사용하려면 먼저 다음을 찾아야합니다 grub.cfg
.
> find /boot -name grub.cfg
아마도 /boot/grub/grub.cfg
또는 일 것입니다 /boot/grub2/grub.cfg
.
> grub-mkconfig -o /boot/grub/grub.cfg
update-grub
구성 오류를 자동으로 검색합니다. grub-mkconfig
그렇지는 않지만 컴퓨터를 부팅하려고 할 때보 다 처리하기가 훨씬 쉽기 때문에 그렇게하는 것이 중요합니다. 이를 위해 grub-script-check
(또는 grub2-script-check
)을 사용하십시오.
> grub-script-check /boot/grub/grub.cfg
이 (또는 update-grub
) 행 번호를 나타내는 오류가 발생하면 grub.cfg의 행 번호이지만 해당 부분 /etc/grub.d/40_custom
(텍스트 편집기의 파일) 을 수정해야합니다 . 이전 파일을 보려면 루트 여야 할 수도 있으므로 less /boot/grub/grub.cfg
터미널에서 시도 :하고 키를 누른 다음 줄 번호를 입력하십시오. 메뉴 항목이 표시되어야합니다. 텍스트 편집기에서 수정, 오타 찾기, 실행 update-grub
또는 grub-mkconfig
다시.
완료되면 텍스트 편집기를 닫고 exit
터미널에 입력 하여 수퍼 유저 모드를 종료하십시오.
grub 메뉴에 도달하면 "Windows"옵션으로 시간이 만료되기 전에 (일반적으로 5 초) 빠르게 아래로 스크롤하여 테스트하십시오. grub에서 문자 메시지 오류가 발생하면 구성에 문제가있는 것입니다. Windows에서 오류 메시지가 표시 되면 해당 문제는 Microsoft와 Microsoft 사이에있는 것입니다. 그러나 걱정하지 마십시오. Windows 드라이브는 수정되지 않았으므로 BIOS 설정을 통해 먼저 부팅 순서로 부팅하여 직접 부팅 할 수 있습니다.
다시 리눅스로 돌아 오면 /etc/grub.d
디렉토리 의 소유권 과 그 내용을 원래 상태로 되돌립니다 :
sudo chmod 755 /etc/grub.d/40_custom
Arch는 최고의 문서 중 일부를 가지고 있으며 그 페이지를 포함하여 대부분의 GNU / Linux 배포판에 대부분 적용 할 수 있습니다.
chainload $({root})
가 있습니다 . 변경 해야 chainload (${root})
하기 때문에 편집 할 수 없습니다.
/etc/grub.d
구성을 생성 할 때 추가되지 않으면 이상한 것이 발생하는 것입니다. 그것이 표준 출력으로 뱉어 grub-mkconfig
지지 않고 실행하면 -o
추가가 처리되고 있음을 확인하거나 거부하는 데 도움이 될 수 있습니다.