Linux 的服务器端复制不起作用

Linux 的服务器端复制不起作用

我有一台 NAS 嵌入式 Linux 设备,其中安装并运行了 Samba4。我已配置了 Samba 共享,并尝试从客户端在该 Samba 共享内进行服务器端复制。以下是我想做的事情: https://wiki.samba.org/index.php/Server-Side_Copy

  1. 我首先在 Windows7 上尝试。我首先从我的 WIN7 笔记本电脑安装该 samba 共享,然后使用 robocopy 命令在该共享内的两个目录之间复制一个大文件。我可以看到它有效。robocpoy 可以非常快速地复制一个大文件。我还使用 wireshark 分析了网络流量。它有类似以下内容:Ioctl req FSCTL_SRV_COPYCHUNK_WRITE 文件:... 和 Ioctl resp FSCTL_SRV_COPYCHUNK_WRITE 文件:...

  2. 然后我尝试在 ubuntu15 上进行操作。我很确定 ubuntu15 的 Linux 内核支持 CIFS_IOC_COPYCHUNK_FILE ioctl。我使用以下命令挂载该共享:mount.cifs //[host_ip]/[share_name] [mount_path] -o vers=2.1,username=root。我很确定它必须有 vers=2.1,因为要使用服务器端复制,它必须使用 SMB2 协议。再次基于https://wiki.samba.org/index.php/Server-Side_Copy,上面说“cloner”可以实现这个功能。这里的关键函数是调用:“ioctl(dst_fd, CIFS_IOC_COPYCHUNK_FILE, src_fd)”。所以我下载并编译了“cloner”,并执行了这个命令,但它不起作用。基本上,cloner 命令需要很长时间并且永远不会停止(kill -9 甚至不起作用)。我也使用 wireshark 监控网络流量。我看到的是:它发送的请求与 Windows7 相同,即 Ioctl req FSCTL_SRV_COPYCHUNK_WRITE File:...,但它收到一条错误消息:Ioctl response,错误:status_invalid_device_request

为什么 Linux 上的 cloner 不起作用,而 win7 上的 robocopy 却可以工作?为什么会出现错误:status_invalid_device_request? cloner 中缺少什么?如果这里缺少某些东西或存在错误,该如何修复?是否有任何现有的客户端服务器端复制代码或工具可供我使用?

相关内容