Información blog

Linux, tutoriales, noticias, sistemas, redes y seguridad informática, entre otras cosas.

martes, 3 de noviembre de 2015

Realizar snapshots en Debian 8

Hoy quiero hablaros sobre una faceta que ya hablé anteriormente; la creación de snapshots o instantáneas. En su momento hablé sobre su uso en el ámbito de la virtualización, concretamente en virtualbox, pero hoy vengo a dar un pequeño paso más allá y voy a aplicar el mismo concepto en un sistema operativo directamente sin virtualizador de por medio... Esto hasta hace relativamente poco era un concepto imposible, si bien ahora es un concepto posible y muy recomendable de aplicar debido a su velocidad y fiabilidad. La base de este concepto proviene de un sistema de ficheros muy extendido en sistemas basados en Suse, pero que en el resto de sistemas operativos se le ha catalogado como un sistema de ficheros "opcional": btrfs, también conocido como Butter FS.

Portada_debian

Actualmente el sistema de ficheros más popular en el mundillo de Linux es ext4, sistema de ficheros muy fiable y con un gran rendimiento en la mayoría de los ámbitos... Este sistema es el instalado por defecto en la mayoría de distribuciones a menos que especifique lo contrario, razón por la cual es el sistema de ficheros que con más frecuencia veremos en la actualidad... Aún así, aunque ext4 sigue siendo una gran alternativa, poco a poco se ha visto que en el futuro probablemente sea sustituido por uno de estos dos siguientes: xfs o btrfs. El primero está centrado en la escalabilidad y en el rendimiento, mientras que el segundo está más centrado en el control y el aseguramiento de la integridad de los datos... Visto esto es evidente que btrfs está especialmente orientado para servidores, aunque en mi opinión también puede aplicarse en un equipo de sobremesa que contenga información relevante... En este caso me centraré en Debian 8, aunque en Debian 7 el proceso sería prácticamente el mismo, al igual que en los sistemas basados en Debian.

Hay dos formas de tener un sistema operativo con tal sistema de ficheros: Uno de ellos es mediante la conversión que se puede realizar con btrfs-tools... si bien yo personalmente he hecho varias pruebas y ninguna ha dado sus frutos, y aún cuando funcione, en todos lados subrayan que hacer dicho cambio implica sus riesgos (posible perdida de información, datos corruptos o inaccesibles, etc...). Debido a eso yo recomiendo que. a ser posible, se opte siempre a la segunda opción: a la instalación de un Debian 8 vacío instalado sobre un sistema de ficheros btrfs... Esto puede parecer al principio intimidante, pero es mucho más simple de lo que parece y solamente difiere en un par de puntos con respecto a una instalación "clásica".

Para ello habría que tener en nuestro poder una iso de instalación de Debian 8; no importa si se trata del CD 1 o de la versión netinstall, pues la diferencia entre estos radica en la cantidad de paquetes incorporados en la iso... Usaremos dicha ISO para una instalación desde cero de forma normal, aunque hay un paso muy importante que marca la diferencia: El particionado de discos. En éste apartado siempre se nos da la opción de realizar el particionado de manera guiada (es decir que el sistema haga por ti todo, mediante algunos cálculos y parámetros predefinidos) o de forma manual. Generalmente la opción guiada suele ser la más habitual, pero debido al tipo de sistema de ficheros, deberemos de optar por otra opción: El particionado manual, tal y como muestro en la captura de a continuación.

manual

Para saber defenderse ante este tipo de opción, lo recomendable sería poseer algunas nociones de particionado, pero para este caso en concreto basta sabe que haremos dos particiones. Una primaria que guardará guardará el contenido del directorio raíz (/) y una lógica que sería la partición swap. Imaginemos que el disco duro en cuestión tiene 43 GB; dicho disco habría que seleccionarlo y crear una tabla de particiones vacía sobre éste para poder crear las dos particiones mencionadas.  Al tener una tabla de particiones vacía, todo el espacio del disco duro seleccionado se mostraría cómo libre (y disponible para ser formateado/particionado a nuestro gusto).

selec_disco

La primera partición que habría que crear sería la primaria, valga la redundancia y en la configuración de ésta (después de asignarle el espacio en disco que ocuparía la partición) veremos toda la información relativa a la partición: El punto de montaje, si ésta se iniciará durante el arranque... Aquí hay dos opciones que nos interesan especialmente: La marca de arranque (que habría que activarla para que el sistema se inicie) y lo más importante: el sistema de ficheros. Si nos fijamos bien en los valores por defecto asignados por el sistema, veremos que la partición tiene un sistema de ficheros ext4, cosa que en la mayoría de las ocasiones nos serviría, pero en este caso las virtudes de este sistema de ficheros no nos son suficientes.

sistema_ficheros

Afortunadamente bastaría con pulsar la tecla "intro" en dicha sección para que nos mostrase el listado de sistemas de archivos disponibles: ext2, ext3, ext4... entre los cuales está el que a nosotros nos interesa en esta ocasión en particular: btrfs.

btrfs

Al final la partición tendría que quedar de esta forma:

resul_final

Tras aplicar los cambios en esta partición crearíamos la partición lógica con el sistema de ficheros swap (área de intercambio) y el resto de la instalación sería exactamente igual al de una instalación "básica".

Con la instalación finalizada; una vez iniciado el sistema operativo, si consultamos el contenido del fichero fstab, veremos que efectivamente nuestro sistema de ficheros es el deseado, es decir: btrfs.

