#(据众多高手博客说升级ext4必须:1.升级kernel到2.6.28以上;2.重编译老内核)
#我将内核升级至2.6.30并升级到ext4后,重启切回2.6.18老内核也能正常读取ext4文件系统,老内核没有做过变动
#问题:2.6.18直接升级ext4不知可不可行?
@使内核支持ext4方法1:
#重编译旧内核,使其支持ext3与ext4的方法:
cp /boot/initrd-`uname -r`.img /boot/initrd-`uname -r`.img.bak
mkinitrd -v --with=ext4 --with=ext3 /boot/initrd-`uname`.img `uname -r`
······
Adding module ext4
reboot
@使内核支持ext4方法2:
#编译新内核
cd /usr/src
wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.30.10.tar.gz
tar zxvf linux-2.6.30.10.tar.gz
cd linux-2.6.30.10.tar.gz
make menuconfig
#filesystem内确保ext4都选上即可,默认都是选上的,不熟的就默认吧...
make clean
make bzImage #耗时长
make modules #耗时长
make modules_install && make install
#编译结束,但据说2.6.x自编译内核有bug,以下为解决bug
cp /boot/initrd-2.6.30.10.img /tmp
cd /tmp
mkdir newinitrd
cd newinitrd
zcat ../initrd-2.6.30.10.img|cpio -i
rm -f /tmp/initrd-2.6.30.10.img
vi 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
#有重复,删除掉,保留一对
find .|cpio -c -o >> ../initrd
cd /tmp
gzip -9 <initrd> initrd-2.6.30.10.img
mv /boot/initrd-2.6.30.10.img /boot/initrd-2.6.30.10.img.bak
cp initrd-2.6.30.10.img /boot/
vi /boot/grub/grub.conf
#修改default值为你想要默认加载的内核(0,1,2,3···)
reboot
#####
我升级到2.6.30后遭遇iptables兼容性问题:
iptables: Unknown error 18446744073709551615
g了一下给了我这个答案http://blog.zhanxb.com/post/274/
iptables -A INPUT -m state --state NEW -p udp --dport 53 -j ACCEPT
改成
iptables -A INPUT -p udp --dport 53 -j ACCEPT
凑效了
以新内核运行以后,从部分客户端telnet服务器的服务端口,时好时坏,时通时不通,怀疑系统网络设置上有问题
无能力深入研究,直接切换回老内核,发现2.6.18不通过--with=ext4的编译也能认出ext4分区并且正常读写,服务也能正常启动
目前再以旧内核运行,观察状态中...
#####
@升级ext4方法
wget http://downloads.lustre.org/public/tools/e2fsprogs/upstream/e2fsprogs-1.41.12.tar.gz
#或者yum
umount /dev/sda2
tune2fs -O extents,uninit_bg,dir_index /dev/sda2
e2fsck -fDC0 /dev/sda2
mount -t ext4 /dev/sda2 /data
df -T
/dev/sda2 ext4 10154020 3110316 6519584 33% /data
vi /etc/fstab
LABEL=/data /data ext3 defaults 1 2
改为
LABEL=/data /data ext4 defaults 1 2
#完事
#全文完