分类: 系统运维
2009-04-04 11:25:25
一开始参考的文章是《RedHat9实现集群负载均衡系统LVS》,发现在 mkinitrd /boot/initrd-2.4.20ipvs.img 2.4.20 时报错,网上查了一下是因为make menuconfig 时少选了SCSI的支持(因为WMware用的是SCSI硬盘),于是乎加上:
SCSI support->SCSI low-level drivers->BusLogic SCSI support,选y
Fusion MPT device support-> Fusion MPT(base_scsihost) drivers ,选y
Fusion MPT device support-> Fusion MPT misc device(ioctl) driver,选m
File systems->Ext3 journalling file system support选m
File systems->JBD(ext3)debugging support选y
结果编译内核通过。但是启动时又报错: ... root .../LABEL...等等,上网查得“只有使用RedHat内核,才能使用LABEL/语法来指定根文件系统。如果编译的是常用内核,则必须指定根分区设备名称”。于是用df命令查得根的分区是/dev/sda2,修改/boot/grub/grub.config 将新加入的内核的root=/dev/sda2。终于可以用新内核启动了,但是启动时有一大堆[Failed]。
启动后,用lsmod命令查看当前的内核加载的模块,发现只有ext3和jbd。而原先的内核加载了20多个模块。想来想去感觉怪怪的。最起码在VMware环境中没有vmxnet模块是上不了网的,那又如何实现负载均衡呢?
又经过几天的折腾,发现参考的文章《RedHat9实现集群负载均衡系统LVS》有个地方没有说清楚,导致我走了这么多弯路。文中说道:
#make mrproper 去除如有上次已编译的*.o文件,如不去除就不会被再次编译
但是它在此之前又运行了:
# cp /boot/config-2.4.* /usr/src/linux/.config 把安装时的配置文件copy 到/usr/src/linux 中,再用make menuconfig 编译,它会读取.config 中原来的配置信息,这样只要对IP:Virtual ServerConfiguration中的新选项选择即可。
发查看手册发现make mrproper命令,会在源代码树的顶层擦除.config文件。这就导致了,前一步拷贝原来的配置文件被擦除了,而下一步的make menuconfig命令,又会生成新的.config文件。新生成的配置文件带有内核的默认配置,其实只有很少几个模块被选择了,这就是开机时一大堆[Failed]的原因。因为缺少模块嘛!
其实看看RadHat9中/boot/config-2.4.20-8发现它选择了很多要用到的模块,只是刚才拷贝后又被make mrproper给重写了,于是去掉make mrproper,一切OK!
make mrproper用于安装新内核,而不是升级或给内核打补丁。
另外,make moudels_install之后可以直接make install,就不用手动加载新内核了。
还差一点,就是发现新的内核不能上网,这又是VMware特有的问题了。
----------------------------------------------------------------------------------------------
RedHat9默认的网络模块只有pcnet32,而VMware中需要vmxnet模块才能上网。重新安装VMwareTools(就是如果以前内核中安装过的话,需要卸载后再安装)。安装后再执行:
#service network stop
#rmmod pcnet32
#rmmod vmxnet
#modprobe vmxnet
#service network start
(貌似要把这段文本加入/etc/rc.d/rc.local中,以免每次启动系统时都要敲一遍。)
一切原来就这么简单,hehe
如果你的/boot目录下找不到config-2.4*文件,可以之。