Как восстановить файлы из поврежденного архива .tar.gz?
Вопрос
У меня есть большое количество файлов в архиве .tar.gz.Проверка типа файла командой
file SMS.tar.gz
дает ответ
gzip compressed data - deflate method , max compression
Когда я пытаюсь распаковать архив с помощью GunZip, после задержки получаю сообщение
gunzip: SMS.tar.gz: unexpected end of file
Есть ли способ восстановить хотя бы часть архива?
Решение
Вы уверены, что это файл gzip?Я бы сначала запустил файл SMS.tar.gz, чтобы проверить это.
Тогда я бы прочитал Набор инструментов для восстановления gzip страница.
Другие советы
Восстановление возможно, но это зависит от того, что вызвало повреждение.
Если файл просто обрезан, получить некоторый частичный результат не так уж сложно;просто беги
gunzip < SMS.tar.gz > SMS.tar.partial
который даст некоторый результат, несмотря на ошибку в конце.
Если в сжатом файле есть большие пропущенные блоки, после плохого блока это практически безнадежно.
Если сжатый файл систематически повреждается небольшими способами (например,перенос двоичного файла в режиме ASCII, который разбивает символы возврата каретки и символы новой строки по всему файлу), восстановление возможно, но требует немалого специального программирования, оно действительно того стоит, только если у вас нет абсолютно никакого другого выхода (без резервных копий) и данные стоят больших усилий.(Я сделал это успешно.) Я упомянул этот сценарий в предыдущий вопрос.
Ответы для файлов .zip несколько различаются, поскольку zip-архивы имеют несколько отдельно сжатых элементов, поэтому надежды больше (хотя большинство коммерческих инструментов довольно фальшивы, они устраняют предупреждения путем исправления CRC, а не путем восстановления достоверных данных).Но ваш вопрос касался файла .tar.gz, который представляет собой архив с одним большим элементом.
Вот один из возможных сценариев, с которым мы столкнулись.У нас был файл 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.
Это сработало!Это небольшая возможность, и, возможно, ее стоит попробовать — возможно, кому-нибудь это поможет.