![内核崩溃错误](https://linux22.com/image/542967/%E5%86%85%E6%A0%B8%E5%B4%A9%E6%BA%83%E9%94%99%E8%AF%AF.png)
我们有一台配备软件 RAID1 的专用服务器,最近其中一个磁盘出现故障。磁盘已更换,但在重建阵列并重新启动后,服务器冻结并显示内核恐慌消息
No filesystem could mount root, tried: reiserfs ext3 ext2 cramfs msdos vfat iso9660 romfs fuseblk xfs
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(9,1)
两个磁盘上的文件系统都是 ext4。
看来内核无法加载 ext4 支持。
有什么方法可以添加 ext4 支持吗?或者我需要重新编译一个新内核吗?
有趣的是,在更换磁盘之前一切都很好。
该内核是来自我们的提供商 OVH 的库存内核 bzImage-2.6.34.6-xxxx-grs-ipv6-64
这是我的 lilo.conf 文件的内容 cat /etc/lilo.conf
lba32
boot=/dev/md1
raid-extra-boot=mbr-only
prompt
timeout=50
# Enable large memory mode.
large-memory
image=/boot/bzImage-2.6.34.6-xxxx-grs-ipv6-64
label="Linux"
root=/dev/md1
read-only
答案1
我设法解决了这个问题。更换磁盘后,新磁盘上没有安装引导代码。所以我重新安装了 lilo,然后再次重新启动。lilo -H -v 现在一切正常。
答案2
文件系统驱动程序也可以从 initrd 加载。确保 grub(或您使用的任何引导加载程序)加载正确的 initrd。也许您正在加载旧内核。
如果您可以使用救援系统启动,则可以重建 initrd。
答案3
至少在 grub2 中你可以指定在启动前加载一些模块..参见http://grub.enbug.org/FranklinPiat/grub_modules.manpage
已经将其用于 lvm。但是如果您从源代码编译了内核,您是否编译了 ext4 支持??只有将 ext4 编译为可加载模块,grub 解决方案才会起作用。如果运气不错...就得重新编译...
答案4
有趣的是,块设备 9,1 确实是 /dev/md1:
brw-r----- 1 root disk 9, 1 Feb 15 16:13 md1
RAID 设备是否可能由于硬件故障而重新编号?您说您没有物理内核访问权限,因此无法启动可移动媒体(例如实时 CD),但您发布了内核恐慌消息,并建议重建内核,如果您无法启动机器,这将很难做到;所以我对您可以做什么和不能做什么有点困惑,这很难给您提供选择。
问题可能不是出在 ext4 上,因为它之前是从该根 FS 启动的。
我目前倾向于怀疑当前内核没有内置 MD 支持(不是一个可加载模块,但已编译)。您打印的消息正是我期望看到的消息,如果您要启动不支持 md 的内核 - 但您并没有说您改变了这一点。
因此我首先要问的是:自上次成功重启盒子以来,你做了哪些更改,除了硬盘之外?你确实提到了“重新编译新内核再次“,这让我怀疑您最近是否对内核进行了大量更改。您是否有可能将 MD 支持从当前内核中删除?您能否向我们提供当前内核配置文件中的“多设备支持(RAID 和 LVM)”部分?