我使用的全文搜索引擎将索引数据存储在NFS存储中。由于频繁的读写操作,我想为每个表文件预分配大量连续的磁盘空间,因此采用了posix_fallocate。但是,在NFS卷上,我的小型演示失败了,并响应“EOPNOTSUPP”以拒绝posix_fallocate。NFS协议/规范是否包括posix_fallocate场景?
我使用的全文搜索引擎将索引数据存储在NFS存储中。由于频繁的读写操作,我想为每个表文件预分配大量连续的磁盘空间,因此采用了posix_fallocate。但是,在NFS卷上,我的小型演示失败了,并响应“EOPNOTSUPP”以拒绝posix_fallocate。NFS协议/规范是否包括posix_fallocate场景?
posix_fallocate
,但是posix_fallocate
的定义意味着EOPNOTSUPP
不是一个错误代码,它会被返回。看起来很可能问题的提问者实际上是在使用Linux上的fallocate
,因为它可以返回EOPNOTSUPP
)。fallocate
(http://wiki.linux-nfs.org/wiki/index.php/Fallocate),但是:posix_fallocate
,在没有仔细观察或事先手动检查(例如通过进行平台本地的fallocate
调用并检查是否失败或不支持)之前,您永远无法知道Linux glibc的 posix_fallocate
调用是真实的还是仿真的。如果已经进行了本地调用,为什么还需要posix_fallocate
调用?此外,不同的平台对于本地的fallocate
调用有不同的调用方式(或者完全缺少该功能),因此如果需要可移植性到非Linux平台,则需要为每个平台编写适当的本地fallocate
包装器。如果即使下面的内容没有支持它的调用,您也必须进行预分配,那么您将不得不手动执行它(例如通过漂亮的大块写入或类似glibc的posix_fallocate
的黑客方法...)。fallocate
),它可以比进行完整写入要快得多,因为文件系统可以通过设置适当的元数据来满足它。
fallocate()
更低效。 - Ctxposix_fallocate()
函数,但是这种模拟似乎存在一些bug。 - Andrew Henle