如何將目錄載入到檔案系統快取中?

如何將目錄載入到檔案系統快取中?

我有一個很少訪問的幾 GB 目錄,但是當它被訪問時,我希望能夠快速讀取其中的文件,而不必等待。由於這些檔案很少被訪問,因此它們不會位於檔案系統快取中,但我建議 Linux 在我訪問它們之前將它們預先載入到檔案系統快取中。

有些人可能會爭辯說,我需要等待它第一次加載它們,所以我沒有節省任何時間——足以說,在我的特定用例中,我可以自動執行此操作,所以這不是保存的問題系統時間,這是節省用戶時間的問題(因為如果文件被緩存,他們不需要等待)。

我還意識到,如果不使用 tmpfs 之類的東西,檔案系統快取並不能得到保證,它是對作業系統的建議,我對此感到滿意。

所以看起來顯而易見的方法是:

tar -cf - /mydirectory > /dev/null

然而,當我這樣做時,命令會立即返回,即使對於幾個 GB 的目錄也是如此。 bash 似乎發現輸出被定向到 /dev/null 並優化了整個命令,因此 tar 實際上甚至沒有從該目錄中讀取。

讓作業系統讀取目錄中所有檔案的簡單命令是什麼?

答案1

進行此優化的不是 bash,而是 GNU tar。它可以識別其輸出何時讀取文件內容/dev/null以及何時不讀取文件內容。

要么安排輸出不為/dev/null

tar -cf - /mydirectory > /dev/zero

或使用不同的工具,例如

find . | cpio -o >/dev/null
find . -type f -exec cat {} + >/dev/null

相關內容