Come posso ottenere snapshot o versioning di file system trasparenti, efficienti su ext3 / 4?


11

Ho pensato a lungo ai file system di versioning. Questa è una funzione killer e ho visto Wayback, ext3cow, zfs, soluzioni di fusibili o solo sovrapposizioni cvs / svn / git.

Considero ext3cow il modello per le mie esigenze. Trasparente, efficiente, ma posso fare a meno della ls abc@timestampfunzione extra . Finché in qualche modo ottengo un controllo automatico e trasparente dei miei file.

Potrebbe essere istantaneo o potrebbe essere basato su istantanee a intervalli di 10, 30, 1, 5, 15, ecc. Solo qualcosa che gestirà in modo efficiente migliaia di file in una determinata directory tutte di varie dimensioni, la più piccola, ma alcune verso l'alto da 100 ma 1 gb.

ZFS non è davvero un'opzione poiché sono su Linux (e preferirei non usarlo tramite miccia poiché ho già un setup ext3 che voglio versione, non qualcosa di nuovo).

Quali soluzioni ci sono?

Risposte:


7

Se si esegue il wrapping dei file system utilizzando LVM, è possibile creare un volume di snapshot utilizzando il livello del volume logico sottostante. È un processo piuttosto semplice e sorprendentemente efficace per le cose "istantanee" standard, come il backup e l'annullamento delle rm -froopsie.


Grazie per la risposta. Sfortunatamente, sto cercando qualcosa che possa essere applicato su un file system esistente.
Dale Forester,

6

Dopo 8 anni di ricerche ho trovato l' SVNFS di Marco R. Gazzetta (che è diverso dal vecchio progetto con lo stesso nome di John Madden [che si fa cose diverse]). Questo SVNFS usa svn in modo trasparente nelle operazioni r / w:

Invece di creare un file system che esegue il proprio versioning, ho usato uno strumento di versioning esistente, sovversione, e ne ho reso trasparente l'uso. Il vantaggio è che questo file system non richiede di apprendere un nuovo strumento, se conosci sovversione

È scritto in Python e usa FUSE:

Ora si avvia il file system di versioning invocando lo script allegato:

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

Una volta che tutto va bene, dovresti essere in grado di ottenere un elenco di entrambe le directory e vedere che i contenuti sono gli stessi.

Ora, se crei (quasi) qualsiasi file in entrambe le directory, verrà visualizzato anche sull'altro lato del recinto. La grande differenza è che se si crea un file nella directory myfiles, questo verrà automaticamente posto sotto il controllo della versione (non è vero il contrario).

Nell'esempio SVNFS utilizza una directory separata per il repository. Anche se non l'ho provato. Per le mie esigenze, vorrei avere un repository proprio nella mia directory di lavoro.


Ho anche trovato un riferimento alle funzionalità di versioning di Reiser4 4 anni fa:

Vedi Reiser 4. I file sono directory.

per esempio: diff -u main.C main.C/r/123

O per accedere alle proprietà

cat main.C/p/svn-eolstyle

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

Sembra che sarebbe meglio seguire quel modello, dal momento che un grande filesystem sta già seguendo quella strada.

-Paul Querna

Ma non l'ho controllato anche io.


Due anni fa sono andato a cercare ulteriormente, ho trovato il progetto FiST per la generazione di file system impilabili e ho contattato il prof. Erez Zadok della Stony Brook University, che era consigliere / mentore per il progetto chiamato versionfs molto tempo fa. citando:

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

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

consente agli utenti di gestire le proprie versioni in modo semplice ed efficiente. Versionfs offre questa funzionalità con un sovraccarico non superiore al 4% per carichi di lavoro tipici simili all'utente. Versionfs consente agli utenti di selezionare sia le versioni da conservare sia il modo in cui vengono archiviate tramite i criteri di conservazione e i criteri di archiviazione, rispettivamente. Gli utenti possono selezionare il compromesso tra spazio e prestazioni che soddisfano al meglio le loro esigenze individuali: copie complete, copie compresse o delta di blocco. Sebbene gli utenti possano controllare le loro versioni, l'amministratore può imporre valori minimi e massimi e fornire agli utenti impostazioni predefinite ragionevoli.

