Creación de backups bootables en Linux con REAR

¿Qué es REAR (Relax and Recover)?

REAR es una solución de recuperación de desastres para servidores Linux. Crea una instantánea (fichero ISO bootable) de todo el contenido del servidor (incluido el sistema operativo, los archivos de configuración, los datos de usuario y las aplicaciones) y la almacena en un archivo comprimido o, bien, también puede enviar los datos a un archivo centralizador mediante rsync. En caso de desastre, se puede utilizar este archivo para restaurar rápida y fácilmente su servidor a su estado original.

REAR está diseñado para ser fácil de usar y entender. Tiene una interfaz sencilla y directa que facilita la creación y restauración de copias de seguridad. REAR también es altamente configurable, por lo que puede adaptarlo a sus necesidades específicas.

REAR es un software de código abierto, liberado bajo la Licencia Pública General GNU.

¿Cómo utilizo REAR en mi trabajo de administrador de Linux RedHat?

En mi trabajo siempre hago un REAR de cada servidor que administro y, francamente, me han salvado la vida alguna que otra vez puntual (un kernel panic tras alguna instalación, marcha atrás porque después de parchear un servidor alguna aplicación no funcionaba, etc.).

Lo que yo hago es almacenar todas las ISOS por SSH en un repositorio enorme. Es decir, configuro REAR para que guarde las ISOS por SSH. Y digo esto porque lo podemos configurar para que las almacene de diferente forma. Por ejemplo, en un robot de cintas con Dataprotector… Hay muchas maneras. En el fichero /usr/share/rear/conf/default.conf las explica todas.

Os enseño el ejemplo de configuración de rear de uno de los servidores que administro:

[[email protected] ~]# grep -v "#" /etc/rear/local.conf |grep -v ^$
 HOSTNAME=$(hostname)
 BACKUPS_SERVER=rearsrv01
 BACKUPS_STORE=/REAR
 TIMESTAMP=$(date +%Y%m%d_%H%M)
 OUTPUT=ISO
 OUTPUT_URL=rsync://${BACKUPS_SERVER}/${BACKUPS_STORE}/${HOSTNAME}/
 BACKUP=RSYNC
 [email protected]${BACKUPS_SERVER}:${BACKUPS_STORE}/${HOSTNAME}/rsync
 ONLY_INCLUDE_VG=( "vg00" )
 EXCLUDE_MOUNTPOINTS=( /dev/shm /tmp /stats /oracle /usr/sap/GCX /usr/sap/DAX /sapmnt/GCX /oracle/GCX /oracle/GCX/112_64 /oracle/GCX/oraarch /oracle/stage /interfases /temparch/GCX /audit_oracle /CO /newroot/home/sftpGCX /XCOM /oracle/GCX/sapdata1 /oracle/GCX/sapdata2 /oracle/GCX/sapdata3 /oracle/GCX/sapdata4 /oracle/GCX/mirrlogA /oracle/GCX/mirrlogB /oracle/GCX/origlogA /oracle/GCX/origlogB /migtemp /usr/sap/trans /ARCHIVING)
 EXTERNAL_BACKUP="tar -c -l -z -X /etc/rear/excludes.cfg --ignore-failed-read --exclude=/proc --exclude=/sys / | ssh $BACKUPS_SERVER 'cat >${BACKUPS_STORE}/${HOSTNAME}/${TIMESTAMP}_backup.tar.gz'"
 EXTERNAL_RESTORE="ssh $BACKUPS_SERVER cat ${BACKUPS_STORE}/${HOSTNAME}/${TIMESTAMP}_backup.tar.gz | tar -C /mnt/local -x -z"
 EXTERNAL_CHECK="ssh $BACKUPS_SERVER date 1>&8"
 cat << EOF > /etc/rear/excludes.cfg
 /
 /boot
 /home
 /opt
 /root/home
 /tmp
 /var
 /var/log/audit
 /oracle
 /usr/sap
 /stats
 /planific
 EOF
 [[email protected] ~]#

Para generar la ISO, ejecuto una vez al mes el siguiente comando:

/usr/sbin/rear -v mkbackup

