ทางเลือก smbclient สำหรับไฟล์ขนาดใหญ่


11

ฉันใช้ smbclient เพื่อถ่ายโอนไฟล์ขนาดใหญ่ (80GB) ทุกคืนจากระบบ Linux ไปยัง Windows ที่ใช้ร่วมกัน เมื่อเร็ว ๆ นี้ด้วยเหตุผลใดก็ตามฉันได้รับ I / O หมดเวลา:

cli_push returned NT_STATUS_IO_TIMEOUT

ซึ่งทำให้การถ่ายโอนไฟล์ที่ใช้งานอยู่ถูกยกเลิกและลบจากการแชร์ Windows

นี่อาจเป็นเพราะSamba bug 8498 ที่ยังไม่ได้แก้ไข(หรืออาจจะไม่ใช่) ระบบ Windows ไม่ได้อยู่ภายใต้การควบคุมของฉันดังนั้นฉันจึงไม่สามารถติดตั้งเซิร์ฟเวอร์ ssh (เพื่อใช้ scp หรือ sftp) และไม่ต้องการขึ้นอยู่กับการนำ NFS ของ Microsoft ไปใช้

มีอีกทางเลือกมาตรฐานธรรมดาที่จะให้ฉันย้ายข้อมูล 80GB อย่างเชื่อถือได้จาก Linux ไปยัง Windows ผ่านเครือข่ายเป็นประจำ (เครือข่ายคืออีเธอร์เน็ต GB ดังนั้นแบนด์วิดท์ไม่ใช่ปัญหา)


พิจารณาใช้เครื่องมือเช่น rsync ด้วยการเปิดใช้งานโหมดบางส่วน แม้แต่ WinScp ก็ควรที่จะช่วย หรือจัดให้มีที่เก็บข้อมูล NAS ทั่วไปที่มี NFS บน Unix และ CIFS บน Windows ดังนั้นจึงไม่จำเป็นต้องถ่ายโอนข้อมูลในกรณีที่เป็นเครือข่ายเดียวกัน ดีที่สุดคือการติดตั้งฝนตกหนักใส่เครือข่ายอื่น ;-)
Nikhil Mulley

เพิ่งสะดุดกับ "โปรแกรมถ่ายโอนไฟล์ 123go" ค้นหาใน google
Nikhil Mulley

คำตอบ:


9

ลองใช้ตัวเลือกซ็อกเก็ตเหล่านี้ใน smbclient

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

ฉันคัดลอกไฟล์ 40 + GB จาก Windows ไปยังเซิร์ฟเวอร์สื่อ Linux เป็นประจำโดยไม่มีข้อผิดพลาดอัตราการถ่ายโอนทั่วไปคือ 85MB / s ด้วยเครื่องที่เชื่อมต่อผ่านสวิตช์กิกะบิต


1
ขอบคุณสำหรับสิ่งนี้ - กำจัดข้อผิดพลาดสำหรับฉัน และคัดลอกไฟล์ 2G จาก Ubunutu ไปยัง Windows Share อย่างถูกต้อง
monojohnny

ฉันลองสิ่งนี้และรูปแบบอื่น ๆ ของการปรับค่าสำหรับ SO_RCVBUF และ SO_SNDBUF โดยไม่มีโชค ไฟล์ที่ฉันพยายามจะอัปโหลดนั้นมีขนาดประมาณ 8gig บนเครือข่ายท้องถิ่นที่ไม่มีการสูญเสียแพ็กเก็ต
mhvelplund

2

การใช้ curl

ฉันทำงาน smbclient รุ่น 4.9.4 พยายามที่จะถ่ายโอนไฟล์เอ็มไอ 97 จาก Arch Linux กับ Windows และเรียก smbclient กับ --socket-options='TCP_NODELAY IPTOS_LOWDELAY SO_KEEPALIVE SO_RCVBUF=131072 SO_SNDBUF=131072' เป็นผู้ใช้ BSD แนะนำcli_push returned NT_STATUS_IO_TIMEOUTยังคงล้มเหลวด้วย

ตั้งแต่เวอร์ชัน 7.40 , curl รองรับโปรโตคอล

ดังนั้นฉันใช้สิ่งนี้เพื่ออัปโหลดmoderately_sized_fileจาก Linux ไปยังบริการOurRemoteDirectoryบนเครื่อง Windows ที่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 mkdirทำงานได้โดยไม่มีปัญหา):

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

0

บางทีคุณสามารถติดตั้งเซิร์ฟเวอร์ftpบนเซิร์ฟเวอร์ linux ของคุณและขอให้ผู้ดูแลระบบ Windows ส่งไฟล์ทุกคืน?

FTP มีฟังก์ชั่นที่มีประโยชน์สำหรับการถ่ายโอนไฟล์ขนาดใหญ่และกลไกการหยุดชั่วคราว / กลับสู่การทำงาน สำหรับไฟล์ขนาดใหญ่นี้คุณควรระวังไม่ให้ฮาร์ดแวร์เครือข่ายปิดการเชื่อมต่อที่ไม่ได้ใช้งานเร็วเกินไป มันสามารถปิดการเชื่อมต่อการควบคุมของคุณก่อนที่จะถ่ายโอนสิ้นสุด


ไฟล์กำลังไปในอีกทางจาก Linux ไปยัง Windows
Um Umbris

0

ถ้า

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

ยังคงกลับมา cli_push returned NT_STATUS_IO_TIMEOUT

เพียงเพิ่มตัวเลือกการหมดเวลา -t <timeout in seconds>

ช่วยฉันในการคัดลอกไฟล์ขนาดใหญ่ (> 200 Tb) ของเครื่องเสมือน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.