Jak uzyskać przezroczystą, wydajną migawkę lub kontrolę wersji systemu plików na ext3 / 4?

11

Długo myślałem o wersjonowaniu systemów plików. Jest to funkcja zabójcza i spojrzałem na Wayback, ext3cow, zfs, rozwiązania bezpieczników lub po prostu nakładki cvs / svn / git.

Uważam ext3cow za model spełniający moje wymagania. Przejrzysty, wydajny, ale mogę obejść się bez dodatkowej ls abc@timestampfunkcji. Tak długo, jak w jakiś sposób otrzymuję zautomatyzowaną, przejrzystą wersję moich plików.

Może to być natychmiastowe lub może być oparte na migawkach w odstępach 10s, 30s, 1m, 5m, 15m itp. Po prostu coś, co skutecznie poradzi sobie z tysiącami plików w danym katalogu o różnych rozmiarach, z których większość jest najmniejsza, ale niektóre od 100 m do 1 gb.

ZFS nie jest tak naprawdę opcją, ponieważ jestem na systemie Linux (i wolałbym nie używać go przez bezpiecznik, ponieważ mam już konfigurację ext3, którą chcę zaktualizować, a nie coś nowego).

Jakie są dostępne rozwiązania?

Dale Forester
źródło

Odpowiedzi:

7

Jeśli opakowujesz swoje systemy plików za pomocą LVM, możesz utworzyć wolumin migawki przy użyciu podstawowej warstwy woluminu logicznego. Jest to dość prosty proces i zaskakująco skuteczny w przypadku standardowych „migawkowych” rzeczy, takich jak tworzenie kopii zapasowych i rm -frcofanie oopsies.

McJeff
źródło
Dziękuję za odpowiedź. Niestety szukam czegoś, co można zastosować w istniejącym systemie plików.
Dale Forester
6

Po 8 latach poszukiwania znalazłem SVNFS przez Marco R. Gazzetta (który różni się od starszego projektu o tej samej nazwie przez Johna Maddena [których jeden robi różne rzeczy]). Ten SVNFS używa svn transparentnie w operacjach r / w:

Zamiast tworzyć system plików, który tworzy własną wersję, użyłem istniejącego narzędzia do kontroli wersji, subversion i uczyniłem jego użycie przezroczystym. Zaletą jest to, że ten system plików nie wymaga nauki nowego narzędzia, jeśli znasz subversion

Jest napisany w Pythonie i używa FUSE:

Teraz uruchom system plików kontroli wersji, wywołując załączony skrypt:

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

Gdy wszystko będzie w porządku, powinieneś być w stanie uzyskać listę obu katalogów i sprawdzić, czy zawartość jest taka sama.

Teraz, jeśli utworzysz (prawie) dowolny plik w jednym z katalogów, pojawi się on również po drugiej stronie ogrodzenia. Duża różnica polega na tym, że jeśli utworzysz plik w katalogu myfiles, zostanie on automatycznie objęty kontrolą wersji (odwrotnie nie jest prawdą).

W przykładzie SVNFS używa osobnego katalogu do repozytorium. Chociaż tego nie przetestowałem. Na moje potrzeby chciałbym mieć repozytorium w moim reż.


Znalazłem również odniesienie do możliwości wersjonowania Reiser4 4 lata temu:

Zobacz Reiser 4. Pliki są katalogami.

na przykład: diff -u main.C main.C/r/123

Lub uzyskać dostęp do właściwości

cat main.C/p/svn-eolstyle

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

Wydaje się, że najlepiej byłoby zastosować ten model, ponieważ główny system plików już podąża tą drogą.

-Paul Querna

Ale też tego nie sprawdziłem.


Dwa lata temu poszedłem szukać dalej, znalazłem projekt FiST do generowania systemów plików , które można ustawiać jeden na drugim, i skontaktowałem się z prof. Erez Zadok z Stony Brook University, który dawno temu był doradcą / mentorem projektu o nazwie versionfs . Cytowanie:

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

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

pozwala użytkownikom łatwo i wydajnie zarządzać własnymi wersjami. Versionfs zapewnia tę funkcjonalność przy nie więcej niż 4% narzutu w przypadku typowych obciążeń użytkownika. Versionfs pozwala użytkownikom wybrać zarówno wersje, które mają być przechowywane, jak i sposób ich przechowywania, odpowiednio poprzez zasady przechowywania i zasady przechowywania. Użytkownicy mogą wybrać kompromis między przestrzenią a wydajnością, który najlepiej odpowiada ich indywidualnym potrzebom: pełne kopie, skompresowane kopie lub delty blokowe. Chociaż użytkownicy mogą kontrolować swoje wersje, administrator może egzekwować wartości minimalne i maksymalne oraz zapewniać użytkownikom rozsądne wartości domyślne.

