ฉันดาวน์โหลดไฟล์ขนาดใหญ่เป็นครั้งคราวผ่าน scp และมีโอกาสเล็กน้อยทุกครั้งที่การเชื่อมต่อลดลงและตัดการถ่ายโอนระหว่างทาง
มีวิธีดำเนินการต่อหรือไม่
ฉันดาวน์โหลดไฟล์ขนาดใหญ่เป็นครั้งคราวผ่าน scp และมีโอกาสเล็กน้อยทุกครั้งที่การเชื่อมต่อลดลงและตัดการถ่ายโอนระหว่างทาง
มีวิธีดำเนินการต่อหรือไม่
คำตอบ:
คุณสามารถลองใช้ approch ต่อไปนี้แทนscpใช้ddเพื่อข้ามส่วนที่ดาวน์โหลดและผนวกส่วนที่เหลือเข้ากับไฟล์
sofar=`ls -l ./destfile | awk '{print $5}'`
ssh rsys "dd if=./srcfile bs=1 skip=$sofar" >> ./destfile
การเพิ่มประสิทธิภาพที่เป็นไปได้: ทำงานกับบล็อกขนาดใหญ่ ปล่อยให้เรื่องนี้เป็นการบ้าน
dd
ด้วยบล็อคขนาดเล็กอาจช้า (เพียง 350 kB / s ที่นี่) โชคดีที่การscp
ถ่ายโอนดูเหมือนว่าจะมีขนาด 1024 ไบต์ ถ้าเป็นเช่นนั้นสำหรับไฟล์ของคุณ (หรืออื่น ๆ โดยการตัดทอนมันจะใกล้เคียงที่สุด 1024 ไบต์บล็อก) ssh rsys "dd if=./srcfile bs=1024 skip=$sofar" >> ./destfile
คุณสามารถเพิ่มความเร็วขึ้นเช่นนี้ (หมายเหตุว่า$sofar
แล้วจะต้องมีจำนวน 1024 บล็อกไบต์เพื่อข้าม!)
rsys
ssh
ฉันขอแนะนำให้คุณแทนที่ด้วยuser@host
เพื่อหลีกเลี่ยงความสับสน
ด้วยscp
, ไม่มี
หากปลายทั้งสองข้างมีอยู่คุณสามารถใช้rsync -LvzP remoteserver:path/to/file localfile
เพื่อถ่ายโอนไฟล์เดียว
ใช่มีวิธีการดำเนินการต่อจากจุดที่หยุดชะงัก แต่ไม่สามารถใช้ scp ได้ sftp reget filename
ทำในสิ่งที่คุณต้องการ Yarek และ Grawity ได้ให้บริการโซลูชั่นที่ถูกต้องที่ฉัน +1 ทั้งคู่ แต่สำหรับการกลับมาทำงานต่อจากจุดขัดจังหวะฉันชอบ rsync ตัวอย่างคำสั่งที่ให้ทั้งคู่ถือว่าคุณกำลังเรียกไฟล์จากรีโมตเซิร์ฟเวอร์ไปยังเวิร์กสเตชันท้องถิ่นของคุณ (กำลังดาวน์โหลด) โปรดทราบว่าสองพารามิเตอร์สุดท้ายควรได้รับการพิจารณาว่าเป็น source_file และ target_file ตามลำดับ ไวยากรณ์ของชื่อไฟล์จะแตกต่างกันไปขึ้นอยู่กับว่าไฟล์ต้นทางหรือไฟล์เป้าหมายนั้นเป็นโลคัลหรือรีโมต หากฉันกำลังส่ง (อัปโหลด) [ข้อความ] ไฟล์ฉันจะเขียนตัวอย่างที่ให้ไว้เป็น:
# จากโลคัลเป็นรีโมต sofar = `ssh remote_system ls -l interrupted_file | awk '{พิมพ์ $ 5}' '; dd if = source_file bs = 1 skip = $ sofar | ssh remote_system "cat >> ./interrupted_file"
และเพื่อแก้ปัญหา rsync -e ssh
ผมเพิ่ม คุณควรพิจารณาว่าจำเป็นต้องใช้คำฟุ่มเฟื่อยการบีบอัดสงวนสิทธิ์สิทธิ์ประทับเวลาไดเรกทอรีเรียกคืนหรือไม่ตรวจสอบหน้า man และ google เกี่ยวกับพารามิเตอร์ -L คุณอาจต้องการให้ symlink คงเป็นลิงก์แทนการอ้างอิง
rsync -P -e ssh local_source_file remoteserver:path/to/interrupted_target_file
มีทางออกอื่น (นอกเหนือจากเป็นrsync
หรือdd
การแก้ปัญหาที่ระบุไว้ที่นี่) ซึ่งฉันไม่มีใครแปลกใจที่กล่าวถึง: มันเป็นคำสั่งของreput
sftp
scp -o ConnectTimeout 60
ให้คุณระบุการหมดเวลาสำหรับการเชื่อมต่อ อาจทำให้การเชื่อมต่อของคุณเลิกกัน
ใช่ถ้าทั้งสองฝ่ายสนับสนุน sftp - หลังจากความscp remoteuser@remotehost:/absolute/filename .
ล้มเหลวคุณสามารถดำเนินการต่อโดยทำsftp remoteuser@remotehost
แล้วreget /absolute/filename
เริ่มดาวน์โหลดต่อ