Comment obtenir des instantanés ou des versions de système de fichiers transparents et efficaces sur ext3 / 4?

11

J'ai longtemps pensé à la gestion des versions des systèmes de fichiers. C'est une fonctionnalité qui tue et j'ai regardé Wayback, ext3cow, zfs, des solutions de fusibles ou simplement des superpositions cvs / svn / git.

Je considère ext3cow comme le modèle pour mes besoins. Transparent, efficace, mais je peux me passer de la ls abc@timestampfonction supplémentaire . Tant que j'obtiens une version automatisée et transparente de mes fichiers.

Il peut être instantané ou basé sur des instantanés à des intervalles de 10 s, 30 s, 1 m, 5 m, 15 m, etc. de 100 m à 1 Go.

ZFS n'est pas vraiment une option car je suis sur Linux (et je préférerais ne pas l'utiliser via Fuse car j'ai déjà une configuration ext3 que je veux version, pas quelque chose de nouveau).

Quelles solutions existe-t-il?

Dale Forester
la source

Réponses:

7

Si vous encapsulez vos systèmes de fichiers à l'aide de LVM, vous pouvez créer un volume d'instantané à l'aide de la couche de volume logique sous-jacente. C'est un processus assez simple et étonnamment efficace pour les choses «instantanées» standard, telles que la sauvegarde et l'annulation des rm -froopsies.

McJeff
la source
Merci d'avoir répondu. Malheureusement, je recherche quelque chose qui peut être appliqué sur un système de fichiers existant.
Dale Forester
6

Après 8 ans de recherche, j'ai trouvé le SVNFS de Marco R. Gazzetta (qui est différent d'un projet plus ancien du même nom par John Madden [dont on fait des choses différentes]). Ce SVNFS utilise svn de manière transparente dans les opérations r / w:

Au lieu de créer un système de fichiers qui fait son propre versioning, j'ai utilisé un outil de versioning existant, subversion, et rendu son utilisation transparente. L'avantage est que ce système de fichiers ne vous oblige pas à apprendre un nouvel outil, si vous connaissez la subversion

Il est écrit en Python et utilise FUSE:

Vous démarrez maintenant le système de fichiers de version en appelant le script joint:

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

Une fois que tout va bien, vous devriez pouvoir obtenir une liste des deux répertoires et voir que le contenu est le même.

Maintenant, si vous créez (presque) n'importe quel fichier dans l'un ou l'autre répertoire, il s'affichera également de l'autre côté de la clôture. La grande différence est que si vous créez un fichier dans le répertoire myfiles, il sera automatiquement placé sous contrôle de version (l'inverse n'est pas vrai).

Dans l'exemple, SVNFS utilise un répertoire séparé pour le dépôt. Bien que je ne l'ai pas testé. Pour mes besoins, j'aimerais avoir un référentiel directement dans mon répertoire de travail.


J'ai également trouvé une référence aux capacités de versioning de Reiser4 il y a 4 ans:

Voir Reiser 4. Les fichiers sont des répertoires.

par exemple: diff -u main.C main.C/r/123

Ou pour accéder aux propriétés

cat main.C/p/svn-eolstyle

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

Il semble qu'il serait préférable de suivre ce modèle, car un système de fichiers majeur suit déjà cette voie.

-Paul Querna

Mais je ne l'ai pas vérifié aussi.


Il y a deux ans, je suis allé chercher plus loin, j'ai trouvé le projet FiST pour générer des systèmes de fichiers empilables et j'ai contacté le prof. Erez Zadok de l' Université de Stony Brook, qui était conseiller / mentor pour le projet appelé versionfs il y a longtemps. Citant:

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

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

permet aux utilisateurs de gérer leurs propres versions facilement et efficacement. Versionfs fournit cette fonctionnalité avec pas plus de 4% de surcharge pour les charges de travail typiques de type utilisateur. Versionfs permet aux utilisateurs de sélectionner à la fois quelles versions sont conservées et comment elles sont stockées via des politiques de rétention et des politiques de stockage, respectivement. Les utilisateurs peuvent sélectionner le compromis entre espace et performances qui répond le mieux à leurs besoins individuels: copies complètes, copies compressées ou deltas de bloc. Bien que les utilisateurs puissent contrôler leurs versions, l'administrateur peut appliquer des valeurs minimales et maximales et fournir aux utilisateurs des valeurs par défaut raisonnables.

