Cómo recuperar ficheros borrados de Amazon Linux

Escenario

Tenemos una aplicación de tipo SpringBoot desplegada en una instancia ec2 de Amazon, con el sistema operativo Amazon Linux. Para sincronizar los cambios con el código desplegado en producción utilizo rsync en este script de bash: Ayer cuando desplegué, la aplicación no compilaba en el servidor remoto. Era debido a que una clase residual que había sido borrada entraba en conflicto con otra recientemente desplegada. Me dije que la manera de solucionarlo era añadiendo el parámetro --delete al comando de resync.

Problema

Olvidé excluir la carpeta en la que los usuarios suben ficheros en la web con lo que pude presenciar en directo como se iban borrando uno a uno en el servidor de producción

Solución

Amazon Linux ustiliza el sistema de ficheros xfs. Buscando en Goolge encontré una herramienta con la que supuestamente se podría recuperar ficheros borrados en ese sistema de ficheros, xfs_undelete. Para recuperar los archivos el disco de origen tiene que estar desmontado. Seguí los pasos siguientes:
  1. Creo un snapshot del disco
  2. Creo un volumen a partir del snapshot
  3. Lo engancho (attach) a la intancia. Atención al elegir la zona, debe coincidir con la de la instancia.
  4. Localizo el dispositivo en /dev, en mi caso aparece como /dev/sdf1
xfs_undelete requiere un par de bibliotecas que no están presentes en Amazon Linux, tcl >= 8.6 y tcllib. La primera la instalo con el paquete expect: Para la segunda hay que descargar el zip de core.tcl-lang.org, lo descomprimimos en nuestra máquina y dentro de la carpeta lanzamos el siguiente comando: Ahora ya podemos lanzar el comando para recuperar los ficheros. Descargamos el zip de github, lo descomprimimos y desde dentro de la carpeta: Se pueden añadir parámetros, como uno para reducir la búsqueda a ficheros borrados después de tal día ( sudo ./xfs_undelete -t 2020-12-10 /dev/sdf1), pero tras varias pruebas no he visto mucha diferencia en los resultados. En mi caso, si bien ha conseguido rescatar algunos ficheros, no he podido recuperar otros, en concreto un par de zips.

Conclusión

Por supuesto, siempre tenemos que tener un respaldo de cualquier fichero que no esté bajo control de versiones. Y, segundo, para desplegar una aplicación SpringBoot no hace falta hacer un rsync de todo el código fuente y luego compilarlo. Basta con mandar el .jar a la carpeta target de la aplicación de destino, y luego parar y arrancar el servicio.

Publicaciones Similares

  • Degradación de MySql: de la versión 8.0.30 a la 5.7.39

    Escenario Seguro que no somos los primeros a quien les pasa que una actualización obligatoria de Ubuntu 18.04 al 20.04 acarrea una actualización no deseada de MySql a la versión 8.x. Problema En la versión 8.0.30 MySql no cuenta con la utilidad mysql_upgrade para dejar las tablas preparadas para una actualización de versión. En esta…

  • |

    Cómo ampliar el espacio en disco en 1and1

    Escenario Hemos contratado un servidor dedicado en 1and1 (ubuntu 14.04) y al acceder por ssh constatamos que no disponemos de todo el espacio en disco disponible: $ df -hFilesystem Size Used Avail Use% Mounted onudev 3.9G 4.0K 3.9G 1% /devtmpfs 798M 592K 797M 1% /run/dev/md1 4.0G 990M 3.0G 25% /none 4.0K 0 4.0K 0% /sys/fs/cgroupnone 5.0M 0 5.0M 0% /run/locknone 3.9G 0 3.9G 0% /run/shmnone 100M 0 100M 0% /run/user/dev/mapper/vg00-usr 4.8G 1.3G 3.3G 28% /usr/dev/mapper/vg00-var 4.8G 812M 3.8G 18% /var/dev/mapper/vg00-home 4.8G 10M 4.6G 1% /home Objetivo Aumentar el espacio disponible para dar cabida a nuestros recursos. Solución Nota: sólo aplicable a sistemas linux Primer paso Comprobamos el espacio en disco real: ~$ sudo fdisk -lDisk /dev/sda: 240.1 GB, 240057409536 bytes255 heads, 63 sectors/track, 29185 cylinders, total 468862128 sectorsUnits = sectors of 1 * 512 = 512 bytesSector size (logical/physical): 512 bytes / 4096 bytesI/O size (minimum/optimal): 4096 bytes / 4096 bytesDisk identifier: 0x24e3fc12   Device Boot      Start         End      Blocks   Id  System/dev/sda1            2048     8390655     4194304   fd  Linux raid autodetect/dev/sda2         8390656    12584959     2097152   82  Linux swap / Solaris/dev/sda3        12584960   468862127   228138584   fd  Linux raid autodetect Segundo…

  • Usuarios sftp enjaulados con logs para registro de eventos

    Escenario Un cliente nos pide que montemos un servidor FTP para que nos pueda hacer llegar periódimante ficheros con datos. La máquina en la que vamos a configurarlo corre en un ubuntu server 18.04. y tiene instalado un openssh-server. Requisitos Debe utilizar el protocolo SFTP, que ofrece las funcionalidades de FTP sobre el protocolo SSH….

  • Modelos locales

    Llevaba tiempo queriendo correr uno de esos modelos generativos en mi propia máquina. Libre de otras prioridades, hoy por fin he tenido ocasión de comprobar si era verdad que modelos de la familia GPT4All o LlamaCpp estaban preparados para ser consumidos en ordenadores personales. De los centenares de proyectos que han proliferado desde el advenimiento…

  • Instalando EAC en Ubuntu

    Para ser más concretos en Ubuntu 12.04. Ahí van los pasos: Para estar a la última me he instalo lo más nuevecito (hasta la fecha) de wine, en dos pasos: 1. Añadimos la fuente siguiente a nuestro repositorio: $ sudo add-apt-repository ppa:ubuntu-wine/ppa 2. El consabido: $ sudo apt-get update 3. seguido de un: $ sudo apt-get install wine1.7 4. Antes de proseguir configuramos mínimamente wine:…

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *