现象
使用新版本的操作系统自带的文件系统格式化工具进行分区格式化以后,在较低的操作系统版本上会有提示,提示如下:
1 | [root@localhost ~]# mount -t ext4 /dev/sdb1 /root/test |
按照提示查看日志发现
1 | Mar 12 01:12:20 localhost kernel: JBD2: Unrecognised features on journal |
原因分析
造成上述问题的原因是在新的操作系统上使用系统自带的 mkfs.ext4 对文件系统进行了格式化,默认会使用一些新的的特性,这些新的特性在旧的系统上是无法使用的。
比如在 Ubuntu 18.04 上进行使用 mkfs.ext4 进行格式化的磁盘,在 CentOS 7.4 1708 上 是可以正常使用的,在 CentOS 7.0 1406 以及以下版本是就是提示上述错误。
Ubuntu 18.04 的 mkfs 版本是 1.44.1-1 ,CentOS 7.0 1406 的 mkfs 版本是 1.42.9-4。造成了这个差异。CentOS 7.4 1708 的 mkfs 版本是 1.42.9-10 ,Redhat 内部在小版本上新增了这个特性的支持。
解决办法
按照日志提示,Unrecognised features on journal , 不支持 journal 。
那么查看文件系统特性:
1 | #tune2fs -l /dev/sdb1 |
文件系统含有一个 has_journal 特性,删除这个特性,删除方式如下:
1 | #tune2fs -O ^has_journal /dev/sdb1 // 去除has_journal选项 |
验证是否删除:
1 | #tune2fs -l /dev/sdb1 |
可以看到已经没有这个特性了,再次尝试挂载,
1 | [root@localhost ~]# mount -t ext4 /dev/sdb1 /root/test |
可以看到,已经可以正常挂载,挂载后的文件也可以正常显示。
couldn’t mount RDWR
在上述的现象里,如果挂载 ext4 到 CentOS 6.5 等更老一些的系统的时候,也会提示部分不支持的特性,在日志里如果出现了如下提示:
1 | kernel: EXT4-fs (sdb1): couldn't mount RDWR because of unsupported optional features (400) |
这种情况是因为mkfs.ext4的时候制定的参数,旧的内核不支持导致.
The ext4 feature (400) is the new metadata_csum feature. If this feature is enabled and old tools are used to mount the filesystem they will only be able to mount read-only.
https://ext4.wiki.kernel.org/index.php/Ext4_Metadata_Checksums
解决办法一样,可以在创建的时候不使用该特性,或者删除该特性后再 CentOS 6.5 上使用。
1 | [root@localhost ~]# tune2fs -O ^metadata_csum /dev/sdb1 |
系统提示需要 运行 e2fsck 进行磁盘检查,那么按照要求进行检查, e2fsck 的参数请大家自己选择。
1 | [root@localhost ~]# e2fsck -f -a -v /dev/sdb1 |
检查完以后,就可以尝试移除这个特性了,期间会询问,请按照实际选择。移除以后挂载就正常了。
1 | [root@localhost ~]# tune2fs -O ^metadata_csum /dev/sdb1 |
tune2fs 版本较低
执行 tune2fs 如果遇到如下提示:
1 | [root@localhost ~]# tune2fs -O ^has_journal /dev/sdb1 |
那么说明 tune2fs 版本较低,不支持 has_journal 特性,需要升级到 1.43.1以上才可以。
在 CentOS 6.5 中, tune2fs 版本更低,是 1.41.12,也需要升级。
后记
如果确认是新旧版本的问题导致的无法挂载,那么上述方法就可以解决了。
如果不是新旧版本的问题,那么还有一种可能,就是磁盘坏了,在这种情况下可以使用下列命令尝试修复。
特别提示,磁盘修复请慎重选择。本文不保证数据安全性和完整性,只提供一个可供参考的选择。
1 | [root@localhost ~]# e2fsck -f -c -v /dev/sdb1 |
该提示显示 e2fsck 工具不支持 新的特性,meadata_csum , 解决版本是 升级 e2fsck 工具的版本, e2fsck 工具由 e2fsprogs 和 e2fsprogs-libs 两个工具包来提供,升级这两个工具包的版本就可以,最少要升级到 1.43.1 版本以上才可以。
Ubuntu 可以参考如下链接进行解决。
关于 CentOS 可以去下列地址查找对应的 rpm 包来进行升级。
更推荐的方法是用源码进行编译。过程如下
安装 GCC 编译器
1 | yum install gcc -y |
下载源码包,
1 | wget http://downloads.sourceforge.net/project/e2fsprogs/e2fsprogs/v1.43.1/e2fsprogs-1.43.1.tar.gz |
解压安装包进行编译
1 | tar -zxf e2fsprogs-1.43.1.tar.gz |
此时已经编译好了,进入 e2fsck 文件夹就可以看到新编译的版本了,
1 | [root@loaclhost ~]cd e2fsck |
如果希望替换系统的 e2fsck 工具,那么执行 make install 。
1 | cd e2fsprogs-1.43.1 |
总结
出现上述问题的主要原因是,新版的操作系统默认支持了很多新的特性,这些新特性在旧版本的操作系统上是不支持的。
如果在磁盘使用前就已经知道了磁盘将要使用的操作系统,应该依据操作系统的差别,然后有意的关闭一些参数,使得新旧操作系统的磁盘是兼容的。
如果无法预知操作系统,那么在实际使用中遇到了问题,可以查找是哪个新的特性导致的该问题,尝试移除这个文件系统的特性,之后就可以正常使用了。但是贸然移除某个特性,可能会导致磁盘上的数据丢失,这个应该做过充分的调研确认以后再操作。
======================
Erdong, A Linux user !