AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 789898
Accepted
Gabriel
Gabriel
Asked: 2025-01-21 03:55:26 +0800 CST2025-01-21 03:55:26 +0800 CST 2025-01-21 03:55:26 +0800 CST

启动可用的 Linux 映像 UEFI/PXE/GRUB

  • 772

我正在尝试设置一个服务器,以在 UEFI 环境和 GRUB2 上通过 PXE 启动 opensuse-15.5。我发现这个适用于 Suse 的教程效果很好。我有一个客户端获取 IP 地址,从同一台机器上的 TFTP 下载一些文件,并且我还设置了一个 NFS 服务器。

问题是,我发现的每个教程似乎都专注于在客户端安装新操作系统,而这不是我所需要的。我真正需要的是加载一个非常基本的、极简的操作系统,以便能够从终端运行一些命令。没有别的。我不需要加载 Live 映像或运行安装程序。

按照教程中的说明,我遇到了客户端无法连接到存储库以开始安装操作系统的情况。之后,我所做的是将initrd和linux映像替换为从尝试启动的同一客户端中的操作系统安装中获得的映像。此外,我在客户端(同一安装)中创建了根文件系统的映像并将其放置在服务器中,以便可以通过 NFS 访问它。在此之后,结果是客户端加载了initrd,然后是linux,但它在完成之前就停止了,因为它(可能)正在尝试设置显卡。该行提到了drm 和 i915(抱歉,我现在没有客户端,但我明天会更新正确的消息)。

我甚至不确定我必须加载哪个 Linux 映像以及我必须传递给 GRUB 的参数才能使一切正常工作。我一直试图从 GRUB 手册和其他来源中了解,但我的问题多于确定性。有人能告诉我……:我应该将哪些命令添加到grub.cfg(以及我应该删除哪些命令)?我应该使用哪个 Linux 映像?以及可能想到的任何信息来源?

非常感谢您抽出时间。

加布斯。

编辑:崩溃点与 graphics/drm/i915 无关。显示的最后一条消息(大约一分钟)将显示graphics/drm/i915,但问题实际上紧接着出现,在dracut initqueue hook处。据我所知,在使用dd制作根分区映像时,它会以某种方式开始寻找已安装并包含在fstab中的内存条。

重新制作图像后(这次通过 NFS 将其发送到服务器),我可以看到问题已解决(见图)在此处输入图片描述

现在的问题(如下图所示)处于切换根阶段。我真的不知道这是什么意思,但我会做一些研究。 在此处输入图片描述

下一张图片是net/grub.cfg。我编辑了这个文件,删除了install和instsys命令,因为我认为它们是无关紧要的(因为我不是要安装操作系统)。我还尝试了这个grub.cfg,没有root和nfsroot命令(根据我的理解),这两个命令将使用硬盘中的文件系统,而不是服务器中的文件系统,整个设置似乎可以正常工作。只有当它需要从 NFS 服务器获取根文件系统时,我才会收到第二张图片中的错误。抱歉,第三张图片很模糊。 在此处输入图片描述

此时,我猜想文件系统有问题。我用dd制作了映像,将其移动到服务器,然后使用mount -o loop /image /srv/tftpboot/openSUSE-XXX/rootfs挂载它。我读到对分区进行映像与对整个磁盘进行映像是不一样的。此外,btrfs在映像方面有些特殊。是否有特定的方法可以做到这一点?抱歉更新延迟。再次感谢您的帮助和评论时间。

grub2
  • 2 2 个回答
  • 71 Views

