什么是 POSIX 存储和 NFS?它们之间有什么区别?

10
在生物信息学中,我们越来越多地使用基于集群的部署,如Kubernetes、Spark和Hadoop。文档中经常出现“POSIX存储”这个术语。
POSIX存储和NFS块存储(EBS)有什么区别?这些术语是否可以互换使用?它基本上是否意味着任何不是对象存储(S3)或Microsoft(SMB、CIFS)的存储?

1
这应该被移动到[su]。 - OneCricketeer
为什么它必须被移动到超级用户?当编写旨在在具有较弱语义的文件系统(例如NFS)上正确运行的软件时,POSIX语义和NFS语义之间的差异至关重要。 - dmeister
1个回答

24

我理解:

POSIX存储是指可以使用POSIX文件系统功能(即通常的“fopen”)访问的任何存储,并遵守POSIX文件系统要求:这意味着它必须提供几个设施,如POSIX属性、或者严格遵循POSIX语义的原子文件阻塞。

这通常是通过POSIX操作系统直接或通过SAN连接到主机的存储。此外,文件系统必须支持POSIX。

NFS、CIFS和其他NAS文件系统以及HDFS(Hadoop)都不与POSIX兼容。它们建立在网络协议之上,通常由其他文件系统支持,其访问语义不允许与POSIX兼容(但请参见@SteveLoughran有关NFS的说明)。

NTFS和FAT是文件系统,但它们不支持POSIX(它们不支持具有相同语义的锁定)。Windows也没有提供POSIX兼容函数,但即使在Linux上,这些文件系统也不能完全实现POSIX存储。它们不是"POSIX存储"。

Amazon EBS卷是块存储(SAN),因此一旦卷附加到主机上,如果您使用的文件系统是POSIX,并且正在运行POSIX操作系统,则可以将其视为“POSIX存储”。

S3不是一个文件系统,它有自己的对象访问API,因此它不能支持POSIX文件函数。

大多数典型的Linux文件系统(在由POSIX主机直接挂载时)都支持POSIX(即ext3、ext4、xfs、zfs等)。


2
就此而言,Hadoop不仅仅是一个网络协议,HDFS是一个文件系统。但它不支持seek()和在文件末尾写入,也不能写入已存在的文件而非追加。因此它不是Posix。NFS大多数是POSIX;[Sandberg86],“Sun网络文件系统:设计、实现和经验”涵盖了这一点。 - stevel
@SteveLoughran Hadoop相关信息是由其他用户(cricket_007)添加的,但我已经编辑了答案以更准确地指出这一点。 - jjmontes
非常感谢您的评论,它非常简单和高效。否则,您可以举例说明为什么NTFS和FAT不支持posix。 - Mehdi TAZI
我不是专家,但FAT不支持某些锁定语义(例如在覆盖文件时原子重命名),甚至没有足够的POSIX元数据(即文件访问时间非常粗略)。NTFS支持无法从POSIX上下文处理的元数据(如重解析点),这使得文件系统在POSIX客户端中看起来不同,在Windows主机挂载时,您无法重命名打开的文件。就个人而言,当通过NFS提供NTFS卷并同时访问它们时,我遇到了严重的滞留文件锁问题。 - jjmontes
很好的回答,只是关于NFS的一个更正,引用自AWS文档:“Amazon EFS提供弹性、共享的文件存储,符合POSIX标准。” https://docs.aws.amazon.com/efs/latest/ug/creating-using.html - Roman Sinyakov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接