J'utilise git comme sauvegarde pour mon système Windows, et cela a été incroyablement utile. Au bas du post, je montre les scripts que j'utilise pour configurer sur un système Windows. Utiliser git comme sauvegarde pour n'importe quel système offre 2 gros avantages :
- Contrairement aux solutions commerciales qui utilisent souvent leur propre format propriétaire, votre sauvegarde est dans un format open source largement supporté et très bien documenté. Cela vous donne un contrôle total sur vos données. Il est très facile de voir quels fichiers ont été modifiés et quand. Si vous souhaitez tronquer votre historique, vous pouvez également le faire. Vous voulez effacer quelque chose de votre historique ? Aucun problème. Récupérer une version de votre fichier est aussi simple que n'importe quelle commande git.
- Autant de miroirs que vous le souhaitez, et tous peuvent avoir des temps de sauvegarde personnalisés. Vous aurez votre miroir local, qui n'est pas accablé par un trafic Internet lent, et vous donne donc (1) la possibilité de faire des sauvegardes plus fréquentes tout au long de la journée et (2) un temps de restauration rapide. (Les sauvegardes fréquentes sont un énorme avantage, car je trouve que la plupart du temps, la perte d'un document est due à une erreur de l'utilisateur. Par exemple, votre enfant écrase accidentellement un document sur lequel il travaillait depuis 5 heures). Mais vous aurez votre miroir distant, qui offre l'avantage de la protection des données en cas de sinistre local ou de vol. Et supposons que vous souhaitiez que votre miroir distant effectue une sauvegarde à une heure personnalisée pour économiser votre bande passante Internet ? Aucun problème.
En résumé : Une sauvegarde git vous donne une quantité incroyable de pouvoir sur le contrôle de la façon dont vos sauvegardes se produisent.
Je l'ai configuré sur mon système Windows. La première étape est de créer le repo git local où vous allez commit toutes vos données locales. Je recommande l'utilisation d'un second disque dur local, mais l'utilisation du même disque dur fonctionnera aussi (mais il est prévu que vous poussiez ceci quelque part à distance, ou sinon vous êtes foutu si le disque dur meurt).
Vous devrez d'abord installer cygwin (avec rsync), et aussi installer git pour Windows : http://git-scm.com/download/win
Ensuite, créez votre dépôt git local (à exécuter une seule fois) :
init-repo.bat :
@echo off
REM SCRIPT PURPOSE: CREATE YOUR LOCAL GIT-REPO (RUN ONLY ONCE)
REM Set where the git repository will be stored
SET GBKUP_LOCAL_MIRROR_HOME=E:\backup\mirror
REM Create the backup git repo.
SET GIT_PARAMS=--git-dir=%GBKUP_LOCAL_MIRROR_HOME%\.git --work-tree=%GBKUP_LOCAL_MIRROR_HOME%
mkdir %GBKUP_LOCAL_MIRROR_HOME%
git %GIT_PARAMS% init
git %GIT_PARAMS% config core.autocrlf false
git %GIT_PARAMS% config core.ignorecase false
git %GIT_PARAMS% config core.fileMode false
git %GIT_PARAMS% config user.email backup@yourComputerName
git %GIT_PARAMS% config user.name backup
REM add a remote to the git repo. Make sure you have set myRemoteServer in ~/.ssh/config
REM The path on the remote server will vary. Our remote server is a Windows machine running cygwin+ssh.
REM For better security, you could install gitolite on the remote server, and forbid any non-fast-forward merges, and thus stop a malicious user from overwriting your backups.
git %GIT_PARAMS% remote add origin myRemoteServer:/cygdrive/c/backup/yourComputerName.git
REM treat all files as binary; so you don't have to worry about autocrlf changing your line endings
SET ATTRIBUTES_FILE=%GBKUP_LOCAL_MIRROR_HOME%\.git\info\attributes
echo.>> %ATTRIBUTES_FILE%
echo *.gbkuptest text>> %ATTRIBUTES_FILE%
echo * binary>> %ATTRIBUTES_FILE%
REM compression is often a waste of time with binary files
echo * -delta>> %ATTRIBUTES_FILE%
REM You may need to get rid of windows new lines. We use cygwin's tool
C:\cygwin64\bin\dos2unix %ATTRIBUTES_FILE%
Ensuite, nous avons notre enveloppe de sauvegarde script, qui sera appelée régulièrement par Windows Scheduler :
gbackup.vbs :
' A simple vbs wrapper to run your bat file in the background
Set oShell = CreateObject ("Wscript.Shell")
Dim strArgs
strArgs = "cmd /c C:\opt\gbackup\gbackup.bat"
oShell.Run strArgs, 0, false
Ensuite, nous avons la sauvegarde script elle-même que le wrapper appelle :
gbackup.bat :
@echo off
REM Set where the git repository will be stored
SET GBKUP_LOCAL_MIRROR_HOME=E:\backup\mirror
REM the user which runs the scheduler
SET GBKUP_RUN_AS_USER=yourWindowsUserName
REM exclude file
SET GBKUP_EXCLUDE_FILE=/cygdrive/c/opt/gbackup/exclude-from.txt
SET GBKUP_TMP_GIT_DIR_NAME=git-renamed
for /f "delims=" %%i in ('C:\cygwin64\bin\cygpath %GBKUP_LOCAL_MIRROR_HOME%') do set GBKUP_LOCAL_MIRROR_CYGWIN=%%i
REM rename any .git directories as they were (see below command)
for /r %GBKUP_LOCAL_MIRROR_HOME% %%i in (%GBKUP_TMP_GIT_DIR_NAME%) do ren "%%i" ".git" 2> nul
SET RSYNC_CMD_BASE=C:\cygwin64\bin\rsync -ahv --progress --delete --exclude-from %GBKUP_EXCLUDE_FILE%
REM rsync all needed directories to local mirror
%RSYNC_CMD_BASE% /cygdrive/c/dev %GBKUP_LOCAL_MIRROR_CYGWIN%
%RSYNC_CMD_BASE% /cygdrive/c/Users/asmith %GBKUP_LOCAL_MIRROR_CYGWIN%
%RSYNC_CMD_BASE% /cygdrive/c/Users/bsmith %GBKUP_LOCAL_MIRROR_CYGWIN%
cacls %GBKUP_LOCAL_MIRROR_HOME% /t /e /p %GBKUP_RUN_AS_USER%:f
REM rename any .git directories as git will ignore the entire directory, except the main one
for /r %GBKUP_LOCAL_MIRROR_HOME% %%i in (.git) do ren "%%i" "%GBKUP_TMP_GIT_DIR_NAME%" 2> nul
ren %GBKUP_LOCAL_MIRROR_HOME%\%GBKUP_TMP_GIT_DIR_NAME% .git
REM finally commit to git
SET GIT_PARAMS=--git-dir=%GBKUP_LOCAL_MIRROR_HOME%\.git --work-tree=%GBKUP_LOCAL_MIRROR_HOME%
SET BKUP_LOG_FILE=%TMP%\git-backup.log
SET TO_LOG=1^>^> %BKUP_LOG_FILE% 2^>^&1
echo ===========================BACKUP START=========================== %TO_LOG%
For /f "tokens=2-4 delims=/ " %%a in ('date /t') do (set mydate=%%c-%%a-%%b)
For /f "tokens=1-2 delims=/:" %%a in ('time /t') do (set mytime=%%a%%b)
echo %mydate%_%mytime% %TO_LOG%
echo updating git index, committing, and then pushing to remote %TO_LOG%
REM Caution: The --ignore-errors directive tells git to continue even if it can't access a file.
git %GIT_PARAMS% add -Av --ignore-errors %TO_LOG%
git %GIT_PARAMS% commit -m "backup" %TO_LOG%
git %GIT_PARAMS% push -vv --progress origin master %TO_LOG%
echo ===========================BACKUP END=========================== %TO_LOG%
Nous avons un fichier exclude-from.txt, où nous mettons tous les fichiers à ignorer :
exclure de.txt :
target/
logs/
AppData/
Downloads/
trash/
temp/
.idea/
.m2/
.IntelliJIdea14/
OLD/
Searches/
Videos/
NTUSER.DAT*
ntuser.dat*
Vous devrez vous rendre dans tous les dépôts distants et faire un "git init --bare" sur ceux-ci. Vous pouvez tester le script en exécutant le script de sauvegarde. En supposant que tout fonctionne, allez dans Windows Scheduler et pointez une sauvegarde horaire vers le fichier vbs. Après cela, vous aurez un historique git de votre ordinateur pour chaque heure. C'est extrêmement pratique - il vous est déjà arrivé de supprimer accidentellement une section de texte et de la manquer ? Il suffit de vérifier votre dépôt git.
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) ;)
0 votes
Le gros problème avec cette méthode est qu'il n'y a pas de contrôle central - vous devez avoir un accès direct (ssh) à la machine pour effectuer toute forme de maintenance ou de validation de sauvegarde. Je trouve toujours que l'installation d'une application sur les boîtes à sauvegarder, puis leur administration à partir d'un emplacement central est un gain bien plus important.
0 votes
@hafichuk Avec des outils comme Puppet/Chef, ce n'est pas un si gros problème, mais je vois votre point de vue.
0 votes
Je fais cela depuis un certain temps, mais pour une raison différente. J'aime utiliser l'outil diff chaque fois que je veux installer quelque chose, mais je ne sais pas ce que cela va faire à mon système. J'installe généralement un v m avec le même système d'exploitation et avec obtenir installé à la racine, et installer des logiciels à cela. Après l'installation, j'exécute git diff pour voir les changements effectués dans le système d'exploitation.