如何创建类似 /dev/null 的“黑洞”目录?

dog*_*ane 98 filesystems directory io-redirection

我想创建一个“ /dev/null”目录(或“黑洞”目录),这样写入它的任何文件都不会真正写入,而只是消失。

我有一个将大型临时文件写入目录的应用程序。我无法控制文件的名称,而且我并不真正关心这些文件的内容。我可以编写一个脚本来定期破坏这些文件,但这些文件会很快写出并填满我的磁盘。我正在寻找更聪明的东西。我希望应用程序“认为”它正在写出这些文件,而实际上,写的内容只是在另一端被丢弃。

另请参阅这个旧的相关线程。

Gil*_*il' 53

我知道的任何 unix 都不支持开箱即用,但您几乎可以使用FUSE做任何事情。至少有一个 nullfs¹ 实现,/dev/null这是一个文件系统,其中每个文件都存在并且行为类似于(这不是我见过的唯一实现)。

¹ 不要与*BSD nullfs混淆,后者类似于bindfs


Mar*_*ley 11

另一种方法是 LD_PRELOAD 包装器;基本上是一个在 libc.so 之前加载的小型共享库,并拦截对“open”的调用,并使用检查预期文件路径的内容并替换“/dev/null”(如果它在目标目录中)。

这具有 (a) 完全在用户空间中的优点 - 不需要内核黑客攻击;(b) 只影响单一错误的申请。

一个简单的例子是在http://www.noah.org/wiki/LD_PRELOAD_notes,但在你的情况下,你会想要拦截“open”和“creat”系统调用。

  • ...假设应用程序通过 libc 进行系统调用,而不是直接通过 `int 0x80`/`syscall`/`sysenter`/别的什么。 (4认同)

小智 5

我已经基于 linux 内核中的 ramfs 示例创建了一个内核模块,它基本上是一个名为 nullfsvfs 的黑洞文件系统。FUSE 系统实现需要将数据从用户复制到内核空间,与作为内核模块的直接实现相比,速度相当慢。看:

https://github.com/abbbi/nullfsvfs