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
    • 最新
    • 标签
主页 / server / 问题 / 610727
Accepted
Grigory
Grigory
Asked: 2014-07-08 11:27:27 +0800 CST2014-07-08 11:27:27 +0800 CST 2014-07-08 11:27:27 +0800 CST

这个内核恐慌的原因是什么?

  • 772

我刚刚在 Ubuntu 14 上设置了一个 PXE 引导服务器 - 运行内核 3.13.0-30-generic - 如在 Supermicro X9DRFF 硬件上的https://help.ubuntu.com/community/DisklessUbuntuHowto所述。

我只能通过 KVM 远程访问客户端服务器。客户端上的启动过程顺利,但我得到内核恐慌。

是否有可能确定此内核恐慌的原因?

在此处输入图像描述

ubuntu
  • 5 5 个回答
  • 9602 Views

5 个回答

  • Voted
  1. Michael Hampton
    2014-07-08T11:44:19+08:002014-07-08T11:44:19+08:00

    一些输出丢失了,因为它已经滚出了屏幕,但可以看到内核在mount_root(). 这意味着它在挂载您作为根文件系统传递的任何内容时存在问题。检查以确保您已将正确的参数传递给内核以从它应该从其引导的任何媒体引导。

    • 3
  2. Matthew Ife
    2014-07-08T12:07:07+08:002014-07-08T12:07:07+08:00

    这实际上是可能的。您需要该特定发行版的调试内核。

    在单独的主机上。

    • 下载该内核的 kebug 版本。它将包含一个vmlinux文件。

    在 gdb 中打开 vmlinux 文件。

    $ gdb /usr/lib/debug/lib/modules/3.14.9-200.fc20.x86_64/vmlinux
    GNU gdb (GDB) Fedora 7.7.1-13.fc20
    Copyright (C) 2014 Free Software Foundation, Inc.
    License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
    This is free software: you are free to change and redistribute it.
    There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
    and "show warranty" for details.
    This GDB was configured as "x86_64-redhat-linux-gnu".
    Type "show configuration" for configuration details.
    For bug reporting instructions, please see:
    <http://www.gnu.org/software/gdb/bugs/>.
    Find the GDB manual and other documentation resources online at:
    <http://www.gnu.org/software/gdb/documentation/>.
    For help, type "help".
    Type "apropos word" to search for commands related to "word"...
    Reading symbols from /usr/lib/debug/lib/modules/3.14.9-200.fc20.x86_64/vmlinux...done.
    (gdb) 
    

    从堆栈输出来看,我们可以看到在恐慌之前内核所在的最有用的函数是mount_block_root.

    为了确定我们失败的地方,我们需要将函数名和偏移量输入到 GDB 中。这是通过取消引用函数的地址加上偏移量来完成的。堆栈跟踪提供偏移量作为函数之后的第一个值。

    IEmount_block_root+0x225表示(我在“mount_block_root”加上 549 个字节(十六进制转换)。

    最后,我们告诉 GDB 打印该区域的源代码。在我的 Linux 系统中,这会导致以下结果

    (gdb) list *(mount_block_root+0x225)
    0xffffffff81d26513 is in mount_block_root (init/do_mounts.c:422).
    417                "explicit textual name for \"root=\" boot option.\n");
    418 #endif
    419         panic("VFS: Unable to mount root fs on %s", b);
    420     }
    421 
    422     printk("List of all partitions:\n");
    423     printk_all_partitions();
    424     printk("No filesystem could mount root, tried: ");
    425     for (p = fs_names; *p; p += strlen(p)+1)
    426         printk(" %s", p);
    

    从这里我们可以准确地知道我们在坠机点的位置。注意我的内核不是你的内核,所以偏移量可能是关闭的。基于这两个内核几乎相同的可能性,我敢打赌,真正的恐慌实际上发生在第 419 行,而不是第 422 行(如建议的那样)。

    进一步阅读代码略微表明它无法打开指定的块设备 - 但如果没有崩溃转储,则无法从信息中判断原因。所以它可能: -

    • 您不想安装块设备(可能)。
    • 您指定了一个不存在的块设备地址(或分区)。
    • 您的 initrd,在 initrd 中不包含正确的文件系统模块来挂载它。
    • 磁盘上没有文件系统。
    • 文件系统的超级块不在该位置的开头。

    从您参考的链接开始,它建议您尝试以 NFS 作为根进行挂载,在这种情况下,您根本不应该最终登陆此功能。在这种情况下:

    • 您的内核命令行包含多个根指令。
    • 您输入了错误的 NFS 地址,因此无法正确解析它以进入您想要的实际功能(mount_nfs_root)。

    因此,总体而言,根据问题中的信息,我认为您遗漏了某些内容或打错了字。

    • 3
  3. Pat
    2014-07-10T05:40:11+08:002014-07-10T05:40:11+08:00
    1. 引用的链接没有 PXE 引导 Lubuntu 14.04 所需的完整参数集(附加行)。
    2. 内核恐慌 => 由于 1) 无法正确执行挂载。

    您可以在这里看到 Serva 如何解决正确的行(我与 Serva 开发有关) http://vercot.com/~serva/an/NonWindowsPXE3.html

    Serva 使用 CIFS 共享而不是 NFS,但如果需要,您可以很好地使用 NFS。当然你不需要使用Serva;您可以在自己的 PXE 服务器中使用它的参数

    [PXESERVA_MENU_ENTRY]
    asset    = Lubuntu 14.04 Desktop Live
    platform = amd64
    kernel   = NWA_PXE/$HEAD_DIR$/casper/vmlinuz
    append   = showmounts toram root=/dev/cifs initrd=NWA_PXE/$HEAD_DIR$/casper/initrd.lz,NWA_PXE/$HEAD_DIR$/casper/INITRD_N11.GZ boot=casper netboot=cifs nfsroot=//$IP_BSRV$/NWA_PXE_SHARE/$HEAD_DIR$ NFSOPTS=-ouser=serva,pass=avres,ro ip=dhcp ro
    

    请考虑

    1. Ubunu/Lubuntu 有一个错误,如果您使用 CIFS 进行 PXE 引导,您必须添加互补的 initrd INITRD_N11.GZ(可从 Serva 页面免费获得)
    2. 如果您安装的是 64 位版本,则之前的参数要求您将文件 \casper\vmlinuz.efi 重命名为 \casper\vmlinuz
    • 1
  4. Zack
    2014-08-13T00:59:58+08:002014-08-13T00:59:58+08:00

    我今天在 Ubuntu 14.04 上遇到了同样的问题,而且非常令人讨厌,所以我想在这里与全世界分享我找到的解决方案......

    我使用 pxelinux.0,NFS 用于根文件系统,TFTP 用于提供内核映像和 initramfs。正如@MatthewIfe 上面提到的,查看堆栈回溯和正在调用的函数清楚地表明此问题发生在与块设备相关的函数中,并且从未调用 mount_nfs_root。

    所以我转向了 TFTP 日志,正如这篇文章的作者所指出的那样,并注意到我的配置文件被命名为:

    tftproot/pxelinux.cfg/default
    

    它也看起来像这样:

    DEFAULT vmlinuz
    LABEL Ubuntu 14.04 Blah Blah
    KERNEL vmlinuz
    APPEND initrd=initrd root=/dev/nfs nfsroot=192.168.1.123:/path/to/exportfs
    

    我的 iPXE 加载程序也在寻找其他文件,就像在帖子中一样:

    pxelinux.cfg/40709cda-a8e0-d411-8c6c-001e68e210ae
    pxelinux.cfg/01-00-1e-68-e2-10-ae
    pxelinux.cfg/C0A8010E
    pxelinux.cfg/C0A8010
    pxelinux.cfg/C0A801
    pxelinux.cfg/C0A80
    pxelinux.cfg/C0A8
    pxelinux.cfg/C0A
    pxelinux.cfg/C0
    pxelinux.cfg/C
    pxelinux.cfg/default
    

    但是我在initrd的日志中没有看到被拉下的记录。所以我决定测试一下我的 APPEND 行是否正常工作。所以我再次添加了一个“panic=10”,就像链接的帖子一样。它似乎不起作用。所以我的内核配置行指令都没有被使用!凭直觉,我决定做两件事——简化我的文件以匹配帖子

    DEFAULT linux
    LABEL linux
    KERNEL vmlinuz
    APPEND root=/dev/nfs nfsroot=192.168.1.123:/path/to/exportfs initrd=initrd panic=10
    

    并将其重命名为

    tftproot/pxelinux.cfg/01-00-1e-68-e2-10-ae
    

    瞧——initrd 被拉下,不再出现内核恐慌,并且 NFS 使用默认/通用内核和 initramfs 正确安装为根文件系统。我确定我可以将标签改回来等。我认为实际问题在于配置文件的命名以及 pxelinux.0 的预期。

    • 1
  5. Best Answer
    Grigory
    2014-07-20T10:34:02+08:002014-07-20T10:34:02+08:00

    我成功了。问题变得非常简单。我给 PXE 客户端一个 3.13.0-30 内核。但是我在具有 3.13.0-24 内核的机器上运行 mkinitramfs。

    我开始为 PXE 客户端提供 3.13.0-24 内核并且它工作。

    • 0

相关问题

  • 无法通过 Ubuntu VPN 访问外部网络

  • ubuntu apt-get upgrade - 如何在 shell 中单击确定?

  • VirtualBox 上 Ubuntu 的访客优化技巧 [关闭]

  • 外部硬盘上的 virtualbox 虚拟硬盘驱动器(Vista 主机上的 ubuntu 客户机)

  • 如何在 Ubuntu 上挂载 LVM 分区?

Sidebar

Stats

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

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

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

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve