วิธีที่เร็วที่สุดในการคัดลอกโฟลเดอร์ที่มีไฟล์จำนวนมากผ่าน SSH


13

วิธีที่ดีที่สุดในการทำซ้ำไฟล์บนเซิร์ฟเวอร์ผ่าน ssh คืออะไร?

ในกรณีของฉัน: ฉันกำลังพูดถึงการทำซ้ำร้านวีโอไอพี (15,000 ไฟล์ ~ 50MB)

cp -a source destination

ใช้เวลาเป็นชั่วโมง ... (ในกรณีเซิร์ฟเวอร์ของฉันคือ 2.4 Xeon, 2GB RAM)

คำตอบ:


19

หนึ่งคำ: rsync.

โปรดทราบว่าหากคุณอยู่บนลิงค์ช้าหรือเซิร์ฟเวอร์มีภาระมากเครื่องมือที่ใช้ในการคัดลอกจะไม่เป็นคอขวดและวิธีการคัดลอกจะช้าอยู่ดี

สิ่งนี้จะให้การใช้งานพื้นฐานสำหรับการคัดลอกระหว่างเครื่องคอมพิวเตอร์ของคุณกับเซิร์ฟเวอร์ระยะไกล: http://oreilly.com/pub/h/38

ในการคัดลอกจากโลคัลคอมพิวเตอร์ไปยังเซิร์ฟเวอร์ระยะไกล (คุณต้องเปลี่ยนเส้นทางชื่อผู้ใช้และที่อยู่โฮสต์):

rsync -avz -e ssh /path/on/local/computer remoteuser@remotehost.somewhere.example.com:/path/on/server
  • -a เก็บ
  • -v อย่างละเอียด
  • -z การบีบอัด
  • -e ssh "ใช้อุโมงค์ SSH"

หากต้องการคัดลอกในทิศทางอื่นให้สลับเส้นทาง (ก่อนคือจากที่สองคือไปที่ ):

rsync -avz -e ssh remoteuser@remotehost.somewhere.example.com:/path/on/server /path/on/local/computer

แต่ rsync มีประโยชน์แม้สำหรับการคัดลอกสิ่งต่าง ๆ บนเซิร์ฟเวอร์เดียวกัน:

rsync -av /path-to/copy/from /path_to/copy/to

2
โปรดทราบว่า @Piskvor ออกจาก-zตัวเลือกสำหรับการทำสำเนาในเครื่องเนื่องจากจะเพิ่มโอเวอร์เฮดที่ไม่จำเป็น IMHO คุณควรใช้-zเมื่อใช้ rsync กับลิงก์เครือข่ายที่ช้าเท่านั้น หากการคัดลอกข้อมูลจำนวนมากในช่วง 100Base-T คุณอาจไม่สามารถ-zทำได้ ด้วยการเชื่อมต่อเครือข่ายที่รวดเร็วการใช้การบีบอัดสามารถตรึงซีพียูของคุณและหยุดกระบวนการอื่น ๆ
tomlogic

@ Tomlogic: จุดดี - กล่าวอีกนัยหนึ่งไม่ได้ใช้-zสำหรับการคัดลอก LAN หรือการคัดลอกภายในเครื่องเดียว ทดสอบโดยมีและไม่มี-zการทำสำเนาผ่านอินเทอร์เน็ต (อย่างใดอย่างหนึ่งอาจเร็วกว่าขึ้นอยู่กับหลาย ๆ สิ่ง)
Piskvor ออกจากอาคารใน

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

หมายเหตุ: -e sshตอนนี้เป็นค่าเริ่มต้นสำหรับโฮสต์ระยะไกลดังนั้นจึงไม่จำเป็นต้องผ่านตัวเลือกอย่างชัดเจน
Piskvor ออกจากอาคาร

3

คำอื่น ๆ: scp

scp /path/on/local/computer remoteuser@remotehost.somewhere.example.com:/path/on/server

สำหรับข้อเสนอแบบนัดเดียว scp นั้นมีประโยชน์ หากเป็นไฟล์จำนวนมากแสดงว่า rsync เป็นความคิดที่ดี หากการเชื่อมต่อขาดหายไป rsync สามารถเลือกได้ว่าจะทิ้งที่ไหน

ฉันรู้ว่า rsync มีการบีบอัด ( -z) และเพิ่งเรียนรู้ว่า scp ก็ทำได้เช่นกัน ( -C)


IIRC พวกเขาทั้งคู่ใช้อัลกอริธึมการบีบอัดของ SSH อย่างน้อยก็สำหรับเครือข่าย
Piskvor ออกจากอาคารใน

0

ในการตั้งค่าของคุณ rsync อาจจะเพียงพอ ... แต่เป็นตัวอย่างถ้ามีไฟล์ขนาดเล็กจำนวนมากมันอาจจะเร็วกว่าที่จะ tar ไฟล์ก่อนการถ่ายโอนแล้วผ่าน rsync เนื่องจากการถ่ายโอนเจ้าของการประทับเวลาการอนุญาตบางครั้งหนักกว่าตัวไฟล์เองหากไฟล์มีขนาดเล็ก ทาร์จะรวมข้อมูลทั้งหมดนั้นไว้ในไฟล์เดียวและ rsync จะคัดลอกบล็อกที่ใหญ่กว่า

หรือดีกว่านี้หากไม่ต้องการความปลอดภัยให้ใช้ tar และ nc:

บนปลายทางเตรียม daemon ที่ได้รับการยกเลิกการบีบอัดและ untar:

nc -l -p 12345 | pigz -d | tar xvf - 

บนต้นทางให้ทาทุกอย่างบีบอัดแบบขนานและส่งไปยังปลายทาง:

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