Inoltre, tramite l'uso di libversionfs, le applicazioni non modificate possono esaminare, manipolare e ripristinare le versioni. Gli utenti possono semplicemente eseguire strumenti familiari per accedere alle versioni precedenti dei file, anziché richiedere agli utenti di apprendere comandi separati o chiedere all'amministratore di sistema di reinstallare un file system. Senza libversionfs, le versioni precedenti sono completamente nascoste agli utenti.

Infine, Versionfs va oltre il semplice copy-on-write utilizzato dai sistemi precedenti: implementiamo il copy-on-change. Sebbene all'inizio ci aspettassimo che il confronto tra vecchie e nuove pagine sarebbe troppo costoso, abbiamo scoperto che l'aumento del tempo di sistema è più che compensato dal ridotto tempo di I / O e CPU associato alla scrittura di blocchi invariati. Quando vengono utilizzati criteri di archiviazione più costosi (ad esempio, la compressione), la copia su modifica è ancora più utile.

Mi è sembrato molto interessante, ma contattare i ragazzi che hanno lavorato al progetto ha rivelato che non esiste un luogo noto del suo codice sorgente. Il professore stesso ha dichiarato per posta:

Il codice di Versionfs è molto vecchio ora e ha funzionato solo nel kernel 2.4. Se vuoi ancora un controllo delle versioni impilabile f / s, allora dovresti scriverlo da zero - possibilmente basato su wrapfs (vedi wrapfs.filesystems.org/).

Quindi non esiste un progetto funzionante qui sebbene il concetto di filesystem impilabili mi sembra molto carino. Qualcuno vorrebbe iniziare il progetto basato su wrapfs , avvisami per favore :)


3

Puoi controllare gitfs . È un filesystem FUSE basato su git, abbastanza stabile e super facile da usare.

Fondamentalmente, è un overlay su git. Ogni volta che aggiorni un file o una directory, crea un commit con quella modifica (sa come eseguire il batching dei commit in modo da non finire con 100 commit quando decomprimi un archivio). Sa anche sincronizzare il telecomando e unire i conflitti usando la strategia "accetta sempre il mio".

Quando lo monti, ti porta due directory: corrente e cronologia . ├── 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

Ulteriori informazioni sono disponibili in questa pagina .


L'aggiunta di ulteriori informazioni migliorerebbe questa risposta.
Dave M,


0

Prova rsnapshot : non l'ho usato da solo, ma mi sono imbattuto in esso mentre cercavo i sistemi di deduplicazione a livello di file.


Interessante. Lo esaminerò sicuramente. La mia preoccupazione è che il suo carico di io causi la balbuzie sul mio sistema (non ho fatto qualcosa di simile con rsync qualche tempo fa e ho smesso di usarlo a causa di intoppi / comportamento di balbuzie in altre console durante l'esecuzione).
Dale Forester,

Ho dato un'occhiata a rsnapshot e mi piace la sua idea, ma è molto, molto sfortunato che richieda una copia duplicata di qualunque cosa sia snapshot. Sfortunatamente, e per necessità, sto lavorando con le unità al loro limite e voglio creare un'istantanea di contenuti un po 'più grandi dello spazio libero rimasto.
Dale Forester,

1
La difficoltà è nelle tue esigenze. oltre a qualcosa come rsnapshot o LVM, ext2 / ext3 non ha una funzione di snapshot incorporata. Fai notare ext3cow, ma dovresti cambiare il fielsystem sottostante. Si noti che sembra che tu possa usare rsnapshot e archiviare i tuoi dati su UN ALTRO computer, non so di che tipo di spazio stai parlando, ma può avere senso conservare le tue istantanee su un altro computer? Inoltre, tieni presente che le istantanee di qualsiasi tipo richiedono spazio su disco. Se le tue unità hanno quasi la capacità, quanto spazio hai a disposizione per le istantanee?
Jason,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.