"SCP" แตกต่างจาก "rsync" อย่างไร


241

บทความเกี่ยวกับการตั้งค่าบล็อกผีบอกว่าจะใช้scpเพื่อคัดลอกจากเครื่องท้องถิ่นของฉันไปยังเซิร์ฟเวอร์ระยะไกล:

scp -r ghost-0.3 root@*your-server-ip*:~/

อย่างไรก็ตามRailscast 339: Chef Solo Basicsใช้scpเพื่อคัดลอกในทิศทางตรงกันข้าม (จากรีโมตเซิร์ฟเวอร์ไปยังเครื่องโลคอล):

scp -r root@178.xxx.xxx.xxx:/var/chef .

ใน Railscast เดียวกันเมื่อผู้เขียนต้องการคัดลอกไฟล์ไปยังเซิร์ฟเวอร์ระยะไกล (ทิศทางเดียวกับตัวอย่างแรก) เขาใช้rsync:

rsync -r . root@178.xxx.xxx.xxx:/var/chef

เหตุใดจึงต้องใช้rsyncคำสั่งหากscpจะคัดลอกทั้งสองทิศทาง? วิธีการที่ไม่scpแตกต่างจากrsync?


นอกเหนือจากความเรียบง่ายและเข้ารหัสเสมอไม่มีใครชี้ให้เห็นว่าอะไรที่ scp สามารถทำได้ดีกว่า "rsync -aA" ฉันชอบ "rsync -aAX - ลบปลายทางต้นทาง" ชำระเงิน bsync สำหรับการซิงค์สองทาง
Tomachi

คำตอบ:


345

ความแตกต่างที่สำคัญระหว่างเครื่องมือเหล่านี้คือวิธีคัดลอกไฟล์

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

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

rsync A host:B
  • rsyncจะตรวจสอบขนาดไฟล์และการประทับเวลาการแก้ไขของทั้งAและBและข้ามการประมวลผลใด ๆ เพิ่มเติมหากตรงกัน

  • หากไฟล์ปลายทางBมีอยู่แล้วอัลกอริทึมการโอนเดลต้าจะทำให้แน่ใจว่าความแตกต่างระหว่างAและBจะถูกส่งผ่านสาย

  • rsyncจะเขียนข้อมูลไปยังแฟ้มชั่วคราวTแล้วแทนที่แฟ้มปลายทางBกับTเพื่อให้ดูการปรับปรุง "อะตอม" กับกระบวนการที่อาจจะมีการใช้B

ความแตกต่างระหว่างพวกเขาเกี่ยวข้องกับการภาวนา rsyncมีตัวเลือกบรรทัดคำสั่งมากมายให้ผู้ใช้ปรับพฤติกรรมของมัน สนับสนุนกฎตัวกรองที่ซับซ้อนทำงานในโหมดแบทช์โหมด daemon ฯลฯscpมีสวิตช์เพียงไม่กี่ตัว

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

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

นอกจากนี้เมื่อจัดการกับไฟล์ขนาดใหญ่ให้ใช้rsyncกับ-Pตัวเลือก หากการถ่ายโอนถูกขัดจังหวะคุณสามารถกลับมาทำงานต่อได้ในที่ที่หยุดโดยการออกคำสั่งอีกครั้ง ดูซิดกษัตริย์ของคำตอบ


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

5
อินเทอร์เฟซของพวกเขาไม่เหมือนกันแม้ไม่มีตัวเลือก Rsync มีการตีความพิเศษของเครื่องหมายสแลชต่อท้ายบนอาร์กิวเมนต์ซอร์ส (ซิงโครไนซ์ไดเรกทอรีเองกับเนื้อหา) มันอาจมี gotchas อื่น ๆ ฉันไม่แน่ใจ
Rafa

2
นอกจากนี้ฉันคิดว่าscpมีแนวโน้มที่จะมีอยู่ในระบบที่คล้าย Unix ดังนั้นคุณจึงป้องกันคำสั่ง "ไม่พบคำสั่งที่น่ารำคาญ" ในตอนนี้
Rafa

