배경
(제목으로 건너뛰기 =problem
LiveUSB, ISO, GRUB2 등의 전문가인 경우)
다중 부팅/다중 ISO Linux LiveUSB를 설정 중입니다. 세부 정보여기, 여러 호스트(예: 부팅해야 한다고 결정한 모든 PC)에서 사용하려고 합니다. 프로세스는 간단해 보입니다.
- 설정하세요개발 호스트: 즉, LiveUSB를 사용하여 부팅할 상자가 아니라 LiveUSB를 생성하는 데 사용할 상자입니다.
- USB 드라이브 가져오기/만들기
- 부팅하려는 모든 ISO에 충분히 큰 크기
- 부팅 가능
- 가지다GRUB2 설치됨
- 원하는 ISO를 쉽게 지정된 위치에 배치하십시오.
- 편집하다
/boot/grub/grub.cfg
:- 전역 변수 @top(즉,
menuentry
s 위)을 설정합니다.root
menuentry
각 ISO에 대해 하나 이상의 를 만듭니다.
- 전역 변수 @top(즉,
주요 문제는 각 ISO에 대해 menuentry
올바르게 부팅할 파일을 하나 이상 생성한다는 것입니다. 이것은 간단해 보인다:
- ISO 설치:
- ISO의 구조를 확인하십시오. 해당
grub.cfg
,initrd*
,vmlinuz
(또는 GRUB 구성, 초기 RAMdisk 이미지 및 커널 이미지라고 하는 모든 것) 에 대한 경로를 가져옵니다 . grub.cfg
ISO 에서menuentry
- ISO의 구조를 확인하십시오. 해당
- 각각 만들어라
menuentry
- ISO 부팅 경로 설정
loopback
ISO를 사용하여 장치 만들기- ISO에 제공된 경로 대신 루프백 장치의 경로를 사용하십시오
grub.cfg
.initrd /casper/initrd.lz
->initrd (loop)/casper/initrd.lz
linux /live/vmlinuz
->linux (loop)/live/vmlinuz
- LiveUSB를 테스트하세요:
- 개발 호스트에 아직 설치되어 있는 동안:
grub-script-check
정신건강을 위해 :-) umount
개발 호스트에서- 각 테스트 호스트에 대해 다음을 수행합니다.
- 전원이 꺼진 테스트 호스트에 연결
- 전원 켜짐!
- 개발 호스트에 아직 설치되어 있는 동안:
질문
많은 ISO는 grub.cfg
"실제로" 부팅하기 전에 비디오를 구성하려고 합니다. 모두 약간씩 다르게 작동하므로 각 ISO에 대한 비디오 코드를 해당 menuentry
ISO에 넣습니다. 그러나 지금까지 내가 사용한 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.