ZFS (sistema de archivos desarrollado por Sun Microsystems para Solaris) permite realizar snapshots del sistema de ficheros de forma instantanea a través del comando zfs snapshot. Básicamente, un snapshot es una copia exacta del sistema de ficheros que posteriormente podemos utilizar para clonar, restaurar, guardar a modo de copia antes de la realización de cambios críticos en el sistema, etc. Lo que no podemos hacer es manipularlos, los snapshots son copias de sólo lectura.
Los snapshot se almacenan en el propio disco, por lo que su utilización supone la utilización de espacio extra y no sirven como backup en caso de desastre. Inicialmente no ocupan espacio extra, pero sí lo hacen conforme la información del sistema de ficheros cambia respecto al snapshot.
Crear, destruir y renombrar un snapshot
La sintaxis básica para la creación de un snapshot es la siguiente:
# zfs snapshot sistema_de_ficheros@nombre_snapshot
Por ejemplo, para crear un snapshot de «rpool/ROOT/solaris» con nombre la fecha de hoy:
# zfs snapshot rpool/ROOT/solaris@`date +%d%m%Y`
Para eliminar el snapshot usamos el comando zfs destroy:
# zfs destroy rpool/ROOT/solaris@04102011
Y para renombrarlo:
# zfs rename rpool/ROOT/solaris@04102011 rpool/ROOT/solaris@nuevo-snap
Listar snapshots disponibles
# zfs list -t snapshot NAME USED AVAIL REFER MOUNTPOINT rpool/ROOT/solaris@install 22,5M - 2,04G - rpool/ROOT/solaris@04102011 37K - 2,44G -
Con el comando zfs list -t snapshot podemos ver un listado de todos los snapshot disponibles, los snapshots se almacenan en el directorio oculto .zfs de la ruta base donde está montado el sistema de ficheros, en el caso de los anteriores /.zfs/snapshot. De esta forma podríamos restaurar ficheros concretos del snapshot en lugar de todo:
# ls -l /.zfs/snapshot total 5 drwxr-xr-x 24 root root 25 2011-10-03 21:17 04102011 drwxr-xr-x 24 root root 25 2011-10-03 21:17 10042011 drwxr-xr-x 24 root root 26 2011-09-22 18:42 install
También conviene revisar el espacio en disco utilizado, el comando zfs list -o space nos mostrará con detalle el espacio utilizado a nivel general, por los snapshot, subsistemas de ficheros (child), etc:
# zfs list -o space NAME AVAIL USED USEDSNAP USEDDS USEDREFRESERV USEDCHILD rpool 3,19G 3,27G 0 92,5K 0 3,27G rpool/ROOT 3,19G 2,46G 0 31K 0 2,46G rpool/ROOT/solaris 3,19G 2,46G 22,5M 2,44G 0 0 rpool/dump 3,19G 256M 0 256M 0 0 rpool/export 3,19G 26,2M 0 32K 0 26,2M rpool/export/home 3,19G 26,2M 0 32K 0 26,2M rpool/export/home/alex 3,19G 26,2M 20K 26,2M 0 0 rpool/swap 3,54G 544M 0 181M 364M 0
Restaurar un snapshot
Hacer un rollback o restaurar un snapshot es tan sencillo como utilizar el comando zfs rollback seguido del snapshot a restaurar. Lo que hay que tener claro son las consecuencias de restaurar un snapshot antiguo, ya que restauremos el sistema de ficheros tal y como se encontraba en el momento del snapshot.
Algo a tener en cuenta, es que únicamente podemos restaurar el snapshot más reciente. Si tuvieramos varios y quisieramos hacer rollback de uno antiguo, antes habría que eliminar los más recientes. Recibiríamos este error:
# zfs rollback rpool/ROOT/solaris@10042011 cannot rollback to 'rpool/ROOT/solaris@10042011': more recent snapshots exist use '-r' to force deletion of the following snapshots: rpool/ROOT/solaris@04102011
Así que eliminaríamos el reciente y ya podríamos hacerlo, también podríamos forzar con el parámetro -r a que se eliminan automáticamente:
# zfs destroy rpool/ROOT/solaris@04102011 # zfs rollback rpool/ROOT/solaris@10042011
# zfs rollback -r rpool/ROOT/solaris@10042011