В общем, я обнаружил, чтоp7zipСначала сканирует каталог, который необходимо сжать, а затем сжимает эти файлы в единый формат zip.
Рассмотрим следующий сценарий: у меня есть сотни ГБ файлов и папок, которые сначала сканируются для архивирования. Предположим, я удалил файл после того, как он закончил сканирование. Я не знаю, как файл может отсутствовать к моменту завершения сканирования, но такое поведение было замечено в рабочей среде, поэтому на моей локальной машине я сам удалил его. В этом случае он выдает следующую ошибку и зависает на неопределенное время.
7-Zip (a) [64] 16.02 : Copyright (c) 1999-2016 Igor Pavlov : 2016-05-21
p7zip Version 16.02 (locale=en_US.UTF-8,Utf16=on,HugeFiles=on,64 bits,6 CPUs Intel(R) Core(TM) i5-9500T CPU @ 2.20GHz (906EA),ASM,AES-NI)
Scanning the drive:
29741 folders, 48865 files, 5035919485 bytes (4803 MiB)
Creating archive: /home/mymachine/Downloads.zip
Items to compress: 78606
WARNING: No such file or directory
/var/webarch/data/fs-root/538/2022/05/20/19964
Итак, есть ли какой-либо флаг в p7zip или хак, который можно использовать, чтобы игнорировать эти предупреждения и продолжать архивирование? Например, мы можем игнорировать несколько из тех файлов, которые отсутствуют после сканирования, вместо того, чтобы выдавать ошибку тайм-аута в производстве.
решение1
Это было упомянуто в отчете об ошибке #2099 7z зависает, если файл удаляется при создании zip-архива с 2017 года.
Разработчик обещал исправить, но не сделал этого.
Он предложил обходной путь, который заключается в добавлении переключателя -mmt1
, который устанавливает количество потоков равным одному (1). По-видимому, зависание вызвано многопотоковым конфликтом, когда файл не найден одним из потоков, и его можно избежать, имея только один поток.