Cómo recuperar un archivo dañado "tar.gz"

11

De repente necesité recuperar un tar.gzarchivo antiguo , pero tan pronto como lo ejecuto:

tar -zxvf filename.tar.gz

Entiendo esto:

gzip: stdin: invalid compressed data--format violated  
tar: Child returned status 1  
tar: Error is not recoverable: exiting now
arrrrgv
fuente
8
¿Es realmente un tarball comprimido? Prueba el filecomando primero.
alex
1
Sí, me ha sucedido más de una vez que obtuve uno .tar.gzque era realmente un .tar, y una vez incluso un PDF.
vonbrand

Respuestas:

12

Lo que debes probar es lo siguiente:

  1. Use el filecomando en el archivo para ver si se reconoce como gzipdatos -ped.
  2. Ejecutar strace gunzipen el archivo. Esto imprimirá los últimos bytes leídos del archivo que podrían ayudarlo a identificar el punto en el archivo donde se produce la corrupción.
  3. Ejecute una compilación de depuración de gunzipunder gdb. Intente corregir la sección dañada (debe tener mucha suerte para poder hacer eso) y ver si puede continuar hasta el final del archivo.

Dependiendo de la naturaleza de la corrupción, es posible que pueda o no recuperar sus datos.

alex
fuente
gunzip filename.tar.gztrabajó para mi.
Ravi Dhoriya ツ
2

La recuperación completa no es posible. Los formatos como .zip brindan mejores opciones de protección y recuperación, pero tampoco están llenos.

.tar.gz agrupa todos los archivos y luego aplica una compresión. .zip reinicia la compresión para cada archivo. Por lo tanto, en el archivo .zip, un daño hecho al bloque comprimido solo afecta al archivo al que pertenece este bloque. En .tar.gz, el daño afectará a todos los archivos posteriores hasta que la compresión se reinicie de alguna manera.

anatoly techtonik
fuente
que estaba pensando, buena explicación gracias! Me pregunto si hay otros formatos tan buenos como zip (pero con una mejor compresión), pero zip siempre se reconoce en todas partes y es probablemente la mejor opción para la recuperación.
Acuario Power
1

Corre zcat bad.tar.gz > some.tary extrae eso. Pasar la parte corrupta del archivo será complicado. La página del manual da punteros al formato, pero buscaría otras opciones en Google.

¿Estás seguro de que esto está comprimido con gzip? Puede quejarse porque no entiende el formato ...

vonbrand
fuente
1

Todas las copias se aplican solo para extraer información desde el inicio del archivo hasta el punto donde ocurrió el error o donde se cortó el archivo.

Desafortunadamente, ningún destinatario describe cómo recuperar parte del archivo / secuencia después del área de corrupción. ¿Alguien tiene esa receta?

Znik
fuente
-1

use este: https://github.com/arenn/gzrt

gzrecover foo.tar.gz
cpio -F foo.tar.recovered -i -v
W4U
fuente
Su comando da como resultado un cpio: illegal option -- Fmensaje de error.
schily
1
cpio --help le da la opción: -F, --file = [[USER @] HOST:] FILE-NAME Use este FILE-NAME en lugar de la entrada o salida estándar. USER y HOST opcionales especifican los nombres de usuario y host en caso de un archivo remoto
W4U
No está hablando cpiode un clon, sino de un clon con opciones específicas del proveedor, consulte, por ejemplo, schillix.sourceforge.net/man/man1/cpio.1.html. Si habla de un clon en lugar del original, debe mencionar qué clon usted están usando.
schily
1
@schilly, estoy hablando de cpioincluir en Debian. GNU cpio: enlace
W4U