hammer-backup


¿Qué es hammer-backup?

Este script opera HAMMER y sus PFS (pseudo-filesystem) y es capaz de volcar el contenido de éstos para crear copias de seguridad.

Usa la directiva llamada ‘mirror-read’ (‘man 8 hammer’) para crear un volcado a la salida estándar y ésta es redirigida a su vez a un fichero con o sin compresión.

Admite dos tipos de copia de seguridad:

  • Completa: En la que TODOS los datos del PFS en cuestión son enviados a un fichero.
  • Inremental: Copia parcial que requiere una copia completa inicial.

Además de los datos para la copia de seguridad en sí, también crea un fichero .bkp que contiene “metadatos” relativos al tipo de backup realizado.

El formato de dicho fichero se puede ver a continuación:

filename,rsv01,rsv02,backup type,shared uuid,last TID,md5 hash

filename   : Fichero de copia de seguridad.
rsv01,rsv02: Campos reservados.
backup type: 1 u 2 (completo o incremental, respectivamente)
shared uuid: UUID compartdio del PFS.
last TID   : La última ID de transacción (TID). La siguiente copia de seguridad incremental comenzaría a partir de ésta.
md5 hash   : Para las restauraciones.

Ejemplo:

> head -1 20140305222026_pfs_t1_full.xz.bkp
20140305222026_pfs_t1_full.xz.bkp,,,1,e8decfc5-a4ab-11e3-942b-f56d04d293e0,000000011b36be30,05482d26644bd1e76e69d83002e08258

¿Cómo se usa?

Uso general:

$ hammer-backup -h
Usage: hammer-backup.sh [-h] [-l] [-v] [-i <full-backup-file>] [-f] [-c <compress-rate>] -d [<backup-dir>] <path-to-PFS>

 -h: Help outputo above.
 -v: Verbose
 -i <full-backup-file>: Incremental backup. Needs the full backup metadata file.
                        Relative path to -d. You can specify 'auto' and the
                        script should determine what's the latest full backup.
 -f: Full backup
 -c: Compress rate for xz(1)
 -d: Backup directory
 -l: List backups from backup directory.
 -k: Validates integrity of all backup files.
 <path-to-PFS>: PFS path to backup

Creando una copia de seguridad completa

$ hammer-backup -v -f -c 6 -d /root/backups /pfs/var
INFO: Full backup.
INFO: XZ compression level 6.
INFO: Backup directory is /root/backups.
INFO: Validating PFS
INFO: Initiating full backup
INFO: Launching: hammer -y -v mirror-read /pfs/var  2> /tmp/tmp.UdOwvYhv         | xz -c -6 > /root/backups/20140308001146_pfs_var.xz
INFO: Backup completed.

NOTA: -v es opcional. Ten en cuenta que /pfs/var es parte de las instalaciones por defecto.

Creando una copia de seguridad incremental a partir de una completa

Primero se hace un listado de las copias disponibles:

$ hammer-backup -l -d /root/backups
20140308001146_pfs_var.xz.bkp:
 full: 20140308001146_pfs_var.xz endtid: 0x000000011db6dc20 md5: 303ee864f4a747d9da7d556e83b05de5

Ahora se puede especificar el fichero .bkp que quieras. Presta atención a la fecha/hora y a la ruta del PFS separada por un ‘_’.

$ hammer-backup -c 6 -v -i 20140308001146_pfs_var.xz.bkp -d /root/backups /pfs/var
INFO: Incremental backup.
INFO: Backup directory is /root/backups.
INFO: Validating PFS
INFO: Initiating incremental backup
INFO: Launching: hammer -y -v mirror-read /pfs/var 0x000000011db6dc20 2> /tmp/tmp.AleUwNnA       | xz -c -6 > /root/backups/20140308002450_pfs_var.xz
INFO: Backup completed.
$ hammer-backup -l -d /root/backups
20140308001146_pfs_var.xz.bkp:
 full: 20140308001146_pfs_var.xz endtid: 0x000000011db6dc20 md5: 303ee864f4a747d9da7d556e83b05de5
        incr: 20140308002450_pfs_var.xz endtid: 0x000000011db6e440 md5: 7a7c2799b880a293f2c8270c6a9b22aa

Recuperando un PFS

Si estas acostumbrado a trabajar con HAMMER lo puedes hacer de forma manual, así continuando con nuestro ejemplo anterior:

  • Encuentra el backup que quieres recuperar.
$ hammer-backup -l -d /root/backups
full: 20140308001146_pfs_var.xz endtid: 0x000000011db6dc20 md5: 303ee864f4a747d9da7d556e83b05de5
        incr: 20140308002450_pfs_var.xz endtid: 0x000000011db6e440 md5: 7a7c2799b880a293f2c8270c6a9b22aa
  • Haz un ‘mirror-write’ de los ficheros en el orden adecuado. Primero el completo, luego los incrementales. No olvides usar ‘-y’ en la orden hammer para que la creación del PFS esclavo se lleve a cabo.
$ unxz -c /root/backups/20140308001146_pfs_var.xz | hammer -y mirror-write /pfs/var_2
PFS slave /pfs/var_2 does not exist. Auto create new slave PFS!
Creating PFS #10        succeeded!
/pfs/var_2
    sync-beg-tid=0x0000000000000001
    sync-end-tid=0x0000000000000001
    shared-uuid=ce020232-9a71-11e3-8278-f56d04d293e0
    unique-uuid=e569a0c9-a650-11e3-942b-f56d04d293e0
    slave
    label=""
    prune-min=00:00:00
    operating as a SLAVE
    snapshots directory defaults to /var/hammer/<pfs>
Source can update synctid to 0x000000011db6dc20
  • Ahora los incrementales:
$ unxz -c /root/backups/20140308002450_pfs_var.xz | hammer -y mirror-write /pfs/var_2
Source can update synctid to 0x000000011db6e440
  • Una vez terminado, puedes actualizar el PFS a maestro:
$ hammer pfs-upgrade /pfs/var_2
pfs-upgrade of PFS#10 () succeeded

Para el ejemplo usado debes asegurarte que ningún proceso está usando el PFS en ‘/var’ antes de desmontarlo. Tras ésto puedes modificar el enlace simbólico en ‘/pfs’ para que apunte al PFS restaurado.

Manipulando los volcados

Puedes subir los ficheros .xz y .bkp a cualquier sitio remoto como un servidor FTP.