ดาวน์โหลดไฟล์ขนาดใหญ่ผ่านการเชื่อมต่อที่ไม่ดี


30

มีเครื่องมือที่มีอยู่ซึ่งสามารถใช้ดาวน์โหลดไฟล์ขนาดใหญ่ผ่านการเชื่อมต่อที่ไม่ดีได้หรือไม่?

ฉันต้องดาวน์โหลดไฟล์ที่ค่อนข้างเล็กเป็นประจำ: 300 MB แต่การเชื่อมต่อ TCP ที่ช้า (80-120 KBytes / วินาที) จะหยุดพักแบบสุ่มหลังจาก 10-120 วินาที (เป็นเครือข่ายของ บริษัท ใหญ่เราติดต่อผู้ดูแลระบบของพวกเขา (ทำงานจากอินเดีย) หลายครั้ง แต่พวกเขาไม่สามารถหรือไม่ต้องการทำอะไรเลย) ปัญหาอาจเกิดจากพร็อกซี / โหลดบาลานเซอร์ย้อนกลับของพวกเขา

จนถึงตอนนี้ฉันใช้ pcurl รุ่นที่แก้ไขแล้ว: https://github.com/brunoborges/pcurl

ฉันเปลี่ยนบรรทัดนี้:

curl -s --range ${START_SEG}-${END_SEG} -o ${FILENAME}.part${i} ${URL} &

สำหรับสิ่งนี้:

curl -s --retry 9999 --retry-delay 3 --speed-limit 2048 --speed-time 10 \
    --retry-max-time 0 -C - --range ${START_SEG}-${END_SEG} -o ${FILENAME}.part${i} ${URL} &

ฉันต้องเพิ่ม--speed-limit 2048 --speed-time 10เพราะการเชื่อมต่อส่วนใหญ่เพิ่งแฮงค์เป็นนาทีเมื่อมันล้มเหลว

แต่เมื่อเร็ว ๆ นี้แม้แต่สคริปต์นี้ก็ยังไม่สมบูรณ์

ปัญหาหนึ่งคือดูเหมือนว่าจะไม่สนใจ-C -ส่วนดังนั้นจึงไม่ "ดำเนินการต่อ" ส่วนหลังจากลองอีกครั้ง ดูเหมือนว่าจะตัดทอนไฟล์ temp ที่เกี่ยวข้องและเริ่มจากจุดเริ่มต้นหลังจากแต่ละไฟล์ล้มเหลว (ฉันคิดว่า--rangeและ-Cตัวเลือกไม่สามารถใช้ร่วมกันได้)

ปัญหาอื่นคือสคริปต์นี้ดาวน์โหลดทุกส่วนในเวลาเดียวกัน ไม่สามารถมีกลุ่มได้ 300 กลุ่มโดยมีการดาวน์โหลดเพียง 10 ครั้งเท่านั้น

ฉันกำลังคิดที่จะเขียนเครื่องมือดาวน์โหลดใน C # สำหรับจุดประสงค์เฉพาะนี้ แต่ถ้ามีเครื่องมือที่มีอยู่หรือถ้าคำสั่ง curl สามารถทำงานได้อย่างถูกต้องกับพารามิเตอร์ที่แตกต่างกันฉันก็จะเสียเวลา

อัปเดต 1: ข้อมูลเพิ่มเติม: ไม่ควรลบฟังก์ชันการดาวน์โหลดแบบขนานเนื่องจากมีขีด จำกัด แบนด์วิดท์ (80-120 Kbytes / วินาทีโดยส่วนใหญ่ 80) ต่อการเชื่อมต่อดังนั้นการเชื่อมต่อ 10 ครั้งอาจทำให้ความเร็วเพิ่มขึ้น 10 เท่า ฉันต้องดาวน์โหลดไฟล์ให้เสร็จใน 1 ชั่วโมงเพราะไฟล์จะถูกสร้างขึ้นทุกชั่วโมง


4
ตัวเลือกเดียวในการเข้าถึงไฟล์ผ่าน FTP / HTTP คืออะไร? คุณไม่สามารถใช้สิ่งที่ชอบrsync(ซึ่งจะช่วยให้คุณเริ่มการถ่ายโอน)? lftpยังช่วยให้การรีสตาร์ทการส่งสัญญาณโดยอัตโนมัติ
Kusalananda

ใช่พวกเขา จำกัด การเข้าถึง HTTPS ไปยังเซิร์ฟเวอร์ของพวกเขาเมื่อหลายปีก่อน BTW เซิร์ฟเวอร์อนุญาตให้รีสตาร์ทที่ตำแหน่งเฉพาะ pcurl ใช้ประโยชน์จากสิ่งนั้น
หมอบลูกแมว

