사용자 정의 ISO 부팅 UEFI를 사용하여 USB를 사용할 수 없는 이유는 무엇입니까?

사용자 정의 ISO 부팅 UEFI를 사용하여 USB를 사용할 수 없는 이유는 무엇입니까?

Bios 및 UEFI 모드에서 부팅할 수 있는 Ubuntu 18.04 기반 ISO를 만들려고 합니다. Bios 모드로 부팅했는데 UEFI 모드로 부팅하는 데 문제가 있습니다. USB 스틱에 구우면 ISO9660 USB에 UEFI 파티션이 생깁니다. UEFI 모드로 부팅하려고 하면 grub 프롬프트가 나타납니다.

fdisk -l의 결과

larry@larry-Satellite-C55-A:~/foxclone$ fdisk -l foxclone025-02.iso
Disk foxclone025-02.iso: 660 MiB, 692060160 bytes, 1351680 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x45d15306

Device              Boot Start     End Sectors  Size Id Type
foxclone025-02.iso1 *        0 1351679 1351680  660M  0 Empty
foxclone025-02.iso2        276    5203    4928  2.4M ef EFI (FAT-12/16/32)

EFI 파티션을 생성하는 방법은 다음과 같습니다.

#! /bin/sh

BOOT_IMG_DATA=$($HOME/foxclone/newiso -d)
BOOT_IMG=efi.img

mkdir -p $(dirname $BOOT_IMG)

truncate -s 4M $BOOT_IMG
mkfs.vfat $BOOT_IMG
mkdir -p $BOOT_IMG_DATA/efi/boot

grub-mkimage \
    -C xz \
    -O x86_64-efi \
    -p /boot/grub \
    -o $BOOT_IMG_DATA/efi/boot/bootx64.efi \
    boot linux search normal configfile \
    part_gpt btrfs fat iso9660 loopback \
    test keystatus gfxmenu regexp probe \
    efi_gop efi_uga all_video gfxterm font \
    echo read ls cat png jpeg halt reboot

mcopy -i $BOOT_IMG -s $BOOT_IMG_DATA/efi ::

iso를 빌드하는 방법은 다음과 같습니다.

#!/bin/bash

orig_iso="$HOME"/foxclone/foxclone025-01.iso
new_iso="$HOME"/foxclone/foxclone025-02.iso
new_files=$HOME/foxclone/newiso
mbr_template=isohdpfx.bin

xorriso -as mkisofs \
    -r -V 'Foxclone' \
    -o "$new_iso" \
    -J -J -joliet-long -cache-inodes \
    -isohybrid-mbr /usr/lib/ISOLINUX/isohdpfx.bin \
    -b isolinux/isolinux.bin \
    -c isolinux/boot.cat \
    -boot-load-size 4 -boot-info-table -no-emul-boot \
    -eltorito-alt-boot \
    -e --interval:appended_partition_2:all:: \
    -append_partition 2 0xef efi.img \
    -no-emul-boot -isohybrid-gpt-basdat \
    "$new_files"

덤프 결과

larry@larry-Satellite-C55-A:~/foxclone$ dumpet -i foxclone025-02.iso
Validation Entry:
    Header Indicator: 0x01 (Validation Entry)
    PlatformId: 0x00 (80x86)
    ID: ""
    Checksum: 0x55aa
    Key bytes: 0x55aa
Boot Catalog Default Entry:
    Entry is bootable
    Boot Media emulation type: no emulation
    Media load segment: 0x0 (0000:7c00)
    System type: 0 (0x00)
    Load Sectors: 4 (0x0004)
    Load LBA: 38 (0x00000026)
Section Header Entry:
    Header Indicator: 0x91 (Final Section Header Entry)
    PlatformId: 0xef (EFI)
    Section Entries: 1
    ID: ""
Boot Catalog Section Entry:
    Entry is bootable
    Boot Media emulation type: no emulation
    Media load address: 0 (0x0000)
    System type: 0 (0x00)
    Load Sectors: 8192 (0x2000)
    Load LBA: 275968 (0x00043600)

도움이 좀 됐으면 좋겠어요, 래리

답변1

잘못될 수 있는 미묘한 것들이 충분히 있어서 스크립트에서 완전히 잘못된 것을 볼 수 없습니다. 하지만 그렇다고 해서 다른 것이 없다면 훌륭한 내용을 확인하십시오.로드의 책주제에 아마도내 ISO 생성기 스크립트- 특정 작업에 비해 너무 복잡하지만(내 작업에는 여전히 너무 간단함) 거기서 중요한 것을 발견했을 수도 있습니다.

추신: 이 스크립트는 다음을 기반으로 합니다.다시 찾기(나에게 이것은 그 책들만큼 훌륭합니다.) 현재 grub 지원을 추가하려는 노력이 있지만 아직 구현되지 않았습니다.

