有没有不使用文件路径的文件系统?

Are there any file systems that do not use file paths?

处理数据时,文件路径本质上是可疑的。 假设我有一个名为 find_brca 的程序的假设情况,一些名为 my.genome 的数据都在 /Users/Desktop/ 目录中。

find_brca 接受一个参数,一个基因组,运行s 大约 4 小时,以及 returns 这个人一生中患乳腺癌的概率。有些人,有很高的可能性,可能会立即切除双侧乳房作为预防措施。

显然,在这种情况下,/Users/Desktop/my.genome 确实包含我们认为的基因组是绝对重要的。没有重做。 "oops we used an old version of the file from a previous backup" 或任何其他技术问题将不会被患者接受。我们如何确保我们正在分析我们认为正在分析的文件?

为了让事情变得更棘手,我们还要断言我们不能修改 find_brca 本身,因为我们没有编写它,它的闭源、专有等等。

您可能认为 MD5 或其他加密校验和可能会有所帮助,虽然它们确实在一定程度上有所帮助,但您只能对 and/or 之前的文件进行 MD5 之后 find_brca 运行,但您永远无法确切知道 find_brca 使用了哪些数据(如果不使用 DTrace/ptrace 等进行一些严肃的低级系统探测)。

问题的根源在于文件路径与实际数据没有 1:1 关系。只有在文件只能通过校验和请求文件的文件系统中——一旦数据被修改,它的校验和也会被修改——我们才能确保当我们提供 find_brca 基因组文件路径 4fded1464736e77865df232cbcb4cd19 时,我们实际上正在读取正确的基因组。

有这样工作的文件系统吗?如果我想创建这样一个文件系统,因为 none 当前存在,您会建议我如何去做?

我想说这个问题有点模糊,但是,对于您的部分问题,可以给出几个答案。

首先,并不是所有的文件系统都缺少path/data对应关系。在许多(如果不是大多数)文件系统上,文件仅通过其路径来标识,而不是通过任何 ID。

接下来,如果你想保证数据在应用程序处理时不被更改,那么方法取决于正在使用的文件系统和这个应用程序处理文件的方式(如果它保持打开或打开并根据需要关闭文件)。

最后,如果您担心攻击者在使用文件数据时以某种方式更改文件系统上的数据,那么您可能遇到了比文件路径更大的问题,并且应该解决该问题预先。

附带说明一下,您可以实施虚拟文件系统(Linux 上的 FUSE,Windows 上的 CBFS),它将为您的应用程序提供从其他地方获取的数据,无论是内存、数据库或云。这种方法也回答了你的问题。

更新:如果你想完全摆脱文件路径并让数据通过散列寻址,那么 NoSQL 数据库可能是你最好的选择,其中散列是关键。

我对稳定性有疑问,但 hashfs 看起来和你想要的完全一样:http://hashfs.readthedocs.io/en/latest/

HashFS is a content-addressable file management system. What does that mean? Simply, that HashFS manages a directory where files are saved based on the file’s hash. Typical use cases for this kind of system are ones where: Files are written once and never change (e.g. image storage). It’s desirable to have no duplicate files (e.g. user uploads). File metadata is stored elsewhere (e.g. in a database).

注意:不要与 hashfs 混淆,我的一个学生几年前做过:http://dl.acm.org/citation.cfm?id=1849837