ถ่ายโอนไฟล์นับล้านไฟล์จากเซิร์ฟเวอร์หนึ่งไปยังอีกเซิร์ฟเวอร์หนึ่ง


15

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

ดังนั้นฉันใช้คำสั่งต่อไปนี้:

scp -r usrname@ip-address:/var/www/html/txt /var/www/html/txt

แต่ฉันสังเกตเห็นว่าคำสั่งนี้เพิ่งถ่ายโอนประมาณ 50,000 ไฟล์แล้วการเชื่อมต่อจะหายไป

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

ไม่สามารถทำได้scpเนื่องจากจะเริ่มต้นจากไฟล์แรกเสมอ

คำตอบ:


33

อย่างที่คุณพูดใช้rsync:

rsync -azP /var/www/html/txt/ username@ip-address:/var/www/html/txt

ตัวเลือกคือ:

-a : enables archive mode, which preserves symbolic links and works recursively
-z : compress the data transfer to minimise network usage
-P : to display a progress bar and enables you to resume partial transfers

ตามที่ @aim กล่าวไว้ในคำตอบของเขาตรวจสอบให้แน่ใจว่าคุณมีส่วนท้าย/ในไดเรกทอรีต้นทาง (ทั้งคู่ก็ใช้ได้เช่นกัน)

ข้อมูลเพิ่มเติมจากหน้าคน


1
ฉันแนะนำให้เพิ่ม-hธงเพื่อใช้หน่วยที่มนุษย์อ่านได้ และถ้าคุณต้องการฟุ่มเฟื่อยมากขึ้นคุณมีตัวเลือกไม่กี่: -iและ / หรือ/-v -vv
nyuszika7h

2
โดยทั่วไปมีเหตุผลน้อยมากที่ไม่ควรใช้ rsync แทน scp การใช้งานขั้นพื้นฐานมันเหมือนกันและมีคุณสมบัติที่มีประโยชน์เพิ่มเติมมากมาย
pimlottc

หากsshไม่ใช่ตัวเลือกสำหรับคุณและคุณไม่ต้องการหรือต้องการการเข้ารหัสคุณสามารถลองใช้สคริปต์ของฉันได้ที่s3.amazonaws.com/skaperen/rsend
Skaperen

7

เพียงใช้ rsync ผ่าน ssh!

rsync -av username@ip:/var/www/html/txt /var/www/html/

จากหน้าคน:

-a , - ไฟล์เก็บถาวร : นี่เทียบเท่ากับ -rlptgoD มันเป็นวิธีที่รวดเร็วในการบอกว่าคุณต้องการเรียกซ้ำและต้องการรักษาเกือบทุกอย่าง ข้อยกเว้นสำหรับความเท่าเทียมกันข้างต้นคือเมื่อระบุ --files-from ซึ่งในกรณีที่ -r ไม่ได้บอกเป็นนัย

-v , - verbose : ตัวเลือกนี้จะเพิ่มจำนวนข้อมูลที่คุณได้รับระหว่างการถ่ายโอน โดยค่าเริ่มต้น rsync ทำงานอย่างเงียบ ๆ -v เดียวจะให้ข้อมูลเกี่ยวกับไฟล์ที่ถูกถ่ายโอนและสรุปโดยย่อในตอนท้าย ตัวเลือกสองตัว -v จะให้ข้อมูลเกี่ยวกับไฟล์ที่ถูกข้ามและข้อมูลเพิ่มเติมเล็กน้อยในตอนท้าย ควรใช้มากกว่าสองตัวเลือก -v หากคุณกำลังดีบัก rsync

หมายเหตุวิธีการที่ผมใช้ทับในตอนท้ายของโฟลเดอร์ - มันเป็นสิ่งที่สำคัญ


คุณควรเพิ่มข้อมูลเพิ่มเติมเกี่ยวกับความสำคัญของเครื่องหมายสแลช จากrsyncหน้าคู่มือ: "เครื่องหมายสแลชต่อท้ายบนแหล่งที่มาเปลี่ยนพฤติกรรมนี้เพื่อหลีกเลี่ยงการสร้างระดับไดเร็กทอรีเพิ่มเติมที่ปลายทางคุณสามารถนึกถึงส่วนท้าย / บนแหล่งที่มาตามความหมาย" คัดลอกเนื้อหาของไดเรกทอรีนี้ "ซึ่งตรงข้ามกับ" คัดลอกไดเรกทอรีตามชื่อ "แต่ในทั้งสองกรณีแอตทริบิวต์ของไดเรกทอรีที่บรรจุจะถูกถ่ายโอนไปยังไดเรกทอรีที่บรรจุปลายทาง"
nyuszika7h

... และความหมายของธงชาติ-av?
MrWhite

0

ใช้ lftp เร็วกว่า rsync และดีที่สุดสำหรับการทำมิเรอร์เว็บไซต์ (ไฟล์ขนาดเล็กจำนวนมาก) นอกจากนี้ยังสามารถถ่ายโอนแบบขนานโดยใช้การเชื่อมต่อที่หลากหลาย:

lftp -u username,password sftp://ip-address -e 'mirror --only-newer --no-dereference --parallel=5 /remote/path/ /destination/;quit'

หากการเชื่อมต่อหนึ่งหยุดพักระบบจะทำการเชื่อมต่อใหม่และดำเนินการต่อ หากคุณหยุดการถ่ายโอนไฟล์มันจะข้ามไฟล์ที่มีอยู่และดำเนินการต่อ

http://lftp.yar.ru/


0

อีกวิธีคือโดยการปิเปตไฟล์ tar (บีบอัดทางเลือก) ทับ ssh:

tar -czf - ./* | ssh other.host.foo "cd /tmp; tar -xzf-"
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.