题 在同一台计算机上的两个NFS共享之间传输


我有一台机器导出两个目录,每个目录在一个物理硬盘上。

当文件在这两个共享之间移动时,数据是否完全在网络上传输?如果是这样,有没有办法让转移行为更像一个 mv 在远程机器上?


4
2017-10-21 17:58




移动文件时 怎么样? - MDMarra
@MDMarra在安装这些共享的机器上使用mv命令,或在图形shell中拖动文件,如OS X上的Finder。 - alecail
事实上,这是两个单独的导出,让我怀疑它将通过您的系统移动。如果它是单个导出,我怀疑它将由RPC完成。虽然不完全确定。 - Zoredache
为什么不拿一个pcap或使用netstat查看流量/连接,看看有什么,如果有的话,通过网络出去?或者使用strace来查看使用mv进行的呼叫? - MaQleod


答案:


如果您在客户端主机上启动传输,则是,所有数据都在线路上传输。如果您在nfs服务器上启动,无论您是使用本地目录路径还是挂载点,它都不会触发。在这两种情况下,您都可以自己运行tcpdump。 netstat可能会帮助你看一点,但tcpdump会显示实际的流量。

原因是,因为mv对NFS一无所知,它在本地内核上使用系统调用,而内核不知道挂载点A和B都是从同一服务器导出的。它对数据的处理方式相同。

获得所需行为的唯一方法是在远程服务器上发出shell命令以在那里进行传输。


2
2017-10-21 22:52





NFS服务器端副本 是一个建议的扩展 NFSv4.2
虽然最初的支持使其成为了 Linux 3.11内核,你可能会等待一段时间。


7
2017-10-22 00:00



在上游linux内核中实现的服务器端复制 - kofemann


这取决于您正在进行的系统和应用程序。

如果您是通过这些共享所在的机器进行的,它将通过操作系统在本地传输。示例:ssh到服务器并使用MV命令或打开文件浏览器并将文件从一个文件浏览器传输到下一个文件浏览器(只要两个文件浏览器都打开到同一服务器上的资源)。

这样做的原因是,如果你在远程会话中使用两个文件浏览器,那是因为无论你做什么,都要先在服务器端进行翻译。服务器查看请求并确定到目的地的最短路径,因为它看到自己是源和目的地,所以流量永远不会离开服务器(在文件传输中看到的更新的跟踪信息之外)。

如果您是通过几台计算机通过复杂的远程会话来执行此操作,那么您将强行隧道传输流量,然后通过网络连接进行传输。


1
2017-10-21 19:18



但是如果我在远程计算机上打开两个文件浏览器,我就不再使用NFS了。这相当于 ssh mybox mv /path/to/file1/ /path/to/another/place - alecail
如果您将共享映射为NFS驱动器,那么您是正确的。如果没有,那么没有。 - CIA