2017-03-17 49 views
0

最近,我正在测试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. 

回答

0

只写入文件空间可以消除漏洞。没有书写,没有脏页面,fsync根本没有做任何事情。

我在想你是怎么执行你第4步的。看来你是通过手动崩溃来做到的,是吗?如果您在写入后没有崩溃地读取它,它不应该为零,前提是您写入非零。如果在崩溃后读取它,如果存在磁盘缓存,则可能发生零。然而,这种零不像孔,它们是从磁盘读取的零(很可能磁盘包含零)。