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

Filesystems 向NFS服务器添加功能-压缩/解压缩存储/检索的文件,filesystems,nfs,Filesystems,Nfs,我需要构建一个定制的Suse Linux NFS服务器,它对存储在磁盘上的某些文件进行压缩,并在从磁盘读取文件时对其进行解压缩。这需要对文件系统的远程用户透明,这意味着,如果用户在/archiveDirectoryonnfserver上保存一个名为xyzy.tif的10MB文件,那么当他们在装载的目录上执行ls-l时,他们将看到一个名为xyzy.tif的10MB文件,即使存储在NFS服务器磁盘上的实际文件是xyzy.tif.compressed,它的大小将是2MB 我希望我需要构建一个位于NFS

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


我希望我需要构建一个位于NFS服务器软件堆栈下面的驱动程序,但是,我很难找到从哪里开始。是否存在通过API提供这种定制级别的现有NFS服务器?我是否需要修改开源NFS服务器的源代码,若需要,是否有一个最容易开始的源代码,并且它们的模块化结构是否可以让这变得简单?我很难在internet上找到相关内容,任何指针都会非常感谢。

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

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

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

如果您希望压缩不同的文件类型,则可以考虑在一组ZFS文件系统的顶部放置GLUSTER。 gluster将允许您在不同的底层文件系统上存储某些文件类型(扩展名)。 在本例中,您可以使用所需的特定选项将底层文件系统指定为zfs卷(例如,.zip和.png放在一个未压缩的文件系统上,而像静态html文件这样一次写入和多次读取的文件可能会进行更高的压缩——写入时您将支付一次费用,但读取速度应该非常快,因为它扫描的磁盘块更少,解压缩速度非常快)

如果您将nfs挂载用作nfs服务器,zfs将管理nfs挂载—如果您将gluster放在上面,您不会希望这样做

可以很容易地动态指定每个文件系统的其他属性(atime/noatime,#个拷贝,如果您需要常规raid以外的冗余,可以添加SSD作为缓存设备以获得更高的性能)

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