Как восстановить поврежденный файл «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
Это действительно сжатый архив? Попробуйте fileсначала команду
Алекс

1
Да, со мной случалось не раз, когда я получал, .tar.gzкоторый был действительно .tar, и однажды даже PDF.
vonbrand

Ответы:


12

Что вы должны попробовать это следующее:

  1. Используйте fileкоманду в архиве, чтобы увидеть, распознаны ли она как gzipданные в форме.
  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сообщению об ошибке.
Шили

1
cpio --help дает вам возможность: -F, --file = [[USER @] HOST:] ИМЯ ФАЙЛА Используйте это ИМЯ ФАЙЛА вместо стандартного ввода или вывода. Необязательные USER и HOST указывают имена пользователей и хостов в случае удаленного архива
W4U

Вы говорите не о abpout cpio, а о клоне с опциями, специфичными для поставщика, см., Например, schillix.sourceforge.net/man/man1/cpio.1.html Если вы, однако, говорите о клоне вместо оригинала, вы должны указать, какой клон вы Используем.
Сhily

1
@schilly, я говорю о cpioвключении в Debian. GNU cpio: ссылка
W4U
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.