这对我有用,但可能是错误的:
首先,我创建一个disk.iso,上面有两个分区,一个EFI分区和一个SYSTEM分区,整个img将是1.4GB(100MB用于EFI分区,其余用于SYSTEM分区):
dd if=/dev/zero of=disk.iso bs=1M count=1400
然后我用 fdisk GPT Table 对 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
使用 losttup 从 disk.iso 循环挂载两个分区,以将两个分区格式化为所需的格式(EFI 为 fat16,SYSTEM 为 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 现在可以启动了。 Iso 使用 qemu-kvm 和 virt-manager 测试,作为 CDROM 介质插入。未经真实刻录磁盘测试!