我想知道,我配置了一个 USB 密钥来加载 linux这边走。
它工作得很好,但是我需要手动配置该grub.cfg
文件,使其看起来像:
insmod loopback
insmod iso9660
menuentry 'XUbuntu 16.04 "Xenial Xerus" -- amd64' {
set isofile="/linux-iso/xubuntu-16.04.1-desktop-amd64.iso"
search --no-floppy --set -f $isofile
loopback loop $isofile
linux (loop)/casper/vmlinuz.efi locale=fr_FR bootkbd=fr console-setup/layoutcode=fr iso-scan/filename=$isofile boot=casper persistent file=/cdrom/preseed/ubuntu.seed noprompt ro quiet splash noeject --
initrd (loop)/casper/initrd.lz
}
menuentry 'Debian 9.3.0 amd64 netinst' {
set isofile="/linux-iso/debian-9.3.0-amd64-netinst.iso"
search --no-floppy --set -f $isofile
loopback loop $isofile
linux (loop)/install.amd/vmlinuz boot=live config findiso=$isofile
initrd (loop)/install.amd/initrd.gz
}
正如您所看到的,大多数代码是相同的,除了加载内核的 linux 之外linux
:initrd
有时文件位于/install.amd
,有时位于initrd.gz
,有时initrd.lz
......而且我什至没有提到内核的不同选项。相当混乱。
问题是,在现实生活中,如果我只是dd
在 U 盘上创建一个 ISO,系统就可以在它上启动,而无需任何其他信息。所以我猜想,有一种方法可以恢复有关内核的信息以自动加载...是否可以将其实现到 grub 中,以便我可以在最好的情况下将一堆信息放入我的文件夹.iso
中/linux-iso
,让 grub 自己找到要加载的内核和选项?
谢谢你!
注:我愿意不是想要一个答案告诉我使用这个或这个软件来构建我的 USB 记忆棒,我想自己实现它。
答案1
如果我只是在 U 盘上执行 dd 操作,系统就可以在 U 盘上启动,无需任何其他信息。
这是可能的,因为 ISO 映像已准备好isohybrid
或等效地不仅包括 CD/DVD 式引导加载程序,还包括硬盘式引导加载程序(或引导加载程序:一个用于传统 BIOS+MBR 引导,另一个用于 UEFI)目的是dd
将该 ISO 映像复制到 USB 记忆棒上。硬盘样式引导加载程序的配置将包括该 ISO 映像中使用的特定路径和引导选项。
请参见:http://www.syslinux.org/wiki/index.php?title=Isohybrid
您可以编写一个脚本来从每个 ISO 映像中查找通用 ISOLINUX 引导加载程序配置文件,从那里读取相应的linux
行initrd
,然后组装一个涵盖多个 ISO 的引导加载程序配置文件。但是,在准备多 ISO USB 记忆棒时,这样的脚本更容易实现在功能齐全的操作系统中运行,而不是在实际的引导过程中运行。