ฉันจะได้รับสแนปชอตของระบบไฟล์ที่โปร่งใสมีประสิทธิภาพหรือกำหนดเวอร์ชันบน ext3 / 4 ได้อย่างไร


11

ฉันคิดถึงมานานเกี่ยวกับระบบไฟล์เวอร์ชัน นี่เป็นคุณสมบัตินักฆ่าและฉันได้ดู Wayback, ext3cow, zfs, ฟิวส์โซลูชั่นหรือเพียงแค่วางซ้อน cvs / svn / git

ฉันพิจารณารุ่นของ ext3cow สำหรับความต้องการของฉัน โปร่งใสมีประสิทธิภาพ แต่ฉันสามารถทำได้โดยไม่มีls abc@timestampคุณสมบัติพิเศษ ตราบใดที่ฉันได้รับไฟล์เวอร์ชันของฉันแบบอัตโนมัติและโปร่งใส

มันอาจจะเกิดขึ้นทันทีหรืออาจเป็นไปตามสแนปชอตในช่วงเวลา 10s, 30s, 1m, 5m, 15m เป็นต้นสิ่งที่จะจัดการกับไฟล์หลายพันไฟล์ในไดเรกทอรีที่กำหนดให้มีขนาดเล็กที่สุด แต่บางอันก็มีประสิทธิภาพ สูงกว่า 100m ถึง 1gb

ZFS ไม่ใช่ตัวเลือกจริงๆเพราะฉันใช้ linux (และไม่ต้องการใช้มันผ่านฟิวส์เพราะฉันมีการตั้งค่า ext3 แล้วฉันต้องการรุ่นไม่ใช่สิ่งใหม่)

ทางออกอะไรที่นั่น?

คำตอบ:


7

หากคุณล้อมระบบไฟล์ของคุณโดยใช้ LVM คุณสามารถสร้างสแน็ปช็อตโวลุ่มโดยใช้เลเยอร์โลจิคัลวอลุ่มพื้นฐาน มันเป็นกระบวนการที่ค่อนข้างง่ายและมีประสิทธิภาพอย่างน่าประหลาดใจสำหรับสิ่ง "snapshotty" มาตรฐานเช่นการสำรองข้อมูลและการเลิกทำrm -frOopsies


ขอบคุณสำหรับคำตอบ. น่าเสียดายที่ฉันกำลังมองหาบางอย่างที่สามารถนำไปใช้กับระบบไฟล์ที่มีอยู่
Dale Forester

6

หลังจาก 8 ปีของการค้นหาฉันพบSVNFSโดยMarco R. Gazzetta (ซึ่งแตกต่างจากโครงการเก่าที่มีชื่อเดียวกันโดยJohn Madden [สิ่งที่ทำสิ่งที่แตกต่างกัน)) SVNFSนี้ใช้svnโปร่งใสในการดำเนินงาน r / w:

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

มันเขียนใน Python และใช้ FUSE:

ตอนนี้คุณเริ่มต้นระบบไฟล์การกำหนดเวอร์ชันโดยเรียกใช้สคริปต์ที่แนบมา:

python svnfs.py -o svnroot=/home/marco/svnfiles /home/marco/myfiles

เมื่อทุกอย่างเรียบร้อยแล้วคุณควรจะสามารถรับรายชื่อของทั้งสองไดเรกทอรีและดูว่าเนื้อหาเหมือนกัน

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

ในตัวอย่างSVNFSใช้ไดเรกทอรีแยกต่างหากสำหรับ repo แม้ว่าฉันจะไม่ได้ทำการทดสอบ สำหรับความต้องการของฉันฉันต้องการที่จะมีพื้นที่เก็บข้อมูลใน dir ทำงานของฉัน


ฉันยังได้พบการอ้างอิงถึงความสามารถในการกำหนดเวอร์ชันของReiser4 4 ปีที่ผ่านมา:

ดู Reiser 4. ไฟล์คือไดเร็กตอรี่

เช่น: diff -u main.C main.C/r/123

หรือเพื่อเข้าถึงคุณสมบัติ

cat main.C/p/svn-eolstyle

echo "foobar" > main.C/p/my-property 

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

-Paul Querna

แต่ฉันยังไม่ได้ตรวจสอบ


สองปีที่แล้วฉันไปค้นหาเพิ่มเติมพบโครงการFiSTสำหรับการสร้างระบบไฟล์แบบซ้อนได้และติดต่อศ. Erez ZadokจากStony Brook Universityซึ่งเป็นที่ปรึกษา / ที่ปรึกษาโครงการที่เรียกว่าversionfsนานมาแล้ว พิเศษ:

http://www.fsl.cs.sunysb.edu/docs/versionfs-fast04/

http://www.fsl.cs.sunysb.edu/docs/versionfs-msthesis/versionfs.pdf

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

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

ในที่สุด Versionfs เป็นมากกว่าการคัดลอก - เขียน - เรียบง่ายที่ใช้โดยระบบที่ผ่านมา: เราใช้การคัดลอกเมื่อเปลี่ยน แม้ว่าในตอนแรกเราคาดว่าการเปรียบเทียบระหว่างหน้าเก่ากับหน้าใหม่จะแพงเกินไปเราพบว่าเวลาของระบบที่เพิ่มขึ้นนั้นมากกว่าการชดเชยด้วย I / O และเวลา CPU ที่ลดลงซึ่งเกี่ยวข้องกับการเขียนบล็อกที่ไม่เปลี่ยนแปลง เมื่อใช้นโยบายการเก็บข้อมูลที่แพงกว่า (เช่นการบีบอัด) การคัดลอกเมื่อเปลี่ยนจะมีประโยชน์มากกว่า

