Las copias de seguridad de VPS son simples, simplemente lo estás pensando demasiado
La gente sigue pensando que las cópias de seguridad manuales de VPS son una tarea imposible. Exigen GUI y herramientas automatizadas. Pasan horas y horas tratando de usar herramientas de respaldo oscuras basadas en terminales.
En cambio, permítame ser el primero en decir que las copias de seguridad de VPS son en realidad increíblemente simples. Este es el único comando que necesita saber:
$ rsync USER@IP_ADDRESS:/ -aAXvh \
--exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found"} \
/home/USER/backups/
Hecho. ¿Podemos dejar de preocuparnos por las copias de seguridad de VPS ahora?
De acuerdo, parece mucho, pero te prometo que no lo es. Volveremos a lo que hace ese comando en un momento; primero, hablemos sobre por qué debería hacer una copia de seguridad de su VPS en primer lugar.
¿Por qué son importantes las copias de seguridad de VPS?
Ya sea que sea propietario de una pequeña empresa, aloje un sitio web personal simple o trabaje en una organización de primer nivel, sus datos siempre son importantes. Pero debido a que está en línea, siempre sigue siendo vulnerable a los piratas informáticos, el ransomware o incluso la eliminación accidental.
Tener un plan de respaldo y recuperación adecuado es esencial para protegerse contra estos eventos inesperados. Si conserva copias duplicadas de sus archivos importantes y los almacena en una ubicación separada y segura, puede recuperarlos si tiene problemas con la integridad de sus datos, sin importar la fuente.
En lugar de simplemente ejecutar ese comando sin pensarlo, debe dedicar unos minutos a crear una política de respaldo adecuada y estandarizada para minimizar el riesgo y hacer su vida más fácil.
La frecuencia y el tiempo de su copia de seguridad dependen de la frecuencia con la que cambian los datos, cuánto tiempo lleva hacer una copia de seguridad, cuántos datos necesita duplicar y cuándo los visitantes o el usuario utilizarán más su servicio. Dado que el proceso de copia de seguridad puede utilizar muchos recursos del sistema, debe programar sus copias de seguridad para momentos del día con poco uso. Para un VPS personal, debe realizar copias de seguridad semanales o incluso diarias.
Recuerde : la copia de seguridad y la recuperación de datos son dos cosas diferentes. Las copias de seguridad son el acto de duplicar archivos, mientras que la recuperación es el proceso de restaurar datos desde su copia de seguridad. La restauración no es tan fácil como una copia de seguridad, ¡pero ni siquiera puede intentar la restauración sin una copia de seguridad adecuada!
Veamos de qué se trata rsync
rsync
significa sincronización remota y es un programa de utilidad para sincronizar archivos y directorios de un host a otro de manera eficiente. rsync
replica un conjunto de datos completo entre el origen y el destino cuando se ejecuta por primera vez. Después de esa primera ejecución, rsync
solo transfiere los datos que han cambiado. Estos cambios se denominan delta
.
rsync
utiliza compresión y envía datos a través de un túnel SSH cifrado para una seguridad sólida.
El uso más básico de rsync
es replicar una carpeta en el mismo host. El siguiente ejemplo sincronizará todos los archivos y carpetas de source_folder
a destination_folder
.
$ rsync -av ~/source_folder/ destination_folder/
La -a
opción significa el modo de archivo y es un alias para otros indicadores ( -rltpgoD
), y la -v
opción activa el modo detallado para obtener detalles sobre la transferencia.
Ahora que se rsync
ha copiado source_folder
una vez, puedo agregar un nuevo archivo y volver a ejecutar el mismo comando. Esta vez, rsync
no volverá a copiar toda la carpeta al destino. Solo transferirá los archivos modificados o los archivos que se hayan agregado desde la última ejecución.
$ cd source_folder
$ touch pattern.txt
$ vi IP.txt
$ rsync -av ~/source_folder/ dest_folder/
sending incremental file list
./
IP.txt
pattern.txt
sent 353 bytes received 61 bytes 828.00 bytes/sec
total size is 13 speedup is 0.03
Este tipo de copia de seguridad es un ejemplo de copia de seguridad incremental.
Para sincronizar archivos y carpetas entre su sistema local y el VPS remoto, necesita las credenciales SSH e instalarlas rsync
en el VPS remoto. El siguiente ejemplo sincronizará una carpeta de su sistema local al VPS remoto.
$ rsync -av ~/source_folder USER@IP_ADDRESS:/home/USER/backup/
El rsync
comando anterior sincronizará el source_folder
desde su sistema local al VPS remoto en la carpeta /home/USER/backup/
.
Si SSH se está ejecutando en cualquier puerto no estándar en su VPS remoto, entonces debe especificar el puerto no estándar de SSH usando la -e
bandera.
$ rsync -avP source_folder/ -e 'ssh -p 2222' USER@IP_ADDRESS:/home/USER/backup/
La -P
bandera combina las banderas --progress
y --partial
. El primero producirá una barra de progreso en la terminal, y el segundo le dice al VPS que guarde los archivos parcialmente transferidos si hay alguna interrupción durante la transferencia.
Cambiando las tornas: haciendo una copia de seguridad de su VPS en su máquina local
Ahora que le he mostrado cómo enviar datos desde su máquina local a su VPS, es hora de extraer datos de su VPS a su máquina local.
$ rsync -avP USER@IP_ADDRESS:/var/www/html /home/dd/backups/
receiving incremental file list
html/
612 100% 597.66kB/s 0:00:00 (xfr#1, to-chk=2/4)
html/drupal/
html/wordpress/
sent 59 bytes received 820 bytes 195.33 bytes/sec
total size is 612 speedup is 0.70
La única diferencia entre este comando y el envío anterior es que hemos intercambiado las carpetas de origen y destino.
Todavía podemos usar la -e
bandera si necesita cambiar el puerto SSH.
$ rsync -avP -e 'ssh -p 2222' USER@IP_ADDRESS:/var/www/html /home/dd/backups/
Esto funciona muy bien para una sola carpeta, pero ¿qué sucede si desea hacer una copia de seguridad de todo el VPS? También podemos hacer eso, pero queremos excluir algunas carpetas. La --exclude
bandera hace exactamente esto al excluir archivos basados en un patrón. rsync
no admite expresiones regulares, por lo que solo funcionará la coincidencia de archivos estándar.
$ rsync --dry-run USER@IP_ADDRESS:/ -aAXvh --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found"} /home/dd/backups/
La --dry-run
bandera en el ejemplo anterior no transferirá ningún archivo pero le mostrará la salida del comando. Después de verificar la salida con cuidado, puede omitir la --dry-run
opción de extraer archivos de un VPS remoto. La /
ruta inmediatamente después IP_ADDRESS:
indica que se rsync
debe sincronizar todo el sistema de archivos, excluyendo las carpetas especificadas en la --exclude={ }
marca.
Convirtamos esta magia en un guión
¿Recuerdas cuando dije que una buena estrategia de respaldo te facilita la vida? Ingrese a las secuencias de comandos.
Ahora volvemos a pensar demasiado.
La secuencia de comandos no eliminará las instantáneas antiguas, pero vinculará las instantáneas recientes a una carpeta por el nombre latest
. Para personalizar la secuencia de comandos para su entorno, cambiar el valor de source_dir
, destination_dir
, ssh_user
, ip_address
, ssh_port_no
y symbolic_name_recent_backup
en la siguiente secuencia de comandos.
#!/bin/bash
#Create a timestamp
date=`date "+%Y-%m-%dT%H_%M_%S"`
#Source location, you can change '/' to something like /var/www/html
source_dir="/"
#Backup location on your local system
destination_dir="/home/dd/Documents/"
#Name of Backup folder
backup_folder_name=backup-$date
#Full path of backup; concatenation of above two paths
final_destination_dir=$destination_dir$backup_folder_name
#Create backup directory
mkdir -p $final_destination_dir
#rsync options
rsync_option="-aAXvhP"
#SSH username
ssh_user="peter"
#SSH Port
SSHPort=2222
#IP address of remote host
ip_address="123.45.67.89"
#Symbolic name of latest backup
symbolic_name_recent_backup="latest"
#Exclude folders that you don't want to backup
exclude_folders=(
"/dev"
"/usr"
"/var"
"/sbin"
"/home"
"/etc"
"/proc"
"/sys"
"/tmp"
"/run"
"/mnt"
"media"
)
#Change to the destination directory where rsync will pull data from remote VPS
cd $destination_dir
#Get the most recent snapshot folder name that will be symbolically linked to the latest folder.
latest_backup_dir=$(ls -td -- backup* | head -n 1 | cut -d'/' -f1)
#Place all the exclude folders in a single variable
for item in "${exclude_folders[@]}"
do
exclude_flags="${exclude_flags} --exclude ${item}"
done
#Remove the folder which was symbolically linked to the snapshots folder earlier
if [ -L $symbolic_name_recent_backup ];
then
echo "Removing previous symbolic link to the snapshots"
rm -rf $symbolic_name_recent_backup
fi
#Create a new symbolic link to the latest snapshots
echo "Creating new symbolic link to the latest snapshots"
$(ln -s $latest_backup_dir latest)
#Run rsync
rsync $rsync_option ${exclude_flags} -e "ssh -p $SSHPort" $ssh_user@$ip_address:$source_dir $final_destination_dir || echo "rsync died with error code $?" >> /var/log/backup.log
Automatice el script para que se ejecute una vez a la semana
Una vez que haya probado el script anterior en su entorno, automatice el script para que se ejecute al menos una vez a la semana utilizando un trabajo cron. Puede elegir el intervalo de ejecución del script de acuerdo con sus requisitos. Asegúrese de poder autenticarse en el VPS remoto utilizando el método basado en claves y sin una frase de contraseña, de lo contrario, el trabajo cron no funcionará.
Simplemente ejecute crontab -u USER -e
en la terminal, elija un editor y agregue una línea. Especifique el intervalo de tiempo que desea, junto con la ruta donde guardó el script anterior.
Mi estrategia de respaldo es ejecutar el script de respaldo a las 9 AM todos los lunes, de ahí la 0 9 * *
especificación del intervalo de tiempo. Si algo sale mal, puede consultar el archivo de registro /var/log/backup.log
para obtener más información.
$ crontab -u USER -e
...
...
0 9 * * Mon /path/to/your/backup/rsync_backup.sh
El script es simple, y tal vez no sea una solución integral para sus necesidades, pero hace que la copia de seguridad de un VPS sea increíblemente fácil. Puede hacer una copia de seguridad de un VPS en su máquina local, o incluso de un VPS en otro.