2 个回答

  • Voted
  1. telcoM
    2025-01-23T22:47:29+08:002025-01-23T22:47:29+08:00

    Linux 内核已启动并运行,因此 GRUB 的工作已完成。下一步是让内核以及 initrd/initramfs 文件中包含的任何工具和脚本挂载实际的根文件系统,并让内核使用它。

    您已为 NFS 根指定内核启动参数:

    root=/dev/nfs nfsroot=192.168.20.1:openSUSE-Leap-15.5-x86_64/rootfs
    

    这意味着 192.168.20.1 系统必须具有有效的根目录结构,才能通过 NFS 进行共享。如果使用 NFSv4,则可能必须位于 下/srv,例如/srv/openSuSE-Leap-15.5-x86_64/rootfs/,除非您以非默认方式配置了 NFSv4 共享。对于 NFSv3,必须位于 ,/openSuSE-Leap-15.5-x86_64/rootfs/并以此形式导出到/etc/exports。

    基本上,你应该能够安装它进行测试/验证

    mount 192.168.20.1:openSUSE-Leap-15.5-x86_64/rootfs /mnt
    

    从任何允许挂载该 NFS 共享的 Linux 或其他现代类 Unix 计算机(如/etc/exports主机 192.168.20.1 上的选项所示)。成功运行该命令后,您应该会看到目录,如/mnt/bin/、/mnt/lib/、/mnt/sbin/和 ,/mnt/usr/其中/mnt/var/包含预期内容。还应该有/mnt/dev/、/mnt/proc/和 处的空目录/mnt/sys/,可分别用作虚拟 devtmpfs、procfs 和 sysfs 文件系统的挂载点。

    如果您已经剥离了目录树,则标准 SuSE initramfs/initrd 将/usr/lib/systemd/systemd在切换到实际根文件系统(在您的情况下是 NFS 共享)后尝试运行。因此,如果您运行了mount上面列出的测试命令,那么/mnt/usr/lib/systemd/systemd最好在那里,否则转换到 NFS 挂载的根文件系统将失败,就像它现在为您所做的一样。

    但您实际上已将文件系统映像挂载到/srv/tftpboot/openSUSE-XXX/rootfs,因此您/etc/exports需要有如下条目:

    /srv/tftpboot/openSUSE-XXX/rootfs    *(rw,no_root_squash)
    

    你必须跑步exportfs -a才能使其有效。

    那么你的nfsroot=选择应该是:

    nfsroot=192.168.20.1:/srv/tftpboot/openSUSE-XXX/rootfs
    

    和测试安装命令分别为:

    mount 192.168.20.1:/srv/tftpboot/openSUSE-XXX/rootfs /mnt
    

    由于根文件系统将使用 NFS 协议通过网络进行访问,因此 NFS 服务器上实际底层文件系统(btrfs 或其他)的类型基本上无关紧要,只要它支持 Unix 风格的文件所有权和权限即可。


    顺便说一句,如果可以避免,请不要发布文本图片。对于前两张图片,这多少可以原谅,因为除非您已经熟悉串行控制台,否则以文本形式捕获启动输出可能很困难。但是对于您的第三张图片,这个借口就不适用了。

    我们这里有几位知识渊博的人,他们有视力问题,因此文字图片对他们来说要么难以阅读,要么完全没有用。通过发布文字图片,您既选择不接受他们的建议,又使您的帖子对其他有视力问题的读者没有用。

    • 0
  2. Best Answer
    Gabriel
    2025-02-21T06:18:36+08:002025-02-21T06:18:36+08:00

    我不会讲得那么详细,因为有些事情我真的不明白。但我会试着解释我做了什么让它工作,并可能为任何面临同样问题的人提供一些指导。

    首先,确定是 BIOS 上的 PXE 还是 UEFI 很重要。据我所知,严格来说,后者并不存在,或者叫法不同。对于不了解这方面知识的人来说,互联网上的文章可能会误导你。就我而言,引导加载程序是 GRUB。根据您实际使用的是 BIOS 还是 UEFI,不仅 GRUB 所需的文件不同,而且目录结构、名称和文件扩展名也不同。

    SUSE / OpenSUSE 有一些教程和软件包,使服务器的配置变得非常简单。当您需要决定需要哪种类型的引导时,问题就出现了。我发现的大多数教程都侧重于为安装操作系统而进行的引导,但如果您需要的只是引导无盘机器 - 可能只是运行几个命令 - 您不会对系统在完成操作系统加载后运行安装程序感兴趣。这是我的情况。

    一旦您能够调用 GRUB,棘手的部分就有两个:

    • 首先,您需要找到一个可以协同工作的内核映像、initrd 和根文件系统。我的错误是认为只需从工作安装中复制前两个文件,然后制作一个要通过 NFS 挂载的根文件系统映像(在同一个安装中),就足以通过网络启动。但事实并非如此。

    • 二、从GRUB加载时需要向内核传递哪些参数。

    解决方案:正如我之前提到的,决定要引导的系统类型至关重要。了解不同选项之间的差异是必须的。从 SUSE 的文档网站来看,KIWI-NG是一款软件,只需几个步骤即可轻松创建内核映像、initrd 和根文件系统。它使用一个 XML 文件来配置构建过程。文档解释得很清楚,而且是最新的。从那里,很容易找出您需要的系统类型以及如何创建它。还有一些已经配置好并准备构建的示例。构建过程的结果是一个所选类型的文件系统,包含您通过网络引导所需的所有内容。包括内核和 initrd。由于 KIWI-NG 使用 Dracut 创建 initrd,因此需要将 dracut 命令行的一些参数添加到 GRUB 中的内核行中。这取决于您尝试引导的系统类型。我建议阅读一些 Dracut,但不要将其作为参考。我在论坛上找到了我需要的选项,因为我发现很难理解 Dracut 的文档。

    Mi最终设置如下:

    • DHCP 服务器: dhcpd.conf 中的选项 93、next-server和filename选项(除了设置 DHCP 服务器的所有最低要求之外)。
    • TFTP 服务器:下载引导加载程序文件。在我的情况下,是bootx64.efi和grub.cfg。内核、initrd 和根文件系统也是从 TFTP 服务器加载的 - 至少在我的配置中是这样。有一个选项可以通过以太网上的 ATA 加载文件系统,但我没有使用它。

    祝您好运,阅读愉快:)

    • 0

相关问题

  • 无法在 UEFI 中启动实时 Linux 多重引导 USB

  • grub2-mkconfig 没有生成正确的挂载路径(以及如何摆脱不再使用的额外内核?)

  • 如何在 debian 上找到内核崩溃日志

  • Ctrl + C 在 Linux 上的单用户模式下不起作用

  • GRUB 配置以识别同一 Linux 发行版的不同桌面环境(安装)

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve