公司的机器终于有申请到ssd硬盘了,昨天插上去服务器,但是发现centos 5.x 虽然可以支持ext4,但是ext4的模块不支持TRIM(discard)功能,用hdpram虽然可以手动TRIM,但不是太保险,查了一下资料,内核太老了,5.x一直是2.6.18.x的内核,centos 6 就可以完美支持TRIM了,但是centos 5.x 不能直接在线升级到 6 ,必须重装系统,不想弄到系统重装这么大件事。
故继续翻资料,发现TRIM支持比较好要到3.0的内核了,好,试试编译内核吧,很久没有玩过了。
1、首先到 https://www.kernel.org/ 找合适的内核,longterm 版本的内核有 2.6.32 (centos 6 就是这个),2.6.34,3.0.90 等等,一不做二不休,直接搞到3.0以上吧,下载内核,解压
2、准备必要的编译工具:
> yum install gcc ncurses ncurses-devel
2、进入解压目录,要配置内核了,我选择用原来centos 5 的一些内核参数
> cp /boot/config-2.6.18-348.12.1.el5 ./.config > make oldconfig > 全部回车,选择默认,或者按照你们自己的需要选择
3、config完毕后,需要手动改写几个参数,vim .config
CONFIG_SAMPLES=n
这个参数可以避免编译阶段 samples/hidraw/hid-example.c编译失败,samples里面有引用当前环境的一些headers
CONFIG_SYSFS_DEPRECATED=y
CONFIG_SYSFS_DEPRECATED_V2=y
这两个参数让内核使用旧版的sysfs,由于centos的确太tmd老了,如果不选择这个选项,文件系统等等无法直接装载
4、修改好.config 文件之后,就要编译了
> make #等好多分钟 > make modules_install # 安装 /lib/modules 目录 > make install # 安装 vmlinux 到 /boot > 修改 /boot/grub/menu.lst 使default选择新内核启动
完成了之后就reboot吧。。
5、reboot之后,看看各个服务的启动情况,本来很happy,但是突然看到 udev的一个超时报错
udevd-event: wait_for_sysfs waitnig for xxxxxxx ioerr_cnt failed
这个是怎么回事呢。。。
继续翻资料,发现还是udev太老的问题,新版本已经不需要这些事件了。修改udev配置文件
/etc/udev/rules.d/05-udev-early.rules
#ACTION=="add", SUBSYSTEM=="scsi", WAIT_FOR_SYSFS="ioerr_cnt" # 注释掉上面这行,加上下面这行 ACTION=="add", SUBSYSTEM=="scsi", KERNEL=="[0-9]*:[0-9]*", WAIT_FOR_SYSFS="ioerr_cnt"
重启,错误消失,但是不知道对scsi硬盘控制器会有什么不良影响,以上流程在vmware(scsi控制器),dell 2950 上面的centos 5.9最新版本试验通过。。。
安装的是3.0.90版本,安装完了以后再去查,发现已经更新到3.0.91 了,太tmd勤快了。
最后一点,记得在yum.conf里面去掉kernel*的检查,要不啥时候update一下就不知不觉升级了2.6.18的内核。。。
exclude=kernel*
各位折腾正式服务器环境之前敬请测试。