步骤是这样:
1. mkfs.ext4格盘
2. 用fio工具随机写裸盘
3. mount盘为ext4文件系统并开始使用
发现一切使用正常,很多块盘都是这样做的,无一出错,使用了很久dmesg里连WARN都没有。但是一旦换成mkfs.ext3,使用一段时间就有报错了。
这个步骤的顺序肯定是错的,应该先写裸盘再mkfs,但是同事的问题是:为什么ext4不怕而ext3就不行了?
用dumpe2fs查看ext4的feature,嫌疑最大的是uninit_bg,因为带上这个ext4默认的标记后,mkfs.ext4就不会 把block group的信息初始化为0,而是等mount后由内核ext4在使用到该block group时再临时初始化,所以在mount前即使block group被其它工具写坏了也不怕。代码见:
e2fsprogs
misc/mke2fs.c
main() --> ext2fs_initialize()
ext2fs_initialize()
{
for (i = 0; i < fs->group_desc_count; i++) {
/*
* Don't set the BLOCK_UNINIT group for the last group
* because the block bitmap needs to be padded.
*/
if (csum_flag) {
if (i != fs->group_desc_count - 1)