왜 대부분의 배포판이 UEFI와 grub을 연결합니까?


31

대부분의 배포판은 UEFI 시스템에 추가 부트 로더를 설치합니다. UEFI 자체는 부트 로더이며 다른 운영 체제 또는 개별 커널을 선택할 수있는 메뉴를 제공합니다. 또한 UEFI 설정은와 같은 사용자 공간 도구를 사용하여 쉽게 변경할 수 있습니다 efibootmgr.

3.3 이후 커널은 EFI_STUB를 지원합니다. 즉, UEFI에서 커널을 직접로드 할 수 있습니다. 배포판에서 추가 부트 로더를 사용하기로 결정한 이유는 무엇입니까? Linux / UEFI에 대한 대부분의 자습서는 EFI_STUB를 사용하여 Linux를 부팅하는 대신 추가 부트 로더 (rEFInd, grub2, ELILO 등)를 설정하는 방법에 중점을 둡니다.

배포판에서 누락 된 것은 지원뿐입니다. 대부분의 배포는 두 번째 부트 로더를 연결하므로 커널은 UEFI 부팅 메뉴에 추가되거나 EFI 시스템 파티션에 복사되지 않습니다.

세 가지 스크립트만으로도 모든 마법을 수행 할 수 있습니다. initramfs를 ESP에 복사하는 것. 두 번째는 커널을 ESP에 복사하고 UEFI 부팅 메뉴에 새 항목을 만듭니다. 세 번째 스크립트는 ESP에서 이전 커널과 initramfs를 제거하고 UEFI 부팅 메뉴 항목을 삭제합니다. 이를 통해 사용자 상호 작용없이 완전히 자동화 된 커널 / initramfs 업데이트 / 제거가 가능합니다. 나는 1 년 이상이 접근법을 사용하고 있으며 완벽하게 작동했습니다.

대부분의 배포에서 EFI_STUB 대신 grub을 사용하는 이유는 무엇입니까?

모래밭:

편집 : 나는 grub 지원을 완전히 제거하는 것이 아니라 다양한 이유로 그것을 사용하려는 사람들에게 선택을 제공하기 위해 이야기하고 있습니다. 배포판은 grub-efiUEFI와 grub을 연결하려는 사람들을위한 패키지와 efistub-boot위에서 언급 한 스크립트를 포함 하는 패키지를 제공 할 수 있습니다.


4
왜해야합니까? grub 구성 파일을 처리 / 생성하는 방법을 이미 설정했습니다. 또한 모든 시스템 (비 UEFI 및 UEFI)이 동일하게 작동하면 도움이됩니다.
Ulrich Dangel

멋진데. 그러나 그 링크에 따르면 원한다면 그것을 할 있기 때문에 , 배포자가 자동으로 그것을 수행하는 것은 잠재적 인 혼란 일 것입니다. Betcha 일부는 결국 옵션 옵션을 제공합니다.
goldilocks

1
@Bakuriu 예를 들어, 이해하기 쉬운 시스템, 간단한 부팅 순서, 덜 실행 된 코드 및 약간 더 빠른 부팅 시간.
Marco

4
주어진 보류 이유가 잘못되었으므로이 질문을 보류해야합니다. UEFI는 부팅 메뉴를 제공하지 않습니다. 일부 구현은 그렇습니다. Windows 8의 대상 부팅 시간에 도달하기 위해 BIOS 는 입력 장치를 초기화하지 않기도합니다 . 사용자가 키를 누를 때까지 기다리지 마십시오. 따라서 Windows를 통해 Linux에 가거나 그 반대로 가야합니다. 전자는 일부 시스템에서 작동하지만 사양이 보장하지는 않습니다. 후자는 작동하지 않습니다 (GRUB에서는 UEFI 설정을 입력 할 수는 있지만 Linux에서는 불가능합니다).
sourcejedi

1
@sourcejedi 귀하의 주장이 귀하의 출처와 일치하지 않습니다. UEFI는 부팅 메뉴를 제공합니다 (UI는 공급 업체마다 일치하지 않습니다). mjg59는 철학적으로 타협하지 않으면 메뉴를 부팅 할 수 없음을 의미했습니다 (W8 EULA 허용). 그러나이 문제는 EFISTUB가 아닌 grub 부트 로더가있는 설치 프로그램에서 동일합니다. 따라서 왜 우리가 EFISTUB보다 GRUB을 선호하는지 대답하지 않습니다.
Lingzhu Xiang

