Windows

大文件的 smbclient 替代方案

  • November 16, 2021

我正在使用 smbclient 每晚將一組大文件(80 GB)從 Linux 系統傳輸到 Windows 共享。最近,無論出於何種原因,我一直收到 I/O 超時:

cli_push returned NT_STATUS_IO_TIMEOUT

這會導致活動文件傳輸被中止並從 Windows 共享中刪除。

這可能是由於未解決的Samba 錯誤 8498(也可能不是)。Windows 系統不在我的控制之下,所以我無法安裝 SSH 伺服器(使用 SCP 或 SFTP),我不想依賴微軟的 NFS 實現。

是否有另一種簡單的標準替代方案,可以讓我定期通過網路將 80 GB 的數據從 Linux 可靠地移動到 Windows(網路是 GB 乙太網,所以頻寬不是問題)?

嘗試在 smbclient 上使用這些套接字選項

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

我定期將 40+GB 的文件從 Windows 複製到 Linux 媒體伺服器,沒有錯誤,典型的傳輸速率是 85MB/s,機器通過千兆交換機連接。

使用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 支持smb協議版本 1。

因此,我使用它moderately_sized_file從 Linux 上傳到OurRemoteDirectoryWindows 機器上的服務172.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 每次都可靠地上傳文件,並且還顯示上傳進度,這很好。

創建遠端目錄

請注意,curl還不支持在遠端主機上創建目錄。

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

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

與使用 smbclient 上傳文件相比,smbclient mkdir到目前為止,它的工作沒有問題。

引用自:https://unix.stackexchange.com/questions/31900