红联Linux门户
Linux帮助

无损升级ext3至ext4文件系统

发布时间:2014-07-13 10:12:20来源:红联作者:velcbo
基本步骤:

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中分区格式为ext4,reboot

关键点:

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

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

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

网络资料:

一、测试场景

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

文件系统:ext3

硬盘:2块(sda1、sdb1),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/sdb1的ext4特征没有激活,唯一的解决办法就是升级文件系统到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文件系统。不知谁有更好的解决方案,若有的话一定要告诉我。

作者:bailianhua
文章评论

共有 0 条评论