ระบบไฟล์ใด ๆ ใช้การคัดลอกเมื่อเขียนกลไกสำหรับ CP


16

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

สิ่งนี้จะเกิดขึ้นเช่นกันเมื่อทำ CP บน linux ที่มีระบบไฟล์ ext4 หรือ xfs (journaling) ถ้าไม่เกิดขึ้นทำไมล่ะ?


หวังว่าใครบางคนจะตอบคำถามที่น่าสนใจนี้
Karim Manaouil

อย่างไรก็ตามฉันไม่คิดอย่างนั้นเพราะยกตัวอย่างเช่นการ coying ไฟล์ขนาดใหญ่อาจใช้เวลานานกว่ามาก (การคัดลอกข้อมูลไปยังบล็อกใหม่) หากมี COW ในระบบไฟล์ดังกล่าว (อย่างน้อย ext3 / ext4) คุณจะไม่สังเกตุเวลาในการตอบสนอง (อาจเป็นในกรณีเช่นนี้เท่านั้นที่จะจำลองแบบ inode โดยไม่มีตัวชี้ไปยังบล็อกข้อมูล
Karim Manaouil

การคัดลอกเมื่อเขียนถูกนำไปใช้กับ ZFS และมีระบบไฟล์ / โวลุ่มการบันทึกที่ถูกมาก ext4 / xfs มีรูปแบบบนดิสก์ดั้งเดิมเกินไปฉันเชื่อว่าเพื่อสนับสนุน
myaut

คำตอบ:


7

reflinkคำหลักเพื่อค้นหาคือ มันเพิ่งนำมาใช้ใน XFS

แก้ไข: การดำเนินการ XFS ถูกทำเครื่องหมายเริ่มต้นว่า EXPERIMENTAL คำเตือนนี้ถูกลบออกในเคอร์เนลรุ่น 4.16 หลายเดือนหลังจากที่ฉันเขียนข้างบน :-)


11

จากcp หน้าคน :

เมื่อระบุ --reflink [= always] ให้ทำสำเนาแบบ Lightweight ซึ่งบล็อกข้อมูลจะถูกคัดลอกเฉพาะเมื่อมีการแก้ไข หากไม่สามารถทำสำเนาได้หรือหาก --reflink = auto ถูกระบุให้ถอยกลับไปเป็นสำเนามาตรฐาน

ทำงานบนระบบไฟล์ที่รองรับCopy-on-Write ( reflink ) ซึ่งส่วนใหญ่เป็น BTRFS ในขณะนี้ XFS การดำเนิน reflink อยู่ในการพัฒนา[1] [2]


1
ระบบไฟล์เครือข่ายบางระบบเช่น NFS, CIFS, OCFS2 อาจส่งผ่านระบบไฟล์เหล่านั้นไปยังเซิร์ฟเวอร์ได้เช่นกัน
Stéphane Chazelas

2

Linux มีการเรียกของระบบที่อนุญาตให้กระบวนการผู้ใช้บอกเคอร์เนลเพื่อทำสำเนาในการเขียนสำเนาของไฟล์ FICLONERANGE และ FICLONE ใช้เป็นตัวเลือกในการ ioctl อนุญาตให้คัดลอกในการเขียนสำเนาของไฟล์และช่วงภายในไฟล์ที่จะทำ

สิ่งนี้ถูกใช้โดย cp --reflink เพื่อทำสำเนาที่ระบบไฟล์สนับสนุนสิ่งนี้


1

ถ้าคุณไม่แนะนำ syscall สำหรับcp(หรืออย่างน้อยก็เพื่อคัดลอกบล็อก) ระบบปฏิบัติการมีเวลายากที่จะทราบว่าข้อมูลที่cpโปรแกรมกำลังจะเขียนนั้นเหมือนกับที่มันเพิ่งอ่านจากบล็อกอื่น ยิ่งไปกว่านั้นคุณจะมีค่าใช้จ่ายเพิ่มเติมในการจัดการสถานการณ์ "ไฟล์หลาย ๆ ไฟล์แบ่งปันบล็อกเดียวกัน" ไฟล์ที่คล้ายกันขนาดใหญ่ที่แตกต่างกันเพียงไม่กี่ช่วงตึกมักไม่ค่อยเกิดขึ้น ดังนั้นจึงมีราคาถูกลงเพียงคัดลอกบล็อกเหล่านั้นจากนั้นเพิ่มค่าใช้จ่ายในการดูแลระบบนี้ลงในไฟล์ทั้งหมด

ตอนนี้ถ้าคุณ "คัดลอก" ไฟล์ (จำนวนมาก) โดยการเพิ่มโคลน / สแนปช็อตของระบบไฟล์อีกระบบหนึ่งพูด BTRFS สถานการณ์ต่างกัน: ตอนนี้คุณ "คัดลอก" ไฟล์ทั้งหมดในระบบไฟล์และการเปลี่ยนแปลงใด ๆ พวกเขาจะถูกคัดลอกเมื่อเขียน มีอยู่ แต่ไม่ใช่ใน ext4

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


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

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