1
คุณกำลังมองหาเครื่องมือ commandline สำหรับการเขียนสคริปต์หรือไม่? เพราะอย่างอื่นฉันก็แค่ใช้ FileZilla หรือไคลเอนต์ ftp / sftp ที่คล้ายกันซึ่งสนับสนุนการรีสตาร์ทการดาวน์โหลด
Bakuriu

5
"ไฟล์ที่ค่อนข้างเล็ก: 300 MB" Ah, วิธีทำให้ฉันรู้สึกเก่า :)
Lightness Races กับ Monica

4
ว้าวนั่นเป็น .. เครือข่ายที่น่ากลัว
การแข่งขัน Lightness กับโมนิก้า

คำตอบ:


33

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

ที่นี่รวมถึงการปรับแต่งที่คุณคิดขึ้นมา (ให้เครดิตกับคุณ):

lftp -c 'set net:idle 10
         set net:max-retries 0
         set net:reconnect-interval-base 3
         set net:reconnect-interval-max 3
         pget -n 10 -c "https://host/file.tar.gz"'

ขอขอบคุณ. ฉันลองสิ่งนี้ แต่ดูเหมือนจะไม่ได้ใช้การเชื่อมต่อแบบขนาน:lftp -e 'set net:timeout 15; set net:max-retries 0; set net:reconnect-interval-base 3; set net:reconnect-interval-max 3; pget -n 10 -c "https://host/file.tar.gz"; exit'
Crouching Kitten

โอ้เมื่อฉันลบการตั้งค่า "net: timeout" มันก็ขนานกัน แต่มันก็ช้าลงสักพัก ฉันคิดว่าเพราะการเชื่อมต่อเริ่ม "แฮงค์"
หมอบลูกแมว

1
มันทำงานได้อย่างสมบูรณ์แบบด้วยการnet:idleตั้งค่า ขอขอบคุณ! ฉันจะเพิ่มวิธีแก้ปัญหาให้กับคำถาม
หมอบลูกแมว

1
โปรดทราบว่า lftp รองรับฝนตกหนักเป็นโปรโตคอลการถ่ายโอนพื้นฐาน ใช้มัน. โปรโตคอลอื่น ๆ ทั้งหมดที่มันสนับสนุนไม่รองรับการตรวจจับ / แก้ไขข้อผิดพลาดและการใช้ TCP เพื่อตรวจหาข้อผิดพลาด โปรดทราบว่า torrent ใช้การตรวจจับข้อผิดพลาด TCP แต่ที่ด้านบนของมันจะตรวจสอบ sha1 hash ของไฟล์ทั้งหมดของคุณและแต่ละบล็อคจะถูกถ่ายโอนผ่านเครือข่าย จากประสบการณ์ของผมเป็นหนัง 4GB torrented ผ่านเครือข่าย 4G มักจะมีรอบสองข้อผิดพลาดในการตรวจสอบกัญชา - ที่นี้หมายถึง TCP ถือว่าเป็นแพ็คเก็ตที่ได้รับจะเป็นข้อผิดพลาดฟรีถึงแม้ว่าพวกเขาเสียหาย
slebetman

1
@slebetman ที่นี่ OP ใช้ HTTPS TLS ให้การตรวจสอบความสมบูรณ์แบบพิเศษ (มากกว่าการตรวจสอบอ่อนแอของ TCP) ผ่าน HMAC HTTP มีการสนับสนุนสำหรับการตรวจสอบเนื้อหาหรือชิ้นส่วนด้วยContent-MD5และDigestส่วนหัว (แม้ว่าฉันไม่รู้ว่าจะlftpสนับสนุนสิ่งเหล่านั้นหรือว่าพวกเขาจะใช้ในกรณีของ OP) ไม่ว่าในกรณีใดดูเหมือนว่าฝนตกหนักจะเป็นตัวเลือกสำหรับ OP
Stéphane Chazelas

12

ฉันไม่สามารถทดสอบนี้สำหรับคุณในสถานการณ์ของคุณ แต่คุณไม่ควรจะใช้กับ--range -C -นี่คือสิ่งที่หน้าคนพูดในเรื่อง:

ใช้ -C -เพื่อบอกcurlให้ค้นหาตำแหน่ง / วิธีการถ่ายโอนต่อโดยอัตโนมัติ จากนั้นใช้ไฟล์เอาต์พุต / อินพุตที่กำหนดเพื่อหาว่า

ลองใช้สิ่งนี้แทน:

curl -s --retry 9999 --retry-delay 3 --speed-limit 2048 --speed-time 10 \
    --retry-max-time 0 -C - -o "${FILENAME}.part${i}" "${URL}" &