cat /etc/fstab

De acuerdo, ahora tenemos un sistema con un sistema de ficheros distinto al de la mayoría, pero aunque el sistema de ficheros posee la capacidad de realizar snapshots, éste de por sí no tiene medios de indicarle al sistema operativo que tiene que hacer éstos... Para ello se requiere una herramienta desarrollada para OpenSuse pero que también funciona en Debian, llamada snapper. Snapper es una herramienta que junto con btrfs ha sido muy bien valorada por toda la comunidad y que apunta a tener un gran éxito de aquí a corto/medio plazo, con lo que es muy interesante conocerla y aprender a desenvolverse con ésta.

Esta herramienta no está incluida en los repositorios oficiales de Debian, pues originalmente se diseñó para funcionar en OpenSuse; aún así, debido a su éxito los desarrolladores han preparado algunas soluciones para que otros sistemas, tales como Debian, y Red Hat, puedan optar por usar esta excelente herramienta.

Existen dos posibilidades para instalar el software, mediante la descarga del paquete tar.gz o mediante el uso de su repositorio... Debido a que siempre es más fácil mantener al día un software mediante los repositorios y a que la fuente de éste repositorio en concreto es fiable, he optado por la segunda opción, si bien cada uno es libre de optar por la otra alternativa.

Para hacer uso de su repositorio, primero deberemos de añadir éste a nuestro listado de repositorios, lo cual es tan sencillo como escribir (esto sería en para Debian 8, en Debian 7 habría que hacer lo sustituir cualquier aparición del número 8 por el número 7):

echo 'deb http://download.opensuse.org/repositories/filesystems:/snapper/Debian_8.0/ /' >> /etc/apt/sources.list.d/snapper.list

Al ser un repositorio externo que acabamos de añadir, y no tener su clave pública, nuestro sistema siempre nos preguntará si estamos seguros de querer interactuar con este repositorio (por motivos de seguridad). Aunque esto no nos impedirá trabajar, resulta muy molesto ver constantes preguntas y advertencias para cualquier acción realizada con APT... Para ello deberemos de añadir la clave pública del repositorio a nuestro listado de claves confiables, que es tan sencillo como escribir:

  1. wget http://download.opensuse.org/repositories/filesystems:snapper/Debian_8.0/Release.key
  2. apt-key add - < Release.key

Ahora, si queremos instalar snapper bastaría con escribir dos comandos muy básicos:

  1. apt-get update
  2. apt-get install snapper

La aplicación tardará apenas unos segundos, pero todavía no estaría lista para ser usada, requiere que preparemos un archivo de configuración antes de poder hacer nada... Aquí tras haber realizado diferentes testeos mi recomendación personal es que cualquier acción que se realice para usar snapper sea como root, y que el archivo de configuración se haga para éste, pues a veces hay problemas con los permisos y con root podemos asegurarnos de que no habrá problemas. Así pues, para este caso crearemos como root un archivo de configuración que nos permitirá realizar instantáneas de TODO el contenido del sistema operativo.

snapper -c root create-config /

¡Por fin estamos capacitados para hacer un snapshot! Tarea que lograremos mediante una pequeña línea de consola:

snapper -c root create --description "TEST_SNAPSHOT"

Ahora si vamos a la carpeta /.snapshot (es una carpeta oculta que solo veremos mediante el comando ls -la /) veremos una carpeta con el nombre 1. A medida que vayamos creando snapshots veremos que aparecerán carpetas con números superiores correlativos (2,3...) y cada carpeta almacenaría un snapshot... Dicha carpeta consta de una carpeta llamada snapshot que guarda la instantánea y un fichero llamado info.xml que contiene la fecha de la instantánea y su descripción. El sistema está diseñado para realizar snapshots periódicos automáticamente; concretamente uno cada hora. Estos snapshots son "especiales" comparados con el que hemos creado, ya que estos son efímeros (al paso de un tiempo son borrados). Aún así, en caso de no querer que nuestro sistema se desborde con snapshots y querer únicamente los snapshots que nosotros ejecutemos a mano, tendremos que editar el fichero de configuración que hemos creado antes (root). Este se encuentra dentro del directorio /etc/snapper/configs y tendremos que cambiar el parámetro llamado TIMELINE_CREATE; el cual por defecto tiene el valor "yes". Únicamente con cambiar dicho valor a "no", evitaríamos la creación de snapshots cada hora.

TIMELINE_CREATE="no"

Imaginemos que hemos tenido algún problema... ¿Cómo haríamos para restaurar nuestra instantánea? Snapper incorpora una opción llamada undochange, esta opción puede comparar dos snapshots y cambiar aquello que difiera entre estas dos o simplemente puede restaurar una instantánea comparando lo que tenemos ahora con la instantánea. Para hacer esto último habría que "comparar" la instantánea que hemos creado, la 1, con el estado actual de la máquina, que para snapper estaría internamente representado SIEMPRE como 0.

snapper -v undochange 1..0

Con esto, tras unos segundos (o minutos dependiendo de la cantidad de cambios) habríamos restaurado el sistema a su estado anterior.

Como podéis ver las virtudes de btrfs y snapper son numerosas y muy útiles y aún cuando hoy en día estos conceptos no son demasiado conocidos, no hay duda que la creación de snapshots en un sistema operativo es una utilidad que será indispensable en el futuro, y una opción muy a tener en cuenta en el presente.

Espero que os haya resultado útil

Saludos.

No hay comentarios :

Publicar un comentario