有没有类似 git 的文件系统?

有没有类似 git 的文件系统?

Git 根据计算出的任何文件的哈希值,将内容唯一地存储在其存储库中。如果我的目录中某处有同一个文件的两个副本,git 实际上只会存储一次。

我想知道同样的概念是否已经在操作系统级别作为某种文件系统实现?

如果文件系统默认以这种方式运行,它将很好地帮助dll地狱问题。本质上,它会为您自动进行符号链接。任何应用程序都可以打包(像 jar 一样)到包含其所有依赖项的目录中,并且无需额外的存储成本。

Ruby 爱好者通过将库发布为 ruby​​gems 来共享它们。然而,这种共享 gem 的努力导致了部署噩梦,导致供应商一切将所有依赖项复制到本地文件夹的概念以避免此类噩梦。

答案1

你正在寻找的是“重复数据删除”。虽然它通常由专门的存储产品供应商实现,ZFS 文件系统也实现了它。大多数 Unix 衍生的操作系统可以使用 ZFS,因此我推荐它作为首先要查看的地方。

答案2

Network Appliance, Inc. 多年来一直拥有这样的存储能力,事实上,他们曾向 Sun Microsystems 投诉过他们的 ZFS 文件系统,并且做了 Aaron Miller 在其已接受的答案中提到的事情。值得一提的是,这些投诉在大约 3 年后与 Oracle 达成了和解。

自 2000 年以来,我一直将此作为企业解决方案,效果很好。第一次“复制”后的存储成本在文件发生变化时产生。否则,多次“复制”只会稍微增加命名空间。

我认为这并没有回答有关“操作系统级别”的问题,而是回答了“文件系统级别”的问题。

答案3

新的 Apple 文件系统 (APFS,之所以这样命名是因为已经存在 AFS) 具有这种“自动硬链接”/“重复数据删除”的魔力。macOS 10.13 在大多数 Mac 上都原生支持它,iOS 11 也是如此。

话虽如此,我觉得这还不足以让它“像 git 一样”,因为如果它像 git 一样,那么它还会在给定的时间点对我的目录结构的状态进行加密校验,这样我就可以确保没有人入侵我的计算机或修改我的系统目录。事实上,我使用 git repos 来跟踪我的 Mac 上的某些关键系统目录,如 Apache 配置文件、LaunchDaemons、LaunchAgents 和其他一些目录——这样,当我安装软件或运行我的服务器一段时间时,我就可以查看是否有任何问题。

当一段时间内没有使用文件时,APFS 还可以巧妙地将文件从文件系统卸载到云端,但它们看起来仍然像在那里,并会根据需要从云端重新加载。

你可以随时构建一个 Hackintosh 并使用它。BSD 很有趣。

相关内容