Esta es la peor hora del oficio, y se sobrevive más a menudo de lo que parece. Trabaja desde la copia más reciente hacia atrás, y no sobrescribas nada mientras lo intentas.

Primero: no toques el original

cp backup.tar.gz /srv/work/backup-copy.tar.gz

Todos los intentos de recuperación de abajo son destructivos en algún punto. Trabaja siempre sobre una copia, así un intento fallido no cuesta nada.

Si gzip se niega

gzip -t backup.tar.gz                 # what is wrong
zcat backup.tar.gz > partial.tar 2>/dev/null || true
tar -xf partial.tar --ignore-zeros --warning=no-timestamp

Un gzip truncado descomprime igualmente todo hasta el punto dañado. En un archivo ordenado alfabéticamente eso suele ser la mayor parte del sitio.

Si un volcado SQL no se deja importar

zcat db.sql.gz | head -50            # is the header there
zcat db.sql.gz | tail -5            # does it end with "Dump completed"

# import ignoring the failures, then see what arrived
zcat db.sql.gz | mysql --force restore_test
mysql restore_test -e "SHOW TABLES"

--force sigue adelante más allá de una sentencia rota. Un volcado cortado a mitad de una tabla restaura todas las tablas anteriores, y con frecuencia esa es la que necesitabas.

Después busca otras copias

  • Las instantáneas del propio proveedor, que son distintas de las tuyas.
  • Un servidor de pruebas, que es una copia algo más antigua de producción.
  • El portátil de un desarrollador con un volcado reciente encima.
  • Las exportaciones de la propia aplicación: un CSV de pedidos vale más que nada.

Después, para que no ocurra dos veces

Una copia de seguridad está verificada o es una esperanza. Comprueba el archivo en cada ejecución y restaura uno con periodicidad; consulta Probar una restauración y Leer un registro de copia fallida. Y guarda más de una, en más de un sitio: Por qué una sola copia no es una copia.