在这里提问之前,我尝试在 SU/SE 和 Google 上搜索,但没有成功。这是我得到的最接近的东西。
基本上,我尝试执行以下操作:
- 创建一个大约 128MB 的磁盘映像;
- 创建一个 GPT;
- 在前 32MB 中创建一个 FAT32 分区(我将其称为 UEFI);
- 在剩余的字节中创建一个 FAT32 分区(我将其称为 SYSTEM);
- 在 UEFI 分区中创建以下子目录:/EFI/BOOT/;
- 复制子目录中的文件;
- 复制 SYSTEM 分区中的另一个文件。
这是我到目前为止所做的:
dd if=/dev/zero of=disk.img bs=1M count=128
parted disk.img
(parted) mktable gpt
(parted) mkpart primary fat32 2048s 65535s
(parted) mkpart primary fat32 65536s 100%
(parted) align-check optimal 1
(parted) align-check optimal 2
(parted) name 1 UEFI
(parted) name 2 SYSTEM
这是我的输出:
磁盘 disk.img:134MB 扇区大小(逻辑/物理):512B/512B 分区表: gpt 磁盘标志: 编号 起始 结束 大小 文件系统 名称 标志 1 1049kB 33,6MB 32,5MB UEFI msft数据 2 33,6MB 134MB 101MB 系统 msftdata
另一种方法是创建两个不同的分区,然后合并它们:
dd if=/dev/zero of=uefi.img bs=1M count=32 mformat -i uefi.img -v UEFI -f 1440 -c 1 :: mmd -i uefi.img ::/EFI mmd -i uefi.img ::/EFI/BOOT mcopy -i uefi.img BOOTX64.EFI ::/EFI/BOOT
dd if=/dev/zero of=system.img bs=1M count=100 mformat -i 系统.img -v UEFI -f 1440 -c 1 :: mcopy -i 系统.img myawesomeOS ::
在前一种情况下,我无法弄清楚为什么“文件系统”列为空(它应该显示 fat32),以及如何创建子目录和复制文件。
在后一种情况下,我无法为这两个图像创建正确的 FAT32 文件系统,如果我将 -F 附加到 mformat,我会得到
对于此 fat 大小来说,簇太少。请在 /etc/mtools.conf 或 .mtoolsrc 文件中选择一个 16 位 fat
如果我能做到这一点,我仍然不知道如何设置 GPT 并将两个图像合并到一个文件中。
我该如何实现这一点?任何帮助或提示都值得感激。
答案1
经过几个小时的努力,我自己解决了这个问题。为了以防万一,我将解决方案发布在这里:
# 创建一个 256MB 的空磁盘映像,创建它的 GPT,然后 # 两个分区:第一个大约 60MB,第二个填满 # 剩余的字节。两个分区都对齐。 dd if=/dev/zero of=disk.img bs=1M count=256 parted 磁盘映像 市场表 GPT mkpart 主 fat32 2048s 131071s mkpart 主要 fat32 131072s 100% 对齐检查最佳 1 对齐检查最佳 2 名称 1 UEFI 名称 2 系统 辞职 # 创建一个 33MB 的空磁盘映像。 dd if=/dev/zero of=uefi.img bs=1M count=33 # 将磁盘映像格式化为 FAT32 mkfs.vfat uefi.img -F 32 # 创建请求的子目录。 mmd -i uefi.img ::/EFI mmd -i uefi.img ::/EFI/BOOT # 复制启动文件。 mcopy -i uefi.img BOOTX64.EFI ::/EFI/BOOT # 创建一个 100MB 的空磁盘映像。 dd if=/dev/zero of=system.img bs=1M count=100 # 将磁盘映像格式化为 FAT32 mkfs.vfat 系统.img -F 32 # 复制操作系统文件。 mcopy -i 系统.img SYSTEM.EFI :: # 启用 kpartx 请求的内核模块,以防万一。 sudo modprobe dm-mod # 将 disk.img 中的两个分区映射并挂载到 /dev/mapper/loop0p1 和 #/dev/mapper/loop0p2 sudo kpartx -av 磁盘.img # 将 UEFI 分区复制到磁盘映像中。 sudo dd if=uefi.img of=/dev/mapper/loop0p1 bs=1M # 将 SYSTEM 分区复制到磁盘映像中。 sudo dd if=system.img of=/dev/mapper/loop0p2 bs=1M # 卸载两个分区 sudo kpartx-dv 磁盘.img