Як відновити пошкоджений файл "tar.gz"


11

Мені раптом потрібно було відновити старий tar.gzфайл, але як тільки я його виконую:

tar -zxvf filename.tar.gz

Я отримую це:

gzip: stdin: invalid compressed data--format violated  
tar: Child returned status 1  
tar: Error is not recoverable: exiting now

8
Це справді gzipped тарбол? fileСпершу спробуйте командувати.
алекс

1
Так, мені не раз траплялося, що я отримав .tar.gzсправді справжній .tar, а раз навіть PDF-файл.
vonbrand

Відповіді:


12

Що ви повинні спробувати, це наступне:

  1. Використовуйте fileкоманду в архіві, щоб побачити, чи розпізнається він як gzip-ped дані.
  2. Виконати strace gunzipфайл. Це надрукує останні байти, прочитані з файлу, що може допомогти вам визначити точку у файлі, де відбувається пошкодження.
  3. Запустіть збірку налагодження gunzipпід gdb. Спробуйте виправити пошкоджений розділ (вам доведеться пощастити, щоб це зробити) і подивіться, чи може він тривати до кінця файлу.

Залежно від характеру корупції ви можете або не зможете відновити свої дані.


gunzip filename.tar.gzпрацював на мене.
Раві Дхорія ツ


2

Повне відновлення неможливе. Такі формати, як .zip, забезпечують кращі можливості захисту та відновлення, але не є повноцінними.

.tar.gz з’єднує всі файли разом, а потім застосовує стиснення. .zip перезапускає стиснення для кожного файлу. Тому у .zip-файлі збиток, заподіяний стисненому блоку, впливає лише на файл, до якого цей блок належить. У .tar.gz пошкодження вплине на всі наступні файли, поки стиснення якимось чином не запуститься.


що я думав, добре пояснення! Цікаво, чи є інші формати настільки ж хороші, як zip (але з кращою компресією), але zip завжди розпізнається скрізь і, мабуть, найкращий варіант відновлення.
Сила Водолія

1

Запустіть zcat bad.tar.gz > some.tarі витягніть це. Пройти повз пошкодженої частини файлу буде непросто. Сторінка man дає вказівники на формат, але я б шукав інші варіанти в Google.

Ви впевнені, що це стиснуто за допомогою gzip? Це може скаржитися, оскільки він не розуміє формат ...


1

Усі рекпії застосовуються лише для вилучення інформації від початку файлу до точки, де сталася помилка, або де вирізається файл.

На жаль, жодна реципієнка не описує, як відновити частину файлу / потоку після корупції. Хто-небудь, що реп'є?


-1

скористайтеся цим: https://github.com/arenn/gzrt

gzrecover foo.tar.gz
cpio -F foo.tar.recovered -i -v

Ваша команда призводить до cpio: illegal option -- Fповідомлення про помилку.
schily

1
cpio --help надає вам параметр: -F, --file = [[USER @] HOST:] FILE-NAME Використовуйте це FILE-NAME замість стандартного вводу або виводу. Необов’язково USER та HOST вказують імена користувачів та хостів у разі віддаленого архіву
W4U

Ви говорите не про abpout cpio, а про клон із специфічними для постачальника параметрами, див., Наприклад, schillix.sourceforge.net/man/man1/cpio.1.html Якщо ypou, однак, говорити про клон замість оригіналу, ви повинні згадати, який клон ви користуються.
schily

1
@schilly, я говорю про cpioвключення в debian. GNU cpio: посилання
W4U
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.