update-grub 대 grub-install?

온라인에서 찾은 일부 예에서는 grub-install 후에 update-grub을 실행해야한다고 말합니다. 다른 사람들은 순서를 바꿉니다. 어느 것이 맞습니까?

두 개의 Linux 설치 (sda에 하나, sdb에 하나)가있는 경우 sda 설치에서 update-grub을 실행하면 sda 설치가 부팅 맨 위에 배치됩니다. 메뉴. sdb 설치에서 update-grub을 실행하면 메뉴 맨 위에 sdb 설치가 배치됩니다.

DEFAULT = 0이라고 가정하면 이론적으로는 다음을 선택하여 내 OS를 선택할 수 있습니다. BIOS에서 부팅 장치. “grub-install / dev / sda”는 sda 또는 sdb 버전의 Linux에서 실행되었는지 여부에 관계없이 sda 부팅 메뉴를 마지막 “update-grub”에 해당하도록 변경합니까?

Answer

update-grub, 적어도 Debian 및 Ubuntu와 같은 친척에서는 기본적으로 grub-mkconfig. 따라서 실제 부트 로더 자체가 아닌 GRUB 구성 을 생성 / 업데이트 / 재생합니다.

grub-install가 실제로 수행하는 작업은 실행중인 GRUB 버전 : 기존 BIOS GRUB 또는 UEFI GRUB?

기존 BIOS GRUB를 사용하는 경우 grub-install는 마스터 부트 레코드에 포함 된 GRUB의 일부를 (다시) 쓰고 물리적 디스크 블록에 인코딩합니다. GRUB의 다음 부분을 읽을 수있는 번호. 또한 실제 GRUB 구성 파일 (/boot/grub/grub.cfg)을 읽을 파티션도 결정합니다. 여기서 중요한 요소는 /boot/grub/device.map 파일로, GRUB에 BIOS (따라서 GRUB) 장치 번호가 Linux 디스크 장치에 매핑되는 방식을 알려줍니다.

사용 GRUB 부트 로더의 주요 부분 인 UEFI GRUB는 EFI 시스템 파티션에 일반적으로 /boot/efi/EFI/<name of distribution>/grubx64.efi 또는 이와 유사한 파일로 위치합니다. 이 부트 로더 경로 이름은 UEFI 부팅 변수의 시스템 NVRAM (= BIOS 설정이 저장되는 위치)에 저장됩니다. GRUB의 주요 부분은 완전히 독립적 일 수 있으며 (보안 부팅이 사용중인 경우 필수입니다!) 일반적으로 다음의 /boot/grub 디렉토리에서 추가 기능을 GRUB 모듈로로드 할 수 있습니다. Linux 배포판의 일부입니다.

UEFI 부팅 변수는 시스템이 EFI 시스템 파티션과 그 안의 부트 로더 파일을 찾는 데 사용해야하는 디스크를 식별합니다. 이러한 변수는 다음을 사용하여 직접 볼 수 있습니다. efibootmgr -v 명령. --no-nvram 옵션을 사용하지 않는 한 grub-install 명령은 해당 변수를 업데이트합니다. 그렇지 않으면 지정합니다.

결과적으로 기존 BIOS 및 UEFI에서 grub-install를 실행하면 부트 로더를 업데이트하여 완전히 다른 GRUB 구성 파일을 완전히 읽을 수 있습니다. 다른 디스크-해당 프로세스의 세부 사항은 완전히 다를 수 있습니다.

UEFI를 사용하면 실제로 OS 내에서 다음 중 하나를 사용하여 부팅 장치 선택을 변경할 수 있습니다. efibootmgr 또는 grub-install. 그러나 grub-install는이를위한 엄청난 과잉입니다. 두 설치 모두 UEFI이고 별도의 ESP 파티션이있는 경우 자체 UEFI 부팅 변수를 갖게되며 둘 중 하나를 쉽게 선택할 수 있습니다. efibootmgr를 사용하거나 실제로 UEFI BIOS 설정에 있습니다.

