使用curl

使用curl

我正在使用 smbclient 每晚将一组大文件 (80 GB) 从 Linux 系统传输到 Windows 共享。最近,无论出于什么原因,我一直遇到 I/O 超时:

cli_push returned NT_STATUS_IO_TIMEOUT

这会导致活动文件传输中止并从 Windows 共享中删除。

这可能是由于未解决桑巴错误 8498(或者可能不是)。 Windows系统不在我的控制之下,所以我无法安装SSH服务器(以使用SCP或SFTP),并且我不想依赖微软的NFS实现。

是否有另一种简单、标准的替代方案可以让我定期通过网络可靠地将 80 GB 数据从 Linux 移动到 Windows(网络是 GB 以太网,因此带宽不是问题)?

答案1

尝试在 smbclient 上使用这些套接字选项

smbclient --socket-options='TCP_NODELAY IPTOS_LOWDELAY SO_KEEPALIVE SO_RCVBUF=131072 SO_SNDBUF=131072'

我经常将 40+GB 文件从 Windows 复制到 Linux 媒体服务器,没有错误,通过千兆位交换机连接的机器的典型传输速率为 85MB/s。

答案2

使用curl

我正在运行 smbclient 版本 4.9.4 尝试将 97 MiB 文件从 Arch Linux 传输到 Windows。继bsd用户推荐,我使用 smbclient 调用

--socket-options='TCP_NODELAY IPTOS_LOWDELAY SO_KEEPALIVE SO_RCVBUF=131072 SO_SNDBUF=131072'

但这仍然失败了cli_push returned NT_STATUS_IO_TIMEOUT

幸运的是,自从7.40版本,curl 支持协议版本 1。

因此,我使用它从 Linux 上传到Windows 计算机上的moderately_sized_file服务:OurRemoteDirectory172.16.17.52

curl --upload-file /home/me/moderately_sized_file --user "OurWindowsDomain/MyUserName:MyPassword" smb://172.16.17.52/OurRemoteDirectory/Path/To/Dir/

对我来说,curl 每次都可靠地上传文件,并且还显示上传进度,这很好。

创建远程目录

注意卷曲尚不支持在远程主机上创建目录。

因此,您可能需要/Path/To/Dir/使用以下smbclient命令进行创建:

smbclient //172.16.17.52/OurRemoteDirectory/ -U MyUserName%MyPassword -W OurWindowsDomain -c 'mkdir Path/To/Dir/'

与使用 smbclient 上传文件相比,smbclient mkdir到目前为止没有出现任何问题。

答案3

我遇到了同样的问题,下载总是失败,我能够使用以下选项解决“parallel_read returned NT_STATUS_IO_TIMEOUT”问题:

smbclient -m SMB2 ... -c 'timeout 120; iosize 16384; ...'

示例:来自文件路径“//server/share/My Files/More Files/version_1/file.txt”

smbclient -m SMB2 -N '//server/share' -c 'timeout 120; iosize 16384; get \"My Files\More Files\"\version_1\file.txt' -U <username>

如果没有这些设置,下载 100% 会失败,而使用这些设置则 100% 有效。

答案4

也许你可以安装一个文件传输协议服务器上的 Linux 服务器,并要求 Windows 管理员每晚向其发送文件?

FTP 有一些用于传输大文件的有用功能和暂停/恢复机制。对于这么大的文件,你应该注意不是网络硬件过早关闭不活动的连接。它可以关闭你的控制连接在转移结束之前。

相关内容