2
@ erikb85 rsync มีแฟล็ก -P ซึ่งจะแสดงแถบความคืบหน้าและเปิดใช้งานการดำเนินการต่อจากการถ่ายโอนเสร็จสมบูรณ์บางส่วน digitalocean.com/community/tutorials/…
Ben

1
ความแตกต่างของอินเทอร์เฟซอื่นระหว่างscpและrsync: rsync -aกับscp -rpเพื่อรักษาเวลาการแก้ไขและการอนุญาต
Rafa

71

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

ใช้ rsync -vP username@host:/path/to/file .

ตัวเลือก -P รักษาไฟล์ที่ดาวน์โหลดมาบางส่วนและยังแสดงความคืบหน้า

ตรวจสอบตามปกติ man rsync


32

ความแตกต่าง b / w scp และ rsync ในพารามิเตอร์ที่แตกต่างกัน

1. ประสิทธิภาพมากกว่าความล่าช้า

  • scp : scp มีการปรับให้เหมาะสมและความเร็วค่อนข้างน้อย

  • rsync : rsync เป็นการเปรียบเทียบที่ดีที่สุดและเพิ่มความเร็ว

https://www.disk91.com/2014/technology/networks/compare-performance-of-different-file-transfer-protocol-over-latency/

2. การจัดการขัดจังหวะ

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

  • rsync: หากเซสชัน rsync ข้างต้นถูกขัดจังหวะคุณสามารถดำเนินการต่อได้หลายครั้งตามที่คุณต้องการโดยพิมพ์คำสั่งเดียวกัน rsync จะรีสตาร์ทการถ่ายโอนโดยอัตโนมัติ

http://ask.xmodulo.com/resume-large-scp-file-transfer-linux.html

3. ตัวอย่างคำสั่ง

SCP

$ scp source_file_path destination_file_path

rsync

$ cd /path/to/directory/of/partially_downloaded_file
$ rsync -P --rsh=ssh userid@remotehost.com:bigdata.tgz ./bigdata.tgz 

-Pตัวเลือกที่เป็นเช่นเดียวกับ--partial --progressช่วยให้ rsync ในการทำงานกับไฟล์ดาวน์โหลดบางส่วน --rsh=sshตัวเลือกที่จะบอก rsync การใช้ SSH เป็นเปลือกระยะไกล

4. ความปลอดภัย:

SCP มีความปลอดภัยมากขึ้น คุณต้องใช้rsync --rsh=sshเพื่อทำให้มันปลอดภัยเหมือน SCP

เอกสารคนรู้เพิ่มเติม:

กราฟประสิทธิภาพ


ขอบคุณสำหรับคำตอบใหม่นี้โดยเฉพาะอย่างยิ่งสำหรับส่วนความปลอดภัย
zhihong

ในหลาย ๆ ระบบ ssh ถูกใช้เป็นค่าเริ่มต้น serverfault.com/questions/378939/do-you-need-e-ssh-for-rsync
qwr

2
เกี่ยวกับความปลอดภัยจากบันทึกประจำรุ่น openSSH 8.0 : The scp protocol is outdated, inflexible and not readily fixed. We recommend the use of more modern protocols like sftp and rsync for file transfer instead.
โหลดซ้ำ

6

หนึ่งในคุณสมบัติที่สำคัญของrsyncเกินscp(ข้างอัลกอริทึมเดลต้าและการเข้ารหัสหากใช้ w / ssh) คือมันจะตรวจสอบโดยอัตโนมัติหากไฟล์ที่ถ่ายโอนถูกถ่ายโอนอย่างถูกต้อง Scp จะไม่ทำเช่นนั้นซึ่งบางครั้งอาจทำให้เกิดความเสียหายเมื่อถ่ายโอนไฟล์ขนาดใหญ่ ดังนั้นโดยทั่วไปrsync เป็นสำเนาที่มีการรับประกัน

Centos manpages พูดถึงสิ่งนี้ในตอนท้ายของ--checksumคำอธิบายตัวเลือก:

โปรดทราบว่า rsync จะตรวจสอบว่าไฟล์ที่ถ่ายโอนแต่ละไฟล์นั้นถูกสร้างขึ้นใหม่อย่างถูกต้องในด้านการรับโดยการตรวจสอบการตรวจสอบไฟล์ทั้งหมดที่สร้างขึ้นเมื่อไฟล์ถูกถ่ายโอน แต่การตรวจสอบโดยอัตโนมัติหลังการถ่ายโอนนั้นไม่มีอะไรเกี่ยวข้องกับตัวเลือกนี้ the-transfer“ จำเป็นต้องอัพเดทไฟล์นี้ไหม?” ตรวจสอบ


5

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

นอกเหนือจากความปลอดภัยแล้วการเข้ารหัสยังมีผลกระทบอย่างมากต่อความเร็วการถ่ายโอนของคุณรวมถึงค่าใช้จ่าย CPU (ประสบการณ์ของฉันคือที่rsyncสามารถเร็วกว่าscp )

ลองอ่านโพสต์นี้เมื่อrsyncมีการเข้ารหัส


1

scpดีที่สุดสำหรับหนึ่งไฟล์
หรือการรวมกันของtar& การบีบอัดสำหรับชุดข้อมูลขนาดเล็กเช่นซอร์สโค้ดต้นไม้ที่มีทรัพยากรขนาดเล็ก ( เช่น : รูปภาพ, sqlite ฯลฯ )


แต่เมื่อคุณเริ่มต้นการจัดการกับขนาดใหญ่ปริมาณพูดว่า:

  • โฟลเดอร์สื่อบันทึก (40 GB)
  • สำรองฐานข้อมูล (28 GB)
  • ไลบรารี mp3 (100 GB)

จะไม่สามารถสร้างไฟล์ zip / tar.gzเพื่อถ่ายโอนด้วยscpณ จุดนี้ทำกับข้อ จำกัดทางกายภาพของเซิร์ฟเวอร์ที่โฮสต์

ขณะที่การออกกำลังกายที่คุณสามารถทำบางยิมนาสติกเช่นท่อtarเข้าsshและเปลี่ยนเส้นทางผลเป็นระยะไกลไฟล์ (บันทึกความต้องการในการสร้าง swap หรือโคลนชั่วคราวaka zip หรือ tar.gz)

อย่างไรก็ตาม ,

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

นอกจากนี้ยัง ,

การอัปเดตอย่างต่อเนื่อง (cron?) ใช้การเปลี่ยนแปลงที่น้อยที่สุดเทียบกับการคัดลอกที่โคลนแบบเต็มรูปแบบเพิ่มความเร็วในการโยกย้ายข้อมูลขนาดใหญ่เมื่อเวลาผ่านไป

tl; dr
scp == small scale (พร้อมห้องสำหรับสร้างไฟล์บีบอัดในไดรฟ์เดียวกัน)
rsync== large scale (พร้อมความจำเป็นในการสำรองข้อมูลขนาดใหญ่และไม่มีที่เหลือในห้อง)


-1

จะดีกว่าที่จะคิดในบริบทที่ใช้งานได้จริง ในทีมของเราเราใช้rsync -aPเพื่อแทนที่โฮสต์ Cassandra ที่ไม่ดีในคลัสเตอร์ของเรา เราไม่สามารถทำได้ด้วย scp (ช้าและไม่มีการเก็บรักษาไว้ล่วงหน้า)


ไม่นำสิ่งที่ยังไม่ได้กล่าวถึงในคำตอบอื่น ๆ นอกจากนี้เราไม่ควรตอบคำถามนอกหัวข้อด้วย
Dan Cornilescu

1
@DanCornilescu สิ่งนี้อธิบายกรณีการใช้งานในสถานการณ์จริงซึ่งทำให้ผู้อื่นเข้าใจความแตกต่างได้ง่าย ฉันไม่เห็นคำตอบอื่น ๆ ที่คล้ายกัน
del bao

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