向NFS服务器添加功能 - 压缩/解压缩存储/检索的文件

时间:2012-05-30 14:27:33

标签: filesystems nfs

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

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

这篇文章有点陈旧,所以你可能已经知道了一些选项,但还有其他几个(都是服务器端)。

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

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

如果您将nfs挂载用作nfs服务器,它将管理nfs挂载 - 如果您将gluster置于顶层,则不会想要这样。

很容易为每个文件系统动态指定其他属性(atime / noatime,副本数量,如果你想要除正常raid之外的冗余,你可以添加SSD作为缓存设备以获得更高的性能)。

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