我可以讓 tar 在讀取檔案時不使用檔案系統快取嗎?

我可以讓 tar 在讀取檔案時不使用檔案系統快取嗎?

我們在生產 Web 伺服器上有一項定時作業,需要對整個檔案系統中的檔案進行壓縮。它運行大約 105 分鐘,在此期間,Apache 開始交換,因為所有幾 GB 檔案的讀取都擴展了檔案系統快取的記憶體量。

tar 正在讀取的資料不需要位於檔案系統快取中。它會進入 tarfile 中,僅此而已。我們可以這樣說嗎tar cvf whatever/ --no-system-file-buffer-reads?我的閱讀man tar並沒有發現任何看起來有幫助的東西。

您不必指出這可以被視為“醫生,當我那樣做時會很痛!所以不要那樣做”的情況。不知何故,我們需要將檔案轉儲到 tar 檔案中,所以不這樣做不是一個選擇。

答案1

我認為這個問題已經得到解答這裡:

有的是無緩存實用程序,可以添加到 ionice 和 Nice 之類的命令前面。它的工作原理是預先載入一個庫,該庫將標誌添加 posix_fadvisePOSIX_FADV_DONTNEED任何打開的呼叫中。

簡單來說,它通知內核該特定檔案不需要快取;內核通常不會快取該檔案。看這裡了解技術細節。

它對於任何巨大的複製作業都會帶來奇蹟,例如,如果您想在後台備份一個多 TB 的磁碟,同時對正在運行的系統影響最小,您可以一起做一些事情nice -n19 ionice -c3 nocache cp -a /vol /vol2

相關內容