sync 和 fsfreeze 在產生一致的磁碟數據方面有何不同?
在執行的 linux 機器上,文件系統中的記憶體內容應該寫入磁碟。
fsfreeze 停止對文件系統的新訪問並在磁碟上創建一個穩定的映像。
因此,似乎使用任一命令都可以在發出命令時實現數據的“穩定磁碟”表示。
顯然,
fsfreeze
, 被描述為 - 另外 - 暫停進一步的“新訪問”。現在這個問題尋求資訊,如果為了獲得一致的磁碟映像(即,用於備份磁碟文件系統數據的備份),使用同步和 fsfreeze 之間是否有任何區別。
我假設要回答這個問題,可能有必要考慮使用的文件系統,因為不同的文件系統有不同的方式來確保(或不)中間狀態被原子地送出到磁碟。
個人測試表明,
fsfreeze
文件btrfs
系統確實總是以無響應的控制台結束,需要硬重置。另一方面,同步並沒有(沒有諷刺意味)凍結系統。
因此,似乎使用任一命令都可以在發出命令時實現數據的“穩定磁碟”表示。
是的,但在
sync
這種情況下,“穩定的磁碟”狀態可能非常短暫——在sync
發出之後所做的任何更改都可能使文件系統再次不一致。
fsfreeze
使用FIFREEZE
沒有超時。正如您所發現的,這可能會導致系統凍結,因為在受影響的文件系統上無法進行任何寫入——並且寫入是在多種情況下發出的(例如,寫入您的 shell 的歷史記錄)。有一個緊急解凍組合鍵,SysRq``j
,您可以使用它(除非它已被禁用)。關鍵
FIFREEZE
在於,當它生效時,您可以讀取凍結文件系統下的儲存並建構儲存的一致映像——即數據和元數據完全同步的映像。只有,並且在
sync
完成時飛行中的更改sync
將在磁碟上完成,但是複制底層儲存不一定會產生一致的圖像,因為後續寫入可能已經開始觸及儲存。複製這樣的圖像應該允許您檢索您關心的所有數據,並且在許多情況下,任何部分寫入的更改都不會阻止文件系統恢復;但是您不能保證圖像可以按原樣使用,無需修復,即使在記錄、日誌或寫時復製文件系統上也是如此。