그 동안 실제로 Ubuntu 18.04를 사용하지 않고 UEFI 부팅 기능(서명된 shim 포함)이 있는 사용자 지정 ISO만 필요한 경우가능한ALT에 관심이 있음MK 이미지, 위 스크립트의 일부이며mkimage 구성 파일이후 이미지 베이킹을 위한 배포 구성을 구축하는 프레임워크를 제공합니다(예:ALT 스타터 키트그것으로 만들어졌을 뿐만 아니라 우리의버전 9.0;파생 상품을 만드는 것은 매우 쉽고 기술적인 경향이 있지만 현재 대부분의 문서는 러시아어로 되어 있습니다.

뻔뻔한 플러그 죄송합니다. 저는 우연히 ALT Linux에서 UEFI를 지원하는 mp를 설계한 사람이므로 물어보지 않을 수 없었습니다. :-)

답변2

나는 이유를 이해하려고 노력하는 것을 좋아하지만, 일단 이해하면 "내 방식"을 알기 때문에 다른 사람들에게 작동하는 방법을 말하는 것을 싫어합니다. uefi로 부팅하면 grub의 mkimage인 grub에서 "찾고 있는 grub.cfg를 찾을 수 없습니다"라는 메시지만 표시될 가능성이 높습니다.

일반적으로 데비안(우분투라고도 함)에서 "임베디드 fat-efi 파티션"(오래 전 2012년 유명한 mjg59에 의해 시작됨)에는 grub.cfg(실제로는 내장된 grub.cfg의 (efi. img)는 다음 grug.cfg(필요에 따라 호출되는 "사용자 정의" "사용자" 최종 grub.cfg)를 찾을 위치를 알려줍니다. 하지만 이것은 isoimage의 grub.cfg(isofs에 있는 내용)여야 합니다. 트리 구조 - isotree /boot/grub/grub.cfg + 물론 완전한 grub 지원을 제공하는 grub 트리입니다. ) grub-mkimage의 -p /boot/grub 명령은 grub .cfg를 보기 위해 grub의 접두사 /boot/grub을 알려주지만 여전히 fat 공간에 있으므로 isotree 공간을 볼 이유가 없습니다! (무엇을 찾는 걸 좋아하시나요?)

grub-mkimage에는 iso 트리의 grub.cfg에 "접근"할 수 있도록 하는 모듈 지시문 -m memdisk.tar가 있는 memdisk가 필요합니다. memdisk는 iso 트리의 grub 구성을 찾고 읽는 지침이 포함된 tarfs입니다. 문서

이 모든 것을 설명하기 위해 "잠깐만"

1 "your" iso로 부팅한 후 grub 프롬프트에 들어가십시오. grub이 볼 수 있는 모든 디스크 드라이브를 보려면 "ls"를 입력하십시오. 그러면 "memdisk"가 표시되지 않습니다.

2 uefi 모드에서 (거의) 모든 우분투(의사) "iso" 이미지를 부팅합니다(의사는 pureiso가 아니라, 일명 isohybrid가 pureiso가 아니라는 뜻입니다). 메뉴에서 "try ubuntu...blabla"를 가져오고 grub의 콘솔에 "ESC"를 입력한 후 다음을 입력하세요. "ls"를 다시 입력하고 isoimage와 비교하세요.

grub> ls (memdisk)/ 마지막으로 이 tarfs 디스크 뒤에 무엇이 있는지 확인하십시오.

grub> cat(memdisk)/grub.cfg 또는 유사한(memdisk)/boot/grub/grub.cfg 파티션을 전환하고 iso 트리의 grub.cfg를 가져오는 방법을 확인합니다.

3 시도해 볼 수 있는 지름길: efi.img를 우분투의 efi.img로 바꾸십시오. 우분투에 내장된 grub.cfg에는 $isotree/.disk/[info mini-info]에 파일이 있어야 하므로 다음과 같은 것을 추가해야 합니다. mkdir $isotree/.disk && touch $isotree/.disk/info in isotree xorriso를 사용하여 iso를 빌드할 가능성이 높습니다. 작동하지만 배우기에는 좋지 않습니다.

4 마지막에 "-m memdsk" 명령을 사용하여 grub-mkimage를 다시 빌드하십시오. 여기서 "tar cf memdsk grub.cfg" grub.cfg는 우분투에서 수동으로 훔치는 것이 더 좋지만 직접 작성하는 것이 좋습니다.

5 uefi에서 USB의 ubuntu.iso 이미지를 행복하게 부팅하려면;

  Type ESC to get into grub console
  Check your isofs partition as hd0 (since you booton it) by
      grub>ls (hd0)/   this will reveal the isofs tree
  Chroot to isofs partition with
      grub>set root=(hd0)

표준 방식의 스위치 grub 구성 grub>configfile /boot/grub/grub.cfg

B grub-cmd "syslinux_configfile"을 사용하여 grub 구성을 전환합니다(보통 google_search에는 표시되지 않습니다!!!) grub>syslinux_configfile /isolinux/isolinux.cfg

  Observe and play (where is legacy-bios or uefi boot now ?)

That's it

왕지

바라보다https://sourceforge.net/projects/toysbox/files/Exo_on_grub-mkimage/

https://sourceforge.net/projects/toysbox/files/practice_on_bootx64.efi/Practices_on_bootx64.pdf/download

관련 정보