Kernel当前最新的稳定版为3.10.4,而CentOS6.4的内核一直还是2.6.x,内核版本2.6.28系列有一些内核BUG,最终决定升级linux系统内核版本。
在测试环境进行内核升级测试,步骤如下:
一:升级环境介绍:
内核升级测试环境介绍:
虚拟机软件:VMWare 9.0.0
测试系统: CentOS 6.4 x86_64
确认升级前内核版本:
more /proc/version
Linux version 2.6.32-358.14.1.el6.x86_64 ([email protected]) (gcc version 4.4.7 20120313 (Red Hat 4.4.7-3) (GCC) ) #1 SMP Tue Jul 16 23:51:20 UTC 2013
uname -a
Linux master 2.6.32-358.14.1.el6.x86_64 #1 SMP Tue Jul 16 23:51:20 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
升级前grup文件信息:
[more /boot/grub/grub.conf
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE: You have a /boot partition. This means that
# all kernel and initrd paths are relative to /boot/, eg.
# root (hd0,0)
# kernel /vmlinuz-version ro root=/dev/mapper/vg_slave2-lv_root
# initrd /initrd-[generic-]version.img
#boot=/dev/sda
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CentOS (2.6.32-220.el6.x86_64)
root (hd0,0)
kernel /vmlinuz-2.6.32-220.el6.x86_64 ro root=/dev/mapper/vg_slave2-lv_root nomodeset rd_NO_LUKS rd_NO_MD quiet rhgb crashkernel=auto LANG=zh_CN.UTF-8 rd_LVM_LV=vg_slave2/lv_root K
EYBOARDTYPE=pc KEYTABLE=us rd_LVM_LV=vg_slave2/lv_swap rd_NO_DM
initrd /initramfs-2.6.32-220.el6.x86_64.img
二:安装系统所需要的编译工具:
yum install wget gcc gc bc gd make perl ncurses-devel xz -y
如果执行上面的安装命令后,在编译过程中提示缺少依赖软件包请执行下面的软件安装命令
yum install gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel zip unzip ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5-devel libidn libidn-devel openssl openssh openssl-devel nss_ldap openldap openldap-devel openldap-clients openldap-servers libxslt-devel libevent-devel ntp libtool-ltdl bison libtool vim-enhanced python wget lsof iptraf strace lrzsz kernel-devel kernel-headers pam-devel Tcl/Tk cmake ncurses-devel bison setuptool popt-devel rsynx openssh system-config-network-tui gcc gc bc gd make perl ncurses-devel xz -y
三:下载当前最稳定的Kernel并解压
cd /usr/src
wget https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.10.4.tar.xz
xz -d linux-3.10.4.tar.xz
tar -xvf linux-3.10.4.tar.xz
cd linux-3.10.4
四:清理系统内的环境变量及依赖
make mrproper #清除环境变量(清除配置文件)
make dep #清除依赖
cp /boot/config-* /usr/src/kernels/ #为了方便编译配置,将/boot下的配置文件复制到当前目录下的/usr/src/kernels/文件中
五:准备开始啦
make menuconfig出现General setup菜单,根据自己的需要对Kernel进行增、减。完后按Tab键跳到下面菜单中的 < Exit > 上,回车,系统问
Do you wish to save your new configuration ?to continue.
< Yes >< No >
菜单默认在< Yes >上,按回车确认保存。
报错处理:
make menuconfig后命令,提示make: No rule to make target ‘menuconfig’.Stop.
解决办法:
在编译内核时,无论使用哪种方式都提示:make ***No rule to make target "menuconfig".stop.
原因是没有在内核源码目录下进行。
例如,要编译或升级的内核解压后的目录为/usr/src/linux-2.4.24,一定要进入到该目录后使用make menuconfig命令,这样就不会提示上面的错误了。
如果还不行,将内核文件放到此目录下,从新解压,再运行命令即可
make clean #确保所有东西均保持最新状态
make bzImage #生成内核文件
make modules #编译模块(注:此处需要很长时间,请耐心等待)
make modules_install #安装模块
make install #安装,此处报了一个vmware的错,详见最后故障排查
如果以上步骤都顺利执行完成,那么恭喜你内核升级已基本完成。
六:修改系统启动菜单并重启服务器,使服务器在下次启动使用新的内核。
[root@master ~]# cat /boot/grub/grub.conf
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE: You have a /boot partition. This means that
# all kernel and initrd paths are relative to /boot/, eg.
# root (hd0,0)
# kernel /vmlinuz-version ro root=/dev/mapper/vg_master-lv_root
# initrd /initrd-[generic-]version.img
#boot=/dev/sda
default=0 #原本是1修改成 0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CentOS (3.10.4)
root (hd0,0)
kernel /vmlinuz-3.10.4 ro root=/dev/mapper/vg_master-lv_root nomodeset rd_LVM_LV=vg_master/lv_swap KEYBOARDTYPE=pc KEYTABLE=us rd_NO_MD rd_NO_LUKS quiet rhgb crashkernel=auto LANG=en_US.UTF-8 rd_LVM_LV=vg_master/lv_root rd_NO_DM
initrd /initramfs-3.10.4.img
title CentOS (2.6.32-358.14.1.el6.x86_64)
root (hd0,0)
kernel /vmlinuz-2.6.32-358.14.1.el6.x86_64 ro root=/dev/mapper/vg_master-lv_root nomodeset rd_LVM_LV=vg_master/lv_swap KEYBOARDTYPE=pc KEYTABLE=us rd_NO_MD rd_NO_LUKS quiet rhgb crashkernel=auto LANG=en_US.UTF-8 rd_LVM_LV=vg_master/lv_root rd_NO_DM
initrd /initramfs-2.6.32-358.14.1.el6.x86_64.img
此时需要重启以便启动新的内核,
init 6
七:确认内核版本升级成功:
[root@master ~]# uname -a
Linux master 3.10.4 #内核版本已升级
[root@master ~]# cat /proc/version
Linux version 3.10.4 (root@master) #内核版本已升级
八:故障排查:
在执行 make install 内核升级完成后报错如下:
ERROR: modinfo: could not find module vmware_balloon
找不到 vmware_balloon 模块,
原因有2:
首先,确认你的 .config 文件里面有 CONFIG_VMWARE_BALLOON=m 这一行,或者你可以用 make menuconfig 进去内核编译菜单,选中 Device Drivers -> MISC devices -> VMware Balloon Driver 为 M 或者 *
其次,而这个模块在后面的版本中,已经更名为 vmw_balloon,所以 可以用下面的命令来解决:
cd /lib/modules/3.x.xx/kernel/drivers/misc #将版本号改成你自己的
ln -s vmw_balloon.ko vmware_balloon.ko #建立软连接
#回头找一台正式服务器试一下,应该不会报这个错误。