2

我需要构建一个自定义的 Suse Linux NFS 服务器,它对存储在磁盘上的某些文件进行压缩,并在从磁盘读取文件时解压缩文件。这需要对文件系统的远程用户透明,这意味着如果用户在 /archiveDirectoryOnNFSServer 上保存一个名为 XYZZY.tif 的 10MB 文件,当他们在该挂载目录上执行 ls -l 时,他们将看到一个 10MB 文件称为 XYZZY.tif,即使存储在 NFS 服务器磁盘上的实际文件将是 XYZZY.tif.compressed,并且大小为 2MB。

我希望我需要将其构建为位于 NFS 服务器软件堆栈下方的驱动程序,但是,我很难找到从哪里开始。是否存在通过 API 提供此级别自定义的现有 NFS 服务器?我是否需要修改开源 NFS 服务器的源代码,如果需要,是否有一个最容易开始的,并且它们是模块化结构的,这样这将是直截了当的吗?我很难在互联网上找到相关内容,任何指针都将不胜感激。

4

2 回答 2

1

IMO 这种功能绝对不是 NFS 服务器的责任(nfs 服务器应该通过 nfs 提供文件),而是底层文件系统的责任。但是,在 Linuxland 中没有太多选择,但您可以从检查fusecompressbtrfs开始。

于 2012-05-30T14:36:33.433 回答
1

这篇文章有点老了,所以你可能已经知道这里有一些选项,但还有一些其他选项(都用于服务器端)。

http://zfsonlinux.org/ zfs 文件系统具有内置压缩功能。我通常使用 lzjb,因为它是最快的压缩算法并且做得很合理(MySQL DB 的压缩率为 2-4 倍,具有非压缩数据的文件系统大约为 4 倍)。您可以根据希望提供压缩的 CPU 时间来选择算法。

如果您想要压缩不同的文件类型,那么您可以考虑在一组 zfs 文件系统之上放置 gluster。gluster 将允许您将某些文件类型(通过扩展名)存储在不同的底层文件系统上。在这种情况下,您将底层文件系统指定为带有您需要的特定选项的 zfs 卷(例如,.zip 和 .png 继续使用未压缩的文件系统,而您编写一次并多次读取的内容(如静态 html 文件)可能会继续使用更高的压缩率——写入时您只需支付一次费用,但读取速度应该非常快,因为它扫描的磁盘块更少并且解压缩速度非常快)

如果您将 zfs 用作您的 nfs 服务器,zfs 将管理 nfs 挂载 - 如果您将 gluster 放在顶部,您将不会想要这个。

很容易动态地指定每个文件系统的其他属性(atime/noatime,如果您想要除普通 RAID 之外的冗余,您可以添加 SSD 作为缓存设备以获得更高的性能)。

在这些解决方案中,您仍然通过网络发送完整的未压缩文件,因此它不能弥补网络性能,但如果您试图加快磁盘 IO 或从驱动器中获得更多利用率,它会提供很多选择。

于 2014-01-12T06:44:30.513 回答