2012-02-27 39 views
5

假設我有兩個腳本。第一個將mv命令放入一個目錄中,第二個文件暫時檢查目錄並處理這些文件。我關心的情況是第二個腳本開始處理目前僅部分移動的文件。 XFS文件系統可以在現實生活中發生嗎?在Linux上移動文件時的競爭條件

回答

6

這取決於你正在移動的文件。在一個單獨的文件系統中,mv是原子的,否則它必須做一個不是原子的副本(接着刪除原始文件),並且容易出現你提到的那種競爭條件。

FWIW,這是正常的POSIX語義,沒有什麼特別XFS。

+1

這個故事的寓意是,你可以確保你通過確保第一腳本把物品放入來自同一文件系統的目錄簡單的權宜之計安全;如果有疑問,你可以將它們mv到目標目錄的子目錄中*先*然後將它們移到目標目錄以確保它們的到達是原子的。 – zmccord 2012-02-27 12:29:36

1

競爭條件不會在XFS文件系統中的情況下occure。但是,與Unix文件系統單線程inode鎖相比,XFS允許多個進程通過使用靈活的鎖定方案一次讀取和寫入文件。 XFS通過多個進程來關注序列化相同區域上的寫入操作。

XFS使用直接I/O訪問的file.Direct I/O允許應用程序指定其數據未在高速緩衝存儲器被高速緩存。

當使用正常,緩衝I/O,多個讀者可以同時訪問該文件,但只有一個作家被允許在同一時間訪問該文件。使用直接I/O時,多個讀取器和寫入器可以同時訪問該文件。