目前我正在创建一个磁盘映像文件(使用 mtools 和 parted),其中包括 grub、文件系统并启动 linux 内核。
我使用的 grub.cfg 如下所示:
insmod part_gpt
menuentry "test image" {
linux (hd0,gpt1)/bzImage.efi root=/dev/sda1 console=tty console=ttyS0,115200 primary
initrd (hd0,gpt1)/fs.cpio.gz
}
但这始终假设设备 (hd0,gpt1) 是正确的设备。这就是为什么我想在 img 文件中添加一个 UUID,以便启动设备始终相同。
如何将 UUID 添加到分区表?我无法使用 root 权限。
答案1
GPT 分区表已经有一个。您的根文件系统也有一个。运行blkid disk.img
以列出它们 – 它会将文件系统 UUID 显示为UUID=
并将分区 UUID 显示为PARTUUID=
。
不幸的是,目前的 GRUB 版本尚不支持使用分区 UUID。添加支持后,它将在search.partuuid
命令下可用。
同时,您可能必须使用文件系统 UUID:
search.fs_uuid --no-floppy --set=root e9ad79d7-...-e3c445c7f4e9
现在您可以引用路径作为($root)/bzImage.efi
或简单地通过/bzImage.efi
因为 $root 自动应用于所有路径引用。
不要忘记root=
相应地更新 Linux 参数。使用 initramfs 时,它需要是 initramfs 能够理解的格式。(当不是使用 initramfs,唯一的选择是root=PARTUUID=
。)