Al fin he podido avanzar un poco en uno de mis mini-proyectos. Una versión inicial del script hammer-backup ha sido publicada en la rama maestra en el repositorio de DragonFly BSD, puedes ver el commit aquí.
Para aquellos que no lo sepan, DragonFly BSD es una bifurcacion (fork en inglés) de FreeBSD 4.x. Su líder, Matthew Dillon, implementó un sistema de ficheros del tipo “log structured” desde cero llamado HAMMER. Se divide en “subsistemas de ficheros” independientes llamados PFS (del inglés pseudo-filesystem).
La instalación estándar de DragonFly BSD con un sistema de ficheros HAMMER proporciona, por defecto, una distribución de PFSes como se ve a continuación:
koprulu# df -h
Filesystem Size Used Avail Capacity Mounted on
ROOT 926G 14G 912G 2% /
devfs 1.0K 1.0K 0B 100% /dev
/dev/part-by-uuid/cb4561e2-8aaf-11e3-9867-535400123456 1.2G 303M 784M 28% /boot
/pfs/@@-1:00001 926G 14G 912G 2% /var
/pfs/@@-1:00002 926G 14G 912G 2% /tmp
/pfs/@@-1:00003 926G 14G 912G 2% /usr
/pfs/@@-1:00004 926G 14G 912G 2% /home
/pfs/@@-1:00005 926G 14G 912G 2% /usr/obj
/pfs/@@-1:00006 926G 14G 912G 2% /var/crash
/pfs/@@-1:00007 926G 14G 912G 2% /var/tmp
procfs 4.0K 4.0K 0B 100% /proc
HAMMER es un sistema de ficheros que dispone de la característica “copy-on-write” que almacena cada cambio que realiza en una especie de historial. También es transaccional y cada transacción tiene un identificador asociado (TID). Aquí es donde las cosas se ponen realmente interesantes, HAMMER proporciona una herramienta para operar el sistema de ficheros mismo llamada ‘hammer’.
El contenido de cada uno de los PFS puede ser volcado a la salida estándar (stdout) y es ésta característica la que el script de copias seguridad utiliza.
Puedes comprobar como funciona el script aquí.