ฉันขอแนะนำอย่างยิ่งว่าคุณควรอ้างอิงตัวแปรของคุณเป็นสองเท่าเสมอเพื่อให้เชลล์ไม่พยายามแยกวิเคราะห์ (พิจารณา URL https://example.net/param1=one&param2=twoที่เชลล์จะแบ่งค่าเป็น&.)

บังเอิญ 120 KB / s อยู่ที่ประมาณ 1.2 Mb / s ซึ่งเป็นความเร็วในการอัพโหลด xDSL ทั่วไปในหลายส่วนของโลก 10 วินาทีต่อ MB ดังนั้นน้อยกว่าหนึ่งชั่วโมงสำหรับไฟล์ทั้งหมด ไม่ช้าเลยแม้ว่าฉันจะขอบคุณที่คุณให้ความสำคัญกับความน่าเชื่อถือมากกว่าความเร็ว


2
ขอขอบคุณ. วิธีการนี้ใช้งานได้ แต่มันช้าเพราะมันไม่ได้ดาวน์โหลดแบบขนาน พวกเขามีการ จำกัด ความเร็วต่อการเชื่อมต่อและฉันต้องดาวน์โหลดให้เสร็จใน 1 ชั่วโมงเพราะพวกเขาสร้างไฟล์ทุกชั่วโมง กำลังอัปเดตคำถาม
หมอบลูกแมว


4

นอกกรอบ: ใส่ที่คาดตาและใช้ bittorrent ทำให้ขนาดบล็อกเล็กเมื่อคุณสร้างฝนตกหนัก เห็นได้ชัดว่าเข้ารหัสไฟล์เพื่อให้คนอื่นที่พบว่าฝนตกหนักไม่มีประโยชน์อะไรเลย


1
มันเป็น บริษัท ที่หาได้ยากซึ่งกระจายไฟล์ภายในผ่านทาง torrent
RonJohn

5
เผง แม้ว่าการเชื่อมต่อจะไม่ดีจริง ๆ และไฟล์ได้รับความเสียหายก็ควรจะทำงานได้ดี PRO-TIP: เข้ารหัสเปลี่ยนชื่อเป็น 'KimKardashianNude.mp4' และให้ผู้คนนับพันช่วยคุณในการเชื่อมต่อ สำรองข้อมูลอัตโนมัติแบบกระจายฟรี! :)
Eric Duminil

อย่างที่ Linus พูด - "wimps ใช้เทปสำรองข้อมูล: ผู้ชายจริงเพียงอัปโหลดข้อมูลสำคัญของพวกเขาใน ftp และปล่อยให้ส่วนอื่น ๆ ของโลกสะท้อนให้เห็น;)"
ivanivan

@ RonJohn ฉันรู้ว่ามันไม่ได้ใช้กันทั่วไป แต่นั่นไม่ได้หมายความว่ามันไม่สามารถใช้งานได้ โปรโตคอล bittorrent นั้นดีมากในการรับมือกับการเชื่อมต่อที่แย่
Loren Pechtel

@ LorenPechtel คำสั่งงานสำหรับความเสี่ยงในการอนุมัติพอร์ต, WO สำหรับ NOC เพื่อเปิดพอร์ตและ WO สำหรับทีม Linux และ Windows เพื่อติดตั้งไคลเอนต์ฝนตกหนักและ WO อื่น ๆ เพื่อตรวจสอบพวกเขาทั้งหมดเพื่อให้ไฟล์ที่ได้รับอนุมัติเท่านั้น โอน และไม่มีสิ่งใดที่คำนึงถึง HIPPA, PCI หรือความจริงที่ว่าไฟล์ที่ควรจะเปลี่ยนจากจุด A ไปยังจุด B ตอนนี้เริ่มจากจุด A ถึงจุด C, D, E, F, G, H, I และ J ก่อน การไปยังจุด B. ความเสี่ยงจะไม่ผ่านการอนุมัติด้วยเหตุผลอย่างนั้น
RonJohn

3

