สำหรับการบีบอัดไฟล์ขนาดใหญ่ก่อนอื่นให้ทำการโอนย้ายหรือ rsync -z? ซึ่งจะเร็วที่สุด?


14

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

คิดว่าฉันต้อง gzip สิ่งทั้งหมดแล้ว rsync มันและขยายมันพึ่งพา rsync -z สำหรับการบีบอัด gzip แล้วใช้ rsync -z ฉันไม่แน่ใจว่าสิ่งใดจะมีประสิทธิภาพมากที่สุดเนื่องจากฉันไม่แน่ใจว่าจะใช้งาน rsync -z อย่างไร แนวคิดใดที่ตัวเลือกใดจะเร็วที่สุด?

คำตอบ:


11

คุณไม่สามารถ "gzip สิ่งทั้งปวง" เนื่องจาก gzip บีบอัดเพียงไฟล์เดียวคุณสามารถสร้างไฟล์ tar และ gzip เป็น "gzip สิ่งทั้งหมด" แต่คุณจะหลวมความสามารถ rsync ของการคัดลอกไฟล์ที่แก้ไขเท่านั้น

ดังนั้นคำถามคือ: จะดีกว่าหรือไม่ที่จะเก็บไฟล์ฉันต้อง rsync gziped หรือพึ่งพา -z ตัวเลือกของ rsync
คำตอบอาจเป็นเพราะคุณไม่ต้องการให้คลายซิปไฟล์บนเซิร์ฟเวอร์ของคุณ? ฉันเดาว่าใช่ดังนั้นฉันไม่เห็นว่าคุณสามารถจัดการไฟล์ gzip ก่อนทำ rsync ได้อย่างไร

คุณอาจไม่ต้องการความสามารถ rsync ในการคัดลอกเฉพาะไฟล์ที่ถูกแก้ไขหรือไม่? ในกรณีนี้ทำไมการใช้ rsync แทนที่จะใช้ scp ของไฟล์ tar.gz ที่มีเนื้อหาของคุณ

อย่างไรก็ตามเพื่อตอบคำถาม rsync gzip จะมีประสิทธิภาพน้อยกว่าไฟล์ gziping ด้วย gzip เล็กน้อย ทำไม เนื่องจาก rsync จะ gzip data chunk โดย chunk ดังนั้นชุดข้อมูลขนาดเล็กจะถูกใช้เพื่อสร้างตารางที่ gzip ใช้เพื่อทำการบีบอัดชุดข้อมูลที่ใหญ่กว่า (gzip จะใช้ไฟล์ทั้งหมดในครั้งเดียว) ให้ตารางการบีบอัดที่ดีกว่า แต่ความแตกต่างจะเล็กมากในกรณีส่วนใหญ่ แต่ในกรณีที่หายากมากความแตกต่างอาจมีความสำคัญมากกว่า (ถ้าคุณมีไฟล์ขนาดใหญ่มากที่มี partern ที่ยาวมากทำซ้ำหลาย ๆ ครั้งในไฟล์ แต่อยู่ห่างกัน) ตัวอย่างที่ง่ายมาก)


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

3
@ Randolph Potter: ใช่เวลาที่หายไปในการบีบอัด 50GB ในเครื่องแล้ว rsync จะสูงกว่าการใช้ rsync -z อย่างไรก็ตามถ้าเขาต้องการใช้ประโยชน์จาก rsync เอง (การคัดลอกเฉพาะไฟล์ที่เปลี่ยนแปลง) การบีบอัดไม่สามารถทำได้มาก่อน
รัศมี

จุดที่ดีมาก +1 สำหรับคุณ :-)

จำได้ว่า gzip เป็น stream compressor
Falcon Momot

6

หากคุณคัดลอกข้อมูลเพียงครั้งเดียว rsync จะไม่เป็นชัยชนะครั้งใหญ่ในตัวของมันเอง หากคุณชอบ gzip (หรือ tar + gzip เนื่องจากคุณมีไฟล์มากมาย) คุณอาจลองทำสิ่งต่อไปนี้:

tar -cz /home/me/source/directory | ssh target tar -xz --directory /home/you/target/directory

ที่จะได้รับการบีบอัดที่คุณกำลังมองหาและเพียงคัดลอกโดยตรงโดยไม่เกี่ยวข้องกับ rsync


ฉันอาจจะใช้ --lzop สำหรับที่แทนที่จะ gzip ... เร็วกว่ามากและลดค่าใช้จ่ายซีพียูและยังคงมีอัตราส่วนการบีบอัดที่ดีสำหรับข้อความ
ต่ำกว่า

5

