Utilizo git como respaldo para mi sistema Windows, y ha sido increíblemente útil. Al final de la publicación, muestro los scripts que uso para configurar en un sistema Windows. Usar git como respaldo para cualquier sistema ofrece 2 grandes ventajas:
- A diferencia de las soluciones comerciales que a menudo usan su propio formato propietario, su copia de seguridad está en un formato de código abierto que es ampliamente compatible y está muy bien documentado. Esto le da un control total de sus datos. Es muy fácil ver qué archivos cambiaron y cuándo. Si desea truncar su historial, también puede hacerlo. ¿Quieres borrar algo de tu historia? No hay problema. Recuperar una versión de su archivo es tan simple como cualquier comando git.
- Tantos o pocos espejos como desee, y todos pueden tener tiempos de respaldo personalizados. Obtendrá su espejo local, que no está cargado por el lento tráfico de Internet, y por lo tanto le brinda (1) la capacidad de hacer copias de seguridad más frecuentes durante todo el día y (2) un tiempo de restauración rápido. (Las copias de seguridad frecuentes son una gran ventaja, porque creo que la mayor parte del tiempo que pierdo un documento es por error del usuario. Por ejemplo, su hijo sobrescribe accidentalmente un documento en el que ha estado trabajando durante las últimas 5 horas). Pero obtendrá su espejo remoto, que ofrece la ventaja de la protección de datos en caso de desastre local o robo. ¿Y si desea que su espejo remoto retroceda en un momento personalizado para ahorrar ancho de banda de Internet? No hay problema.
En pocas palabras: una copia de seguridad de git le brinda una increíble cantidad de poder para controlar cómo se realizan sus copias de seguridad.
Configuré esto en mi sistema de Windows. El primer paso es crear el repositorio local de git donde comprometerá todos sus datos locales. Recomiendo usar un segundo disco duro local, pero usar el mismo disco duro funcionará (pero se espera que empuje esto en algún lugar remoto, o de lo contrario se atornillará si el disco duro muere).
Primero deberá instalar cygwin (con rsync) y también instalar git para Windows: http://git-scm.com/download/win
A continuación, cree su repositorio local de git (solo se ejecuta una vez):
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%
A continuación, tenemos nuestro contenedor de script de respaldo, que Windows Scheduler llamará regularmente:
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
A continuación, tenemos la secuencia de comandos de respaldo en sí que el reiniciador llama:
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%
Tenemos el archivo exclude-from.txt, donde ponemos todos los archivos para ignorar:
excluir-de.txt:
target/
logs/
AppData/
Downloads/
trash/
temp/
.idea/
.m2/
.IntelliJIdea14/
OLD/
Searches/
Videos/
NTUSER.DAT*
ntuser.dat*
Tendrá que ir a cualquier repositorio remoto y hacer un 'git init --bare' en ellos. Puede probar el script ejecutando el script de respaldo. Suponiendo que todo funciona, vaya al Programador de Windows y apunte una copia de seguridad por hora hacia el archivo vbs. Después de eso, tendrás un historial de tu computadora por cada hora. Es extremadamente conveniente: ¿cada uno elimina accidentalmente una sección de texto y se lo pierde? Solo revisa tu repositorio git.