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.
Se asume que las instalaciones del sistema operativo están configurados similar a los siguientes factores:
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:
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:
Si la actualización es correcta:
Si la actualización es incorrecta:
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
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:
ls /boot/> /root/kernels
lvcreate -L 8GB -s -n root_snapshot /dev/rhel/root
Si la actualización es correcta:
lvremove /dev/rhel/root_snapshot
Si la actualización es incorrecta:
lvconvert --merge /dev/rhel/root_snapshot
grub2-mkconfig> /boot/grub2/grub.cfg
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
grub2-mkconfig> /boot/grub2/grub.cfg
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:
rm vda.img.tar.gz
Si la actualización es incorrecta:
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