ext4禁用日志功能--听说ext4有丢失数据的可能。

jackxiang 2013-4-3 15:06 | |
正在使用 Ext4 文件系统的同学可得当心了。据某些用户反映,它可能会造成你的数据丢失。国外一位 Kubuntu Jaunty 的用户称,使用 Ext4 文件系统使他丢失了大量的数据,相关描述可参见位于 launchpad 上的 bug 报告。

无独有偶,国内的 albert748 也遇到了类似的问题。他描述道,X 无缘无故死掉,断电重启后,发现 Firefox 的配置丢了很多。与上面那位国外用户一样,albert748 也使用 2.6.28 内核和 Ext4 文件系统。

今天,H-Online 刊登了一篇文章 Ext4 data loss; explanations and workarounds,其中对此进行了解释,并包含 Ext4 开发者 Ted Ts'o 提供的解决方案,有兴趣的同学可去看看。
http://linuxtoy.org/archives/ext4-data-loss.html


ext4提供有很多特性,当然有一些是前一代文件系统ext3本身就具有的,比如日志功能,但有时候我们却并不需要这些特性,则我们可以禁用它们。ext4文件系统的日志功能就是在牺牲一定性能的情况下增强稳定性的一种手段,但在一些情况,比如Web Server上存在的大量小文件所在的文件系统就是一个典型示例,此时可以禁用ext4的日志功能。
要使用ext4文件系统需要先打开内核对应的编译选项:
[root@localhost linux-2.6.36]# cat .config | grep EXT4
CONFIG_EXT4_FS=m
CONFIG_EXT4_FS_XATTR=y
CONFIG_EXT4_FS_POSIX_ACL=y
CONFIG_EXT4_FS_SECURITY=y
CONFIG_EXT4_DEBUG=y
[root@localhost linux-2.6.36]#
然后下载对应的应用层工具:http://e2fsprogs.sourceforge.net/,“./configure,make,make install”编译获得相应的命令工具:
[root@localhost misc]# pwd
/home/lenky/ext4/tools/e2fsprogs-1.42/misc
[root@localhost misc]# md5sum mke2fs
a2aff0475abb34abdf86f7946b071b38  mke2fs
[root@localhost misc]# md5sum /sbin/mkfs.ext4
a2aff0475abb34abdf86f7946b071b38  /sbin/mkfs.ext4
[root@localhost misc]#
禁用日志功能可以在创建ext4文件系统时就指定:
[root@localhost ext4]# mkfs.ext4 -O ^has_journal /dev/sdd1
mke2fs 1.42 (29-Nov-2011)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
262144 inodes, 1048233 blocks
52411 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=1073741824
32 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
    32768, 98304, 163840, 229376, 294912, 819200, 884736

Allocating group tables: done
Writing inode tables: done
Writing superblocks and filesystem accounting information: done

[root@localhost ext4]# dumpe2fs /dev/sdd1 | grep 'Filesystem features' | grep 'has_journal'
dumpe2fs 1.42 (29-Nov-2011)
[root@localhost ext4]#
或动态(即在ext4文件系统已经创建后)指定,比如打开日志功能:
[root@localhost ext4]# tune2fs -O has_journal /dev/sdd1
tune2fs 1.42 (29-Nov-2011)
Creating journal inode: done
[root@localhost ext4]# dumpe2fs /dev/sdd1 | grep 'Filesystem features' | grep 'has_journal'
dumpe2fs 1.42 (29-Nov-2011)
Filesystem features:      has_journal ext_attr resize_inode dir_index filetype extent flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize
[root@localhost ext4]#
再关闭:

[root@localhost ext4]# tune2fs -O ^has_journal /dev/sdd1
tune2fs 1.42 (29-Nov-2011)
[root@localhost ext4]# dumpe2fs /dev/sdd1 | grep 'Filesystem features' | grep 'has_journal'
dumpe2fs 1.42 (29-Nov-2011)
[root@localhost ext4]#
动态关闭和打开日志功能后可能需要对文件系统进行fsck检查,避免出错:
[root@localhost ext4]# fsck.ext4 -f /dev/sdd1
e2fsck 1.42 (29-Nov-2011)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/sdd1: 11/262144 files (0.0% non-contiguous), 18510/1048233 blocks
[root@localhost ext4]#
更多ext4特性的开启与关闭可以查看man手册:“man mkfs.ext4”的-O选项。
禁用ext4的日志功能后有少许的性能提升:http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=0390131ba84fd3f726f9e24fc4553828125700bb
结果拷贝过来为:
测试方案:iozone -T -t 4 s 2g -r 256k -T -I -i0 -i1 -i2
测试结果:
  ext2  ext4, default  ext4, no journal
initial writes  13.0 MB/s  15.4 MB/s  15.7 MB/s
rewrites  13.1 MB/s  15.6 MB/s  15.9 MB/s
reads  15.2 MB/s  16.9 MB/s  17.2 MB/s
re-reads  15.3 MB/s  16.9 MB/s  17.2 MB/s
random readers  5.6 MB/s  5.6 MB/s  5.7 MB/s
random writers  5.1 MB/s  5.3 MB/s  5.4 MB/s
地址:http://lenky.info/2012/02/02/ext4%e7%a6%81%e7%94%a8%e6%97%a5%e5%bf%97%e5%8a%9f%e8%83%bd/或 http://lenky.info/?p=990

作者:jackxiang@向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除
地址:http://jackxiang.com/post/6206/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!

评论列表
发表评论

昵称

网址

电邮

打开HTML 打开UBB 打开表情 隐藏 记住我 [登入] [注册]