![同一台机器上的两个 NFS 共享之间传输](https://linux22.com/image/619702/%E5%90%8C%E4%B8%80%E5%8F%B0%E6%9C%BA%E5%99%A8%E4%B8%8A%E7%9A%84%E4%B8%A4%E4%B8%AA%20NFS%20%E5%85%B1%E4%BA%AB%E4%B9%8B%E9%97%B4%E4%BC%A0%E8%BE%93.png)
我有一台机器导出两个目录,每个目录位于一个物理硬盘上。
当文件在这两个共享之间移动时,数据是否完全在网络上传输?如果是这样,有没有办法让传输更像mv
在远程机器上?
答案1
如果您在客户端主机上启动传输,那么是的,所有数据都会通过网络传输。如果您在 nfs 服务器上启动,无论您使用本地目录路径还是挂载点,它都不会通过网络传输。在这两种情况下,您都可以运行 tcpdump 亲自查看这一点。netstat 可能会帮助您看到这一点,但 tcpdump 会向您显示实际的流量数量。
之所以如此,是因为 mv 对 NFS 一无所知,它使用本地内核上的系统调用,而内核不知道挂载点 A 和 B 都是从同一台服务器导出的。它以相同的方式处理数据。
获得所需行为的唯一方法是通过在远程服务器上发出 shell 命令来执行传输。
答案2
NFS 服务器端复制是拟议的扩展NFSv4.2.
虽然最初的支持已经进入Linux 3.11内核,您可能需要等待一段时间。
答案3
这取决于您从哪个系统和哪个应用程序进行移动。
如果您通过这些共享所在的机器执行此操作,它将通过操作系统进行本地传输。示例:通过 ssh 连接到服务器并使用 MV 命令或打开文件浏览器并将文件从一个文件浏览器传输到另一个文件浏览器(只要两个文件浏览器都打开到同一服务器上的资源)。
如果您在远程会话中使用两个文件浏览器,则原因在于无论您在终端执行什么操作,都会首先在服务器端进行转换。服务器查看请求并确定到达目的地的最短路径,并且由于它将自己视为源和目的地,因此流量永远不会离开服务器(除了您看到的文件传输的更新跟踪信息之外)。
如果您通过几台计算机的复杂远程会话执行此操作,强制隧道传输流量,那么传输将通过网络连接进行。