@radius ผู้เยาว์เล็กน้อยที่เลือกว่าจะgzipทำงานอย่างไร - gzipเป็นอัลกอริธึมการบีบอัดแบบบล็อกและเป็นเรื่องง่าย ไฟล์ทั้งหมดไม่ได้ถูกพิจารณาสำหรับตารางการบีบอัด - แต่ละบล็อกเท่านั้น อัลกอริธึมอื่น ๆ อาจใช้เนื้อหาทั้งหมดของไฟล์และมีบางอย่างที่ใช้เนื้อหาของหลาย ๆ บล็อกหรือแม้แต่บล็อกที่มีขนาดต่างกัน ตัวอย่างหนึ่งที่น่าสนใจคือlrzipโดยผู้เขียนคนเดียวกันrsync!

ผอมในgzipขั้นตอนวิธีการของ

ดังนั้นโดยสรุปการใช้rsync -zมีแนวโน้มที่จะให้ผลเหมือนกับการบีบอัดgzipอันดับแรก - และถ้าคุณทำการถ่ายโอนส่วนต่างดีกว่าเพราะrsyncอัลกอริทึมการกระจายของ

ที่กล่าวว่าฉันคิดว่าจะพบว่าการscpเต้นอย่างคล่องแคล่วปกติrsyncสำหรับการถ่ายโอนที่ไม่แตกต่าง - เพราะมันจะมีค่าใช้จ่ายน้อยกว่าrsyncอัลกอริทึมของ (ซึ่งจะใช้scpภายใต้ประทุน!)

หากเครือข่ายของคุณจะกลายเป็นคอขวดแล้วคุณต้องการที่จะใช้การบีบอัดบนลวด

หากดิสก์ของคุณเป็นคอขวดนั่นคือเมื่อสตรีมเข้าสู่ไฟล์บีบอัดจะดีที่สุด (ตัวอย่างเช่นnetcatจากเครื่องหนึ่งไปยังเครื่องถัดไปสตรีมเข้าสู่gzip -c)

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

TIMTOWTDI, YMMV, IANAL และอื่น ๆ


2

ตามที่ผู้ชายคนนี้มันอาจจะเร็วกว่าที่จะใช้rsync -zแม้ว่าฉันจะเดาว่ามันจะใกล้เคียงกับประสิทธิภาพเท่ากับการบีบอัดแต่ละไฟล์ก่อนที่จะถ่ายโอน ควรเร็วกว่าการบีบอัดสตรีม tar ตามที่ผู้อื่นแนะนำ

จากหน้าคน:

          Note  that  this  option  typically  achieves better compression
          ratios than can be achieved by using a compressing remote  shell
          or  a  compressing  transport  because it takes advantage of the
          implicit information in the matching data blocks  that  are  not
          explicitly sent over the connection.

1
ฉันขอแนะนำให้ใช้ --compress-level = 1 กับ rsync -z หากคุณมีเครือข่ายที่รวดเร็ว คุณต้องการให้เครือข่ายเป็นคอขวดของคุณไม่ใช่ CPU หรือดิสก์ IO เพื่อลดเวลาในการถ่ายโอนทั้งหมด หากเครือข่ายช้าใช้ค่าเริ่มต้น -z (ซึ่งเทียบเท่ากับ gzip -6 ฉันคิดว่า) อาจยังคงทำให้เครือข่ายกระบวนการที่ถูกผูกไว้
rmalayter

1

เนื่องจากทั้ง scp ของไฟล์บีบอัดและ rsync จะใช้เวลาในการถ่ายโอนที่ใกล้เคียงกันดังนั้น "วิธีที่มีประสิทธิภาพที่สุดในการทำเช่นนี้" คือการบีบอัดข้อมูลแบบทันทีทันใดแทนที่จะบีบอัดและถ่ายโอน

นอกเหนือจากข้อพิจารณาอื่น ๆ "ความคงทน" รวมถึง:

rsync สามารถเริ่มต้นใหม่ได้อย่างง่ายดายหากไฟล์ทั้งหมดไม่ได้รับการถ่ายโอน

rsync สามารถใช้เพื่อรักษาไฟล์ในเครื่องระยะไกล

tar ท้องถิ่นหรือ gzip ต้องการพื้นที่ในท้องถิ่น

ข้อควรพิจารณาการใช้พอร์ตสำหรับทั้งเครื่องเป้าหมายและไฟร์วอลล์: 1) scp ใช้พอร์ต 22 (โดยค่าเริ่มต้น) ซึ่งอาจไม่เป็นที่ยอมรับ 2) ผู้ใช้ rsync พอร์ต 873 (โดยค่าเริ่มต้น)

ฉันไม่แน่ใจว่าเพราะเหตุใดรัศมีจึงคาดหวังว่าโปสเตอร์ดั้งเดิมไม่ต้องการให้มีการบีบอัดไฟล์ไว้

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