===== Recuperación de S.O. en caso de actualización =====
En algunas ocasiones realizar al realizar una actualización, se necesita crear un respaldo del sistema operativo, en el caso de sistemas virtualizados es un usual hacer un snapshot, pero debido a gran cantidad de información que la aplicación almacena, limitaciones físicas como discos o la red, se requiere un downtime del servicio considerable, este documento pretende proponer algunos escenarios para reducir ese tiempo.
==== Escenarios ====
Se asume que las instalaciones del sistema operativo están configurados similar a los siguientes factores:
* Configuración de particionamiento con LVM
* El sistema operativo está en un grupo de volúmenes diferente a los de la aplicación
* El volume group del sistema operativo está compuesto únicamente de un volumen físico
* Sólo se ha probado con RHEL 6 y 7 en todos los escenarios y Suse 11 en el caso de la utilización de la herramienta dd.
La siguiente es una salida de ejemplo del comando df -h:
[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/rhel-root 7.1G 2.9G 4.3G 41% /
devtmpfs 486M 0 486M 0% /dev
tmpfs 497M 0 497M 0% /dev/shm
tmpfs 497M 6.7M 490M 2% /run
tmpfs 497M 0 497M 0% /sys/fs/cgroup
/dev/vda1 1014M 125M 890M 13% /boot
/dev/mapper/db2vg-db2lv 8.8G 1.2G 7.2G 14% /opt/ibm
tmpfs 100M 0 100M 0% /run/user/0
tmpfs 100M 0 100M 0% /run/user/1000
La siguiente imagen es una representación del particionamiento de ejemplo:
{{::diagramalvmrecuperarso.png?600|}}
=== Attach de discos ===
Este escenario consiste en remover los LUNs que no pertenecen a los grupos de volúmenes del sistema operativo mediante el hypervisor. Esto varía dependiendo de el entorno de virtualización, por lo cual será necesario que un especialista del ambiente colabore con la remoción temporal de los LUNs. Luego se realiza un snapshot, que será mas reducido pues ya no incluye los datos de la aplicación, de la máquina virtual.\\
\\
Se seguirán los siguientes pasos:
* Detener aplicaciones
* Desmontar file systems
* Comentar /etc/fstab
* Remover LUNs desde el hipervisor
* Hacer snapshot
* Actualizar
* Validar
Si la actualización es correcta:
* Añadir los LUNs desde el hipervisor
* Eliminar comentarios /etc/fstab
* Montar file systems
* Iniciar aplicaciones
* Eliminar snapshot
Si la actualización es incorrecta:
* Revertir snapshot
* Añadir los LUNs desde el hipervisor
* Eliminar comentarios /etc/fstab
* Montar file systems
* Iniciar aplicaciones
* Eliminar snapshot
En el caso de KVM, se puede crear un snapshot mediante virsh:
virsh connect qemu:///system
list
snapshot-create-as --domain $NOMBREMAQUINAVIRTUAL --name "$NOMBRESNAPSHOT"
snapshot-list $NOMBRESNAPSHOT
snapshot-info --current $NOMBRESNAPSHOT
Luego se realiza la actualización, este documento no pretende abarcar el proceso de la actualización.
En caso de fallo de la actualización se puede revertir y eliminar el snapshot de la siguiente manera:
snapshot-revert --domain $NOMBREMAQUINAVIRTUA --snapshotname $NOMBRESNAPSHOT --running
snapshot-delete --domain $NOMBREMAQUINAVIRTUA --snapshotname $NOMBRESNAPSHOT
En caso de que la actualización sea exitosa puede eliminar el snapshot de la siguiente manera:
snapshot-delete --domain $NOMBREMAQUINAVIRTUA --snapshotname $NOMBRESNAPSHOT
=== Hacer un snapshot de LVM ===
Este método consiste en hacer un snapshot mediante LVM, la ventaja frente al anterior es que requiere menor intervención del personal especialista en el hypervisor:
* Documentar todos los kernels disponibles
ls /boot/> /root/kernels
* Añadir un LUN adicional al volume group o al menos tener espacio suficiente
* Hacer el snapshot:
lvcreate -L 8GB -s -n root_snapshot /dev/rhel/root
* Hacer la actualización
Si la actualización es correcta:
* Remover el snapshot:
lvremove /dev/rhel/root_snapshot
* En caso de ser necesario remover el physical volume
Si la actualización es incorrecta:
* Bootear desde DVD
* Seleccionar la opción "Rescue boot", una vez en el shell ejecutar el siguiente comando:
lvconvert --merge /dev/rhel/root_snapshot
* Reiniciar
* Se debe seleccionar en el boot menu el kernel anterior
grub2-mkconfig> /boot/grub2/grub.cfg
* Una vez iniciado el sistema mueva los registros del kernel anterior según salgan en el menú y el archivo de kernels:
mv /boot/vmlinuz-3.10.0-693.17.1.el7.x86_64 /root
mv /boot/initramfs-3.10.0-693.17.1.el7.x86_64.img /root
* Luego genere un nuevo archivo de configuración para GRUB2, con el siguiente comando:
grub2-mkconfig> /boot/grub2/grub.cfg
* Reiniciar
* En caso de ser necesario remover el physical volume
=== Hacer una copia con dd ===
Para este procedimiento vamos a asumir que el volume group está solo en un disco
dd if=/dev/vda conv=sync,noerror bs=64K | gzip -c> vda.img.tar.gz
Si la actualización es correcta:
* Elimine el archivo con el respaldo:
rm vda.img.tar.gz
Si la actualización es incorrecta:
* Bootear desde DVD
* Seleccionar la opción "Rescue boot", en lugar de continuar con el asistente seleccione "Skip to shell" y siga los siguientes pasos:
mkdir /media
vgchange -a y db2vg
mount /dev/mapper/db2vg-db2lv /media
cd /media
gunzip -c vda.img.tar.gz | dd of=/dev/vda
sync
* Reiniciar
==== Referencias ====
* https://wiki.archlinux.org/index.php/disk_cloning
* https://www.howtoforge.com/linux_lvm_snapshots_p2
* https://www.cyberciti.biz/faq/how-to-create-create-snapshot-in-linux-kvm-vmdomain/