En un servidor, instale git
cd /
git init
git add .
git commit -a -m "Yes, this is server"
Luego /.git/
apunte a una unidad de red (SAN, NFS, Samba, lo que sea) o un disco diferente. Use un trabajo cron cada hora / día, etc. para actualizar los cambios. El directorio .git contendría una copia versionada de todos los archivos del servidor (excluyendo los inútiles / complicados como / proc, / dev, etc.)
Para un servidor de desarrollo no importante donde no quiero la molestia / costo de configurarlo en un sistema de respaldo adecuado, y donde los respaldos solo serían convenientes (es decir, no necesitamos respaldar este servidor pero ahorraría en algún momento si las cosas salieron mal), ¿podría ser una solución de respaldo válida o simplemente se caerá en una gran pila de popó?
Respuestas:
No eres una persona tonta. Usarlo
git
como mecanismo de respaldo puede ser atractivo y, a pesar de lo que otras personas han dicho,git
funciona bien con archivos binarios. Lea esta página del Libro Git para obtener más información sobre este tema. Básicamente, dadogit
que no está utilizando un mecanismo de almacenamiento delta, realmente no le importa cómo se vean sus archivos (pero la utilidad degit diff
es bastante baja para los archivos binarios con una configuración estándar).El mayor problema con el uso
git
de la copia de seguridad es que no conserva la mayoría de los metadatos del sistema de archivos. Específicamente,git
no registra:Puede resolver esto escribiendo herramientas para registrar esta información explícitamente en su repositorio, pero puede ser complicado hacerlo correctamente.
Una búsqueda en Google de metadatos de copia de seguridad de git produce una serie de resultados que parecen valer la pena leer (incluidas algunas herramientas que ya intentan compensar los problemas que he planteado aquí).
etckeeper fue desarrollado para realizar copias de seguridad
/etc
y resuelve muchos de estos problemas.fuente
No lo he usado, pero puedes mirar bup, que es una herramienta de respaldo basada en git.
fuente
Puede ser una solución de respaldo válida, etckeeper se basa en esta idea. Pero vigile los
.git
permisos del directorio; de lo contrario, presionar/etc/shadow
puede ser legible en el.git
directorio.fuente
Aunque técnicamente podrías hacer esto, pondría dos advertencias en contra:
1, está utilizando un sistema de control de versión de origen para datos binarios. Por lo tanto, lo está utilizando para algo para lo que no fue diseñado.
2, me preocupa su proceso de desarrollo si no tiene un proceso (documentación o automatizado) para construir una nueva máquina. ¿Qué pasa si te golpean comprar un autobús, quién sabría qué hacer y qué era importante?
La recuperación ante desastres es importante, sin embargo, es mejor automatizar (guiar) la configuración de un nuevo cuadro de desarrollo que simplemente hacer una copia de seguridad de todo. Seguro usa git para tu script / documentación pero no para cada archivo en una computadora.
fuente
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:
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:
A continuación, tenemos nuestro contenedor de script de respaldo, que Windows Scheduler llamará regularmente:
gbackup.vbs:
A continuación, tenemos la secuencia de comandos de respaldo en sí que el reiniciador llama:
gbackup.bat:
Tenemos el archivo exclude-from.txt, donde ponemos todos los archivos para ignorar:
excluir-de.txt:
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.
fuente
Bueno, no es una mala idea, pero creo que hay dos banderas rojas para levantar:
... pero aún así, puede ser una buena copia de seguridad para cosas relacionadas con la corrupción. O como dijiste, si la carpeta .git / está en otro lugar.
... Por lo tanto, es posible que deba indicarle a su cronjob que agregue etiquetas y luego asegúrese de que se borrará la confirmación que no está etiquetada.
fuente
rm -Rf /
nos causaría algunos problemas. Nuestro sistema de copia de seguridad actual guarda cosas durante 2 años o 50 versiones (lo que ocurra último) para que nuestra copia de seguridad aumente constantemente de todos modos. Pero me gusta la idea de agregar etiquetas, podríamos tener etiquetas "diarias", "semanales", etc.No lo he probado con un sistema completo, pero lo estoy usando para mis copias de seguridad de MySQL (con la opción --skip-extended-insert) y realmente me ha funcionado bien.
Tendrá problemas con los archivos de datos binarios (todo su contenido podría y cambiará) y podría tener problemas con la
.git
carpeta realmente grande. Recomendaría configurar un.gitignore
archivo y solo hacer una copia de seguridad de los archivos de texto que realmente sabe que necesita.fuente
Una vez desarrollé una solución de respaldo basada en subversión. Si bien funcionó bastante bien (y git debería funcionar aún mejor), creo que hay mejores soluciones aquí.
Considero que rsnapshot es uno de los mejores, si no el mejor. Con un buen uso del enlace duro, tengo un servidor de archivos de 300 GB (con medio millón de archivos) con copias de seguridad diarias, semanales y mensuales de hasta un año. El espacio total utilizado en el disco es solo una copia completa + la parte incremental de cada copia de seguridad, pero gracias a los enlaces duros tengo una estructura de directorio "en vivo" completa en cada una de las copias de seguridad. En otras palabras, los archivos son accesibles directamente no solo en daily.0 (la copia de seguridad más reciente), sino incluso en daily.1 (yestarday) o semanalmente.2 (hace dos semanas), y así sucesivamente.
Compartiendo la carpeta de respaldo con Samba, mis usuarios pueden extraer el archivo de los respaldos simplemente apuntando su PC al servidor de respaldo.
Otra muy buena opción es rdiff-backup , pero como me gusta tener archivos siempre accesibles simplemente dirigiendo Explorer a \\ servername, rsnapshot fue una mejor solución para mí.
fuente
Tuve la misma idea de hacer una copia de seguridad con git, básicamente porque permite copias de seguridad versionadas. Luego vi rdiff-backup , que proporciona esa funcionalidad (y mucho más). Tiene una interfaz de usuario realmente agradable (mira las opciones de CLI). Estoy muy feliz con eso. El
--remove-older-than 2W
es muy bueno. Le permite eliminar versiones anteriores a 2 semanas.rdiff-backup
almacena solo diferencias de archivos.fuente
Soy extremadamente nuevo en git, pero ¿no son sucursales locales de forma predeterminada y debo enviarlas explícitamente a repositorios remotos? Esta fue una sorpresa desagradable e inesperada. Después de todo, ¿no quiero que todo mi repositorio local sea 'respaldado' en el servidor? Leyendo el libro git :
Para mí, esto significaba que esas ramas locales, como otros archivos que no son git en mi máquina local, corren el riesgo de perderse a menos que se realicen copias de seguridad regularmente por algún medio que no sea git. Hago esto de todos modos, pero rompió mis suposiciones sobre git 'respaldar todo' en mi repositorio. ¡Me encantaría aclarar esto!
fuente
Encontré que esta es una buena metodología para mis cajas de desarrollo. Cambia de ser algo que debe respaldarse solo a un punto final de implementación.
Todos los manifiestos de configuración e instalación de paquetes se almacenan en Puppet, lo que permite una fácil implementación y actualizaciones de configuración. El directorio de Puppet está respaldado con git. Kickstart se usa para hacer la implementación inicial.
También mantengo un repositorio YUM personalizado para cualquier paquete que se esté desarrollando en ese momento. Esto tiene el beneficio adicional de que los paquetes con los que estamos trabajando no se dejan solo como archivos binarios desatendidos en el sistema local; si eso sucede y los archivos se destruyen, bueno. Alguien no siguió el procedimiento adecuado.
fuente
Es posible que desee consultar bup en github, que fue diseñado para servir el propósito de usar git como copia de seguridad.
fuente
Es un enfoque que se utiliza, tiene sentido.
Keepconf usa rsync y git para este trabajo, es una envoltura sobre estas herramientas para facilitar las cosas.
Solo necesita un servidor central con teclas ssh configuradas para acceder a los servidores de respaldo y algunas líneas en el archivo de configuración. Por ejemplo, este es mi propio archivo para mantener todos / etc / y los paquetes debian instalados:
Con eso, tengo la copia de seguridad de rsync y el git commit.
fuente
Mi opinión personal es que esto es básicamente todo al revés. Estás empujando los archivos a una solución de respaldo, en lugar de sacarlos.
Mucho mejor sería centralizar la configuración del servidor en primer lugar, y luego tirar hacia abajo, usando algo como títere.
Dicho esto, puede funcionar, simplemente no creo que sea tan bueno.
Intente buscar en Backuppc: es bastante fácil de configurar y es francamente brillante.
fuente
Funcionaría un poco, pero dos advertencias.
Las adiciones de archivos no se recogerán automáticamente cuando realice la confirmación. Use --porcelean om git status para encontrar cosas nuevas para agregar antes de realizar la confirmación.
¿Por qué la molestia de un montaje remoto para .ssh? Podría ser frágil porque no sabrás que falló. Use un repositorio desnudo para el otro extremo con un inicio de sesión de clave ssh normal. Siempre que el repositorio esté vacío y solo presione desde una fuente, se garantiza que funcionará sin una fusión.
fuente