基本步骤:

1确认内核版本和系统环境支持ext4 (推荐升至2.6.28以上,lsmod |grep ext4)

2卸载要升级的分区(在线卸不掉则需要进单用户)

3 tune2fs -O has_journal,extents,huge_file,flex_bg,uninit_bg,dir_nlink,extra_isize来给分区加入ext4的特性

4 e2fsck -fDC0 /dev/sdb1 –y修复分区错误

5修改fstab中分区格式为ext4reboot


关键点:

1tune2fs版本要高于1.41 否则不支持ext4的特性

2官方推荐使用2.6.28以上内核才稳定支持ext4

3对在使用的分区如var,一定要先卸载再操作,并且重启之前一定要挨个执行完tune2fse2fsck,和vi /boot/fstab的修改,再重启,否则挂载就会出问题

 

网络资料:

一、测试场景

操作系统:CentOS 5.6 x86 64bit(内核2.6.18

文件系统:ext3

硬盘:2块(sda1sdb1),sdb1的挂载点为/android,专门用来存储编译文件,在编译时报错。

 

二、升级前状态

查看系统内核版本:

# uname -r

2.6.18-238.el5

查看文件系统的情况:

# df -T

文件系统      类型     1K-        已用     可用 已用% 挂载点

/dev/mapper/VolGroup00-LogVol00

              ext3    13077624   3342968   9059636  27% /

/dev/sda1     ext3      101086     15876     79991  17% /boot

tmpfs        tmpfs      257452         0    257452   0% /dev/shm

/dev/sdb1     ext3     8254240    149624   7685324   2% /android

查看ext4特征是否激活:

# tune2fs -l /dev/sdb1 | grep extent

执行上述命令后无任何信息返回,说明/dev/sdb1ext4特征没有激活,唯一的解决办法就是升级文件系统到ext4了。

 

三、软件下载及安装

e2fsprogs软件包下载页面:http://ftp.kernel.org/pub/linux/kernel/people/tytso/e2fsprogs/

 

接下来是源码编译安装过程:

# wget http://ftp.kernel.org/pub/linux/kernel/people/tytso/e2fsprogs/e2fsprogs-1.41.14.tar.gz

# tar -zxvf e2fsprogs-1.41.14.tar.gz

# cd e2fsprogs-1.41.14

# ./configure

# make && make install

安装完毕后暂时不需要重启系统。第一次安装完毕时我就重启系统了,结果系统竟然崩溃了,因此e2fsprogs软件包安装完毕后不要立即重启服务器。

 

四、制作系统引导镜像

查找并加载相应的模块,如只需ext4支持,可将--with=ext3去掉:

# mv /boot/initrd-`uname -r`.img /boot/initrd-`uname -r`.img.old

# mkinitrd -v --with=ext4 --with=ext3 /boot/initrd-`uname -r`.img `uname -r`

Creating initramfs

Looking for deps of module ehci-hcd

……

Adding module ext4

这时可以放心的重启服务器了:

# init 6

 

五、文件系统格式升级转换

服务器重启后,看看文件系统又变化没。任然没有变化:

# df -T

文件系统      类型     1K-        已用     可用 已用% 挂载点

/dev/mapper/VolGroup00-LogVol00

              ext3    13077624   3342968   9059636  27% /

/dev/sda1     ext3      101086     15876     79991  17% /boot

tmpfs        tmpfs      257452         0    257452   0% /dev/shm

/dev/sdb1     ext3     8254240    149624   7685324   2% /android

文件系统格式转换:

# umount  /dev/sdb1

# tune2fs -O has_journal,extents,huge_file,flex_bg,uninit_bg,dir_nlink,extra_isize /dev/sdb1

tune2fs 1.41.14 (22-Dec-2010)

修改转换文件系统错误:

# e2fsck -fDC0 /dev/sdb1 -y

e2fsck 1.41.14 (22-Dec-2010)

第一步: 检查inode,,和大小

第二步: 检查目录结构                                                           

3: 检查目录连接性

Pass 3A: Optimizing directories

Pass 4: Checking reference counts                                              

5: 检查簇概要信息

/dev/sdb1: ***** 文件系统已修改 *****

/dev/sdb1: 11/524288 files (0.0% non-contiguous), 70320/2096474 blocks

重新挂载:

# mount -t ext4 /dev/sdb1 /android

修改文件系统信息(重要!否则重启后会还原为ext3)。绿色字体为需要修改的地方,没有这项纪录的话则新增:

# vi /etc/fstab

/dev/VolGroup00/LogVol00 /             ext3    defaults        1 1

LABEL=/boot             /boot          ext3    defaults        1 2

/dev/sdb1               /android       ext4    defaults        1 2

tmpfs                   /dev/shm       tmpfs   defaults        0 0

devpts                  /dev/pts       devpts  gid=5,mode=620  0 0

sysfs                   /sys           sysfs   defaults        0 0

proc                    /proc          proc    defaults        0 0

/dev/VolGroup00/LogVol01 swap          swap    defaults        0 0

使对fstab的修改立即生效:

# mount -a

 

六、升级后的文件系统状态

查看文件系统的变化,哈哈,挂载点/android的文件系统已经是ext4了。

# df -T

文件系统      类型     1K-        已用     可用 已用% 挂载点

/dev/mapper/VolGroup00-LogVol00

              ext3    13077624   3343024   9059580  27% /

/dev/sda1     ext3      101086     15876     79991  17% /boot

/dev/sdb1     ext4     8254240    149624   7685324   2% /android

tmpfs        tmpfs      257452         0    257452   0% /dev/shm

ext4的特征全激活了:

# tune2fs -l /dev/sdb1 | grep extent

Filesystem features:has_journal ext_attr resize_inode dir_index 

filetype needs_recovery extent flex_bg sparse_super large_file 

huge_file uninit_bg dir_nlink extra_isize

 

七、后记

经过上述一系列的操作,可以顺利将挂载点/android的文件系统从ext3升级到ext4。但是,如果你硬盘上只有两个分区,即“/”和“/boot”,这时转换的就是挂载点“/”了。我试过,将“/”由ext3升级到ext4没有成功。原因是在进行文件系统升级时,必须先umount,升级完后再mount回来,而操作系统启动后,“/”是不能被卸载(umount)的。我的解决方案是给服务器加一个分区(通过加硬盘或创建VG来实现),然后将新的分区转换成ext4文件系统。不知谁有更好的解决方案,若有的话一定要告诉我。