Dodatkowo, dzięki wykorzystaniu libversionfs, niezmodyfikowane aplikacje mogą badać, manipulować i odzyskiwać wersje. Użytkownicy mogą po prostu uruchomić znane narzędzia, aby uzyskać dostęp do poprzednich wersji plików, zamiast wymagać od użytkowników nauki oddzielnych poleceń lub poprosić administratora systemu o ponowne zamontowanie systemu plików. Bez libversionfs poprzednie wersje są całkowicie ukryte przed użytkownikami.

Wreszcie Versionfs wykracza poza proste kopiowanie przy zapisie stosowane przez poprzednie systemy: wdrażamy kopiowanie przy zmianie. Chociaż początkowo spodziewaliśmy się, że porównanie starych i nowych stron będzie zbyt kosztowne, stwierdziliśmy, że wzrost czasu systemowego jest więcej niż rekompensowany zmniejszonym czasem operacji we / wy i procesora związanym z pisaniem niezmienionych bloków. Gdy stosowane są droższe zasady przechowywania (np. Kompresja), kopiowanie przy zmianie jest jeszcze bardziej przydatne.

Wydawało mi się to bardzo interesujące, ale skontaktowanie się z facetami, którzy pracowali nad projektem, ujawniło, że nie jest znanym miejscem jego kodu źródłowego. Sam profesor stwierdził w poczcie:

Kod Versionfs jest teraz bardzo stary i działał tylko w jądrze 2.4. Jeśli nadal potrzebujesz wersji f / s, którą można ustawiać jeden na drugim, trzeba by ją napisać od zera - prawdopodobnie na podstawie wrapfs (patrz wrapfs.filesystems.org/).

Więc nie ma tutaj działającego projektu, chociaż koncepcja systemów plików, które można układać jeden na drugim, wydaje mi się bardzo miła. Czy ktoś chciałby rozpocząć projekt oparty na wrapfs , powiadom mnie proszę :)

saulius2
źródło
3

Możesz sprawdzić gitfs . Jest to system plików FUSE oparty na git, dość stabilny i bardzo łatwy w użyciu.

Zasadniczo jest to nakładka na git. Za każdym razem, gdy aktualizujesz plik lub katalog, tworzysz zatwierdzenie z tą zmianą (wie, aby zapisać zmiany, aby nie skończyć z 100 zmianami po rozpakowaniu archiwum). Wie również, aby zsynchronizować pilota i scalić konflikty przy użyciu strategii „zawsze akceptuj moje”.

Po zamontowaniu wyświetla dwa katalogi: bieżący i historię . ├── 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

Więcej informacji można znaleźć na tej stronie .

vtemian
źródło
Dodanie dodatkowych informacji poprawiłoby tę odpowiedź.
Dave M
2

Bup wygląda obiecująco.

Starsze dyskusje na ten temat tutaj: http://lwn.net/Articles/380983/

Shane Geiger
źródło
Jest jedno zastrzeżenie związane z używaniem czegoś opartego na git, modyfikacje w git nie są traktowane jako delta od początku - każde zatwierdzenie jest pełnym plikiem, nawet jeśli zmienisz tylko jeden bajt.
syntezator
0

Wypróbuj rsnapshot - sam go nie użyłem, ale natknąłem się na niego, szukając systemów deduplikacji na poziomie plików @.

Jason
źródło
To interesujące. Na pewno się temu przyjrzę. Martwię się, że jego obciążenie io spowoduje zacinanie się w moim systemie (jakiś czas temu nie rsync nie zrobiłem czegoś podobnego i przestałem go używać z powodu zaczepienia / zacinania się w innych konsolach podczas jego działania).
Dale Forester
Rzuciłem okiem na rsnapshot i podoba mi się jego pomysł, ale bardzo, bardzo niefortunne jest to, że wymaga duplikatu kopii tego, co robi migawka. Niestety i z konieczności pracuję z dyskami na ich granicy i chcę robić migawki zawartości, która jest nieco większa niż pozostała wolna przestrzeń.
Dale Forester
1
Trudność zależy od twoich wymagań. poza czymś takim jak rsnapshot lub LVM, ext2 / ext3 nie ma wbudowanej funkcji migawki. Wskazujesz ext3cow, ale musisz zmienić bazowy system plików. Zauważ, że wygląda na to, że możesz użyć rsnapshot i przechowywać swoje dane na INNEJ maszynie. Nie wiem, o jakim miejscu mówisz, ale może mieć sens trzymanie swoich migawek na innej maszynie? Należy również pamiętać, że wszelkiego rodzaju migawki będą wymagały miejsca na dysku. Jeśli Twoje dyski są bliskie pojemności, ile masz miejsca na migawki?
Jason