我正在尝试设置一个服务器,以在 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在映像方面有些特殊。是否有特定的方法可以做到这一点?抱歉更新延迟。再次感谢您的帮助和评论时间。
Linux 内核已启动并运行,因此 GRUB 的工作已完成。下一步是让内核以及 initrd/initramfs 文件中包含的任何工具和脚本挂载实际的根文件系统,并让内核使用它。
您已为 NFS 根指定内核启动参数:
这意味着 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
。基本上,你应该能够安装它进行测试/验证
从任何允许挂载该 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
需要有如下条目:你必须跑步
exportfs -a
才能使其有效。那么你的
nfsroot=
选择应该是:和测试安装命令分别为:
由于根文件系统将使用 NFS 协议通过网络进行访问,因此 NFS 服务器上实际底层文件系统(btrfs 或其他)的类型基本上无关紧要,只要它支持 Unix 风格的文件所有权和权限即可。
顺便说一句,如果可以避免,请不要发布文本图片。对于前两张图片,这多少可以原谅,因为除非您已经熟悉串行控制台,否则以文本形式捕获启动输出可能很困难。但是对于您的第三张图片,这个借口就不适用了。
我们这里有几位知识渊博的人,他们有视力问题,因此文字图片对他们来说要么难以阅读,要么完全没有用。通过发布文字图片,您既选择不接受他们的建议,又使您的帖子对其他有视力问题的读者没有用。
我不会讲得那么详细,因为有些事情我真的不明白。但我会试着解释我做了什么让它工作,并可能为任何面临同样问题的人提供一些指导。
首先,确定是 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最终设置如下:
祝您好运,阅读愉快:)