Y queda la ISO almacenada en el respositorio:

[root]# pwd
 /REAR/lgecgcx0/rsync/lgecgcx0
 [[email protected] lgecgcx0]# ll *.iso
 -rw------- 1 root root 61724672 Mar 2 02:03 rear-lgecgcx0.iso
 [root]#

En caso de tener que restaurar el servidor, arrancaré con esta ISO y se ejecuta un instalador de REAR que se conecta por SSH al repositorio y restaura el sistema automáticamente.

  Configuración de sudo en Linux

Cómo Clonar un Servidor con REAR

Recientemente, me hicieron la pregunta de si es posible clonar un servidor Linux que está en un CPD a otro CPD. En concreto, me planteaban si podía clonar un servidor de Amazon AWS, ya que no es posible exportar una imagen de Amzon EC2 de un servidor que ha sido creado dentro de la infraestructura de Amazon desde el inicio.

[[email protected] ~]# aws ec2 create-instance-export-task –instance-id i-0093481eeaab71526 –target-environment vmware –export-to-s3-task DiskImageFormat=VMDK,ContainerFormat=ova,S3Bucket=puerto53.com-backup,S3Prefix=puerto53

An error occurred (NotExportable) when calling the CreateInstanceExportTask operation: Only imported instances can be exported.

[[email protected] ~]#

Así que para realizar un primer procedimiento, me monté en mi PC local un servidor virtual con VMWare Workstation con un CentOS 7 que sería el que clonaría.

Configuración de REAR (Relax and Recover) en el servidor que quiero clonar

La idea es crear una imagen ISO bootable y una copia de seguridad de todos los datos que quiero copiar. En este caso concreto, no me interesa guardar los datos en ningún servidor externo, si no en un directorio local del sistema, ya que el tar generado me lo llevaré al  CPD de destino donde crearé el servidor clonado. Por lo tanto, configuramos el fichero /etc/rear/local.conf para que guarde la ISO y los datos en local:

[[email protected] ~]# cat /etc/rear/local.conf
HOSTNAME=$(hostname)
TIMESTAMP=$(date +%Y%m%d_%H%M)
OUTPUT=ISO
ISO_DIR=/mnt/hgfs/david
BACKUP_PROG=tar
OUTPUT_URL=file:///mnt/hgfs/david/$HOSTNAME
BACKUP=NETFS
BACKUP_URL=file:///mnt/hgfs/david/$HOSTNAME
ONLY_INCLUDE_VG=( «vg00» )
# Excluir directorios (no filesystems)
BACKUP_PROG_EXCLUDE=( ‘/tmp/*’ ‘/dev/shm/*’ ‘/CentOS_7.4.1708’ ‘/app’ )

[[email protected] ~]#

Una vez configurado el fichero como me interesa, ejecuto la copia de seguridad que creará el fichero ISO bootable:

[email protected] ~]# /usr/sbin/rear -v mkbackup
Relax-and-Recover 2.00 / Git
Using log file: /var/log/rear/rear-centostst1.log
Using backup archive '/mnt/hgfs/david/centostst1/centostst1/backup.tar.gz'
Creating disk layout
Excluding Volume Group vgtemp
Excluding component fs:/mnt/hgfs
Creating root filesystem layout
TIP: To login as root via ssh you need to set up /root/.ssh/authorized_keys or SSH_ROOT_PASSWORD in your configuration file
Copying logfile /var/log/rear/rear-centostst1.log into initramfs as '/tmp/rear-centostst1-partial-2018-05-16T10:50:16+0200.log'
Copying files and directories
Copying binaries and libraries
Copying kernel modules
Creating initramfs
Making ISO image
Wrote ISO image: /mnt/hgfs/david/rear-centostst1.iso (154M)
Copying resulting files to file location
Saving /var/log/rear/rear-centostst1.log as rear-centostst1.log to file location
Creating tar archive '/mnt/hgfs/david/centostst1/centostst1/backup.tar.gz'
Archived 3460 MiB [avg 4244 KiB/sec] OK
Archived 3460 MiB in 836 seconds [avg 4239 KiB/sec]
[[email protected] ~]#

Clonación del servidor Linux en una nueva maquina virtual

Guardo los ficheros generados en el punto anterior en un servidor del CPD de destino de la misma red:

  Almacenamiento con Stratis en Linux

[[email protected] centostst1]# ll
total 3920172
-rwxrwxrwx 1 root root 29689199 May 16 11:05 backup.log
-rwxrwxrwx 1 root root 3640768112 May 16 11:05 backup.tar.gz
-rwxrwxrwx 1 root root 202 May 16 10:51 README
-rwxrwxrwx 1 root root 171782144 May 16 10:51 rear-centostst1.iso
-rwxrwxrwx 1 root root 209606 May 16 10:51 rear-centostst1.log
-rwxrwxrwx 1 root root 268 May 16 10:51 VERSION
[[email protected] centostst1]#

El fichero rear-centostst1.iso contiene la ISO bootable, mientras que el fichero backup.tar.gz contiene la copia de seguridad de los datos del sistema.

Creo un servidor nuevo con VMWare pero no instalo el sistema operativo. Se puede elegir instalarlo más tarde.

En VMWare, indico que el servidor va a arrancar con la ISO de rear y arranco el servidor:

rear recover

Obviamente, cuando REAR intente buscar el archivo backup.tar.gz fallará porque en el nuevo CPD no existe el directorio donde lo guardé en el CPD origen. No importa, no es ningún problema.

Anteriormente, comentaba que había guardado la copia de seguridad en un servidor de la misma red. Recordemos las directivas del fichero local.conf, comentadas anteriormente:

OUTPUT_URL=file:///mnt/hgfs/david/$HOSTNAME
BACKUP=NETFS
BACKUP_URL=file:///mnt/hgfs/david/$HOSTNAME

Restaurando la copia de seguridad bootable en el servidor de destino

Desde el servidor que estoy clonando, como ya he arrancado con la ISO de rear, ya tengo shell, así que me conecto por SFTP al servidor donde guardo el fichero backup.tar.gz (generado con REAR) y me descargo los binarios de NFS y monto por NFS el FS donde reside el fichero gz en el mismo punto de montaje donde REAR va a ir a buscarlo.

rear recover nfs
  • Por último, comienzo la restauración del sistema.
rear recover 1

Esperamos un ratito a que finalice la restauración.

rear recover restaurado

Una vez restaurado el sistema, desactivamos el CD y rebotamos el sistema para que arranque del disco local.

rear Centos cloned arrancado

Si no te arranca, es probable que en el /etc/fstab debas eliminar alguna entrada, de algún FS de SAN, por ejemplo.

ERROR: LVM ‘lvmdev’ entry in /var/lib/rear/layout/disklayout.conf where volume_group or device is empty or more than one word

El error «ERROR: LVM ‘lvmdev’ entry in /var/lib/rear/layout/disklayout.conf where volume_group or device is empty or more than one word» se produce cuando el comando mkbackup encuentra un disco de tipo LVM que está vacío.

Veámoslo en detalle:

  • Intento lanzar el rear y falla dando el error comentado anteriormente:
[[email protected] ~]#  /usr/sbin/rear -v mkbackup
Relax-and-Recover 2.6 / 2020-06-17
Running rear mkbackup (PID 1487711)
Using log file: /var/log/rear/rear-server1.log
Running workflow mkbackup on the normal/original system
Using UEFI Boot Loader for Linux (USING_UEFI_BOOTLOADER=1)
Using autodetected kernel '/boot/vmlinuz-4.18.0-348.12.2.el8_5.x86_64' as kernel in the recovery system
Creating disk layout
Overwriting existing disk layout file /var/lib/rear/layout/disklayout.conf
ERROR: LVM 'lvmdev' entry in /var/lib/rear/layout/disklayout.conf where volume_group or device is empty or more than one word
Some latest log messages since the last called script 220_lvm_layout.sh:
  2022-09-16 09:53:58.083975841 Including layout/save/GNU/Linux/220_lvm_layout.sh
  2022-09-16 09:53:58.085826753 Begin saving LVM layout ...
Error exit of rear mkbackup (PID 1487711) and its descendant processes
Exiting subshell 1 (where the actual error happened)
Aborting due to an error, check /var/log/rear/rear-server1.log for details
Exiting rear mkbackup (PID 1487711) and its descendant processes ...
Running exit tasks
Terminated
[[email protected] ~]#
  • Hay un disco de LVM que no está en uso:
[[email protected] ~]# pvs
  PV                               VG       Fmt  Attr PSize    PFree
  /dev/mapper/vgoracle01_TO_REMOVE          lvm2 ---   200.00g 200.00g
  /dev/mapper/vgoracle02           vgoracle lvm2 a--   199.98g      0
  /dev/sda3                        vg00     lvm2 a--  <278.68g 168.80g
[[email protected] ~]#

  • Elimino el formato LVM para ese disco
[[email protected] ~]# pvremove /dev/mapper/vgoracle01_TO_REMOVE
  Labels on physical volume "/dev/mapper/vgoracle01_TO_REMOVE" successfully wiped.
[[email protected] ~]#
  • Vuelvo a lanzar la copia con REAR y esta vez ya no da errores:
[[email protected] ~]#  /usr/sbin/rear -v mkbackup
Relax-and-Recover 2.6 / 2020-06-17
Running rear mkbackup (PID 1494537)
Using log file: /var/log/rear/rear-server1.log
Running workflow mkbackup on the normal/original system
Using UEFI Boot Loader for Linux (USING_UEFI_BOOTLOADER=1)
Using autodetected kernel '/boot/vmlinuz-4.18.0-348.12.2.el8_5.x86_64' as kernel in the recovery system
Creating disk layout
Overwriting existing disk layout file /var/lib/rear/layout/disklayout.conf
Excluding Volume Group vgoracle
Using guessed bootloader 'EFI' (found in first bytes on /dev/sda)
Verifying that the entries in /var/lib/rear/layout/disklayout.conf are correct ...
Creating recovery system root filesystem skeleton layout
Adding biosdevname=0 to KERNEL_CMDLINE
Adding net.ifnames=0 to KERNEL_CMDLINE
Trying to find what to use as UEFI bootloader...
Trying to find a 'well known file' to be used as UEFI bootloader...
Using '/boot/efi/EFI/redhat/grubx64.efi' as UEFI bootloader file
Copying logfile /var/log/rear/rear-server1.log into initramfs as '/tmp/rear-server1-partial-2022-09-16T09:57:00+02:00.log'
Copying files and directories
Copying binaries and libraries
Copying all kernel modules in /lib/modules/4.18.0-348.12.2.el8_5.x86_64 (MODULES contains 'all_modules')
Copying all files in /lib*/firmware/
Symlink '/usr/lib/modules/4.18.0-348.12.2.el8_5.x86_64/build' -> '/usr/src/kernels/4.18.0-348.12.2.el8_5.x86_64' refers to a non-existing directory on the recovery system.
It will not be copied by default. You can include '/usr/src/kernels/4.18.0-348.12.2.el8_5.x86_64' via the 'COPY_AS_IS' configuration variable.
Symlink '/usr/lib/modules/4.18.0-348.12.2.el8_5.x86_64/source' -> '/usr/src/kernels/4.18.0-348.12.2.el8_5.x86_64' refers to a non-existing directory on the recovery system.
It will not be copied by default. You can include '/usr/src/kernels/4.18.0-348.12.2.el8_5.x86_64' via the 'COPY_AS_IS' configuration variable.
Testing that the recovery system in /tmp/rear.kPWL45xnR70XA9x/rootfs contains a usable system
Creating recovery/rescue system initramfs/initrd initrd.cgz with gzip default compression
Created initrd.cgz with gzip default compression (490643220 bytes) in 54 seconds
GRUB2 modules to load: ext2 fat part_gpt
Did not find /boot/grub2/locale files (minor issue for UEFI ISO boot)
Making ISO image
Wrote ISO image: /var/lib/rear/output/rear-server1.iso (519M)
Copying resulting files to rsync://lhpilox02//REAR/server1/ location

Te puede interesar

Contratar un servidor virtual privado administrado

Compárteme

Contenido Relacionado

Deja un comentario