最近,我正在測試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.