122 votes

GIT comme outil de sauvegarde

Sur un serveur, installez git

cd /
git init
git add .
git commit -a -m "Yes, this is server"

Puis obtenir /.git/ pour pointer vers un lecteur réseau (SAN, NFS, Samba, etc.) ou un disque différent. Utilisez une tâche cron toutes les heures/jours etc. pour mettre à jour les modifications. Le répertoire .git contiendra une copie versionnée de tous les fichiers du serveur (à l'exclusion des fichiers inutiles/compliqués comme /proc, /dev, etc.)

Pour un serveur de développement non important, pour lequel je ne veux pas m'embêter à mettre en place un système de sauvegarde adéquat, et pour lequel les sauvegardes ne seraient que pratiques (nous ne faisons pas de besoin de pour sauvegarder ce serveur mais cela permettrait de gagner du temps si les choses tournaient mal), est-ce que cela pourrait être une solution de sauvegarde valable ou est-ce que cela va juste tomber dans un gros tas de caca ?

3 votes

Sparkleshare n'utilise-t-elle pas une idée similaire ?

0 votes

@B14D3 Je pense que sparkleshare est plutôt une sorte de Dropbox, mais je vais y réfléchir.

2 votes

Tu as raison, mais il utilise git pour faire une sorte de truc buckup (copier sur plusieurs pc et contrôler les versions des fichiers) ;)

4voto

bhan Points 65

Ce n'est pas une mauvaise idée, mais je pense qu'il y a deux drapeaux rouges à lever :

  • Si le disque dur tombe en panne, vous perdrez tout si vous ne poussez pas votre commit vers un autre serveur/disque. ( Eventuellement si vous avez un plan pour cela, je préfère le mentionner. )

... mais quand même, cela peut être une bonne sauvegarde pour les choses liées aux corruptions. Ou comme vous l'avez dit, si le dossier .git/ est ailleurs.

  • La taille de cette sauvegarde augmentera toujours. Il n'y a pas d'élagage, de rotation ou autre par défaut.

... Donc vous pouvez avoir besoin de dire à votre cronjob d'ajouter des balises, et ensuite vous assurer que les commit qui ne sont pas balisés seront nettoyés.

0 votes

Nous allons probablement monter le répertoire .git sur un serveur distant, bien que le classique rm -Rf / nous causerait des problèmes. Notre système de sauvegarde actuel conserve les données pendant 2 ans ou 50 versions (selon la dernière éventualité), de sorte que notre sauvegarde augmente constamment. Mais j'aime l'idée d'ajouter des balises, nous pourrions avoir des balises "quotidiennes", "hebdomadaires", etc.

0 votes

+1 pour des besoins d'espace toujours croissants

0 votes

@sam git est en constante évolution. Vous ne pouvez pas élaguer l'historique de plus de N années. Je suppose que votre système actuel le fait.

4voto

shodanshok Points 42743

J'ai développé une fois une solution de sauvegarde basée sur subversion. Bien que cela ait fonctionné assez bien (et git devrait fonctionner encore mieux), je pense qu'il existe de meilleures solutions.

Je considère rsnapshot pour être l'un des meilleurs - si ce n'est le site mieux. Grâce à une bonne utilisation de l'espace disque, j'ai un serveur de fichiers de 300 Go (avec un demi-million de fichiers) avec des sauvegardes quotidiennes, hebdomadaires et mensuelles remontant jusqu'à un an. L'espace disque total utilisé n'est qu'une copie complète + la partie incrémentale de chaque sauvegarde, mais grâce aux hardlinks, j'ai une complet structure de répertoire "live" dans chacune des sauvegardes. En d'autres termes, les fichiers sont directement accessibles non seulement dans daily.0 (la sauvegarde la plus récente), mais aussi dans daily.1 (hier) ou weekly.2 (il y a deux semaines), et ainsi de suite.

