Ошибка при попытке разархивировать разбитые zip-файлы.

Вопрос или проблема

Версия ОС:

root@triiage_1:~/zip# cat /etc/os-release
NAME="Ubuntu"
VERSION="18.04.4 LTS (Bionic Beaver)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 18.04.4 LTS"
VERSION_ID="18.04"

Версия zip:

root@triiage_1:~# zip --version
Copyright (c) 1990-2008 Info-ZIP - введите 'zip "-L"' для лицензии на программное обеспечение.
Это Zip 3.0 (5 июля 2008), разработанный Info-ZIP.
В настоящее время поддерживается E. Gordon. Пожалуйста, отправьте отчеты об ошибках
авторам, используя веб-страницу на www.info-zip.org; см. README для подробностей.

Последние исходные коды и исполняемые файлы находятся по адресу ftp://ftp.info-zip.org/pub/infozip,
на указанную дату; см. http://www.info-zip.org/ для других сайтах.

Скомпилировано с помощью gcc 6.3.0 20170415 для Unix (Linux ELF).

У меня есть 2 файла cpio

root@triiage_1:~/zip# ll -h;file *
total 111M
drwxr-xr-x  2 root root 4.0K Feb 28 09:12 ./
drwx------ 15 root root  12K Feb 28 09:12 ../
-rw-r--r--  1 root root  56M Feb 28 09:09 kernel1.cpio
-rw-r--r--  1 root root  56M Feb 28 09:09 kernel2.cpio
kernel1.cpio: ASCII cpio archive (SVR4 без CRC)
kernel2.cpio: ASCII cpio archive (SVR4 без CRC)

Я сжимаю их с помощью zip и делю zip-файл на части по 15 МБ для каждого.

root@triiage_1:~/zip# zip xk.zip -s 15m kernel1.cpio kernel2.cpio
  добавление: kernel1.cpio (сжатие 1%)
  добавление: kernel2.cpio (сжатие 1%)
root@triiage_1:~/zip# ll -h
total 220M
drwxr-xr-x  2 root root 4.0K Feb 28 09:23 ./
drwx------ 15 root root  12K Feb 28 09:12 ../
-rw-r--r--  1 root root  56M Feb 28 09:09 kernel1.cpio
-rw-r--r--  1 root root  56M Feb 28 09:09 kernel2.cpio
-rw-r--r--  1 root root  15M Feb 28 09:22 xk.z01
-rw-r--r--  1 root root  15M Feb 28 09:22 xk.z02
-rw-r--r--  1 root root  15M Feb 28 09:22 xk.z03
-rw-r--r--  1 root root  15M Feb 28 09:23 xk.z04
-rw-r--r--  1 root root  15M Feb 28 09:23 xk.z05
-rw-r--r--  1 root root  15M Feb 28 09:23 xk.z06
-rw-r--r--  1 root root  15M Feb 28 09:23 xk.z07
-rw-r--r--  1 root root 4.5M Feb 28 09:23 xk.zip
root@triiage_1:~/zip# file *
kernel1.cpio: ASCII cpio archive (SVR4 без CRC)
kernel2.cpio: ASCII cpio archive (SVR4 без CRC)
xk.z01:       Zip многотомный архив, требуется как минимум PKZIP v2.50 для извлечения
xk.z02:       данные
xk.z03:       данные
xk.z04:       данные
xk.z05:       данные
xk.z06:       данные
xk.z07:       данные
xk.zip:       данные

Удалите оригиналы kernel1.cpio kernel2.cpio

root@triiage_1:~/zip# rm kernel1.cpio kernel2.cpio
root@triiage_1:~/zip# ll -h
total 110M
drwxr-xr-x  2 root root 4.0K Feb 28 09:23 ./
drwx------ 15 root root  12K Feb 28 09:12 ../
-rw-r--r--  1 root root  15M Feb 28 09:22 xk.z01
-rw-r--r--  1 root root  15M Feb 28 09:22 xk.z02
-rw-r--r--  1 root root  15M Feb 28 09:22 xk.z03
-rw-r--r--  1 root root  15M Feb 28 09:23 xk.z04
-rw-r--r--  1 root root  15M Feb 28 09:23 xk.z05
-rw-r--r--  1 root root  15M Feb 28 09:23 xk.z06
-rw-r--r--  1 root root  15M Feb 28 09:23 xk.z07
-rw-r--r--  1 root root 4.5M Feb 28 09:23 xk.zip

Распакуйте xk.zip с помощью “7z e xk.zip”, успешно.

root@triiage_1:~/zip# 7z e xk.zip

7-Zip [64] 16.02 : Copyright (c) 1999-2016 Igor Pavlov : 2016-05-21
p7zip Версия 16.02 (locale=en_US.UTF-8,Utf16=on,HugeFiles=on,64 разрядов,4 ЦП Intel(R) Core(TM) i5-6300U CPU @ 2.40GHz (406E3),ASM,AES-NI)

