感谢支持
我们一直在努力

无损升级ext3至ext4文件系统

基本步骤:

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文件系统。不知谁有更好的解决方案,若有的话一定要告诉我。

赞(0) 打赏
转载请注明出处:服务器评测 » 无损升级ext3至ext4文件系统
分享到: 更多 (0)

听说打赏我的人,都进福布斯排行榜啦!

支付宝扫一扫打赏

微信扫一扫打赏