ฉันจะเพิ่มความเร็วการดำเนินงานในไฟล์แบบกระจายด้วย tar, gzip, rsync ได้อย่างไร


9

ฉันมีไฟล์หร็อมแหร็ม ( du -hรายงาน 3G และdu -h --apparent-sizeรายงาน 100G) จนถึงตอนนี้ดีมาก

ตอนนี้เมื่อฉันต้องการบีบอัดไฟล์โดยใช้tarหรือส่งผ่านเครือข่ายที่ใช้rsyncก็จะต้องใช้เวลามากเท่า 3G ดูเหมือนว่าเครื่องมือเหล่านี้อ่านค่าศูนย์ทั้งหมด

ฉันคิดว่ารูเหล่านั้นถูกทำเครื่องหมายอย่างใดและเครื่องมือเหล่านี้สามารถข้ามมันได้

มีแนวโน้มว่าจะไม่มีปัญหากับไฟล์ของฉัน?

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

มีวิธีใดที่จะเพิ่มความเร็วเครื่องมือเหล่านี้ในไฟล์ที่กระจัดกระจาย?

คำตอบ:


7

bsdtar(อย่างน้อยจากlibarchive3.1.2) สามารถตรวจสอบส่วนที่กระจัดกระจายโดยใช้FS_IOC_FIEMAPioctl บนระบบไฟล์ที่รองรับ (แม้ว่าจะรองรับ API อื่น ๆ จำนวนมากเช่นกัน) อย่างไรก็ตามอย่างน้อยในการทดสอบของฉันอย่างแปลกประหลาดพอก็คือ ไม่สามารถจัดการtarไฟล์ที่สร้างขึ้นเองได้ (ดูเหมือนเป็นข้อบกพร่อง)

อย่างไรก็ตามการใช้ GNU tarเพื่อแยกมันออกมาใช้งานได้ แต่จากนั้น GNU tar ไม่สามารถจัดการแอตทริบิวต์เพิ่มเติมบางส่วนที่ bsdtar รองรับได้

ดังนั้น

bsdtar cf - sparse-files | (cd elsewhere && tar xpf -)

ทำงานได้ตราบใดที่ไฟล์ไม่มีคุณสมบัติหรือแฟล็กที่ขยาย

มันยังคงใช้งานไม่ได้กับไฟล์ที่กระจัดกระจาย (เฉพาะศูนย์) เนื่องจากFS_IOC_FIEMAPioctl นั้นกลับมาเป็น 0 ส่วนและดูเหมือนว่าbsdtarไม่สามารถจัดการกับไฟล์นั้นได้อย่างถูกต้อง (บั๊กตัวอื่น?)

star( Schily tar ) เป็นการนำโอเพนซอร์สอื่นมาใช้ซึ่งสามารถตรวจจับไฟล์แบบเบาบาง (ใช้-sparseตัวเลือก) และไม่มีข้อบกพร่องเหล่านั้นของbsdtar(แต่ไม่ได้บรรจุในระบบต่าง ๆ )


2

บทความนี้มีคำแนะนำที่เป็นประโยชน์rsyncอย่างน้อย:

ปัญหาที่เกิดขึ้น

การใช้rsync --sparse worksแต่ทำให้การเขียนดิสก์ที่ไม่จำเป็นเพิ่มขึ้นอย่างมาก การเปลี่ยน 10 ไบต์บนความยาว 50GB (ใช้ 1GB) ควรทำให้เกิดการเขียนเพียงหนึ่งหรือสองช่วงตึกซึ่งจะทำให้มีการเขียน 1GB สิ่งนี้ช้าและเป็นไปได้ไม่ดีสำหรับอายุการใช้งานของดิสก์

ใช้rsync --inplaceงาน แต่สร้างไฟล์แบบไม่กระจาย

คุณไม่สามารถใช้ --sparse และ --inplace ในเวลาเดียวกัน :-( สิ่งนี้ไม่ได้รับอนุญาตจาก rsync rsync: - sparse ไม่สามารถใช้กับ --inplace

สารละลาย

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

ดังนั้นทางออกคือการสร้างไฟล์ที่กระจัดกระจายและว่างเปล่าที่กระจัดกระจายบนเครื่องเป้าหมายสำหรับทุกไฟล์ในเครื่องต้นทาง - ถ้าไฟล์นั้นยังไม่ปรากฏบนเครื่องเป้าหมาย

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

ดังนั้นถ้าฉันอ่านอย่างถูกต้องคุณต้องการสร้างไฟล์ sparse เปล่าบนเป้าหมาย คุณสามารถทำได้ด้วย

truncate -s 3G filename

จากนั้นคุณสามารถใช้rsync --inplaceเพื่อคัดลอกไฟล์ผ่าน สิ่งนี้ควรจำเป็นครั้งเดียวเท่านั้น


บทความเดียวกันแนะนำให้ใช้Virtsyncซึ่งก็คือ

เครื่องมือบรรทัดคำสั่ง Linux เชิงพาณิชย์ $ 49 สำหรับการซิงโครไนซ์เนื้อหาของไฟล์ขนาดใหญ่ (เช่นอิมเมจดิสก์เครื่องเสมือนและฐานข้อมูล)

นี่อาจเป็นทางออกที่ดีที่สุดหากคุณยินดีจ่ายเพราะดูเหมือนว่าจะเขียนเป็นพิเศษสำหรับสถานการณ์ประเภทนี้

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