手工做一个 Ventory 类似物
前言
我想要自己做一个启动很多系统的U盘,Ventory使用ISO,很简单。但是这样就少了折腾的乐趣,所以我们现在自己做个类似的吧。
创建分区表
我们使用GPT分区表,毕竟我们后面的操作都是只能在支持UEFI的设备上运行。创建具体分区表的步奏是通用的,例如
1 | sudo parted /dev/sdx |
1 | GNU Parted 3.6 |
使用p打印分区表,一定要确认下是不是您要的盘!
1 | (parted) p |
1 | Model: KIOXIA TransMemory (scsi) |
1 | (parted) mktable |
输入yes您的数据就消失辣,所以一定要小心。
创建好了空的分区表,我们就可以创建一堆分区了,常见的样子就像上面的一样,>512M
的ESP分区,和若干个存放您的解压缩后的ISO的分区(可以先格式化为ext4),您可以以任何方式创建这些分区,包括GUI。
ESP
ESP分区最好是FAT32(因为所有人都这么说)我们可以用mkfs.vfat -F 32 /dev/sdx1
创建。
ESP分区还需要boot,esp
的flag
- 在
parted
中使用set
命令 - Partition number? 输入ESP分区的编号
- Flag to Invert? 输入
boot
,on
- New state? [on]/off? 输入
on
一般来讲加入boot
flag同时也会加上esp
,可以完成后使用p
检查是否正确。
装载镜像
解压镜像首先要下载下来,一般(指为了避免最极端的情况)对于非livecd需要3G分区,livecd需要10G分区。请在开始前先创建好分区,准备好iso。
使用dd复制镜像,请注意不要dd错了。这个过程可能会非常慢,请耐心等待。
sudo dd bs=4M if=ubuntu-23.10.1-desktop-amd64.iso of=/dev/sdx2 conv=fdatasync status=progress
GRUB
安装
我们使用一个gurb引导各个镜像中的grub,因此首先我们要挂载U盘的EFI分区
1 | sudo mkdir /mnt/usbefi |
然后再开始安装
sudo grub-install --target=x86_64-efi --efi-directory=/mnt/usbefi --bootloader-id=grub --removable --recheck
放置module
在你挂载好的ESP分区下,创建grub
目录,然后cd到该目录。
首先我们将所有可能的module复制过去
sudo cp -r /usr/lib/grub/x86_64-efi .
配置grub
配置在grub/grub.cfg
启动项
每一个启动项都类型下面的配置
--fs-uuid
后面的UUID请从您dd后的分区里找(例如Gnome Disks里就有)
chainloader
后EFI的文件遵循以下找法:
- 打开您的iso文件
- 找到efi/boot
- 有
grubx64.efi
就是它(多为debian系) - 再去找
bootx64.efi
,就是这个
1 | menuentry 'Alpine Linux' { |
其他选项
1 | menuentry "System shutdown" { |
常见问题
echo完就不动了:是不是有grubx64.efi
UEFI菜单里有多个启动项:本身每个ISO就能启动,选择第一个就是我们自制的grub\