lunes, 13 de abril de 2009

El procedimiento de backup de las cavernas

Hoy toca receta de Informaticaca: Voy a vender como algo maravilloso el método cutresalchichero de Javier Aranda para hacer backups en su máquina.



Un primer asunto es dónde se copian los ficheros de backup. En mi caso lo guardo en un disco duro externo. Concretamente en una de esas carcasas para discos de 3,5''. Tiene la ventaja de es muy modular y lo puedo utilizar para leer los discos de mis ordenadores antiguos. Además en general tengo más GibiBytes y a mejor precio que las soluciones integradas. Otras alternativas sería utilizar discos más portables (incluso un pincho USB) o DVD's. Sería prolijo analizar en qué casos resulta mejor cada alternativa.

Un segundo asunto es qué software utilizar para la copia. Actualmente utilizo 7-zip a través de unos scripts. Esto me permite hacer backups completos y diferenciales, aunque hay que conocerse un poco los parámetros (no es apto para neófitos), y muchas veces para probar algo nuevo es en plan ensayo y error.

La alternativa sería utilizar programas de backup.
  • Existen programas comerciales como Acronis, o Backup4All, que cuestan del orden de 40 o 50 euros la licencia, que son eficientes y te permiten de forma fácil buen número de opciones (incluyendo las copias incrementales, que no consigo hacer en mi montaje).
  • Existen algunos sistemas gratuitos en plan profesional (como Bacula, que viene por la noche y absorve la esencia vital de tu ordenador :D ). Lo he instalado en mi máquina, pero no he conseguido hacer funcionar. :-/
  • Existen otros programas gratuítos en plan sencillo (como fbackup), pero parece que las funcionalidades son algo más restringidas (por ejemplo no disponer del mencionado backup incremental).
Una cosa que no me gusta de los programas de backup es que suelen tener su formato específico de almacenaje, y resulta complicado utilizar los archivos comprimidos sin ayuda del programa en cuestión.
Una de las ventajas que tienen es si permiten una copia total del sistema (que permitirían recuperar el sistema operativo y todos los programas y archivos en su estado exacto), pero como no trabajo en un entorno poco crítico y no tengo condiciones de alta disponibilidad ni continuidad, me importa bastante poco.

Un tercer asunto es qué cosas almacenar en el backup. La cuestión no es sól qué almacenar, si no qué no almacenar.
  • Hay cosas que no se necesitan almacenar
    • Porque se pueden volver a conseguir (copias de programas o documentos de terceros)
    • Porque están almacenados de otra manera (como un workspace se SVN, o solapamientos con otros sistemas de backup).
    • Porque es simple y llanamente morralla (como los directorios temporales)
  • Hay cosas que hay modos mejores de guardarlo
    • Hay cosas que es mejor guardarlas en un control de versiones, como el código fuente de nuestros programas, o nuestro trabajo en general.
    • Hay cosas que es mejor guardarlas en un repositorio estático (no un control de versiones, si no un gran árbol de directorios con mucha información que nunca borramos). Es útil para software y datos históricos que no se modifican una vez obtenidos (programas, música, fotos, etc). A veces interesa almacenar incluso software obsoleto porque éste deja de estar disponible públicamente, y se pierde la compatibilidad hacia atrás para acceder a trabajo que hemos realizado con éste.
  • Hay ficheros que estropearán el backup. Por ejemplo ficheros o directorios que disparan el tamaño, que crean referencias cíclicas o redundantes, o que sencillamente causan error o degradación del proceso de backup.
  • Hay ficheros que no deben ser guardados (por ejemplo por motivos legales, o de privacidad). Por ejemplo no es buena idea dejar información sensible en un backup al que puedan tener acceso personas no autorizados (No obstante sería prioritario desarrollar procedimientos de almacenaje seguros, ya que la pérdida de estos datos será especialmente problemática).
Descripción de mi procedimiento
  • Se utilizarán discrecionalmente backups completos, y diferenciales
  • La parametrización/configuración común entre distintos backups debe estar en un sólo fichero, y no dispersa.
  • El método de compresión deberá de ser rápido (ya que el disco es bastante rápido, y el cuello de botella está en la CPU). Utilizo -mx=1, pero podría ser interesante incluso almacenar sin compresión.
  • Se debería utilizar como directorio de trabajo el disco destino (si es suficientemente rápido). Así mientas en el disco de origen (del sistema) se lee, se puede estar escribiendo simultáneamente en el disco de destino. Aparte de paralelizar las operaciones de I/O evitamos el reposicionamiento al leer y escribir en ubicaciones distintas, y además el movimiento/renombre del archivo temporal a la ubicación destino es entonces inmediata.
  • Convendría renombrar el archivo comprimido anterior que sobreescribimos. Así, si el proceso falla o es cancelado, continuamos teniendo un backup.
  • Conviene disponer de una lista de exclusión (ficheros y directorios que no deseamos que sean archivados).
  • Si es posible, en un archivo diferencial/incremental, deberían registrar los ficheros que han sido eliminados, para que una restauración no mantuviera ficheros que no deben estar. Esto lo permite 7-zip, pero no PK-Zip.
A continuación expongo los 3 scripts utilizables en Windows:
backup_setup.bat:
set BACKUP_7Z=c:\APS\7z\7z.exe
set BACKUP_TARGET=E:
backup_work.bat:
call backup_setup.bat
c:
cd c:\work\
move /Y %BACKUP_TARGET%\work.7z %BACKUP_TARGET%\work_delete.7z
%BACKUP_7Z% a %BACKUP_TARGET%\work.7z -mx=1 -x@7z_excludes.txt -w%BACKUP_TARGET%
backup_work_diferencial.bat:
call backup_setup.bat
c:
cd c:\work\
move /Y %BACKUP_TARGET%\work_dif.7z %BACKUP_TARGET%\work_dif_delete.7z
%BACKUP_7Z% u %BACKUP_TARGET%\work.7z -u- -uq3x2z0!%BACKUP_TARGET%\work_dif.7z -mx=1 -x@7z_excludes.txt -w%BACKUP_TARGET%



No hay comentarios: