Подтвердить что ты не робот

Как восстановить файлы из поврежденного архива .tar.gz?

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

file SMS.tar.gz

дает ответ

gzip compressed data - deflate method , max compression

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

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

Есть ли способ восстановить даже часть архива?

4b9b3361

Ответ 1

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

Тогда я прочитал бы страницу gzip Recovery Toolkit.

Ответ 2

Восстановление возможно, но это зависит от того, что вызвало повреждение.

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

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

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

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

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

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

Ответ 3

Вот один из возможных сценариев, с которыми мы столкнулись. У нас был 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.

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