我创建了一个实时Linux系统,我想创建一个能够引导uefi的iso文件,不需要旧的BIOS。
我有一个包含EFIBOOT文件的文件夹(包含Refind引导管理器和我的efi引导内核(Linux-Sytem.efi))
EFITBOOT
efi
├── boot
│ ├── bootx64.efi
│ └── refind.conf
└── gentoo
└── Linux-Sytem.efi
和一个包含系统映像的文件夹:
system/
└── Linux-Sytem.img
我的猜测是,我现在必须创建一个包含EFIBOOT结构的兼容efi(fat16 / 32)的efi.img。
然后,我必须以某种方式创建将efi.img和系统结构放在一起的iso ...
我看过各种使用grub的教程,但是它们都使用双重引导选项(用于uefi和bios)...
没有grub工具和纯uefi怎么办?
(我非常肯定,如果将EFIBOOT和System结构复制到正确的分区/格式化的USB驱动器中,则可以正常工作。
答案 0 :(得分:0)
这对我有用,但可能是错误的:
首先,我创建一个disk.iso,上面有两个分区,一个EFI分区和一个SYSTEM分区,整个img为1.4GB(EFI分区为100MB,SYSTEM分区为其余):
dd if=/dev/zero of=disk.iso bs=1M count=1400
然后我用fdisk GPT表对disk.iso文件进行分区:
fdisk disk.iso
# press
g # create GPT-Table
n # new partition
1 # partition number
ENTER # select default
+100M # set size to 100MB
t # set partition type
1 # to EFI SYSTEM
n # new partition
ENTER # default partition number
ENTER # default 1st sector
ENTER # default last sector
w # write changes to file and exit
然后显示分区布局:
fdisk -l disk.iso
Disk disk.iso: 1.4 GiB, 1468006400 bytes, 2867200 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: gpt
Disk identifier: D7DD43FA-30B6-2445-B34C-F4DB7B5D6F37
Device Start End Sectors Size Type
disk.iso1 2048 206847 204800 100M EFI System
disk.iso2 206848 2867166 2660319 1.3G Linux filesystem
使用lostup从disk.iso循环挂载两个分区,以将两个分区格式化为所需格式(对于EFI为fat16,对于系统为ext4),并在需要时为其分配标签...使用fdisk START END值乘以扇区大小以设置边界:
losetup --offset $((512*2048)) --sizelimit $((512*206847)) --show --find disk.iso
# /dev/loop0
losetup --offset $((512*206848)) --sizelimit $((512*2867166)) --show --find disk.iso
# /dev/loop1
mkfs.fat -F16 /dev/loop0
mkfs.ext4 /dev/loop1
tune2fs -L "SYSTEM" /dev/loop1 # assign label SYSTEM to SYSTEM-Partition
安装两个分区并将相应的内容复制到其中:
mkdir /mnt/p1 /mnt/p2
mount /dev/loop0 /mnt/p1/
mount /dev/loop1 /mnt/p2/
cp -a efi /mnt/p1/
cp -a system/* /mnt/p2/
umount /mnt/p1 /mnt/p2
卸载两个循环设备:
losetup -d /dev/loop0 /dev/loop1
disk.iso现在可以启动了。已使用qemu-kvm和virt-manager(作为CDROM介质插入)进行了ISO测试。没有经过实际刻录的磁盘测试!