온라인에서 찾은 일부 예에서는 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에 sda
가 hd0
라고 표시됨) 해당 디스크의 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
는 GRUB의 바이너리 부분을 설치하고update-grub
는 구성 파일 만 생성합니다. GRUB를 완전히 다시 설치해야하는 경우 ' 먼저grub-install
를 실행합니다. 실제로 작업의 일부로update-grub
를 실행할 수 있습니다. 실행되지 않는 경우 ' 나중에 직접 실행할 수 있습니다.