Files
knowledge-base/decisions/2026-06-11-niikn-opyt-arhiv-100mb.md

53 lines
5.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# НИИКН: нарезка папки «Опыт» (Закупка Соловки) в архивы ≤100 МБ
> **Финал (v3 RAR):** после жалоб («zip не открывается», «кракозябры в именах», «.z01 без формата»)
> всё перепаковано в **RAR5** скриптом `/tmp/repack4.py` + rar 7.12 (rarlab, /tmp/rar):
> бины → независимые `N-NNN.rar` (≤94 МБ raw, store), файлы >99 МБ → тома `N-ТОМА-имя.partN.rar` (-v95m).
> 1735 RAR, 115 ГБ, покрытие 5287/5287, rc=0 все, `rar t` ОК, скачивание через шару проверено.
> RAR5 хранит имена в юникоде — проблема кодировок снята архитектурно. Ссылка та же:
> **https://niikn.com/s/kqH46Jrjnb4ri3q**
>
> **Уроки:** (1) Info-ZIP `zip` на Ubuntu НЕ ставит UTF-8 флаг имён даже с LC_ALL=C.UTF-8 и не пишет
> Unicode extra (0x7075) → Проводник читает имена как CP866 → кракозябры. Питоновский `zipfile`
> флаг ставит, а в split-наборах флаг можно выставить патчем бита 11 в local header (.z01, offset 10
> после маркера PK0708) и central dir (последний .zip, rfind PK0102 +8). (2) Split-zip (.z01) не открывают
> ни Проводник, ни Archive Utility, а .z01 у людей «файл без формата». (3) Для русских офисов сразу
> делать RAR-тома `.partN.rar` — двойной клик любой части открывает весь набор.
## История ниже (v1 zip-тома → v2 независимые zip) — этапы, оставлено для контекста
**Дата:** 2026-06-11
**Задача:** папку по шаре https://niikn.com/s/c3kwLWRa8dKX848 сжать в файлы до 100 МБ (лимит закупочной площадки).
## Исходник
- Владелец: `maksimmaul@gmail.com`, путь `Закупка Соловки/Опыт`
- 46 папок (146), 5287 файлов, 115 ГиБ — договоры, акты ГИКЭ, УПД (PDF/ZIP/SIG)
- Внутри есть одиночные PDF до 336 МБ → одиночными зипами не обойтись, только multi-volume
## Решение
- Работа целиком на VM 108 (192.168.1.200, datadir `/mnt/ncdata`), без перегона данных по сети
- Бенчмарк: deflate -1 даёт всего 2.7% на PDF-сканах при 42 МБ/с → выбран **store (-0)**, IO-bound
- `zip -rq -0 -s 95m` на каждую папку: тома по 95 МиБ = 99 614 720 байт — меньше «100 МБ» и в MiB, и в десятичных МБ
- Выход: `Закупка Соловки/Опыт-архивы-100мб/<N>/<N>.zip + <N>.z01…` — по подпапке на объект
- Регистрация: `occ files:scan --path=...`, владелец 33:33
- Ссылка создана через OCS API c app-password бота Максимки (LXC 114, `/root/.clawdbot/nextcloud-creds.env`)
## Результат (v2 после жалобы «zip не открывается»)
Первая версия (46 multi-volume архивов по папкам) не открывалась у людей двойным кликом —
Проводник/маковский Архиватор не умеют split-zip. Перепаковано скриптом `/tmp/repack.py`:
- файлы ≤94 МБ → **независимые обычные zip ≤95 МБ** (`N-partNNN.zip`, bin-packing в порядке обхода)
- файлы 9499 МБ → одиночный zip (`N-файл-….zip`)
- 278 файлов >99 МБ (docx/pdf-сканы до 700 МБ!) → тома `-s 95m` только на сам файл (`N-ТОМА-….zip+.z01…`)
- Итого 1728 файлов, 115 ГБ; покрытие сверено: 4986+23+278 = 5287 файлов источника
- `ПРОЧТИ-МЕНЯ.txt` с инструкцией лежит в корне шары
- **Публичная ссылка: https://niikn.com/s/kqH46Jrjnb4ri3q** (read-only); скачивание part-zip проверено end-to-end
- Диск VM 108: /mnt/ncdata 93% — после загрузки на площадку папку-дубль можно удалить
## Грабли/заметки
- Публичная шара c3kw… read-only (permissions 17) — заливать через неё нельзя, поэтому писали в datadir + scan
- **Split-zip (.z01) не открывает ни Проводник, ни Archive Utility** — только WinRAR/7-Zip и только при всех томах рядом; для людей по умолчанию делать независимые zip, тома — лишь где файл сам больше лимита
- zip rc=16 «cannot update a split archive» = коллизия имени архива: в 14/Акты ГИКЭ два разных файла с одинаковым именем «1.31. Акт ГИКЭ…» (в подпапках 1.31 и 1.16, версии отличаются на 9.7 КБ) — второй набор назван «дубль из 1.16», Максиму стоит разобраться, какая версия верная
- Скрипты и логи на VM 108: `/tmp/zip-opyt.sh|.log` (v1), `/tmp/repack.py`, `/tmp/repack.log` (v2)
#niikn #nextcloud #закупки