ฉันมีปัญหาเดียวกันในงานก่อนหน้าของฉัน (ยกเว้นการสำรองฐานข้อมูลภายนอก 300GB บนการเชื่อมต่อที่ไม่เสถียร (จากสำนักงาน) ผู้ใช้มีปัญหาร้ายแรงในการดาวน์โหลดไฟล์ที่ใหญ่กว่าประมาณ 1 GB ก่อนการเชื่อมต่อจะหมด เนื่องจากพวกเขาใช้ไฟล์คัดลอก / วาง Windows มาตรฐานผ่านการเชื่อมต่อ RDP จึงไม่น่าแปลกใจ

สิ่งหนึ่งที่ฉันพบคือการตั้งค่า VPN ของเรานั้นไม่ตรงกับการตั้งค่าเครือข่าย (ส่วนใหญ่เป็นความยาว MTU) สิ่งที่สองคือเครื่องถ่ายเอกสารไฟล์ของ Windows ไม่ได้ทำขึ้นเพื่อคัดลอกข้อมูลทางอินเทอร์เน็ต

ทางออกแรกของฉันคือ FTP เซิร์ฟเวอร์ที่เรียบง่าย แต่มันไม่ได้แก้ปัญหาเวลาส่ง (มักจะ 3-4 ชั่วโมงในการเชื่อมต่อของเรา)

ทางออกที่สองของฉันคือการใช้Syncthingเพื่อส่งไฟล์โดยตรงไปยัง NAS ภายในองค์กร ทุกคืนหลังจากการสำรองข้อมูลเสร็จสมบูรณ์ Syncthing ส่งทุกสิ่งที่เราต้องการกลับไปที่ NAS ในสำนักงาน ไม่เพียงแก้ไขปัญหาเวลาในการส่งข้อมูล 3+ ชั่วโมงเท่านั้น แต่ฉันใช้เวลา 1-2 ชั่วโมงในการจัดส่งข้อมูลหากมีวิกฤต เวลา 8.00 น. ทุกเช้าไฟล์จะถูกอัปเดตใน NAS และเรามีการสำรองข้อมูลของเราพร้อม แม้จะมีไฟล์ขนาดใหญ่ (ณ จุดหนึ่งฐานข้อมูลเกือบ 700GB) ฉันยังไม่ได้พบความเสียหายของไฟล์หรือปัญหาอื่น ๆ ...

Syncthing นั้นง่ายต่อการติดตั้งและจัดการและสามารถใช้งานได้กับทุกแพลตฟอร์ม (แม้กระทั่งโทรศัพท์) และมีการจัดการการเชื่อมต่อที่ไม่ดีมาก .. หากการเชื่อมต่อล้มเหลว Syncthing ก็รอเพียงไม่กี่นาทีและลองอีกครั้ง

คุณต้องการโฟลเดอร์ในเครื่องเพื่อซิงค์สิ่งต่าง ๆ แต่ไฟล์ของคุณจะสามารถใช้งานได้เกือบจะทันทีที่มีการอัปเดต

อีกสิ่งที่ดีเกี่ยวกับ syncthing คือมันสามารถตั้งค่าให้ซิงค์การเปลี่ยนแปลงในไฟล์ (เช่นในการสำรองข้อมูลที่แตกต่างกัน) ... อาจแก้ปัญหาแบนด์วิดท์ของคุณได้


+1 สำหรับการกล่าวถึง syncthing - Google ไดรฟ์ / ดรอปบ็อกซ์ทางเลือกสำหรับการสำรองข้อมูล
Edward Torvalds

1

คุณอาจพิจารณาการแก้ปัญหาเก่าโรงเรียนสำหรับการย้ายไฟล์ผ่านการเชื่อมต่อหมัด - Zmodem

สิ่งนี้ได้รับการพัฒนาย้อนกลับไปเมื่อมีโมเด็ม 2400 baud กับผู้คนที่ยกหูโทรศัพท์ขึ้นมา อาจจะคุ้มค่ากับการลอง


0

คุณสามารถลองใช้Kermit :

คุณลักษณะที่แยกความแตกต่างของโปรโตคอล Kermit จากตัวอื่น ๆ ส่วนใหญ่คือการตั้งค่าที่หลากหลายเพื่อให้สามารถปรับให้เข้ากับชนิดและคุณภาพของการเชื่อมต่อระหว่างคอมพิวเตอร์สองประเภท - ความยาวของแพ็คเก็ต, การเข้ารหัสแพ็คเก็ต, ขนาดหน้าต่าง หยุดชั่วคราว โปรโตคอลอื่น ๆ ส่วนใหญ่ได้รับการออกแบบมาเพื่อทำงานเฉพาะกับการเชื่อมต่อบางประเภทและ / หรือระหว่างคอมพิวเตอร์บางประเภทหรือเช่นระบบไฟล์ดังนั้นจึงทำงานได้ไม่ดี (หรือไม่เลย) และที่อื่น ๆ และเสนอวิธีการปรับให้เข้ากับแผนทันที - สำหรับสถานการณ์ ในทางกลับกัน Kermit จะช่วยให้คุณถ่ายโอนไฟล์ได้สำเร็จและมีประสิทธิภาพสูงสุดในทุกการเชื่อมต่อที่กำหนด "

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