AVISO: Esta nota es antigua y esta basada en un VPS con sistema operativo Debian 7, aunque nada impide adaptarla a versiones actuales.
Haremos una copia de seguridad completa de un servidor VPS, esto incluye el sistema operativo y todos los datos. Obtendremos un fichero de backup comprimido y lo guardaremos en el almacenamiento de Mega. Si el vervidor VPS sufriera algún problema grave, que viese comprometidos no solo los datos (web, email, etc.), sino también el sistema operativo y programas, podríamos restaurarlo y dejarlo como estaba antes del backup.
IMPORTANTE. Vamos a necesitar espacio sufiiciente en el servidor para crear temporalmente el archivo de backup, que aunque comprimido, va a ocupar varios gigas. Si ejecutamos el comando du-bsh podemos saber el volumen total sin comprimir. El archivo de backup comprimido puede ser la mitad o quizás algo menos. En cualquier caso, com oespacio libre necesitaremos el doble.
Por ejemplo: Si el sistema y los datos ocupan 4.7GB, un tar comprimido puede quedar en torno a los 1.8GB, por lo que necesitaríamos unos 4GB de espacio libre para poder trabajar con holgura.
Para comenzar, evidentemente lo primero que tenemos que tener es una cuenta en MEGA. ¿Por qué MEGA?, pues porque es una de las pocas o la única que nos permite acceder y gestionar nuestros ficheros y carpetas desde una aplicación de consola en Linux.
Para crear una cuenta solo hay que entrar en la web de MEGA e introducir los datos que nos pidan. El usuario y contraseña lo necesitaremos más adelante.
Vamos a instalar en el servidor VPS todo lo necesario para hacer el backup. Vamos a crear un fichero tar comprimido con gzip, una vez creado lo vamos a cifrar usando openssl enc
y finalmente lo vamos a transferir al almacenamiento de Mega. Los programas tar y gzip ya estarán instalados en el servidor y es de suponer que openssl y enc también. En caso contrario los instalaremos.
La aplicación que utilizaremos para transferir archivos al almacentamiento Mega, es megacmd
. Tenemos que descargar los fuentes desde la web del autor y compilarlo.
# cd /temp
# wget https://github.com/t3rmin4l/megacmd/archive/master.zip
Esto nos descarga un archivo llamado megacmd-master.zip. Ahora lo descomprimimos, lo compilamos y finalizamos copiando el ejecutable megacmd a la carpeta /usr/local/bin.
# unzip megacmd-master.zip
# cd megacmd-master
# make
# cp megacmd /usr/local/bin
NOTA: En Debian 7 existe un problema con la versión de las herramientas golang-go necesarias para compilar, ya que se requiere una versión superior. Una posible solución podría ser instalar/actualizar golang-go desde los repositorios de Debian 8, pero eneste caso lo más sencillo es compilar el programa en nuestro propio PC local y después copiar el ejecutable megacmd al servidor. El único requisito es que tanto nuestro PC como el servidor VPS tengan la misma arqujitectura, 32 o 64 bits.
Después de copiar megacmd en la carpeta /usr/local/bin, hay que crear el archivo de confdiguración, .megacmd.json. Como estamos en un VPS y estamos trabajando como root, lo crearemos en la carpeta /root.
#nano /root/.megacmd.json
Y escribimos el siguiente contenido:
{
"User" : "USUARIO_MEGA",
"Password" : "CONTRASEÑA_USUARIO_MEGA",
"DownloadWorkers" : 4,
"UploadWorkers" : 4,
"SkipSameSize" : true,
"Verbose" : 1
}
Ahora comprobamos si podemos conectar con nuestro almacenamiento Mega.
# megacmd list mega:/
Deberiamos obtener la lista de carpetas y archivos que hay en la raiz de Mega. Ahora, si no lo hemos creado antes, vamos a crear una carpeta donde guardar los backups.
# megacmd mkdir mega:/backup_vps
Con esto ya tenemos todo preparado para poder hacer la copia de seguridad y subir el archivo de backup a Mega.
Vamos a hacer una copia de seguridad de todo el sistema, incluyendo las carpetas de usuario, email, sitios web, etc. En la copia vamos a excluir el contenido de las carpetas /dev, /proc, /sys y /tmp. También excluiremos los sockets que abren Apache y Postfix. Como sabemos, el sistema operativo añade contenido a estas carpetas cuando arranca y los sockets se vuelven a crear cuando arranquen de nuevo los servicios o programas que los usan. Así evitaremos algunas advertencias a la hora de crear el tar.gzip. Lo que haya en la carpeta /tmp tampoco es necesario guardarlo.
Siempre que sea posible es buena idea detener los servicios, que modifiquen ficheros, para evitar que cambien durante el proceso de backup. Lo ideal sería detenerlos y en caso necesario, hacerlo en un horario que no afecte al funcionamiento del servidor. Por lo que incluso se podría crear una regla cron para hacerlo automáticamente.
Algunos servicios que deberían detenerse, si se trabaja con ellos, son: apache, bind, postgresql, mysql, rsyslog, webmin, usermin, postfix, dovecot, proftpd, etc. Si la actividad del servidor no es muy alta, tampoco debería pasar nada si no se detienen.
Vamos a comenzar creando un archivo con la lista de los sockets abiertos por Apache y Postfix, para poder excluirlos más adelante.
# find /var /run -type s -print > /tmp/lista-sockets
Lo anterior hace una búsqueda en las carpetas /var y /run de todos los sockets abiertos y los escribe en el fichero /tmp/listasockets.
Ahora creamos una carpeta de trabajo para crear el archivo tar.gz de backup. Más adelante se borrará.
# mkdir /backup
# cd backup
Ya podemos crear el archivo tar.gz con la copia completa, pero excluyendo lo comentado anteriormente.
# tar -czvpf backuptotal-fecha-hora.tar.gz --exclude=/backup/* --exclude=/dev/* --exclude=/proc/* --exclude=/sys/* --exclude=/tmp/* -X /tmp/lista-sockets / 2>error.log
Donde:
Después de crear el archvo de backup tar.gz, vamos a cifrarlo para evitar que nadie pueda ver su contenido. Tengamos en cuenta que lo almacenaremos en la nube, nunca está de más tomar precauciones. Ahora bien, si nuestra idea es descargarlo a nuestro PC local, podemos ahorrarnos este paso si no nos interesa.
El cifrado con openssl consiste en utilizar una clave o frase de cifrado con aes256. La contraseña puede ser todo lo larga que se quiera, es recomendable no utilizar palabras del diccionario tal cual, ya que podrían ser facilmente descurbiertas por fuerza bruta. La mejor idea es utilizar combinaciones de letras mayúsculas y minúsculas, números y cualquier tipo de caracteres especiales. La clave se debe guardar bien, de lo contrario después no podríamos descifrar el archivo. La clave de cifrado se puede pasar manualmente desde la línea de comandos o desde un fichero.
Para cifrar introduciendo la clave manualmente.
# openssl enc -e -aes256 -in backuptotal-fecha-hora.tar.gz -out backuptotal-fecha-hora.bk
La extensión del archivo cifrado puede ser cualquiera, en el ejemplo se ha puesto la extensión .bk
El comando nos pedirá que introduzcamos la clave de cifrado, que hemos de introducir dos veces para confirmar.
Para cifrar leyendo la clave desde un archivo. Primero creamos el archivo, preferiblemente oculto (por ejemplo: .keyfile) y escribimos la contraseña. A continuación ciframos.
# openssl enc -kfile /root/.keyfile -e -aes256 -in backuptotal-fecha-hora.tar.gz -out backuptotal-fecha-hora.bk
Importante: La opción -kfile toma la contraseña de la primera fila del archivo .keyfile
Una vez obtenido el archivo de copia de seguridad cifrado, ya podemos borrar el archivo .tar.gz y también el archivo error.log
# rm *.tar.gz *.log
Como último paso, tan solo nos queda poner a buen resguardo nuestra copia de seguridad cifrada, copiandola a nuestro almacenamiento en Mega. Para ello las sincronizaremos con el comando:
# megacmd sync /backup mega:/backup_vps
En la consola veremos el progreso de la transferencia, que dependiendo del tamaño y el ancho de banda, tardará más o menos en completarse.
Cuando termine la transferencia y hayamos verificado que el archivo se ha copiado en Mega correctamente, ya no tiene sentido ocupar espacio en el VPS, por lo que podemos borrar el archivo de la carpeta /backup.
Como opción final, también podemos guardar el archivo de copia de seguridad en nuestro PC local.
16/02/20216
2025 Alberto Picado