기존 BIOS에서는 “좀 더 지저분합니다.”각 설치를 확인하고 싶을 것입니다. /boot/grub/device.map는 특정 설치의 디스크를 hd0로 식별하고 다른 디스크는 hd1로 식별합니다. 그런 다음 grub-install를 사용하여 각 설치의 자체 디스크에만 부트 로더를 작성합니다. “반대”디스크에는 없습니다. 이렇게하면 다른 디스크가 완전히 제거 된 경우에도 두 디스크 모두 완전히 독립형이되고 부팅이 가능합니다. 원하는 경우 “반대”설치를 부팅 할 수 있도록 각 GRUB의 구성 파일에 메뉴 항목을 추가 할 수 있습니다. 또는 BIOS를 사용하여 부팅 할 디스크를 선택할 수 있습니다.

일반적인 BIOS의 부팅 순서 선택기는 일반적으로 “첫 번째”디스크를 부팅하기 위해 디스크를 선택하여 작동한다는 사실을 알아야합니다. 따라서 GRUB “의 hd0는 항상”BIOS에서 부팅하기 위해 현재 선택된 디스크 “를 참조합니다.

그러므로 현재 /dev/sda에서 부팅 중이며 (BIOS에 sdahd0라고 표시됨) 해당 디스크의 GRUB 메뉴 항목을 /dev/sdb “의 부팅 메뉴로 전환하려면 다음과 같이 사용하십시오.

menuentry "Switch to /dev/sdb" { # flip the disk mappings and reload configuration drivemap -s (hd0) (hd1) set root=<the identifier for sdb"s partition that contains grub.cfg> configfile /boot/grub/grub.cfg # or just /grub/grub.cfg is /boot is a separate partition } 

… 그리고 마찬가지로 / dev / sdb “s GRUB 구성에서도 마찬가지입니다.

코멘트

  • 그러므로 grub-install 전에 update-grub을 실행하십시오. (차이를 만들어야하는 것이 아니라 UEFI의 경우) 아니면 그 반대입니까?
  • grub-install는 GRUB의 바이너리 부분을 설치하고 update-grub는 구성 파일 만 생성합니다. GRUB를 완전히 다시 설치해야하는 경우 ' 먼저 grub-install를 실행합니다. 실제로 작업의 일부로 update-grub를 실행할 수 있습니다. 실행되지 않는 경우 ' 나중에 직접 실행할 수 있습니다.
  • " 자신의 UEFI 부팅 변수 s "-> UEFI 설정에서 올바르게 이해했다면 NVRAM의 UEFI 부팅 변수는 부팅 디스크를 지정하는 어레이와 같습니다. 하나의 디스크가 실패하면 어떻게됩니까? 이 배열의 대체 / 여러 값을 지정할 수 있습니까? 또한 내가 이해했다면 사용자는 부팅 디스크를 수동으로 지정하기 만하면 항상 UEFI 부팅 변수를 우회 할 수 있습니까 (실제로 UEFI 부팅 변수가 수행하는 작업)? 감사합니다.
  • @ninjagecko 귀하의 이해는 정확하지만 불완전 할 수 있습니다. UEFI 부팅 변수는 부팅 할 파티션 UUID뿐만 아니라 부트 로더 파일의 경로 이름, 사람이 읽을 수있는 이름 및 선택적 매개 변수 필드를 지정합니다. 그리고 예, 여러 값 (세트)을 지정하고, 시도 할 순서를 지정하고, 시스템에 이번 한 번만 정상적인 순서로 특정 옵션을 부팅하도록 지시 한 다음 정상적인 순서로 다시 시작할 수 있습니다. 이들은 모두 UEFI 사양의 표준 기능입니다. 펌웨어 작성자는 원하는 경우 더 많은 옵션을 제공 할 수 있습니다.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다