มีระบบไฟล์ที่เก็บเพียงหนึ่งสำเนาของไฟล์และสำเนาอื่น ๆ เป็นเพียงการอ้างอิง?


18

คำถามอาจไม่ชัดเจนดังนั้นฉันจะพยายามอธิบายในรายละเอียดเพิ่มเติม

ด้วยเหตุผลหลายประการฉันมีสำเนาของไฟล์เดียวกันจำนวนมากในระบบไฟล์ Linux ของฉัน หลายคนค่อนข้างใหญ่

ว่าฉันมี/path/to/some.fileและสำเนาของไฟล์นี้และ/other/path/file.name /yet/another/path/third.copyฉันสงสัยว่ามีระบบไฟล์หรือไม่ซึ่งจะทำให้สองไฟล์เหล่านี้ทำหน้าที่อ้างอิงกับต้นฉบับ ตามธรรมชาติแล้วหากผู้ใช้ปรับเปลี่ยนหนึ่งในนั้นแล้วพวกเขาก็จะกลายเป็นไฟล์อิสระ

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


เนื่องจากดูเหมือนจะยังไม่มีคำตอบที่สมบูรณ์แบบทำไมไม่เขียนสคริปต์ (อาจเรียกใช้จาก cron) ที่แทนที่ไฟล์ด้วยฮาร์ดลิงก์ (หรือถ้ามันปลอดภัยสำหรับบางคนลิงก์เหล่านี้) ในกรณีใด ๆ หากคุณไม่ได้รู้อยู่แล้วว่าที่ซ้ำกันทั้งหมดที่มีการตรวจสอบ fdupes code.google.com/p/fdupes
Joe

1
ฉันไม่สามารถทำเช่นนั้นได้เพราะเมื่อผู้ใช้บางคนเปลี่ยนข้อมูลในหนึ่งในรายการที่ซ้ำกันพวกเขาควรกลายเป็นไฟล์อิสระเพราะเนื้อหาจะแตกต่างกันหลังจากการเปลี่ยนแปลง ... หากฉันสร้างลิงก์สัญลักษณ์การแก้ไขจะเปลี่ยนต้นฉบับจริง คิดว่าไฟล์ต้นฉบับเป็นค่าในภาษาการเขียนโปรแกรมที่ใช้งานได้ - เมื่อคุณแก้ไขมันคุณจะได้รับวัตถุใหม่และอ้างอิงกับมัน
DejanLekic

ตกลง. แค่ความคิดบางอย่าง: มีวิธีใดบ้างที่คุณจะได้รับระหว่างผู้ใช้กับไฟล์เหล่านี้? หากทำได้คุณสามารถเริ่มด้วยลิงก์ (sym หรือ hard) แล้วแบ่งลิงก์หากพวกเขาเขียนข้อมูลใด ๆ ลงในไฟล์ นอกจากนี้คุณยังสามารถใช้สิ่งต่าง ๆ เพื่อเก็บความแตกต่างเพื่อประหยัดพื้นที่จำนวนมากเช่นในระบบควบคุมเวอร์ชัน หากคุณใส่ไฟล์ไว้ในไฟล์ใดไฟล์หนึ่งมันสามารถจัดการความแตกต่างให้คุณได้ ฉันไม่ได้ใช้ระบบ vcs มากดังนั้นฉันไม่ทราบรายละเอียด
Joe

คำตอบ:


17

คุณลักษณะนี้เรียกว่าการขจัดข้อมูลซ้ำซ้อน ไม่เป็นที่นิยมระบบไฟล์ลินุกซ์ (ต่อ *) สนับสนุน แต่เห็นได้ชัดว่าZFS สนับสนุนบางส่วน นอกจากนี้ยังมีตารางของรายการระบบไฟล์ในหมู่คนอื่น ๆ การขจัดข้อมูลซ้ำซ้อน แต่ดูเหมือนจะไม่มีตัวเลือกยอดนิยมใด ๆ - มันเป็นคุณสมบัติที่วางแผนไว้สำหรับ Btrfs

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


ฉันหวังว่า BTRFS จะได้รับการอาละวาด ฉันไม่รู้ว่าพวกเขาวางแผนที่จะมีคุณสมบัตินี้ - ข่าวดี! ขอบคุณ!
DejanLekic

10

