我们正在运行一个 Ubuntu 服务器,它是使用 samba 的几个 Windows XP 客户端的主域控制器。
我们在 Windows 上运行的某些进程会生成大量 xml 文件。遗憾的是,我们无法控制这些数据的存储方式(例如,我们无法更改程序以在加载/保存 xml 文件时对其进行 gzip 或解压缩,这些文件由第三方提供,我们需要根据合同使用这些程序)。
由于我们的硬盘经常溢出,我想知道是否有像 Ubuntu/Linux 的 NTFS 压缩这样的东西可以为客户端透明地压缩这些文件。
更多背景信息:
- 处理这些文件总是意味着将它们完全读入内存、在那里进行更改并写回。
- 一次只有一个客户端可以访问这些文件的目录,因此不存在并发和锁定问题。
- 服务器已经有 4 个 2TB 数据驱动器。没有更多物理空间可以添加更多驱动器(并且我想避免添加更多磁盘)
- 数据必须保持活跃大约两年,之后将被存档并从磁盘中删除。
我认为完美的解决方案是将某种插件插入到 samba 服务器中,每当创建/写入或读取与给定通配符/正则表达式匹配的文件时,该插件就会被调用,使用 gzip/ungzip 动态压缩/解压缩文件。
或者,我可以想象一个在客户端执行相同操作的 Windows 文件系统驱动程序。
我希望避免在此过程中出现任何手动步骤,因为它很容易出错。
有这样的事吗?我已经用过 Google,但找不到任何解决方案。
(我本来想为此创建一个压缩标签,但目前我还不被允许这样做。)
答案1
您可以在 SAMBA 共享中的目录中安装压缩文件系统,并将 XML 文件保存在其中。FUSE 提供至少三个可用于此目的的文件系统:compFUSEd、FuseCompress 和 LZOlayer_fs。
还有一个内核补丁将透明压缩插入到 ext2 文件系统但它有被废弃然后又被重新采用的记录,它仅适用于 ext2(不适用于 ext3/4),并且它绝对比使用 FUSE 更具侵入性。
答案2
十年过去了,我终于找到了这个问题的答案:虚拟文件系统
它的许多功能包括使用 gzip 进行透明压缩(快速)和其他算法(压缩效果更好但速度较慢/需要更多 CPU 时间)。
它也相当成熟,所以我对它的可靠性毫不怀疑。而且由于它现在是大多数 Linux 发行版的一部分,因此兼容性也毫无问题。