一、内核升级目的 

      原内核不支持文件系统EXT4、因为原文件系统EXT3只支持目录下子目录个数为32000个。不能满足业务系统的相关要求。EXT4没有子目录个数的限制。

二、升级环境

1、操作系统:linux  as 5.4 64位

2、原内核版本:2.6.18

3、内核升级包:linux-2.6.33.1.tar.gz

4、EXT4包:e2fsprogs-1.41.4.tar.gz

5、内核包下载地址:http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.33.1.tar.gz

注:安装包分为内核升级包和EXT4功能模块包

三、升级步骤

1、把linux-2.6.33.1.tar.gz解压到/usr/local/src

2、复制原有的config文件到linux-2.6.33.1

cp /boot/config-2.6.18-53.el5 .config //此处的版本号以实际情况为准 3、make menuconfig(弹出功能模块选择)  

 

 选择Load an Alternate Configuration File,导入.config文件,

选择的:“File systems”选中如下功能,

修改完毕后选择Save an Alternate Configuration File,然后退出配置。 
4:修改.config文件
在.config文件搜索CONFIG_SYSFS_DEPRECATED_V2,
会发现# CONFIG_SYSFS_DEPRECATED_V2 is not set这一行,将该行修改为CONFIG_SYSFS_DEPRECATED_V2=y
假如不修改该行,在升级重新启动后会报如下的错,导致启动失败:
Volume group "VolGroup00" not found
Unalbe to access resume device (/dev/VolGroup00/LogVol00)
mount: could not find filesystem '/dev/root'
setuproot:moving /dev failed: No such file or directory
setuproot:error mounting /proc: No such file or directory
setuproot:error mounting /sys: No such file or directory
switchroot: mount failed: No such file or directory
Kernel panic - not syncing:Attempted to kill init!
 
5:编译内核
#make all
编译大概需要40分钟到1个小时的时间。
#make modules_install
#make install
这时候会出现3个警告[2]
WARNING: No module dm-mem-cache found for kernel 2.6.33, continuing anyway
WARNING: No module dm-message found for kernel 2.6.33, continuing anyway
WARNING: No module dm-raid45 found for kernel 2.6.33, continuing anyway
经过测试,这3个警告不会影响内核的升级。
 
6:修改initrd文件
假如在升级重启后会报的错误insmod: error inserting ‘/lib/dm-region-hash.ko’: –1 File exits,这是由于initrd里面的init中加载dm-region-hash.ko这个模块重复了,因此需要修改生成的initrd文件(不是所有的机器都会出现这个错),修改的方式如下:
n 解压initrd
#cp /boot/initrd-2.6.33.img /tmp
#cd /tmp/
#ls
initrd-2.6.33.img
#mkdir newinitrd
#cd newinitrd/
#zcat ../initrd-2.6.33.img |cpio -i
#ls
bin dev etc init lib proc sbin sys sysroot
 
6、 编辑init,删掉重复的两行:
echo "Loading dm-region-hash.ko module"
insmod /lib/dm-region-hash.ko
echo "Loading dm-region-hash.ko module"
insmod /lib/dm-region-hash.ko
 
7、 重新打包initrd:
#find .|cpio -c -o > ../initrd
#cd ..
#gzip -9 < initrd > initrd-2.6.33.img
 
8、 将initrd重新复制到/boot目录下
#cp initrd-2.6.33.img /boot
 
9、:将2.6.33内核设置为默认启动:
将grub.conf中启动项的“default=1”修改为“default=0”,重启后系统就会默认进入新内核,设置如下:
#vi /boot/grub/grub.conf
 
10:重新启动系统
若系统重新启动成功,用 uname –r查看内核版本是否是最新版本。
11、EXT4包的安装
(1):解压e2fsprogs-1.41.4.tar.gz 
   ./configure;make;make install                                   
用mkfs 查看是否有EXT4格式的命令,如有表标EXT4包安装成功,
12、EXT3转EXT4                              
(2):卸载需要转换的分区
#umount /dev/sdb1
注:若在卸载过程中提示分区繁忙,不能卸载,说明有程序正在访问该分区,可使用命令“fuser –m –k /dev/sdb1”(此处假设需要卸载的分区为/dev/sdb1)杀掉正在访问该分区的程序,然后再卸载该分区。
 (2)EXT3转EXT4(此为无损转换)
#tune2fs -O extents,uninit_bg,dir_index /dev/sdb1
此转换为无损转换,不影响磁盘上原有数据,但转换成功后,之前的文件还是以原来的格式存储,只有新建的文件或新存储的文件才会以EXT4格式存储。
 
(3):检查分区及数据
#e2fsck -pf /dev/sdb1
注:EXT3转换为EXT4完成后,需要对转换的分区和数据进行检查,否则该分区不能挂载。    
 (4):挂载分区
#mount /dev/sdb1 /ICES
注:挂载上分区后,若查看格式为EXT4,可测试在同一个目录下创建50000个目录,若创建成功,则EXT4转换成功。 
(5):把挂载好的分区加入/etc/fstab,