NoneGunzip : неверные сжатые данные - формат нарушен

Определение проблемы: я перенес файл tar.gz с компьютера с Linux на раздел Windows. Раздел Windows был смонтирован с сервером Linux как cifs.

ОС: Red Hat Enterprise Linux Server, выпуск 5

Симптом:

После того, как процесс копирования будет успешным, выполните проверку целостности с помощью gunzip -t, и процесс получит следующую ошибку:

gunzip -t Backup-28--Jun--2011--Tuesday.tar.gz

gunzip: Backup-28--Jun--2011--Tuesday.tar.gz: invalid compressed data--format violated

И дальше пытался распутать (tar -xvzf) и процесс также провалился.

2 ответа

Похоже, файл не был правильно передан в двоичном режиме. Вы могли бы заставить его работать с unix2dos Backup-28--Jun--2011--Tuesday.tar.gz, но если нет, вам придется попробовать перенести его снова, убедившись, что он использует двоичный режим.

Контрольная сумма исходных и целевых файлов - это хорошая идея.

Чтобы получить более конкретное представление о том, что такое искажение, вы можете провести побайтное сравнение с cmp -l source.gz dest.gz; также интересно, отличается ли количество байтов (ls -l).

Вот еще один маленький инструмент анализа, который расскажет вам, как один из файлов мог быть поврежден. Файл zip или gzip достаточно большого размера будет иметь почти равномерное распределение байтов. Ниже приведен скрипт perl, который будет гистограммы файлов. Файлы zip и gzip, которые были повреждены при переносе в режиме ASCII, будут иметь необычную частоту возврата каретки и новых строк, например, частота или число, в два раза превышающее норму, или ноль, или оба. (Я видел разные FTP-серверы или клиенты для разных категорий, например, добавление NL после CR, или удаление CR из CRLF, или превращение каждого NL в CR, или наоборот. Все это нарушает частоту символов, как я описал.)

Сохранить это как hist.pl и запустить его с perl hist.pl *.gz; просмотр частот в распределении байтовых значений покажет вам, сделал ли перенос что-то вроде удаления каждого CR или добавления CR к каждому LF и т. д.

#!/usr/bin/perl -w
use strict;

die "filename arguments expected\n" if ($#ARGV < 0);

foreach my $filename (@ARGV) {
    if (!open IN, "<$filename") {
    warn "can't open '$filename'\n";
    next;
    }
    print "$filename\n";
    binmode(IN);
    my @hist = ();
    my $total = 0;
    while (read IN, my $buf, 1024) {
    foreach my $octet (unpack "C*", $buf) {
        $hist[$octet]++;
        $total++;
    }
    }
    close(IN);

    for (my $i = 0;  $i < 256;  $i++) {
    my $count = $hist[$i] || 0;
    my $p = sprintf("%.5f", $count/$total);
    print "[$i] $count $p\n";
    }
    print "total $total\n\n";
}
exit 0;

Способ 1

Пытаться:

sudo apt upgrade

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

Способ 2

Посмотрите, сможете ли вы найти другую программу в Интернете. Если у вас есть кабель или какой-то Wi-Fi, подключенный к вашей машине с Red Hat Enterpise, вы можете использовать lynx

sudo apt install lynx

Заключение

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

Надеюсь, это помогло! Я не гарантирую, что это сработает, просто говорю вам несколько предложений.

Другие вопросы по тегам