De plus, grâce à l'utilisation de libversionfs, les applications non modifiées peuvent examiner, manipuler et récupérer des versions. Les utilisateurs peuvent simplement exécuter des outils familiers pour accéder aux versions de fichiers précédentes, plutôt que d'exiger des utilisateurs qu'ils apprennent des commandes distinctes, ou demander à l'administrateur système de remonter un système de fichiers. Sans libversionfs, les versions précédentes sont complètement cachées aux utilisateurs.

Enfin, Versionfs va au-delà de la simple copie sur écriture utilisée par les systèmes précédents: nous implémentons la copie sur changement. Bien qu'au départ, nous pensions que la comparaison entre les anciennes et les nouvelles pages serait trop coûteuse, nous avons constaté que l'augmentation du temps système était plus que compensée par la réduction des E / S et du temps CPU associés à l'écriture de blocs inchangés. Lorsque des politiques de stockage plus coûteuses sont utilisées (par exemple, la compression), la copie sur modification est encore plus utile.

Cela m'a semblé très intéressant, mais contacter les gars qui ont travaillé sur le projet a révélé que le code source n'est pas connu. Le professeur lui-même a déclaré par courrier:

Le code de Versionfs est maintenant très ancien et ne fonctionnait que dans le noyau 2.4. Si vous voulez toujours un versioning empilable f / s, alors il faudrait l'écrire à partir de zéro - éventuellement basé sur wrapfs (voir wrapfs.filesystems.org/).

Il n'y a donc pas de projet de travail ici bien que le concept de systèmes de fichiers empilables me semble très agréable. Quelqu'un souhaite-t-il démarrer un projet basé sur des enveloppes , informez-moi s'il vous plaît :)

saulius2
la source
3

Vous pouvez vérifier les gitfs . C'est un système de fichiers FUSE basé sur git, assez stable et super facile à utiliser.

Fondamentalement, c'est une superposition sur git. Chaque fois que vous mettez à jour un fichier ou un répertoire, il crée une validation avec ce changement (sait que les validations sont regroupées pour ne pas se retrouver avec 100 validations lorsque vous décompressez une archive). Sait également synchroniser votre télécommande et fusionner les conflits en utilisant la stratégie «toujours accepter le mien».

Lorsque vous le montez, il vous apporte deux répertoires: actuel et historique . ├── 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

Plus d'informations peuvent être trouvées sur cette page .

vtemian
la source
L'ajout de plus d'informations améliorerait cette réponse.
Dave M
2

bup semble prometteur.

Discussion plus ancienne à ce sujet ici: http://lwn.net/Articles/380983/

Shane Geiger
la source
Il y a une mise en garde avec l'utilisation de quelque chose basé sur git, les modifications dans git ne sont pas traitées comme des deltas depuis l'origine - chaque commit est le fichier complet même si vous ne changez qu'un octet.
synthétiseur du
0

Essayez rsnapshot - je ne l'ai pas utilisé moi-même, mais je suis tombé dessus en regardant les systèmes de déduplication au niveau des fichiers @.

Jason
la source
C'est intéressant. Je vais certainement l'examiner. Mon inquiétude est que sa charge io provoquera le bégaiement sur mon système (je n'ai pas quelque chose de similaire avec rsync il y a un certain temps et j'ai cessé de l'utiliser en raison de problèmes d'attaque / de bégaiement dans d'autres consoles lors de son exécution).
Dale Forester
J'ai jeté un coup d'œil à rsnapshot et j'aime son idée, mais il est très, très regrettable qu'il nécessite une copie en double de tout ce qu'il prend. Malheureusement, et par nécessité, je travaille avec des lecteurs à leur limite et je veux créer des instantanés de contenu qui sont un peu plus grands que l'espace libre restant.
Dale Forester
1
La difficulté réside dans vos besoins. en plus de quelque chose comme rsnapshot ou LVM, ext2 / ext3 n'a pas de fonction de capture instantanée intégrée. Vous signalez ext3cow, mais vous devez changer le système de fichiers sous-jacent. Notez qu'il semble que vous puissiez utiliser rsnapshot et stocker vos données sur une AUTRE machine, je ne sais pas de quel type d'espace vous parlez, mais il peut être judicieux de conserver vos instantanés sur une autre machine? Gardez également à l'esprit que les instantanés de tout type nécessiteront de l'espace disque. Si vos disques sont presque à pleine capacité, combien d'espace vous reste-t-il pour les instantanés?
Jason