现象
红帽、centos以及中标麒麟v7系列系统的内核版本基本都是3.10.0-*,因业务需要将某v7系列系统的内核升级成3.10.0版本。前后内核版本基本一致,感觉应该是没什么问题的,官网下载3.10内核源码,按照编译流程进行编译、安装,一切顺利。
重启系统后,在grub启动引导阶段,选择新安装内核版本3.10启动,均启动失败。
先后在vmware虚拟机和物理机中试了centos系统和麒麟系统,各自会报不同的错误“A start job is running for dev-mapper-nlas root.device(*s/1min 30s)”、客户操作系统已禁用cpu 请关闭或重置虚拟机、 Internal error xfs_sb_read_verify at line 730 of file fs/xfs/xfs_mount.c。
原因
原有系统安装时使用的是lvm自动分区,/dev/mapping/nlas-root 使用的是xfs格式文件系统,测试所使用的系统上mkfs.xfs工具版本为4.5.0,该版本工具创建的xfs文件系统使用了version 5 superblock,拥有诸如metadata CRC 校验和等一些新特性。而version 5 superblock要求内核版本3.16及以上,而我们新安装的3.10内核是无法支持version 5 superblock的,这也是升级内核后,新内核一直无法启动的原因。
3.2.4及以上版本的mkfs.xfs创建的xfs文件系统默认使用了version 5 superblock。
mkfs.xfs -V可查看对应软件版本。
思考
升级的3.10内核无法正确识别xfs分区,而原有的带小版本号的内核却可以识别,这是因为红帽所使用的3.10.0-*内核进行了完善,已经支持version 5 superblock。