我想知道 Linux 上可用的哪些文件传输协议支持服务器端复制(并且不会在内部下载和重新上传文件)。我拥有的最简单的用例是将大文件(例如 VM)从一个目录复制到同一共享上的另一个目录。
我知道 Samba 4.1.0 最近在 SMB2 协议中实现了对 FSCTL_SRV_COPYCHUNK 的支持,但据我所知,还没有客户端工具/文件管理器支持这一点(链接)。我也看过 AFP,但仅有的两个用于挂载 AFP 共享的 Linux 工具都不是太好gvfs-afp
,afpfs-ng
也不是太好。afpfs-ng 未维护并且与 netatalk (segfaults) 配合不佳,而 gvfs-afp 与 afpfs-ng 工作时相比吞吐量非常低。更新:看起来下一个版本的 NFS 也可能支持这一点。
是否还有其他支持服务器端复制的协议?
提前致谢!
正如 Ross Lagerwall 所提到的,Linux CIFS 内核客户端 (cifs.ko) 可以通过 CIFS_IOC_COPYCHUNK_FILE ioctl 使用 Samba 4.1+ SMB2 服务器端复制支持。
fstests 附带的克隆实用程序可用于在 cifs.ko SMB2 挂载点上发出 ioctl。smbclient 支持的工作也在进行中。
Samba 服务器端复制实现的一个好处是,它可以在 Btrfs 文件系统上用于执行文件数据的近乎即时的复制/重复数据删除,如此性能比较所示。
如您所述,AFP 支持服务器端副本。gvfs 的最新未发布版本包含对 gvfsd-afp 的许多改进,以使其更可靠和更快。在我的测试中,它能够在 1GBE 上进行大约 70MB/s 的大传输,并且能够在 11 秒内复制一个包含 10000 个文件的目录,这还不错。如果服务器端副本很重要并且您不想登录到终端,那么我建议您使用它。
我们还计划很快添加对 gvfsd-smb 的服务器端复制支持,但谁知道“很快”可能是什么时候......
(免责声明,我帮助维护 gvfs。)