我正在尝试通过 UEFI 网络启动来启动临时 Linux,我需要 32 位 x86。我知道的唯一 32 位实时发行版是 RescueCD,它似乎没有内核中的 EFI 存根可供启动。我尝试通过我习惯使用的 iPXE efi 加载程序来启动它。有没有办法从 iPXE 或其他可网络启动的引导加载程序启动非 EFI 内核?或者也许有一些我错过的 32 位实时 Linux 发行版?
答案1
不清楚你为什么要这样做,让我猜一下。
如果您的 32 位硬件不支持 64 位,那么 bios 可能也不支持 UEFI,或者它对 UEFI 的支持可能太旧以至于有缺陷。它可能使用 ipxe 启动,我已经让它工作了,但是当我使用它时,由于 32 位 UEFI 固件中存在各种缺陷,我必须支持 3 种不同的加载实时磁盘的方法。此外,使用 ipxe 进行 pxe 启动的最简单方法是将整个映像加载到内存中,而 32 位硬件通常没有足够的内存来执行此操作。从 USB 或 CDROM 启动要容易得多。
至于您可以使用哪种实时映像,Ubuntu 18.04 支持 32 位,尽管它删除了某些 32 位硬件的驱动程序,因此您可能需要 Ubuntu 16.04。旧版本的 CentOS 也支持 32 位,但我不确定您是否需要 CentOS 6 或 5,除非进行一些研究。(评论建议添加注释:救援磁盘更可能有当前的 32 位版本,也可能更小,这将使加载到内存更容易。)
如果您尝试在 64 位硬件上安装 32 位映像,我的建议是不要这样做——尽管这仍然比在 32 位硬件上容易得多。大概您这样做是为了运行 32 位二进制文件。以下是替代方案:
- 将 32 位兼容库加载到 64 位 Linux 中。一旦满足了所有库依赖关系,它应该可以很好地运行二进制文件。
- 使用支持 32 位的旧版 Linux 构建容器。任何容器引擎都应该可以运行,包括 Docker 或 Apptainer 等。
- 使用像 vmware 或 qemu 这样的 VM 模拟器并在 VM 内运行旧的操作系统。
如果您必须使用较旧的操作系统,则运行容器或虚拟机比在裸机上运行更可取,因为您可以使用主机来为较旧的操作系统设置防火墙,而您必须使用的(可能未打补丁的)较旧操作系统中的错误不会成为大问题。此外,您将充分利用 64 位硬件,而裸机 32 位操作系统在较新的硬件上几乎无法正常工作。