ดูเหมือนว่าจะน่าสนใจมากสำหรับฉัน แต่การติดต่อกับคนที่ทำงานในโครงการเปิดเผยว่า threre ไม่เป็นที่รู้จักของซอร์สโค้ดของมัน ศาสตราจารย์ระบุไว้ในจดหมาย:

รหัสของ Versionfs เก่ามากและใช้งานได้ในเคอร์เนล 2.4 เท่านั้น หากคุณยังต้องการเวอร์ชั่น f / s ที่วางซ้อนได้คุณจะต้องเขียนตั้งแต่เริ่มต้น - อาจเป็นไปตาม wrapfs (ดูที่ wrapfs.filesystems.org/)

ดังนั้นจึงไม่มีโครงการทำงานที่นี่แม้ว่าแนวคิดของระบบไฟล์แบบเรียงซ้อนได้ดูเหมือนว่าดีมากสำหรับฉัน ทุกคนต้องการที่จะเริ่มโครงการตาม onf wrapfsแจ้งให้ฉันทราบ :)


3

คุณสามารถตรวจสอบgitfs มันเป็นระบบไฟล์ของ FUSE ที่มีพื้นฐานมาจาก git มีความเสถียรและใช้งานง่ายสุด ๆ

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

เมื่อคุณติดมันจะนำคุณสองไดเรกทอรี: ปัจจุบันและประวัติศาสตร์ ├── current │   ├── test1.md │   ├── test2.md │   ├── test3.md -> current/test2.md │   ├── test4.md │   └── test_directory └── history ├── 2014-11-23 │   ├── 20-00-21-d71d1579a7 │   │   └── testing.md │   └── 20-42-32-7d09611d83 │   ├── test2.md │   └── testing.md ├── 2014-12-08 │   ├── 16-38-30-6d6e71fe47 │   │   ├── test2.md │   │   └── test1.md

ข้อมูลเพิ่มเติมสามารถพบได้ในหน้านี้


การเพิ่มข้อมูลจะช่วยปรับปรุงคำตอบนี้
Dave M

2

bup ดูมีแนวโน้ม

หัวข้อสนทนาเก่าของที่นี่: http://lwn.net/Articles/380983/


มีหนึ่ง caveat กับการใช้บางสิ่งบางอย่างที่ใช้คอมไพล์การแก้ไขในคอมไพล์ไม่ถือว่าเป็น deltas จากจุดเริ่มต้น - การคอมมิททุกครั้งจะเป็นไฟล์เต็มแม้ว่าคุณจะเปลี่ยนเพียงหนึ่งไบต์
synthesizer

0

ลองใช้rsnapshot - ฉันไม่ได้ใช้ด้วยตัวเอง แต่ฉันสะดุดในขณะที่มองหาระบบขจัดความซ้ำซ้อนระดับไฟล์ @


นั่นดูน่าสนใจ. ฉันจะดูมันอย่างแน่นอน ความกังวลของฉันคือการโหลด io ของมันจะทำให้เกิดการพูดติดอ่างในระบบของฉัน (ฉันไม่ได้คล้ายกับ rsync ในขณะที่ผ่านมาและหยุดใช้งานเนื่องจากมีการสลับปม / พฤติกรรมการพูดติดอ่างในคอนโซลอื่น ๆ เมื่อมันวิ่ง)
Dale Forester

ฉันดู rsnapshot และฉันชอบความคิดของมัน แต่โชคร้ายมากที่ต้องใช้สำเนาที่ซ้ำกันของสิ่งที่มันถ่ายภาพ น่าเสียดายที่ฉันจำเป็นต้องทำงานกับไดรฟ์ที่มีขีด จำกัด และฉันต้องการถ่ายภาพเนื้อหาที่ค่อนข้างใหญ่กว่าพื้นที่ว่างเหลืออีกนิด
Dale Forester

1
ความยากอยู่ในความต้องการของคุณ นอกเหนือจากบางอย่างเช่น rsnapshot หรือ LVM, ext2 / ext3 ไม่มีสิ่งอำนวยความสะดวกการถ่ายภาพในตัวคุณชี้ให้เห็น ext3cow แต่คุณต้องเปลี่ยนระบบ Fiels พื้นฐาน โปรดทราบว่าดูเหมือนว่าคุณสามารถใช้ rsnapshot และจัดเก็บข้อมูลของคุณบนเครื่องANOTHER ได้ฉันไม่ต้องการให้คุณพูดถึงเรื่องพื้นที่ แต่มันอาจสมเหตุสมผลที่จะเก็บภาพรวมของคุณไว้ในเครื่องอื่น? นอกจากนี้โปรดทราบว่าสแน็ปช็อตทุกชนิดจะต้องใช้พื้นที่ดิสก์ หากไดรฟ์ของคุณใกล้ความจุคุณมีพื้นที่เหลือสำหรับสแนปชอตเท่าใด
Jason

0

ดูที่ Hot Copy จาก R1Soft

http://www.r1soft.com/tools/linux-hot-copy/

นี่เป็นโมดูลเคอร์เนลที่ให้สแน็ปช็อตการคัดลอกเมื่อเขียนสำหรับระบบมาตรฐานโดยไม่ต้องใช้ LVM มันทำงานได้ค่อนข้างดีสำหรับฉันและฉันสามารถติดตั้งได้โดยไม่ต้องรีบูท

ดูเพิ่มเติมที่: http://www.r1soft.com/tools/linux-hot-copy/hcp-tips/

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