我正在尝试在多台 Linux 机器之间共享文件。 2023 年,NFS 是实现这一目标的好方法吗?
我对NFS了解不多。我的印象是 NFS 很旧、有缺陷、不可靠、设计糟糕且过时,并且应该仅用于与旧系统的向后兼容性。这在多大程度上是正确的?使用 NFS 进行新部署是否明智?我可以使用更好的东西吗?
答案1
TL;DR:不,NFS 仍然相关、活跃,并且在许多情况下都是不错的选择。
是什么让 NFS(中)适合您的用例?
这实际上取决于您的用例。我不同意 NFS 总体上已经过时或总体上设计得很糟糕。它绝对不是“旧”,因为它尚未更新以符合现代要求:NFS 4.2 是 2016 年的,SMB 3.1.1 也是 2016 年的,我不知道每个协议修订版的功能有多少已经分别在 Linux 内核服务器和客户端以及 Samba 中实现。
NFS 现状
它是一个远程过程调用(RPC) 协议:您的客户端通过它所做的事情是调用功能在服务器上,服务器将结果发送给您。然后,您的客户端使用此机制在本地为您提供文件系统。
这是一个相当干净的设计——很清楚谁是国家的“所有者”,这通常会让分布式系统变得困难。然而,这意味着整个系统需要在不同的网络延迟等方面变得更加智能。您确实需要较新版本的 NFS 来实现某些功能。那么,这种函数式方法就很棒了:复制服务器上的文件只是对服务器的函数调用;从大文件的中间请求一些文件内容,以及告诉服务器您的软件可能很快需要文件的某些部分之类的事情都会很好地工作 - 并且本质上符合 UNIX 文件系统的工作原理,比 CIFS 更好一些。
可悲的是,很多有关如何设置 NFS 的网络材料来自 NFSv3 时代 – 该时代本应在 23 年前结束。但优化网络协议很困难,因此人们复制了他们的最佳实践:有些仍然适用,有些只是过时了。坦率地说,NFS 最重要的是存在文档问题,例如,对于典型的现代硬件和不同的网络大小和速度没有良好的通用指南。很多人认为在开始设置之前您需要读一两本书是可以的。
但是,老实说,Fedora-oid 操作系统上的默认配置可能没问题(没有在其他操作系统上使用 NFS 的经验)。但是,如果可能的话,您肯定希望在每次导出时“压缩 root”,并且您需要真正的 Kerberos 身份验证。这是超级安全的“企业级”,微软的 Active Directory 也基于它。但它是一个进入障碍,如果没有它,您的服务器就会信任客户端,他们声称正在访问文件的用户实际上就是该用户。
备择方案
有几种选择;在这里列出所有替代方案是行不通的(我不是来自那个领域),但是小型网络管理员会遇到的主要问题:
- SMB/CIFS,使用 Samba:“Windows 世界兼容”方法。如果设置正确,可能会大致接近 NFS 速度。加密时可能会出现性能问题,安装程序需要单独保留用户数据库(通常)或与 NFS 相同的企业级“Active Directory”(类似)作为用户管理基础。通常比NFS更宽松,即存在两台不同机器访问同一个文件的情况,然后这些是不同的。
- iSCSI:如果您需要导出只读文件系统(例如,静态启动映像存档):您甚至可以从不同的操作系统提前启动。更多的是“共享我的磁盘设备”而不是“共享我的文件”。
- SSHFS:适合只有一个用户访问相同文件的用例;最近,性能和稳定性得到了显着的改进。但现在(2023 年 7 月)自 2022 年 5 月起就不再维护。不知道我是否愿意长期押注它,而且,绝对不是您想要的多个用户访问相同文件的情况,因为没有一致性协议已打开文件 x 的客户端 A 将看不到客户端 B 对文件 x 所做的操作,如果相关部分已在本地传输(通常情况下)。
- Lustere、Ceph 文件系统……:通常,如果您的计算机不能填满自己的房间,那么您就太小了,无法照顾这些:)
因此,实际上,在所有这些替代方案中,Samba 服务器似乎是唯一可行的选择。如果您需要与Windows互操作,Samba是正确的选择,而如果您关心最后30%的性能并愿意投入时间,那么Samba就是错误的选择。