===== 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/