最近,我正在测试ext4文件系统的正确用法。我的专家是什么:ext4如何与fallocate协同工作
当系统崩溃的时候,数据已经写回来了ok不能丢失,但是可以修改。
这里是我的用法:
1.调用fallocate来分配中心空间 fallocate(fd,0,0,4 * 1024 * 1024); // 4MB
2.调用fsync(fd)让数据和元数据写入磁盘
3.然后我调用函数随机写入4k大小的文件(随机数据但不是0)。用O_DRICT标志,但不调用fsync。我记录了返回写入的偏移量。
4.检查记录的偏移量。但我发现在一些偏移量,读取4k数据,是0.它似乎意味着偏移不像孔文件。
我的问题是:
< 1.为什么叫fallocate和FSYNC文件的元数据似乎仍然之后 表明一些块读取它返回null时不使用,所以。这是我的理解。
< 2.有其他api可以调用,可以确保在分配文件空间不是漏洞,之后当写入数据返回OK时使用O_DIRECT可以确保即使系统崩溃也不会丢失数据。
Thanks.