다른 파티션에서 grub 항목을 집계하는 방법은 무엇입니까?

다른 파티션에서 grub 항목을 집계하는 방법은 무엇입니까?

/dev/sda에 여러 Linux 커널이 있는 "기본" GRUB가 있고 /dev/sdb2에 보조 Linux 배포판이 있다고 가정합니다.

컴퓨터가 /dev/sda GRUB로 부팅됩니다. 그러면 /dev/sdb2에서 커널을 어떻게 시작합니까?

/dev/sda의 배포판에서 grub을 업데이트하면 OS-prober는 /dev/sdb2의 내용을 감지하고 이에 따라 GRUB 메뉴를 채웁니다 (/dev/sda)/boot/grub/grub.cfg.

그러나 이는 새 커널을 설치하거나 /dev/sdb2 배포판에서 부팅 옵션을 변경할 때 업데이트되지만 (/dev/sdb2)/boot/grub/grub.cfg기본 grub.cfg는 업데이트되지 않기 때문에 불편합니다.

기본 GRUB가 보조 GRUB의 항목을 읽고 병합하도록 하려면 어떻게 해야 합니까?

답변1

문서화되지 않은 GRUB 명령이 있습니다.수동는 구성 파일을 정확하게 구문 분석하고 항목을 추출하고 나머지 구성을 무시합니다 extract_entries_source. 이렇게 하면 보조 배포판의 GRUB 메뉴 항목에 대한 모든 변경 사항이 기본 GRUB 메뉴에 자동으로 통합됩니다.

기본("호스트") 배포판에서

사용자 정의 항목 추가 /etc/grub.d/40_custom:

# A dummy entry to mark the separation
menuentry "Extracted from /dev/sdb2" {
        true
}

# the following if for MBR disk, change to part_gpt if necessary
insmod part_msdos
# adapt with appropriate file system module
insmod ext2
# replace aaaa-bbbb-cccc with actual partition UUID
search --fs-uuid aaaa-bbbb-cccc --set slavegrub --no-floppy
extract_entries_source ($slavegrub)/boot/grub/grub.cfg

파티션(파일 시스템)의 UUID는 를 통해 얻을 수 있습니다 blkid.

또한 GRUB가 OS-prober를 사용하여 메뉴를 자동으로 채우는 것을 방지해야 합니다. 이는 전역적으로 구성되며 다음 명령을 사용하여 /etc/default/grub전역적으로 또는 특정 파티션에 대해 선택적으로 비활성화할 수 있습니다 (참조:GRUB_DISABLE_OS_PROBERGRUB_OS_PROBER_SKIP_LISTGRUB 매뉴얼).

그러면 할 수 있습니다 update-grub.

2차 분포에서

/boot/grub/grub.cfg파일은 해당 항목을 읽기만 하고 실제로 실행하지는 않으므로 아무 작업도 수행할 필요가 없습니다 . 기본 GRUB 메뉴에 통합되면 이러한 항목이 중복되므로 운영 체제 감지기를 완전히 비활성화할 수 있습니다.

관련 정보