我们有一台 CentOS 5.3 x64 服务器,默认情况下运行内核版本 2.6.18-164.11.1,我们正尝试将该机器升级到 2.6.31.12。驱动器是 LVM +ext3,我遇到的问题是,当我升级内核并尝试从它启动时,无论我使用哪个版本的内核,在启动过程结束时都会出现未找到 /dev/root 的情况,内核会出现崩溃,然后重新启动。
我正在按照说明安装内核这doc。我尝试了“centOS 方式”,使用 make rpm 然后安装它。我更新了我的 mkinitrd。这个问题最有趣的部分是,它太令人沮丧了,我决定尝试在没有 LVM 的相同机器上全新安装 centos,结果完全一样。升级内核后,我得到 /dev/root not found。有人知道如何修复这个问题吗,或者哪些信息与修复它有关?我现在愿意尝试任何方法。
关于这个问题还有一件有趣的事情是,在新版本的内核中,在启动过程中它会抱怨 dm-mapper 启动了两次,然后立即出现恐慌。我尝试过其他内核版本,结果是一样的。我在这里遗漏了什么?
如果您需要更多文件,请直接询问。
Linux cg 2.6.18-164.11.1.el5 #1 SMP Wed Jan 20 07:32:21 EST 2010 x86_64 x86_64 x86_64 GNU/Linux
/dev/VolGroup00/LogVol00 / ext3 defaults 1 1
LABEL=/boot /boot ext3 defaults 1 2
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
/dev/VolGroup00/LogVol01 swap swap defaults 0 0
default=1
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CentOS (2.6.31.12-rt20) //NOT WORKING!!!!
root (hd0,0)
kernel /vmlinuz-2.6.31.12-rt20 ro root=/dev/VolGroup00/LogVol00 isolcpus=8,9,10,11,12,13,14,15 panic=10
initrd /initrd-2.6.31.12-rt20.img
title CentOS (2.6.18-164.11.1.el5) //WORKING!!
root (hd0,0)
kernel /vmlinuz-2.6.18-164.11.1.el5 ro root=/dev/VolGroup00/LogVol00 isolcpus=8,9,10,11,12,13,14,15 panic=10
initrd /initrd-2.6.18-164.11.1.el5.img
答案1
我将在此添加我之前的评论作为答案,因为此评论已用于悬赏。对于这种公然企图赚取声誉点数的行为,我深表歉意。
我遇到了同样的问题,并通过更改设置解决了
CONFIG_SYSFS_DEPRECATED_V2=Y
在 .config 文件中。正如 godpapa 在这个问题中提到的那样。
只需搜索 CONFIG_SYSFS_DEPRECATED_V2 并将其更改为 Y 并重建 RPM。然后安装 RPM。
我可以确认,使用“CentOS 方式”构建 2.6.33 内核时,这确实修复了 CentOS 5.4 上的问题。如果它对 CentOS 5.3 上的 2.6.31.12 不起作用,我会感到惊讶。
答案2
尝试启用 CONFIG_SYSFS_DEPRECATED_V2=y
答案3
您的卷似乎没有标签。
使用 e2label 命令标记它。找出你的根目录位于哪个 hda 或 sda 上,比如说 sda2
编辑 grub 配置,找到并编辑这部分
root=LABELNAME=/2
其中 2 是 hda/sda 号码,查看是否通过标签找到它。
否则,我会先查看已加载的模块,并检查您的存储控制器模块是否已加载。(SCSI,SATA,AHCI)这样做:
less /proc/modules
或者
lsmod
如果内核没有加载,你可能需要重建内核。
祝你好运。
答案4
据我理解,您正在从源代码构建自己的内核。您是否有什么特殊原因不继续使用 centos 提供的内核?
我猜测您的错误的原因是,您有一个不同的内核配置,并且缺少一个或多个模块,例如 lvm。当您真正需要自己构建内核时,请使用现有 centos 内核的内核配置。您会在目录中找到旧配置,/boot
或者直接使用make oldconfig
。但请注意,当您跳转多个内核版本时,这可能很危险。
当您只想向内核添加新驱动程序时,只需根据已安装的 centos 内核编译驱动程序并将其添加到模块中。