답변:


10

UEFI가 2005 년 에만 정의 되었다는 점을 감안 하면 사양을 지원하지 않는 많은 레거시 장비가 있습니다. UEFI를 표준 배포판에 추가하려면 하나 대신 두 개의 코드 경로를 테스트해야하며 부트 코드는 악명 높을뿐만 아니라 테스트하는 데 약간의 시간이 소요되는 코드를 짜증나게합니다.


5
테스트에 시간이 많이 걸리는 것은 물론, 잘못 될 가능성이 가장 큰 코드입니다. 고려하십시오 : 시스템이 정상적으로 정상적으로 작동하거나 시스템을 부팅 할 수없는 동안 어떤 종류의 문제를 선호합니까? 부트 로더는 필연적으로 필요한 경우를 제외하고는 건드리지 않을 것에 대해 가장 강하게 느끼는 소프트웨어 중 하나입니다.
CVn

@ MichaelKjörling의 위의 의견은 답변에 있어야합니다. 새로운 부트 로더로 전환하는 것은 매우 위험합니다. Distro-creators는 사용자에게 좋은 경험을 제공하기를 원하지만 그 이상으로 잠재적 인 단일 신규 사용자에게 완벽한 경험을 원합니다. 배포판을 "디스트로"라고 불렀지 만 제작자와 관련하여 문제가 없었습니다.
Johan

@Johan msw 는 그 점을 대답으로 자유롭게 편집 할 수 있습니다. (자체적으로 IMO로 답하는 것만으로는 충분하지 않습니다.) Tobugoldlilocks도이 문제를 다루고 있습니다.
CVn

3

배포판에는 리소스가 제한되어 있으며 그 이상의 이유는 없습니다. UEFI 시스템이 아닌 시스템의 경우 grub 옵션을 유지해야하므로 간단하고 안전 할 수 있지만 더 많은 유지 보수 작업이 필요한 경우에도 마찬가지입니다.

나는 모든 사람들이 배포판이 채택하고 싶어하는 기능과 옵션 목록을 가지고 있다고 확신합니다 (몇 페이지를 줄 것입니다, lol). .. ". 그러나이를 구현하는 데는 무한한 시간이 없습니다. 이와 같은 결정에 직면 할 때 ( "우리는 다른 것에 비해이 기능에 작업을합니까?") 주요 질문은 다음과 같아야합니다.

  • 그게 필요 할까? (여기서 대답은 없습니다).
  • 얼마나 많은 사람들이 혜택을받을 것입니까? (IMO : 몇 개, 많지 않은)
  • 사용자가 아무것도하지 않고 자신을 수용 할 수있는 합리적인 대안이 있습니까? (분명히 있습니다.)

사람들이 배포판을 전혀 사용하지 않는 이유는 모든 사람 이 리소스 제약을 받기 때문 입니다 (그렇지 않으면 팀을 고용하고 공간과 장비를 구입하고 원하는대로 정확하게 모든 것을 수행하도록하세요). 따라서 실제 배포판은 사용자 의 일반화 된 요구를 반영합니다 .

즉, 시간이 지남에 따라 옵션으로 채택 될 것이라고 생각하며 질문에 찬성했습니다.


2

grub 외에도 UEFI 부트 로더를 대상으로 지정하면 품질 관리 및 지원이 복잡해집니다. grub은 자유 소프트웨어, 해킹 가능, 더 유연하고 고품질이기 때문에 배포판은 UEFI 사양이 아닌 grub을 대상으로합니다. 튜토리얼을 따르고 UEFI 파티션을 마운트하여 순수 UEFI 부팅을 계속할 /boot수 있습니다. 그렇게하면 유지 관리가 완료되기 때문입니다.


당신의 품질 주장은 논쟁의 여지가 있지만, 그것이 목표가 된 이유는 어쨌든 아무 관련이 없다고 생각합니다. 그들은 이미 수천 줄의 잘못 작성된 쉘 스크립트를 가지고 있는데, 왜 20 개의 좋은 스크립트를 원할까요?
mikeserv

1

실제 문제는 사람들이 그것이 어떻게 작동하는지 이해하지 못한다는 것입니다. 예를 들어, 귀하의 질문에 3 개의 스크립트 만 있으면 충분하며 여기에 대한 대답은 대부분 작동하는 데 필요한 모든 / 추가 유지 보수에 대한 것입니다.하지만 실제로는 해당 스크립트가 필요하지 않습니다 또는 추가 작업.

필요한 것은 ESP를 바인드 마운트하거나 커널 오버를 유지하려는 곳이면 어디든 /boot한 줄로 수행 할 수 있다는 것입니다 /etc/fstab. 그렇게하면 모든 현재 커널 업데이트 스크립트가 계속 작동합니다.

내`/ etc / fstab '은 다음과 같습니다 :

LABEL=ESP /esp vfat defaults 0 2
#
#^ i like a separate mount point - not necessary though
#
/esp/EFI/arch_root /boot none bind,defaults 0 2
#
#^ i keep separate installations in separate directories
#

그러나 제조업체 별 설정에 대한 좋은 지적이 있습니다. UEFI는 명시 적으로 부팅 메뉴의 인터페이스를 지정 하지 않습니다 . 그것은 횡령하고 기계간에 일관성이 없습니다. 성가 시지만 사실입니다.

따라서 실제로 같은 로더grub더 많은 작업을 수행하지만 rEFInd와 같은 메뉴 응용 프로그램은 차이점을 동일하게하고 모든 것을 단순화합니다.


1
이것이 어떻게 작동하는지 이해하지 못합니다. 커널 및 initramfs의 파일 이름에는 버전이 포함되어 있습니다. 스크립트가 없으면 새 커널을 설치 한 후 이전 커널을 부팅합니다. 또는 다르게 표현 : 새 커널을 가리 키도록 기본 커널을 어떻게 변경합니까? 내 스크립트 efobootmgr는 부팅 순서를 업데이트하고 기본 커널을 변경하는 데 사용 됩니다.
Marco

@Marco-기본 부팅 경로는 \EFI\BOOT\BOOTX64.efi그 이름이 될 수 있습니다. UEFI는 (구체적으로) 처음부터 커널에 대한 인수 를 처리 할 수 없으므로이 경우 initramfs / 커널 이미지를 함께 바인딩해야합니다. 그러나 나는 당신이 버전 이름에 대해 무엇을 의미하는지 몰라-나는 데비안 만 그렇게 생각하고, 어쨌든 비생산적이라고 생각합니다. 커널의 일반적인 이름은 vmlinuz입니다. 어쨌든, 올바른 방법 은 로더가 아닌 부팅 관리자 를 사용하는 것 입니다. rEFInd처럼 커널을 찾아 부팅하기 위해 EFI에 이름을 전달하는 EFI 앱을 사용하십시오.
mikeserv

나는 데비안을 사용하고 커널의 이름은 예 vmlinuz-4.2.0-1-amd64를 들어 그대로두고 efibootmgr부팅 목록에 추가하고 기본값으로 만드는 데 사용됩니다. 커널 이름을 지정하면 BOOTX64.efi해결책이 될 수 있습니다. 그러나 어떤 식 으로든 그렇게하려면 스크립트가 있어야하며 여러 커널을 모두 같은 이름으로 사용하는 경우 쉽게 유지할 수 없습니다.
Marco

@Marco-커널을 설치하여 initramfs를 빌드 할 때 패키지 관리자-apt-아마도 별도의 스크립트가 필요하지 않습니다. 아마도 이미 커널 이름을 해결하기 위해 수백 가지 일을하고 있지만 한 줄만 추가하면 원하는 이름으로 이름을 바꿀 수 있습니다. 부팅 트리 를 유지하면 원하는만큼 커널을 쉽게 유지할 수 있습니다 . rEFInd는 기본 부팅 이미지를 검색 경로에서 가장 최근에 수정 된 커널 이미지로 만들어이를 처리합니다.
mikeserv

패키지 관리자가 설치 한 스톡 스크립트를 수정하는 것은 좋지 않습니다. 변경 사항이 업데이트되어 업데이트 될 수 있으며이 경우에는 부팅 할 수없는 시스템이 될 수도 있습니다. 커널 / initramfs 설치 후에 호출되고 이와 같은 목적으로 정확하게 사용되는 사용자 스크립트 용 디렉토리가 있습니다. BTW : 댓글에서 스크립트를 수정하는 것이 좋습니다. 그러나 귀하의 답변에 "최소한 데비안에서는 해당되지 않는 스크립트 나 추가 작업이 필요하지 않습니다"라고 명시되어 있습니다.
Marco

0

그들은 UEFI와 GRUB을 임시 구현 솔루션으로 연결합니다.

UEFI 지원 및 관련 문제 (예 : 보안 부팅)가 해결되면 점점 더 많은 배포판에서이를 직접 사용할 것입니다. 그 동안은 여전히 ​​새롭습니다. Google 트렌드는 다소 제한된 채택을 보여줍니다. http://www.google.com/trends/explore?q=cannot+boot+uefi#q=uefi%2C%20%20efi%2C % 20 % 20bios & cmpt = q

다른 사람들은 순수한 UEFI 솔루션을 사용하거나 비 UEFI 및 순수한 UEFI 시스템을 동시에 지원하는 잠재적 인 함정을 언급했습니다. UEFI 커널은 비 UEFY 시스템에서 작동 할 수 있지만 커널 업데이트 도구는 GRUB 메뉴 또는 UEFI 부팅 메뉴 또는 둘 다 등을 업데이트해야합니다.

실제로 언급 된 품질 관리에 관한 것입니다.이 코드의 중요한 문제는 큰 영향을 미칩니다. 컴퓨터가 새로운 사용자를 부팅하지 못하는 경우 (예 : 잠재적 인 Linux 변환),이를 가비지로 버리고 "안전한"것으로 돌아갑니다.

그러나 기술이 더 많이 채택됨에 따라 표준이 될 것입니다.


나는 희망하지 않는다. 그러나 그것은 주로 UEFI의 잠금 모드와 리눅스가 사용할 서명 된 이미지가 항상 있는지 확인하기위한 마이크로 소프트의 "약속"에 대해 심각한 우려가 있기 때문이다.
Shadur

0

펌웨어 버그를 해결하려면 추가 코드가 필요합니다

grub을 연결하지 않으면 배포가 펌웨어에 더 의존하여 올바르게 부팅됩니다. 모든 소프트웨어에 문제가 있기 때문에 펌웨어도 그 경향이 있습니다. 이제 Linux 배포판에서 이러한 펌웨어 버그를 해결하기 위해 작성해야합니다.

실제 사례를 예로들 수 있습니다. Asrock H81 pro BTC P1.80 마더 보드는로 부팅 메뉴 항목을 생성 할 수 있습니다 efibootmgr. 부팅 메뉴 항목을 여러 개 만들 수 있으며 부팅 순서를 사용하여 변경 efibootmgr --bootorder XXXX,YYYY,ZZZZ하거나 임시 다음 부팅 옵션을 사용하여 설정할 수 있습니다 efibootmgr --bootnext XXXX. 이 명령 모두 출력을 반환하여 부팅 순서가 변경되었거나 다음 부팅이 실행될 것이라는 아이디어를 제공합니다 BootNext: XXXX. 그러나 재부팅시 완고한 펌웨어는 새로 요청 된 부팅 옵션을 무시하고 이전 BootCurrent:값 으로 재부팅 합니다. 영구 부팅 순서 변경은 펌웨어 설정 유틸리티에서만 가능합니다. 영구적이지 않은 변경은 전혀 가능하지 않습니다.


-2

부팅이 EFI에 의해서만 이루어지고 부트 로더를 제거하면 하드웨어 공급 업체와 운영 체제 제조업체 모두에게 어려움을 겪을 것이라고 생각합니다. HW 공급 업체는 테스트 할 커널이 더 많지만 OS를 만드는 회사의 경우 커널이 다른 FW에 의해로드되는지 여부와 같습니다.

또한 EFI에서 커널을 직접 부팅하면 스택 보안 부팅의 어느 부분에 적합합니까? 현재 시나리오에서 일단 제어가 OS 부트 로더로 이동하면 부트 로더는 커널이 올바르게 서명되었는지 여부를 확인합니다. EFI에서 직접 커널을로드하는 경우 전체 스택이 방해를 받기 때문에 엉망이 될 것이라고 생각합니다. 내가 이해 한 것에 대한 의견.


그건 바보 야 부트 로더가 키를 확인하는 이유는 UEFI가 그렇지 않기 때문입니다. 이 방법 - 체인 로딩 방금 펌웨어 키 확인 서명 된 커널을 부팅 확보 중복 해야 작동합니다.
mikeserv
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.