Как я могу восстановить файлы из поврежденного архива .tar.gz? - PullRequest
26 голосов
/ 14 октября 2008

У меня есть большое количество файлов в архиве .tar.gz. Проверка типа файла с помощью команды

file SMS.tar.gz

дает ответ

gzip compressed data - deflate method , max compression

Когда я пытаюсь извлечь архив с помощью gunzip, после задержки я получаю сообщение

gunzip: SMS.tar.gz: unexpected end of file

Есть ли способ восстановить хотя бы часть архива?

Ответы [ 3 ]

33 голосов
/ 21 октября 2008

Восстановление возможно, но зависит от того, что вызвало коррупцию.

Если файл только усечен, получить какой-то частичный результат не так уж сложно; просто беги

gunzip < SMS.tar.gz > SMS.tar.partial

, который выдаст некоторый вывод несмотря на ошибку в конце.

Если в сжатом файле большие пропущенные блоки, после сбойного блока он практически безнадежен.

Если сжатый файл систематически поврежден небольшими способами (например, при передаче двоичного файла в режиме ASCII, который разбивает возврат каретки и переводы строки по всему файлу), его можно восстановить, но для этого требуется совсем немного пользовательского программирования, это действительно Это того стоит, если у вас нет абсолютно никаких других ресурсов (нет резервных копий), а данные стоят больших усилий. (Я сделал это успешно.) Я упомянул этот сценарий в предыдущем вопросе .

Ответы для файлов .zip несколько различаются, поскольку в zip-архивах есть несколько отдельно сжатых элементов, поэтому есть большая надежда (хотя большинство коммерческих инструментов довольно поддельные, они устраняют предупреждения, исправляя CRC, а не восстанавливая достоверные данные). Но ваш вопрос был о файле .tar.gz, который является архивом с одним большим членом.

15 голосов
/ 14 октября 2008

Вы уверены, что это gzip-файл? Сначала я бы запустил файл «SMS.tar.gz», чтобы проверить это.

Тогда я прочитал бы страницу Инструментария восстановления gzip .

3 голосов
/ 20 сентября 2013

Вот один из возможных сценариев, с которыми мы столкнулись. У нас был файл tar.gz, который не распаковывался, попытка разархивировать выдала ошибку:

gzip -d A.tar.gz
gzip: A.tar.gz: invalid compressed data--format violated

Я выяснил, что файл может изначально был загружен через недвоичное соединение ftp (мы точно не знаем).

Решение было относительно простым с использованием утилиты unix dos2unix

dos2unix A.tar.gz
dos2unix: converting file A.tar.gz to UNIX format ...
tar -xvf A.tar
file1.txt
file2.txt 
....etc.

Это сработало! Это одна тонкая возможность, и, возможно, стоит попробовать - это может кому-то помочь.

...