![syslinux UEFI启动:根据硬件标识符自动选择启动选项](https://linux22.com/image/229052/syslinux%20UEFI%E5%90%AF%E5%8A%A8%EF%BC%9A%E6%A0%B9%E6%8D%AE%E7%A1%AC%E4%BB%B6%E6%A0%87%E8%AF%86%E7%AC%A6%E8%87%AA%E5%8A%A8%E9%80%89%E6%8B%A9%E5%90%AF%E5%8A%A8%E9%80%89%E9%A1%B9.png)
我从 USB 介质启动,并且使用 syslinux EFI 启动。
我在两台不同的笔记本电脑上启动相同的媒体,并且 syslinux.cfg 中有 2 个菜单选项,每台笔记本电脑一个。
目前,我必须为每台笔记本电脑手动选择正确的菜单选项。
有没有某种方法可以自动执行此操作,并syslinux
自动识别正在启动的笔记本电脑?也许基于一些唯一的硬件标识符?
我怎么能这样做呢?
这是我的EFI/BOOT/syslinux.cfg
:
DEFAULT menu.c32
PROMPT 0
MENU TITLE UEFI boot menu
MENU AUTOBOOT Booting AAA in # seconds
LABEL AAA
MENU LABEL AAA
KERNEL menu.c32
APPEND /AAA/menu
LABEL BBB
MENU LABEL BBB
KERNEL menu.c32
APPEND /BBB/menu
文件/AAA/menu
,/BBB/menu
然后为每台笔记本电脑提供正确的启动选项。
所以基本上,我需要在笔记本电脑 A 上自动启动/AAA/menu
,在笔记本电脑 B 上/BBB/menu
答案1
根据我在 arch wiki 上读到的内容:关联
我认为这是可能的,但很困难,使用包extlinux
自带的syslinux
,并链加载两次 syslinux。但我还没有测试过。
如果您必须为两台以上不同的计算机执行此操作,则工作量很大。因为您将需要 10 台不同的计算机,USB 驱动器上有 10 个不同的分区,每个分区都有内核和 initrd 的副本,以及一些 syslinux 文件。
每台笔记本电脑都必须具有 esp 启动分区:/dev/sda1
或相同的/dev/sdaX
.如果不是,这个方法就行不通。
以下是继续的方法:
1. 在笔记本A上安装extlinux:
在笔记本电脑 A 上,假设 esp 启动分区为 /dev/sda1:
mkdir ./mntefi
sudo mount /dev/sda1 ./mntefi
sudo mkdir ./mntefi/boot
sudo mkdir ./mntefi/boot/syslinux
# install extlinux:
sudo extlinux -i ./mntefi/boot/syslinux/
# copy *.c32 files:
sudo cp /usr/lib/syslinux/bios/*.c32 ./mntefi/boot/syslinux
创建文件./mntefi/boot/syslinux/syslinux.cfg
TIMEOUT 0
UI menu.c32
LABEL MAIN
COM32 chain.c32
APPEND hd1 3
该文件将链接到 USB 驱动器上的第三个分区(如果笔记本电脑 A 只有一个内部驱动器,则为 hd1),其中将包含笔记本电脑 A 的 syslinux.cfg。
2. 在 USB 驱动器上创建分区 3 (/dev/sdb3):
分区可以很小,只需要包含 syslinux 和内核以及 initrd 即可。
3. 在 USB 驱动器的分区 3 上安装 extlinux:
mkdir ./mnt3
sudo mount /dev/sdb3 ./mnt3
sudo mkdir ./mnt3/boot
sudo mkdir ./mnt3/boot/syslinux
# install extlinux:
sudo extlinux -i ./mnt3/boot/syslinux/
# copy *.c32 files:
sudo cp /usr/lib/syslinux/bios/*.c32 ./mnt3/boot/syslinux
创建文件./mnt3/boot/syslinux/syslinux.cfg
DEFAULT menu.c32
PROMPT 0
MENU TITLE UEFI boot menu
MENU AUTOBOOT Booting AAA in # seconds
LABEL AAA
MENU LABEL AAA
KERNEL menu.c32
APPEND /AAA/menu
该文件将显示笔记本电脑 A 的菜单,菜单文件位于分区 3 的目录中/AAA
。
在菜单文件中,内核必须具有以下参数:root=UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx rw
,以及 USB 驱动器上安装 linux 的分区的 UUID。
4. USB 驱动器的主 syslinux.cfg:
在安装 Linux 系统的 USB 驱动器上,假设在分区 /dev/sda2 上,创建一个文件EFI/BOOT/syslinux.cfg
:
TIMEOUT 0
UI menu.c32
LABEL MAIN
COM32 chain.c32
APPEND hd0 1
该文件将链接在笔记本电脑内部驱动器的 esp 启动分区上,假设它是笔记本电脑内部驱动器上的第一个分区。
它将始终链接在笔记本电脑内部驱动器的第一个分区上找到的 syslinux。
但也许 syslinux 从它启动的驱动器开始对驱动器进行编号,如果是这样,那么它需要附加hd1 1
而不是hd0 1
5. 对每台笔记本电脑重复步骤 1、2 和 3。
请注意,在步骤 1 中,syslinux.cfg 必须链接到步骤 2 中创建的新分区。