forget в отличие от ротации rsnapshot, как rclone --bwlimit не конфликтует с CI и какой запас по диску оставить для ночного снапшота.
Три ловушки до первой стабильной ночной серии
Первая ловушка — путаница между restic (дедуплицирующий repository со снапшотами) и rsnapshot (локальная ротация через hardlink): они решают разные задачи и стоят на разных уровнях стека. Вторая — отсутствие --bwlimit и параллельные потоки --transfers, которые в пике задавливают канал и интерактивный SSH/VNC. Третья — запуск prune в неудачное окно, когда CI уже захватил build lock на запись и держит inode под Derived Data.
- Подмена ролей инструментов: rsnapshot хорош как локальная страховка, но не заменяет дедупликацию и шифрование repository restic в S3.
- Полоса без потолка: rclone без
--bwlimitи restic с дефолтными потоками легко съедают аплинк на узле под нагрузкой. - forget без plan: агрессивный prune без чек-листа удаляет нужные снапшоты или блокирует repository на часы; политику нужно зафиксировать заранее.
Профиль межрегионального кластера и поведение rsync для артефактов CI разобраны в материале о rsync, блокировках и водяных знаках 1 ТБ/2 ТБ; общую логику build lock и аффинити Nomad — в матрице Nomad с build lock.
Топология бэкапа: restic, rclone и rsnapshot — три уровня, не три копии
Цель — не выбрать «один правильный» инструмент, а развести их по уровням и не путать repository restic с зеркалом rclone. Матрица фиксирует роль и адресата на узле Mac mini M4 в clustervps.
| Инструмент | Источник | Цель | Дедупликация | Когда применять |
|---|---|---|---|---|
| restic | Каталоги проекта, конфиги CI, артефакты | S3-совместимый restic repository |
Да, на уровне chunk + шифрование | Главный путь снапшотов в объектное хранилище |
| rclone | Подписанные образы, сборки, релизные пакеты | Бакет S3, отдельный от restic repository | Нет, прямая синхронизация объектов | Большие неизменяемые артефакты, копия наружу |
| rsnapshot | Локальный том на узле | Локальный том той же машины | Hardlink-ротация по интервалам | Быстрый локальный откат, не замена облака |
Лимиты полосы и параллелизм: исполняемая таблица параметров
Фиксируйте параметры в runbook и держите их под контролем версий рядом с launchd-планами на каждом узле кластера.
| Команда | Лимит полосы | Параллелизм | Chunk / packsize |
|---|---|---|---|
restic backup |
--limit-upload 12500 (≈100 Мбит/с) |
--read-concurrency 2 |
--pack-size 32 (МБ) |
rclone copy |
--bwlimit 100M:200M (день:ночь) |
--transfers 4 --checkers 8 |
--s3-chunk-size 64M --s3-upload-concurrency 4 |
restic prune |
Без аплоада, локальная нагрузка | --max-repack-size 50G |
Используйте окно вне build lock |
rclone расписание --bwlimit "08:00,20M 02:00,200M" позволяет автоматически открывать ночное окно и сжиматься днём — без перезапуска демона и без ручных правок профиля.Политика хранения: restic forget вместо ротации rsnapshot
В отличие от rsnapshot, где интервалы (hourly/daily/weekly) задаются в rsnapshot.conf и зависят от точности cron, у restic retention выражена через forget с явными ключами и обязательным prune. Ниже — рабочий шаблон, который держит управляемый объём в repository и не блокирует ночное окно.
restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 6 --keep-yearly 1— горизонт год, без хвостов.restic prune --max-unused 10%— выполняем отдельной задачей, послеforget, под собственным flock.restic check --read-data-subset 5%— еженедельная выборочная проверка целостности на staging-узле.restic stats --mode raw-data— фиксируйте динамику repository в дашборде вместе сdf -h.
Разведение с CI и build lock: ночное окно, флоки и приёмка диска
Бэкап и сборка не должны делить запись по очереди — иначе один длинный prune уронит SLA merge артефактов. Зафиксируйте окна, флоки и пороги диска как в матрице Watchman/Git и водяных знаков диска.
- Ночное окно:
02:00–04:30локально под restic backup,04:30–05:30под rclone,05:30–06:00под forget; prune — отдельным днём. - Build lock: бэкап читает с
flock --shared /var/lock/build.lock, prune захватывает эксклюзивный lock с длинным таймаутом и алертом на провал. - Водяные знаки: на томе 1 ТБ алерт ≥ 78%, soft-stop CI ≥ 86%; на 2 ТБ — 82% / 90%; ниже порога prune не запускается.
- Кэш restic:
--cache-dir /var/cache/resticна быстром APFS-разделе; держите запас не меньше 5–8% диска.
FAQ: что чаще всего ломает ночной бэкап
- Хватит ли только rclone без restic? Нет, если важна история и дедупликация: rclone делает зеркало, не снапшоты.
- Где держать ключ restic? В отдельном секрет-сторе с overlap при ротации, не в репозитории кода и не на резервируемом томе.
- Когда нужен второй регион хранилища? При требованиях RPO < 24 ч добавьте второй S3 как rclone-зеркало restic repository.
- Что делать при «repository is already locked»? Проверьте параллельный prune, аккуратно снимите блокировку
restic unlock, увеличьте таймаут flock. - Можно ли заменить rsnapshot на restic? Локально — да, но потеряете быстрый off-line откат через hardlink; оставьте оба слоя.
Итог: один runbook на узел и ровный ночной ритм
Когда restic владеет repository в S3, rclone отвечает за крупные артефакты с расписанием --bwlimit, а rsnapshot остаётся локальной страховкой, ночное окно перестаёт спорить с CI. forget и prune разнесены по дням, водяные знаки 1 ТБ/2 ТБ зашиты в алерты, а build lock и flock не дают двум инструментам писать в один и тот же путь. Тогда межрегиональный кластер Mac mini M4 в clustervps остаётся быстрым днём и аккуратно сходится в ночное окно бэкапа.
Подобрать узлы и регионы под бэкап-окно можно на странице тарифов и оформления; чек-листы расширения и доступа — в справочном центре.
Подберите узлы Mac mini M4 для restic и rclone в clustervps
Многоузловой кластер Mac mini M4 с дисками 1 ТБ/2 ТБ и каналом под ночной аплоад в S3. Связанные материалы: rsync и блокировки, Nomad и build lock, водяные знаки диска.