
Я запускаю команды:
tar -cf myArchive.tar myDirectory/
gzip myArchive.tar
затем я копирую файл на множество ненадежных носителей, а затем распаковываю его с помощью:
tar -xzf myArchive.tar.gz
Тот факт, что я сжал tar-архив, гарантирует ли это целостность или хотя бы CRC распакованного содержимого?
решение1
tar
Сам по себе не записывает контрольную сумму для последующего сравнения. Если вы gzip
архив tar
, вы можете иметь эту функциональность.
tar
использует compress
. Если вы используете флаг -Z
при создании архива, tar
будет использовать compress
программу при чтении или записи архива. Из gzip
man-страницы:
СтандарткомпрессФормат не был разработан с учетом возможности проверки согласованности.
Но вы можете использовать -z
параметр. Затем tar
читает и записывает архив через gzip
. И gzip
записывает контрольную сумму crc. Чтобы отобразить эту контрольную сумму, используйте эту команду:
$ gzip -lv archive.tar.gz
method crc date time compressed uncompressed ratio uncompressed_name
defla 3f641c33 Sep 25 14:01 24270 122880 80.3% archive.tar
Из gzip
страницы руководства:
При использовании первых двух форматов (имеется ввиду gzip или zip), gunzip проверяет 32-битный CRC.
решение2
Да,формат файла gzipсодержит контрольную сумму CRC-32, которую можно использовать для обнаружения повреждения архива.
Конечно, хотя контрольная сумма позволяет gzipрассказыватьвы, что архив поврежден, на самом деле он ничего не делает, чтобы помочь вам восстановить данные внутри архива. Таким образом, он в основном полезен для таких вещей, как проверка того, что архив, который вы только что скачали из сети, действительно был скачан правильно.
Если вы действительно беспокоитесь о хранении или передаче своих архивов на ненадежных носителях, вы можете рассмотреть возможность использования такого формата архива, какноминалкоторый на самом деле обеспечиваетисправление ошибкив дополнение к обнаружению ошибок. Конечно, недостатком таких форматов является то, что избыточность, необходимая для исправления ошибок, неизбежно несколько увеличивает размер файла.
решение3
tar
не имеет проверки целостности. Пример:
$ echo JJJJJJJJJJJJJJJJJJ > b
$ tar cvf a.tar b
$ sed -i s/JJJJJJJJJJJJJJJJJJ/tttttttttttttttttt/g a.tar
$ tar xvf a.tar
$ cat b
tttttttttttttttttt
Смотрите, содержимое a.tar
архива изменилось, поэтому файл b
имеет совершенно другое содержимое, но tar этого не заметил. Это справедливо для любого tar, включая tar-1.28 (последний) с обоими форматами tar --format=gnu --format=posix
. pax
Команда (альтернативный tar reader) pax -r < a.tar
также не замечает изменений в архиве.
решение4
Пакет PKZip (win/dos) поставляется с программой PKZipFix, которая может восстанавливать файлы из поврежденных архивов. Я использовал эту утилиту в прошлом, она может восстанавливать файлы из умеренно поврежденных архивов, которые не распаковываются.