멀티부트 Linux LiveUSB에서 GRUB이 모듈을 찾도록 하는 방법은 무엇입니까?

멀티부트 Linux LiveUSB에서 GRUB이 모듈을 찾도록 하는 방법은 무엇입니까?

배경

(제목으로 건너뛰기 =problem LiveUSB, ISO, GRUB2 등의 전문가인 경우)

다중 부팅/다중 ISO Linux LiveUSB를 설정 중입니다. 세부 정보여기, 여러 호스트(예: 부팅해야 한다고 결정한 모든 PC)에서 사용하려고 합니다. 프로세스는 간단해 보입니다.

  1. 설정하세요개발 호스트: 즉, LiveUSB를 사용하여 부팅할 상자가 아니라 LiveUSB를 생성하는 데 사용할 상자입니다.
  2. USB 드라이브 가져오기/만들기
    1. 부팅하려는 모든 ISO에 충분히 큰 크기
    2. 부팅 가능
    3. 가지다GRUB2 설치됨
  3. 원하는 ISO를 쉽게 지정된 위치에 배치하십시오.
  4. 편집하다 /boot/grub/grub.cfg:
    1. 전역 변수 @top(즉, menuentrys 위)을 설정합니다.root
    2. menuentry각 ISO에 대해 하나 이상의 를 만듭니다.

주요 문제는 각 ISO에 대해 menuentry올바르게 부팅할 파일을 하나 이상 생성한다는 것입니다. 이것은 간단해 보인다:

  1. ISO 설치:
    1. ISO의 구조를 확인하십시오. 해당 grub.cfg, initrd*, vmlinuz(또는 GRUB 구성, 초기 RAMdisk 이미지 및 커널 이미지라고 하는 모든 것) 에 대한 경로를 가져옵니다 .
    2. grub.cfgISO 에서menuentry
  2. 각각 만들어라menuentry
    1. ISO 부팅 경로 설정
    2. loopbackISO를 사용하여 장치 만들기
    3. ISO에 제공된 경로 대신 루프백 장치의 경로를 사용하십시오 grub.cfg.
      1. initrd /casper/initrd.lz->initrd (loop)/casper/initrd.lz
      2. linux /live/vmlinuz->linux (loop)/live/vmlinuz
  3. LiveUSB를 테스트하세요:
    1. 개발 호스트에 아직 설치되어 있는 동안:grub-script-check정신건강을 위해 :-)
    2. umount개발 호스트에서
    3. 각 테스트 호스트에 대해 다음을 수행합니다.
      1. 전원이 꺼진 테스트 호스트에 연결
      2. 전원 켜짐!

질문

많은 ISO는 grub.cfg"실제로" 부팅하기 전에 비디오를 구성하려고 합니다. 모두 약간씩 다르게 작동하므로 각 ISO에 대한 비디오 코드를 해당 menuentryISO에 넣습니다. 그러나 지금까지 내가 사용한 ISO는 grub.cfg대략 다음과 같은 것 같습니다.

if loadfont /path/to/font/file ; then
  set gfxmode=auto
  insmod efi_gop
  insmod efi_uga
  insmod gfxterm
  terminal_output gfxterm
fi
# usually followed by more menu and background tweaking

좋은 소식은 내가할 수 있는시작 시 글꼴 파일의 경로를 결정합니다. 즉, loadfont행복할 수 있습니다. 나쁜 소식은, 한 번 if동네에 왔을 때,

  • 모듈 중 1개만 로드됩니다.
  • Casper(예: Ubuntu 기반 Mint, LMDE1) 또는 Debian Live(예: Clonezilla, LMDE2)를 사용하는 ISO에서 동일한 문제가 있습니다.

GRUB이 찾도록 하는 방법모두기준 치수?

샘플 코드

Clonezilla의 in-ISO는 다음 /boot/grub/grub.cfg으로만 전달됩니다 /EFI/boot/grub.cfg.

# This file is for compatibility to Ubuntu Linux's uEFI secure boot. 
# The real config file for grub is /EFI/boot/grub.cfg.
configfile /EFI/boot/grub.cfg

내 LiveUSB /boot/grub/grub.cfg(모든 ISO 외부)에는 다음 코드가 포함되어 있습니다.

# isofile_abspath==path to the ISO from the root of my LiveUSB.
set isofile_abspath='/ISOs/clonezilla-live-2.4.2-10-amd64.iso'
set root=(hd0,1)
loopback loop ($root)$isofile_abspath
...
set clonezilla_prefix='(loop)/EFI/boot'
...
set loadfont_fp="$clonezilla_prefix/unicode.pf2"
echo -e "About to 'loadfont $loadfont_fp' ..."
if loadfont "$loadfont_fp" ; then
  set gfxmode=auto
  echo -e 'about to `insmod efi_gop` ...'
  insmod efi_gop
  echo -e 'about to `insmod efi_uga` ...'
  insmod efi_uga
  echo -e 'about to `insmod gfxterm` ...'
  insmod gfxterm
  echo -e 'about to `terminal_output gfxterm` ...'
  terminal_output gfxterm
fi
echo -e 'Done loadfont.'

시작 결과:

About to 'loadfont (loop)/EFI/boot/unicode.pf2' ...
about to `insmod efi_gop` ...
error: file not found.
about to `insmod efi_uga` ...
error: file not found.
about to `insmod gfxterm` ...
about to `terminal_output gfxterm` ...
error: no suitable mode found
Done loadfont.

관련 정보