カスタム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ジェネレータスクリプト- 特定の作業に比べて複雑すぎますが(私の作業にはまだ簡単すぎる)、そこで重要なことを発見したかもしれません。

PS:このスクリプトは以下に基づいています。再検索(私にとって、これはその本と同じくらい優れています。)現在、グラブサポートを追加しようとしていますが、まだ実装されていません。

その間、実際にUbuntu 18.04を使用せずにUEFIブート機能(署名付きshimを含む)を持つカスタムISOのみが必要な場合可能ALTに興味があるMK画像、上記のスクリプトの一部であり、mkimage 構成ファイルその後、画像ベーキング用の展開構成を構築するためのフレームワークを提供します(例:ALTスターターキットそれで作られただけでなく、私たちのバージョン 9.0;デリバティブを作成するのは非常に簡単で技術的な傾向がありますが、現在、ほとんどの文書はロシア語です。

恥ずかしいプラグ申し訳ありません。私は偶然にALT LinuxでUEFIをサポートするmpを設計した人なので、尋ねる必要はありませんでした。 :-)

答え2

私は理由を理解しようとするのが好きですが、一度理解すると「私のやり方」を知っているので、他の人にどのように機能するかを言うのが嫌いです。 uefi で起動すると、grub の mkimage である grub で「探している grub.cfg が見つかりません」というメッセージだけが表示される可能性が高くなります。

通常、Debian(Ubuntuとも呼ばれます)では、「組み込みfat-efiパーティション」(2012年に有名なmjg59で始まりました)では、grub.cfg(実際には組み込まれたgrub.cfgの(efi.img)は次のgrug.cfgです。 (必要に応じて呼び出される「ユーザー定義」「ユーザー」最終 grub.cfg) を探す場所を知らせますが、これは isoimage の grub.cfg (isofs にある内容) でなければなりません。 grub.cfg + もちろん、完全なgrubサポートを提供するgrubツリーです。スペースを見る理由はありません! (何を探すのが好きですか?)

grub-mkimageには、isoツリーのgrub.cfgに「アクセス」できるようにするモジュールディレクティブ-m memdisk.tarを持つmemdiskが必要です。 memdiskは、isoツリーのgrub構成を見つけて読み取るための指示を含むtarfsです。文書

これらすべてを説明するために「ちょっと待って」

1 "your" isoで起動したら、grubプロンプトに入ります。 grubが表示できるすべてのディスクドライブを表示するには、「ls」と入力します。すると、「memdisk」は表示されません。

2 uefiモードで(ほぼ)すべてのUbuntu(医師)「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をUbuntuのefi.imgに置き換えます。 Ubuntuに組み込まれている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はUbuntuから手動で盗む方が良いですが、自分で書くことをお勧めします。

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

関連情報