本文基于ThinkSystem SR650编写
针对ubuntu 14 以上的版本通用
开篇之前我们需要介绍一些关于Linux kernel的相关知识
查看Linux系统文件,可以在grub配置信息中(一般为menu.lst)看到以下内容:
root(hd0,0)第一个硬盘第一个分区
kernel /vmlinuz-2.6.18-194.el5 ro root=LABEL=/ 告诉kernel /boot下的vmlinuz是内核
initrd /initrd-2.6.18-194.el5.img #将与kernel相关的驱动放在initrd下
文中提到的initrd-kernel.img,在Linux中称为RAM Disk,它是一个临时文件系统,在启动阶段被Linux内核调用,initrd主要用于当“根”文件系统被挂载之前,进行准备工作。
Linux内核 与 initrd/initramfs 必须存储在 bootloader 可以访问的位置,通常是在:
root 文件系统内
一个小的ext4或FAT文件系统的分区(通常挂载到 /boot)
TFTP server内
bootloader 会将内核与 initrd 加载到存储器中并将 initrd 的地址传给内核。initrd会被挂载当成 initial root file system。
现在的 Linux 发行版会创建定制只包含必要组件的 initrd 映像档,例如只包含 IDE、SCSI、SATA、SAS 以及文件系统核心模块。
initrd.img中包含了很多系统启动的关键驱动,比如本文中的阵列卡驱动,若RAM Disk中无相关驱动,加载完成之后,无法识别到硬盘,系统自然无法正常启动;
在升级kernel的过程中,通常我们kernel版本升级了,但initrd.img中很多关键驱动信息,并没有得到及时更新;
Ubuntu 14.04.4升级了kernel之后,如何处理才能使系统正常启动?
PS:驱动编译及系统安装方法请参考我们往期文章,大致差异不大,只是版本不一样而已;
本文相关驱动信息在如下网盘:
kernel:4.4.0-116版本:
链接:
https://pan.baidu.com/s/1tMdWOeyHGx8IKeeGtEhchg
提取码:g4cf
ubuntu 14.04.4版本:
链接:
https://pan.baidu.com/s/10Hs1CFYYrk6WhHdm6MOuFg
提取码:lxuo
一、安装好基础操作系统,以下步骤只描述升级kernel及后续处理方法;
二、进入ubuntu 14.04.4操作系统,并将驱动、kernel安装包等拷贝进OS,拷贝方式,可以通过iso的方式挂载后拷贝,如下图:
在操作系统中挂载目录
查看/boot目录下initrd版本:为4.2.0-27,然后安装新的kernel;
kernel升级完成后,我们可以发现在boot目录下多了一个initrd.img-4.4.0-116-generic文件;
此时kernel已经升级完成了,但是我们并没有升级RAID卡驱动,编译好的RAID卡驱动deb包我们可以直接安装升级:
通过查找命令寻找megaraid_sas.ko在哪个目录
find / |grep "megaraid_sas.ko"
我们可以查看到/lib/modules目录下分别有两个kernel均含有megaraid_sas.ko文件,带new尾缀的文件,我们可以通过命令行rename为ko文件,这个是因为我们编译驱动时生产的驱动模块,名字跟系统使用的不统一,更改完成后,我们通过modinfo命令查看每个megaraid_sas.ko文件的版本;
modinfo /lib/modules/4.4.0-116-generic/kernel/drivers/scsi/megaraid/megaraid_sas.ko#版本比较旧此驱动无法驱动新的RAID卡
mv /lib/modules/4.4.0-116-generic/weak-updates/megaraid_sas/megaraid_sas.ko.new /lib/modules/4.4.0-116-generic/weak-updates/megaraid_sas/megaraid_sas.ko#重命名为.ko文件
modinfo /lib/modules/4.4.0-116-generic/weak-updates/megaraid_sas/megaraid_sas.ko#查看此目录下版本为最新版本
确认RAID卡驱动为最新,即可将该驱动拷贝到以下目录下
cp /lib/modules /4.4.0-116-generic/wek-updates/megaraid_sas/megaraid_sas.ko /lib/modules/4.4.0-116-generaic/kernel/drivers/scsi/megaraid/megaraid_sas.ko#可以直接覆盖原文件
拷贝完成之后,我们需要更新initrd.img中的驱动信息,否则系统仍然无法正常启动;
cd /bootmkinitramfs -o /boot/initrd.img-4.4.0-116-generic 4.4.0-116-generic#Note:4.4.0-116-generic是需要创建initramfs的kernel版本号,#mkinitramfs命令会将/lib/modules/${kernel_version}/目录下的一些启动必须的驱动模块加入到initrd.img中;我们通过安装驱动deb包的方式,系统只会更新当前目录的驱动模块,并不会更新升级后kernel的ramdisk;
重启后确认kernel版本正确
以上为ThinkSystem安装 Ubuntu后升级kernel的处理方法,希望对大家有用;
若有疑问可直接在公众号中留言(留下您的邮箱),我们接到反馈,会及时回复,感谢您的阅读,如果您喜欢我们的文章,还请关注并帮忙宣传;