从目录创建纯uefi可引导iso

时间:2019-08-07 07:34:57

标签: boot iso uefi

我创建了一个实时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驱动器中,则可以正常工作。

1 个答案:

答案 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测试。没有经过实际刻录的磁盘测试!

相关问题