Сканирование диска на наличие архивов:
1 файл, 4718352 байт (4608 КиБ)

Извлечение архива: xk.zip
--
Путь = xk.zip
Тип = zip
Физический размер = 4718352
Размер встроенного заглушки = 4
Общий физический размер = 114818832
Многотомный = +
Индекс тома = 7
Томов = 8

Все в порядке

Файлы: 2
Размер:       115745324
Сжатый: 114818832
root@triiage_1:~/zip# ll -h
total 220M
drwxr-xr-x  2 root root 4.0K Feb 28 09:24 ./
drwx------ 15 root root  12K Feb 28 09:12 ../
-rw-r--r--  1 root root  56M Feb 28 09:09 kernel1.cpio
-rw-r--r--  1 root root  56M Feb 28 09:09 kernel2.cpio
-rw-r--r--  1 root root  15M Feb 28 09:22 xk.z01
-rw-r--r--  1 root root  15M Feb 28 09:22 xk.z02
-rw-r--r--  1 root root  15M Feb 28 09:22 xk.z03
-rw-r--r--  1 root root  15M Feb 28 09:23 xk.z04
-rw-r--r--  1 root root  15M Feb 28 09:23 xk.z05
-rw-r--r--  1 root root  15M Feb 28 09:23 xk.z06
-rw-r--r--  1 root root  15M Feb 28 09:23 xk.z07
-rw-r--r--  1 root root 4.5M Feb 28 09:23 xk.zip

Снова удалите kernel1.cpio kernel2.cpio.

root@triiage_1:~/zip# ll -h
total 110M
drwxr-xr-x  2 root root 4.0K Feb 28 09:37 ./
drwx------ 15 root root  12K Feb 28 09:28 ../
-rw-r--r--  1 root root  15M Feb 28 09:22 xk.z01
-rw-r--r--  1 root root  15M Feb 28 09:22 xk.z02
-rw-r--r--  1 root root  15M Feb 28 09:22 xk.z03
-rw-r--r--  1 root root  15M Feb 28 09:23 xk.z04
-rw-r--r--  1 root root  15M Feb 28 09:23 xk.z05
-rw-r--r--  1 root root  15M Feb 28 09:23 xk.z06
-rw-r--r--  1 root root  15M Feb 28 09:23 xk.z07
-rw-r--r--  1 root root 4.5M Feb 28 09:23 xk.zip

Попробуйте объединить разделенные zip-файлы xk.zip xk.z01~z07 в один yk.zip, затем распаковать его, встретив ошибки.

root@triiage_1:~/zip# zip -s0 xk.zip -O yk.zip
  копирование: kernel1.cpio
  копирование: kernel2.cpio
root@triiage_1:~/zip# ll -h
total 160M
drwxr-xr-x  2 root root 4.0K Feb 28 09:47 ./
drwx------ 15 root root  12K Feb 28 09:28 ../
-rw-r--r--  1 root root  15M Feb 28 09:22 xk.z01
-rw-r--r--  1 root root  15M Feb 28 09:22 xk.z02
-rw-r--r--  1 root root  15M Feb 28 09:22 xk.z03
-rw-r--r--  1 root root  15M Feb 28 09:23 xk.z04
-rw-r--r--  1 root root  15M Feb 28 09:23 xk.z05
-rw-r--r--  1 root root  15M Feb 28 09:23 xk.z06
-rw-r--r--  1 root root  15M Feb 28 09:23 xk.z07
-rw-r--r--  1 root root 4.5M Feb 28 09:23 xk.zip
-rw-r--r--  1 root root  51M Feb 28 09:47 yk.zip
root@triiage_1:~/zip# unzip yk.zip
Архив:  yk.zip
  распаковка: kernel1.cpio
  ошибка:  неверные сжатые данные для распаковки
  распаковка: kernel2.cpio
  ошибка:  неверные сжатые данные для распаковки
root@triiage_1:~/zip# ll -h
total 211M
drwxr-xr-x  2 root root 4.0K Feb 28 09:47 ./
drwx------ 15 root root  12K Feb 28 09:28 ../
-rw-r--r--  1 root root  31M Feb 28 09:09 kernel1.cpio
-rw-r--r--  1 root root  21M Feb 28 09:09 kernel2.cpio
-rw-r--r--  1 root root  15M Feb 28 09:22 xk.z01
-rw-r--r--  1 root root  15M Feb 28 09:22 xk.z02
-rw-r--r--  1 root root  15M Feb 28 09:22 xk.z03
-rw-r--r--  1 root root  15M Feb 28 09:23 xk.z04
-rw-r--r--  1 root root  15M Feb 28 09:23 xk.z05
-rw-r--r--  1 root root  15M Feb 28 09:23 xk.z06
-rw-r--r--  1 root root  15M Feb 28 09:23 xk.z07
-rw-r--r--  1 root root 4.5M Feb 28 09:23 xk.zip
-rw-r--r--  1 root root  51M Feb 28 09:47 yk.zip

