Score:0

การบีบอัด Tar และ 7z บน Linux - ความแตกต่างคืออะไร?

ธง tr

ฉันมีปัญหา! ฉันมีสคริปต์สำรองในหลาม มันสำรองข้อมูลโฟลเดอร์ทั้งหมดใน /var/www/ ไปยัง .tar.7z ที่แตกต่างกันสำหรับแต่ละโฟลเดอร์ภายใน /var/www/

ปัญหาคือเวลาอัดช้ามาก และสำหรับโฟลเดอร์ขนาดใหญ่ 4GB บางครั้งจะหยุดบีบอัดที่ 1G บางครั้งที่ 1.5GB

นี่คือแถวสำหรับการบีบอัดนี้:

os.system("tar cf - -C %s . 2>/dev/null 3>/dev/null | 7za a -p%s -si %s 1>/dev/null 2>/dev/null 3> /dev/null" % (cf, self.config.get(jn, "archpass"), ชื่อไฟล์))

เมื่อฉันพยายาม tar -cf บีบอัด-dir.tar /var/www/bigsite.com/ โฟลเดอร์ขนาด 4GB จะทำงานสร้าง .tar อย่างรวดเร็วในเวลาไม่กี่นาทีก็พร้อมใช้งาน

อย่างไรก็ตาม ภายในสคริปต์ python ไฟล์ชั่วคราวที่สร้างขึ้นทันทีที่ .tar เริ่มสร้าง จะเพิ่มขนาดอย่างช้าๆ หลังจากนั้นประมาณ 10 นาที ก็จะถึงประมาณ 1GB...และในไม่ช้ามันก็หยุดเพิ่มขึ้นโดยไม่แสดงข้อผิดพลาดใด ๆ ในคอนโซล

มีวิธีที่ฉันสามารถจำลองสิ่งที่เกิดขึ้นที่นี่ได้หรือไม่: น้ำมันดิน cf - -C %s 2>/dev/null 3>/dev/null ทุบตีโดยตรง? เพราะมันไม่เหมือนอย่างชัดเจน tar -cf บีบอัด-dir.tar /var/www/bigsite.com/ เพราะมันวิ่งเร็วกว่ามาก

บางทีถ้าฉันเรียกใช้ tar โดยตรงใน bash ข้อผิดพลาดอาจปรากฏขึ้น แน่นอน หากคุณมีความคิดอื่นใด โปรดแจ้งให้เราทราบ

in flag
เวอร์ชัน tar ส่วนใหญ่รองรับการบีบอัด gzip ในตัวโดยเพิ่มตัวเลือก `z` Gzip ไม่มีประสิทธิภาพเท่า 7zip เกี่ยวกับขนาดที่บีบอัด แต่อาจเร็วกว่าเล็กน้อย สำหรับปัญหา 7zip ฉันสงสัยว่า 7zip รุ่นเก่าหรือมีข้อบกพร่องเนื่องจาก 7zip ไม่ควรมีปัญหากับไฟล์ขนาดใหญ่คุณไม่จำเป็นต้องยึดติดกับ 7zip คุณสามารถใช้คอมเพรสเซอร์อื่น ๆ เช่น bzip2 ได้ และการใช้พารามิเตอร์บางอย่าง คุณสามารถลดประสิทธิภาพการบีบอัดเพื่อเพิ่มความเร็วในกระบวนการสำรองข้อมูล
Score:1
ธง ar

Tar ไม่บีบอัดด้วยตัวเอง ซึ่งหมายความว่าทรูพุตแทบจะถูกจำกัดโดยความสามารถของ IO เท่านั้น ฮาร์ดไดรฟ์สามารถจัดการ 100MB/s ได้อย่างง่ายดาย ดังนั้น 4GB R/W ควรทำได้ใน 80 วินาทีหรือมากกว่านั้น - อ่าน 4GB และเขียน 4GB SSD สามารถทำได้หลายร้อยเมกะไบต์ต่อวินาทีหรือมากกว่านั้น

อย่างไรก็ตาม 7z ทำการบีบอัด การบีบอัดนั้นโดยทั่วไปจะผูกกับ CPU ไม่ใช่ผูกกับหน่วยเก็บข้อมูล

ในการเปรียบเทียบ 7z คุณสามารถวิ่งได้ 7z ข. บนแล็ปท็อปที่ฉันใช้เขียนสิ่งนี้ 7z สามารถจัดการได้ 20MB/s ที่เก็บข้อมูล NVMe ของฉันรองรับได้ 2GB/s นั่นเป็นสองลำดับความสำคัญที่แตกต่างกัน! การบีบอัด 4GB จะใช้เวลา 200 วินาที; เพียงแค่บรรจุลงใน tarball ควรใช้เวลา 2 วินาที!

อัลกอริธึมการบีบอัดต่างๆ มีการแลกเปลี่ยนที่แตกต่างกัน สามารถกำหนดค่า 7z ให้ใช้งานได้ ระดับการบีบอัดที่แตกต่างกันใน 10 ขั้นตอน

คุณควรทดลองกับระดับต่างๆ เพื่อหาจุดแลกเปลี่ยนขนาดความเร็วที่ถูกต้องสำหรับแอปพลิเคชันของคุณ

มีวิธีที่ฉันสามารถจำลองสิ่งที่เกิดขึ้นที่นี่ได้หรือไม่: น้ำมันดิน cf - -C %s 2>/dev/null 3>/dev/null ทุบตีโดยตรง? เพราะเห็นได้ชัดว่ามันไม่เหมือนกับ tar -cf compress-dir.tar /var/www/bigsite.com/ เพราะมันทำงานเร็วกว่ามาก

แน่นอน มันเป็นคำสั่งเชลล์ os.system() เพียงเรียกใช้คำสั่งที่ระบุ คำสั่ง tar ในตัวอย่างของคุณเพิ่ม %s ไปที่ tarball และส่งออกผลลัพธ์ไปยัง แย่. ในตัวอย่างแบบเต็มที่คุณระบุไว้นั้นถูกไพพ์ไปที่ 7z

แต่อย่างที่ฉันพูดไปข้างต้น ไม่ใช่น้ำมันดินที่ช้า มันคือ 7z

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา