2017-03-17 63 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步的。看來你是通過手動崩潰來做到的,是嗎?如果您在寫入後沒有崩潰地讀取它,它不應該爲零,前提是您寫入非零。如果在崩潰後讀取它,如果存在磁盤緩存,則可能發生零。然而,這種零不像孔,它們是從磁盤讀取的零(很可能磁盤包含零)。