En partageant à nouveau le dossier de sauvegarde avec Samba, mes utilisateurs sont en mesure d'extraire le fichier des sauvegardes en faisant simplement pointer leur PC vers le serveur de sauvegarde.

Une autre très bonne option est rdiff-backup mais comme j'aime avoir des fichiers toujours accessibles, il suffit de diriger l'Explorateur vers \\servername rsnapshot était une meilleure solution pour moi.

1 votes

La dernière version de rdiff-backup date de 2009. Est-il extrêmement bien conçu et ne nécessite aucune mise à jour ou s'agit-il simplement d'un projet abandonné ?

0 votes

Je ne sais pas si elle est maintenue, mais elle est essentiellement "faite".

0 votes

En regardant savannah.nongnu.org/bugs/ il semble qu'il y ait eu une certaine activité jusqu'en 2015 mais de nombreux rapports de bogues sont ignorés. Je pense que je vais le classer dans la catégorie des projets abandonnés.

2voto

Fredsgt Points 11

Je ne l'ai pas essayé avec un système complet mais je l'utilise pour mes sauvegardes MySQL (avec l'option --skip-extended-insert) et cela a vraiment bien fonctionné pour moi.

Vous allez rencontrer des problèmes avec les fichiers de données binaires (leur contenu entier peut changer et changera) et vous pourriez avoir des problèmes avec la fonction .git Le dossier devient vraiment gros. Je vous recommande de mettre en place un .gitignore et ne sauvegarder que les fichiers texte dont vous savez vraiment que vous avez besoin.

0 votes

Je l'utilise aussi pour les sauvegardes MySQL, avec --extended-insert=false. Assurez-vous de faire "git gc" régulièrement ou juste après commit.

2voto

Jeff Hall Points 1016

J'ai eu la même idée de sauvegarder avec git, essentiellement parce qu'il permet les sauvegardes par version. Puis j'ai vu rdiff-backup qui fournit cette fonctionnalité (et bien plus encore). Il possède une interface utilisateur très agréable (regardez les options CLI). J'en suis très satisfait. Le site --remove-older-than 2W est plutôt cool. Il vous permet de supprimer les versions de plus de deux semaines. rdiff-backup ne stocke que les différences de fichiers.

2voto

Lars Points 570

Je suis extrêmement novice en matière de git, mais les branches ne sont-elles pas locales par défaut, et doivent être poussées explicitement vers des dépôts distants ? Ce fut une surprise désagréable et inattendue. Après tout, est-ce que je ne veux pas todo de mon repo local à être "sauvegardé" sur le serveur ? En lisant le git book :

Vos branches locales ne sont pas automatiquement synchronisées avec les branches distantes sur lesquelles vous écrivez - vous devez explicitement pousser les branches que vous voulez partager. De cette façon, vous pouvez utiliser des branches privées pour le travail que vous ne voulez pas partager, et pousser uniquement les branches de sujets sur lesquels vous voulez collaborer.

Pour moi, cela signifiait que ces branches locales, comme d'autres fichiers non-git sur ma machine locale, risquaient d'être perdues à moins d'être sauvegardées régulièrement par des moyens non-git. Je le fais de toute façon, mais cela a brisé mes hypothèses sur le fait que git "sauvegardait tout" dans mon repo. J'aimerais avoir des éclaircissements à ce sujet !

1 votes

Presque tout dans git, à l'exception des remotes, est local. Cela a été conçu ainsi. Vous pouvez pousser des choses vers les remotes, et vous devriez le faire, particulièrement si elles sont utilisées pour la sauvegarde comme dans ce scénario. Pour les branches, encore une fois, oui, vous devez explicitement les pousser si vous voulez qu'elles soient ajoutées à un remote. Pour le développement, c'est très bien parce que souvent vous voulez tester quelque chose, mais il n'y a pas besoin que cette branche de test soit conservée indéfiniment. Une fois que vous avez obtenu ce dont vous avez besoin, vous allez probablement le fusionner avec une branche de développement et supprimer la branche de test.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X