Filesystems

如何創建類似 /dev/null 的“黑洞”目錄?

  • March 23, 2022

我想創建一個“ /dev/null”目錄(或“黑洞”目錄),這樣寫入它的任何文件都不會真正寫入,而只是消失。

我有一個將大型臨時文件寫入目錄的應用程序。我無法控製文件的名稱,我並不真正關心這些文件的內容。我可以編寫一個腳本來定期破壞這些文件,但這些文件很快就會被寫出並填滿我的磁碟。我正在尋找更聰明的東西。我希望應用程序“認為”它正在寫出這些文件,而實際上,這些寫操作只是在另一端被丟棄。

另請參閱這個舊的相關執行緒。

我知道的任何 unix 都不支持開箱即用,但你可以用FUSE做幾乎任何事情。至少有一個 nullfs¹ 的實現,一個文件系統,每個文件都存在並且行為類似/dev/null(這不是我見過的唯一實現)。

¹不要與*BSD nullfs混淆,它類似於bindfs

另一種方法是LD_PRELOAD包裝器;基本上是一個小型共享庫,它在 libc.so 之前載入,並open()使用檢查預期文件路徑並替換/dev/null它是否在目標目錄中的東西來攔截對的呼叫。

這具有(a)完全在使用者空間中的優點 - 不需要核心黑客;(b) 僅影響單一錯誤應用程序。

一個簡單的例子是http://www.noah.org/wiki/LD_PRELOAD_notes,但在你的情況下,你會想要攔截access(), open()&creat()系統呼叫。要獲得更完整的實現,您可能還需要攔截chdir()accessat()openat()和可能的其他內容。

引用自:https://unix.stackexchange.com/questions/9332