คำหลักที่คุณต้องการค้นหาคือ "copy on write" BTRFS มีการดำเนินการโคลนที่ทำสิ่งที่คุณต้องการอย่างแน่นอนและcp --reflinkจะทำสิ่งที่คุณกำลังมองหาหากระบบของคุณมีเคอร์เนลและ coreutils 7.5 ที่ทันสมัย วิกิแหล่งที่มานอกจากนี้bedupเป็นเครื่องมือที่จะรวมรายการที่ซ้ำกันในปริมาณทั้งหมด CoW ยังเป็นคุณสมบัติการขับขี่ภายใต้เทคโนโลยี IIC ของ snapshotting ของ btrfs


ฉันรู้cp --reflinkแต่ทราบว่าฉันต้องการให้ FS ตรวจจับโคลนและใช้การอ้างอิงแทนอย่างโปร่งใส ฉันยังห่างไกลจากbedupเครื่องมือ
DejanLekic

เมื่อกระบวนการระดับผู้ใช้อ่านจากไฟล์หนึ่งไฟล์และเขียนไปยังไฟล์อื่นเลเยอร์ FS จะรู้ได้อย่างไรว่าเป็นสำเนาที่ถูกต้องไม่ใช่สำเนาที่แก้ไข นั่นเป็นเหตุผลที่มี ioctl แยกต่างหากสำหรับการโคลนกับการอ่านและการเขียน แอปพลิเคชันที่ต้องการโคลนไฟล์และต้องการใช้ CoW ควรใช้สิ่งต่าง ๆ เมื่อพร้อมใช้งานและถอยกลับเป็นอย่างอื่น ไม่มีวิธีเวทมนต์ที่เชื่อถือได้ซึ่งเลเยอร์ FS สามารถตรวจจับการคัดลอกที่เกิดขึ้นและทำ CoW แทน แอปต้องใช้การโทรที่เหมาะสมสำหรับงาน ( cp --reflink/ โคลน) หรือเครื่องมือแยกต่างหากเพื่อให้งานเสร็จในภายหลัง (เบด)
afrazier

โดยเปรียบเทียบค่าแฮช (ปลอดภัยยิ่งขึ้น) หรือค่า crc + timestamp การเขียนจะทำให้ FS สร้างสำเนาไฟล์แยกต่างหาก ยิ่งไปกว่านั้นระบบนี้จะถูกนำมาใช้ในระดับหน้าเว็บ ...
DejanLekic

และตรงไหนในเคอร์เนลที่ทำ? สิ่งที่คุณกำลังพูดถึงไม่ใช่ปัญหาง่ายๆ การทำที่ระดับหน้านั้นเป็นไปได้เช่นกัน แต่ต้องใช้ RAM จำนวนมากเพื่อทำแบบอินไลน์ - ZFS อาจมี RAM มากกว่า 20 GB ต่อข้อมูล TB [แหล่งที่มา ] และOpenDedupต้องการ RAM 8 GB ต่อ TB ของข้อมูล / 4k หน้า[แหล่งที่มา ] ความต้องการของ ZFS สามารถลดลงได้ด้วย L2ARC ในราคาที่เหมาะสม
afrazier

1
WHS ไม่ทำซ้ำซ้อนเว้นแต่ว่าคุณกำลังพูดถึงที่เก็บข้อมูลสำรอง ในกรณีของซอฟต์แวร์สำรองข้อมูลลูกค้าสามารถทำงานได้เกือบทั้งหมดและตรวจสอบแฮชกับเซิร์ฟเวอร์ก่อนที่จะส่งข้อมูลใด ๆ ไปยังข้อมูลที่จะเขียน บริการสำรองข้อมูลเป็นสัตว์ร้ายที่แตกต่างจากระบบไฟล์ กลยุทธ์ที่ใช้ได้ผลกับคนอื่นอาจไม่สามารถทำงานได้
afrazier

4

มีระบบไฟล์ออนไลน์S3QL ที่ออกแบบมาสำหรับการสำรองข้อมูลด้วยความสามารถในการลดการซ้ำซ้อนที่ยอดเยี่ยม


ฉันควรจะบอกว่าฉันต้องการสิ่งนี้สำหรับระบบไฟล์ในตัวเครื่อง ... +1 สำหรับข้อมูลที่มีประโยชน์
DejanLekic

@DejanLekic, URL เช่นเดียวกับในท้องถิ่น: // ... ได้รับอนุญาต
Daniel Fanjul

0

Zfs, btrfs, ext3cow, bcachefs (afaik แต่มีโอกาสที่ยังไม่ได้ใช้งาน) Microsoft มีหนึ่งในการพัฒนา แต่พวกเขาหยุดด้วยเหตุผลที่ไม่รู้จัก

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