先了解一下buffer與cache:
buffer,為了解決寫磁盤的效率;
cache,為了解決讀磁盤的效率。
Linux系統為了提高讀寫磁盤的效率,會先將數據放在一塊buffer中。
在寫磁盤時並不是立即將數據寫到磁盤中,而是先寫入這塊buffer中了。
此時如果重啟系統,就可能造成數據丟失。
sync命令用來flush文件系統buffer,這樣數據才會真正的寫到磁盤中,並且buffer才能夠釋放出來。
flush就是用來清空buffer。
sync命令會強制將數據寫入磁盤中,並釋放該數據對應的buffer,
所以常常會在寫磁盤後輸入sync命令來將數據真正的寫入磁盤。
如果不去手動的輸入sync命令來真正的去寫磁盤,linux系統也會有兩種寫磁盤的時機:
1. kflush內核線程周期性的去寫磁盤;
2. buffer已滿不得不寫。
待確認問題:
是有一個kflush的thread去周期性的sync嗎?