Filesystems
如何創建類似 /dev/null 的“黑洞”目錄?
我想創建一個“
/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()
和可能的其他內容。