Восстанавливаем битые GZIP архивы
Протокол FTP живее всех живых. Всё ещё можно встретиться с проектом, на котором FTP используется как хранилище или средство обмена файлами между системами.
Но, у FTP, к сожалению, есть огромный изъян, который мешает в таких сценариях использования – передача файлов в ASCII режиме. Неправильно настроенный клиент FTP создаст массу “битых” файлов. Сильнее всего ошибка передачи в ASCII вместо BINARY задевает, естественно, не текстовые файлы, а только бинарные. Изображения превращаются в мусор, а архивы рапортуют об ошибках чтения и не распаковываются.
Один из советов, который можно увидеть чаще всего – “заново скачай файлы, но заранее перейдя в BINARY режим”. Совет хороший, но что делать, если исходных файлов уже нет? Ведь данные ещё могут пригодиться, а tar xvf отвечает только invalid compressed data или format violated? Неужели архивы уже не спасти?
Для GZIP в интернете можно найти пару ссылок на простую и полезную программу, предоставленную одним из авторов оригинальной GZIP, Жаном-Лу Гайи (Jean-loup Gailly). Вот ссылка на Wayback Machine, а вот копия архива у меня на сайте.
Стоит упомянуть, что программа fixgz может не решить Ваши проблемы, но, если загрузить оригинальный файл возможности уже нет, это хорошая попытка “починить” его “битую” копию. Предельно ясно такую позицию указывает автор в README.
Использовать её предельно просто. Сначала надо распаковать:
$ unzip fixgz.zip
Archive: fixgz.zip
inflating: fixgz.c
inflating: fixgz.exe
inflating: README
После, скомпилировать fixgz.c, если у Вас не Windows:
$ cc fixgz.c -o fixgz
И применить на “битом” GZIP архиве:
$ fixgz archive.gz fixed.gz
В моём случае это помогло с большинством файлов. Из 14 “битых” архивов только 1 не удалось восстановить. Надеюсь, Вам не придётся в будущем много работать с FTP. А если придётся и Вы столкнётесь с подобной проблемой, у Вас есть инструмент, который может помочь хотя бы с GZIP файлами.