Вот мои переживания.

а. размер kernel1.cpio изменился с 56M на 31M, кажется, что-то потеряно.

б. размер kernel2.cpio изменился с 56M на 21M, кажется, что-то потеряно.

в. общий размер разделенных zip-файлов xk.zip xk.z01~z07 составляет около 110M, почему объединенный zip-файл yk.zip всего 51 МБ?

Я не прав?

Из личного опыта, 7z не обрабатывает многослойные zip-архивы в некоторых случаях.

unzip не поддерживает многочастотные архивы. zip 3.0 может объединять многослойные архивы.

Поэтому сначала сделайте однокомпонентный архив из многослойных архивов с помощью zip 3.0 следующим образом:

$ zip -s- xk.zip -O xk_full.zip

используя знак - после параметра командной строки -s без пробела объединяет все многослойные архивы вместе и записывает их в виде единого zip-файла, имя которого задается опцией -O.

-s опция предназначена для разбиения на несколько файлов, но если указанный размер равен 0 или отрицательному (в нашем случае -), тогда вместо разбиения объедините многослойные архивы.

Затем используйте unzip для распаковки созданного однокомпонентного архива.

$ unzip xk_full.zip

Для вашего сведения, из руководства по unzip:

Многослойные архивы еще не поддерживаются, за исключением использования с zip. (Все части должны быть объединены вместе в порядке, а затем zip -F (для zip 2.x) или zip -FF (для zip 3.x) должны быть выполнены на объединенном архиве, чтобы “исправить” его. Также zip 3.0 и более поздние версии могут объединять многослойные (разделенные) архивы в объединенный однокомпонентный архив, используя zip -s- вarchive -O outarchive. См. страницу руководства zip 3 для получения дополнительной информации.)

Ответ или решение

Решение проблемы с ошибками при разархивировании разделенных zip-файлов на Ubuntu 18.04.4 LTS

Введение

Часто, когда мы сталкиваемся с проблемами при работе с архивами, важно учитывать многие аспекты, начиная от версии программного обеспечения и заканчивая основными характеристиками создаваемых файлов. В данной статье мы подробно разберем, в чем может быть причина ошибок при попытке разархивирования разделенных zip-файлов, а также предложим эффективные способы решения проблемы.

Описание проблемы

Согласно предоставленной информации, вы создавали разделенные zip-файлы с помощью команды zip, а затем пытались объединить их в один файл и разархивировать, но столкнулись с ошибками. Основные моменты, которые вы отметили:

  1. Изменение размера архивируемых файлов: Размер kernel1.cpio уменьшился с 56 МБ до 31 МБ, а kernel2.cpio — с 56 МБ до 21 МБ.
  2. Некорректный размер созданного объединенного zip-файла: Общий размер разделенных zip-файлов составлял 110 МБ, тогда как объединенный файл yk.zip оказался всего 51 МБ.

Анализ причин проблемы

  1. Объединение многотомных архивов: Используемая вами команда zip -s 0 xk.zip -O yk.zip не всегда корректно обрабатывает многотомные архивы. Хотя этот подход может сработать в некоторых случаях, он не гарантирует корректность конечного архива, особенно когда вы работаете со старыми версиями zip.

  2. Выбор инструмента для разархивирования: Вы отметили, что используете 7z для разархивирования. Однако, 7z иногда не справляется с многотомными zip-архивами. Наилучшей практикой является использование лучше интегрированных инструментов, таких как unzip или даже обновленный zip.

  3. Правильное объединение архивов: Основной момент, который следует учесть — использование команды zip для объединения многотомных архивов. В вашем случае необходимо использовать команду с конкретным синтаксисом для корректного объединения частей.

Решение проблемы

Для решения возникшей ситуации выполните следующие шаги:

  1. Объединение файлов: Для правильного объединения ваших разделенных архивов используйте команду:

    zip -s - xk.zip -O xk_full.zip

    Здесь - после -s указывает на то, что необходимо объединить все части архивов в один файл.

  2. Разархивирование объединенного файла: После успешного объединения воспользуйтесь командой unzip для извлечения содержимого:

    unzip xk_full.zip
  3. Проверка целостности файлов: После завершения разархивирования вы можете проверить размеры восстановленных файлов, чтобы убедиться в их целостности и отсутствии потерь данных.

Заключение

Используя указанные методы, вы сможете успешно объединить и разархивировать ваши файлы. Обратите внимание на использование актуальных версий программного обеспечения и следуйте предписанным практикам, чтобы минимизировать возникновение ошибок в будущем. В случае дальнейших проблем стоит обратиться к документации или сообществу разработчиков, чтобы получить более конкретные рекомендации.

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

Оцените материал
Добавить комментарий

Капча загружается...