Перейти к содержанию

Возможности

BombVault прост по умолчанию и глубок, когда это нужно. Интерфейс показывает только самое необходимое, пока вы не переключите переключатель Простой вид / Расширенный вид. Эта страница группирует полный набор возможностей.

Область резервного копирования

Контейнеры, у каждого свой переключатель расписания, порядок копирования и своя история.

Контейнеры, у каждого свой переключатель расписания, порядок копирования и своя история.

Что Что сохраняется
Контейнеры Docker Каталог appdata плюс определение контейнера (образ, переменные окружения, порты, метки, тома). По умолчанию весь каталог appdata; Выбрать папки на контейнере точно отмечает, какие папки входят в копию, с живым подсчётом путей, списком того, что вы исключили, и переключателем Пропускать папки кеша для каждого корня (CACHEDIR.TAG).
Виртуальные машины KVM / libvirt Образ(ы) диска VM, определение XML и UEFI NVRAM (корректное выключение или живой снимок, через SSH). Живые снимки автоматически откатываются к корректной резервной копии, если снимок не удаётся создать, поэтому резервное копирование VM никогда не завершается просто ошибкой. При включённом Только изменённые блоки работающая ВМ с дисками qcow2 читается через контрольные точки libvirt, поэтому копия читает только блоки, записанные после предыдущей, а каждый снимок по-прежнему сам восстанавливает весь диск. Диски на томах ZFS (zvol) передаются через zfs send по тому же SSH-соединению, поэтому VM, чьи диски являются zvol, сохраняется как одна VM. Состояние проброшенного vTPM сохраняется рядом с NVRAM, если в XML-определении VM указан его путь. Эмулированный vTPM, который TrueNAS настраивает для гостевых Windows 11, этот путь не публикует, поэтому держите ключ восстановления такой гостевой системы под рукой. См. руководство по резервному копированию VM.
Unraid flash Вся USB-флешка (/boot): ОС, лицензия, конфигурация массива, общие ресурсы, сеть и конфигурация плагинов. Восстановление, это загрузка .zip в один клик, и оно никогда не перезаписывает работающую flash.
Конфигурация приложения Собственный /config BombVault (база данных настроек, учётные данные внешней копии, SSH-пара ключей libvirt), снятый снимком с помощью SQLite VACUUM INTO, поэтому база данных в режиме WAL никогда не захватывается в момент записи. Восстанавливается через самоперезапуск, поэтому работающая база данных никогда не перезаписывается под открытым дескриптором.
Файлы и папки Именованные наборы файлов: любая папка на сервере (общий ресурс, ваши документы, фотоколлекция), каждая с необязательными шаблонами исключений для набора. Полный паритет с остальными доменами (расписания, хранение, внешняя копия, проверки целостности и учебные восстановления).
Наборы данных ZFS Набор данных вместе со всеми наборами под ним, прочитанный из одного снимка ZFS, так что все они относятся к одному моменту, и сохранённый через restic как папка: с дедупликацией, просмотром и восстановлением отдельных файлов. Новые дочерние наборы добавляются сами, любой можно исключить, а набор, который не удаётся прочитать, пропускается и называется по имени. По желанию контейнеры останавливаются или выполняется команда только на момент снимка. Тома (volumes) не входят: том VM сохраняется вместе с её VM, том без VM пока не сохраняется. См. Наборы данных ZFS.

Восстановление

Управляемое восстановление проводит свежую установку через аварию в одном месте.

Управляемое восстановление проводит свежую установку через аварию в одном месте.

  • Полное восстановление в один клик. Выберите снимок, нажмите Восстановить. Готово.
  • Единая хронология на элемент. Контейнеры, VM, наборы файлов, flash и конфигурация приложения перечисляют свои резервные копии как единую хронологию по каждому месту, где они лежат, репозиторию, в который они записаны, и каждой внешней цели. Резервная копия, скопированная во внешнее хранилище, появляется один раз, помеченная каждым местом. Внешние места читаются, когда вы их открываете, а удаление в одном месте сообщает, была ли это последняя копия.
  • Контейнеры переустанавливаются автоматически. Определение контейнера воспроизводится через Docker API, поэтому контейнер снова появляется во вкладке Docker в Unraid ровно таким, каким был.
  • GPU, лимиты и ссылки возвращаются. Восстановленный контейнер получает обратно свои лимиты ресурсов, драйвер логов, настройки DNS, устаревшие ссылки и свой GPU или среду выполнения (--gpus, --runtime=nvidia). На хосте без этого драйвера GPU или среды выполнения восстановление сообщает об этом и предлагает Восстановить без GPU и среды выполнения, в том числе после восстановления нескольких контейнеров или стека. Ссылка на контейнер, которого нет или который остановлен при запуске восстановленного, пропускается, и история запусков сообщает об этом.
  • Виртуальные машины пересоздаются автоматически. XML заново импортируется через SSH, поэтому VM снова появляется в VM Manager с повторно подключёнными диском и UEFI NVRAM, даже после того как VM была удалена. Найти резервные копии пересобирает запись, которая исчезла целиком (например после чистой установки).
  • Индивидуальное восстановление. Восстановите один контейнер, одну VM или один набор файлов, не затрагивая остальные.
  • Восстановление flash, это загрузка .zip. Оно передаётся в ваш браузер как flash-<id>.zip, готовый к загрузке в создатель USB Unraid. Работающая /boot никогда не затрагивается.
  • Плагины по одному. Страница Flash показывает плагины из каждой копии флешки с версией и размером и возвращает один плагин на работающую флешку: его файл .plg, его папку в config/plugins и файлы пакетов, которые есть в копии. Больше на флешке ничего не меняется. Unraid установит плагин при следующей загрузке или сразу через Plugins, Install Plugin.
  • Плановый экспорт flash в zip. После каждого резервного копирования flash можно опционально записать снимок в виде обычного .zip в выбранную вами папку (единственный перезаписываемый flash-latest.zip или скользящая история). Направьте его в папку Syncthing или rclone, чтобы ваша резервная копия загрузочной USB автоматически покидала сервер.
  • Предполётная проверка конфликтов. Прежде чем что-либо останавливается или удаляется, восстановление проверяет, что статический IP контейнера и опубликованные порты хоста свободны, и прерывается с ясным сообщением вместо того, чтобы оставить наполовину завершённое восстановление.
  • Проверки перед восстановлением. Каждое окно восстановления сначала проверяет, что репозиторий отвечает, что сохранённый ключ его открывает, что точка восстановления есть и что в месте назначения хватит места для того, что запишет восстановление. Кнопка запуска заблокирована, пока хоть одна проверка не пройдена, а (i) на кнопке говорит, какая.
  • План восстановления. Перед подтверждением окно показывает, что сделает восстановление по сравнению с текущим состоянием: новые, заменяемые и неизменные файлы, список по запросу, и файлы в месте назначения, которых нет в копии и которые остаются на месте. Для контейнеров и ВМ оно также сравнивает создаваемые настройки с работающими: образ и тег, порты, имена переменных и тома или память, vCPU, диски и сеть. restic вычисляет это пробным запуском по размеру и времени изменения, не читая файлы; очень большое дерево останавливается через 30 секунд и сообщает об этом. Восстановление стека проверяет и планирует каждого участника и называет того, кто его блокирует.
  • Общие папки. Восстановление на место называет каждый другой контейнер, запущенный или нет, чьё подключение достаёт до папки, в которую оно пишет, например «этот путь также использует nextcloud-db». Это предупреждение, оно ничего не блокирует.
  • Восстановление на уровне файлов. Разверните раздел Файлы снимка контейнера, отфильтруйте, отметьте любое число файлов и папок, затем восстановите выбранное на месте или в выбранную вами папку.
  • Восстановление набора файлов. Восстановите снимок набора файлов на месте (после явного подтверждения) или в выбранную вами папку, никогда молча. Выборочное восстановление работает и здесь.
  • Восстановление набора данных ZFS. Восстановите один набор данных элемента на место (после страховочного снимка ZFS, который остаётся, пока вы его не удалите), в папку или только выбранные файлы, либо все наборы резервной копии в папку. Набор данных никогда не откатывается и не заменяется.
  • Восстановление сохраняет состояние запуска. Контейнер или VM, работавшие в момент резервного копирования, возвращаются работающими; те, что были остановлены, остаются остановленными. Отметьте Оставить остановленным после восстановления, чтобы пересоздать без запуска.
  • Восстановление целого стека. Контейнеры из одного проекта Docker Compose группируются в панель Стеки. Восстановить стек… пересобирает каждого участника из его последней резервной копии, оставляя остановленным, а затем опционально запускает их в порядке depends_on.
  • Живой прогресс, отмена и индикация занятости. Долгое восстановление показывает живую полосу процентов и может быть отменено с подтверждением, учитывающим тип. Отменённое восстановление записывается как отменённое, а не как ошибка.
  • Управляемое восстановление. Отдельная вкладка Восстановление проводит свежую установку через сценарий аварии. См. Внешняя копия и восстановление.
  • Восстановление из репозитория другого BombVault. Одноразовая сессия только для чтения открывает репозиторий другого экземпляра BombVault с APP_KEY этого экземпляра, поэтому вы можете вытянуть контейнер с сервера A на сервер B, не трогая собственные настройки. См. Внешняя копия и восстановление.
  • Свойства ZFS возвращаются. Каждая копия ZFS сохраняет локально заданные свойства каждого набора данных, например сжатие, размер записи, квоту и чувствительность к регистру. Восстановление в новый набор данных создаёт его с ними, а восстановление в существующий показывает их и задаёт только по вашему желанию. См. Наборы данных ZFS.
  • Импорт из плагина Appdata.Backup. На странице Восстановление укажите BombVault папку резервных копий плагина. Каждый архив контейнера становится точкой восстановления своего контейнера с датой, когда плагин его создал. Уже импортированные архивы пропускаются, а сами архивы только читаются. Контейнеру сначала нужна одна резервная копия в BombVault, чтобы у восстановления было его описание. Хранение не удаляет импортированные точки восстановления, поэтому ненужную удалите сами.

Хранилище и планирование

  • Инкрементальные, дедуплицированные резервные копии через restic, поэтому даже большие диски VM не раздувают репозиторий.
  • Назначения: локальный путь или внешняя копия. Общие ресурсы SMB и серверы WebDAV (Nextcloud, ownCloud, SharePoint) прямо из формы в Настройки, Облачный доступ, rclone, без монтирования на хосте; NFS (смонтируйте экспорт в Unraid и укажите на него Путь резервных копий); нативные бэкенды restic без rclone (s3:..., rest:http://host:8000/repo, sftp:user@host:/repo) или любое удалённое хранилище rclone через rclone:<remote>:<bucket>/path. Все учётные данные хранятся в зашифрованном виде.
  • Целям SSH ничего не нужно устанавливать на дальней стороне. sftp: требует лишь SSH-сервера, поэтому голый Raspberry Pi (без Docker, без restic) работает как внешнее назначение. Ключи хоста закрепляются автоматически при первом контакте.
  • Внешняя копия (локальная + удалённая). Сохраняйте быструю локальную резервную копию и добавьте одну или несколько внешних реплик, реплицируемых через restic copy по принципу максимальных усилий (сбой внешней копии никогда не проваливает локальную резервную копию). У каждого домена своё расписание внешней копии, плюс кнопка Реплицировать сейчас.
  • Несколько внешних целей на домен. Каждый домен (контейнеры, VM, flash, config, наборы файлов и наборы данных ZFS) может реплицироваться сразу в несколько внешних назначений, а не только в одно. Добавляйте дополнительные цели на странице Внешнее, каждую со своим репозиторием, классом хранения S3, флагом append-only, хранением и бюджетом роста. Ваша существующая внешняя копия переносится как первая цель, поэтому ничего не меняется, пока вы не добавите вторую, и каждая цель домена реплицируется по расписанию внешней копии этого домена.
  • Именованные репозитории. Запишите места хранения резервных копий один раз в Настройки, Хранилище, Репозитории (локальный путь или любое удалённое хранилище restic со своим набором учётных данных), а затем выберите один из них как расположение элемента на его карточке. Строка показывает, сколько элементов на него ссылается, а репозиторий, который использует элемент или размещение по умолчанию, нельзя переместить или удалить, потому что BombVault никогда не перемещает уже записанную резервную копию.
  • Несколько наборов облачных учётных данных. Общие облачные учётные данные по умолчанию действуют везде, но любое назначение может вместо них выбрать именованный набор учётных данных (Настройки, Облачный доступ, Дополнительные наборы учётных данных), так что бакет Hetzner S3 и локальный сервер Garage работают бок о бок, каждый со своим ключом. Это относится и к внешним целям, и к пути резервных копий, который сам является удалённым репозиторием.
  • Места назначения. Внешнее место назначения настраивается один раз через мастер, который перечисляет сервисы хранения S3, ваш собственный сервер S3, ваш собственный сервер и общие ресурсы и все облачные хранилища, которые поддерживает rclone, с входом, проверкой соединения, выбором папки и честным словом о защите от удаления. Затем оно появляется кнопкой в каждом домене и элементе. См. Места назначения.
  • Размещение для каждого элемента. У каждой карточки контейнера, VM и набора файлов есть ряд кнопок, Локально и по одной на каждую внешнюю цель, и подсвеченные получают её резервные копии. Общему ресурсу, который уже лежит на NAS, больше не нужно попадать ещё и в B2. Расположение фиксируется с первой резервной копии, копии можно менять в любое время, а карточка сообщает, сколько объектов хранит элемент и соблюдается ли 3-2-1. См. Размещение для каждого элемента.
  • Размещение по умолчанию. Одна строка на домен задаёт, куда записываются новые элементы и в какие цели копируются элементы без собственного выбора. Изменение не переносит ни одной резервной копии и заранее сообщает, какие цели приобретают или теряют элементы.
  • Ручной порядок резервного копирования. Задайте точный порядок, в котором резервируются ваши контейнеры, на панели порядка резервного копирования на странице Контейнеры. Запланированные и множественные запуски следуют ему; любой контейнер, оставленный без порядка, сохраняет прежнее поведение наибольшей просрочки, а резервное копирование одного контейнера не меняется.
  • Настраиваемое хранение: keep-last / ежедневные / еженедельные / ежемесячные / ежегодные, очищаемые автоматически после каждой резервной копии, задаваемые для каждого источника (и локально, и внешне в Настройки, Хранение, чтобы можно было хранить внешние копии дольше как архив). Каждый источник может также следовать своим правилам, локально и на внешней копии (Правила хранения по источникам), например 7 ежедневных копий для контейнеров, которые меняются каждый день, и меньше для редко меняющихся VM.
  • Сжатие для каждого репозитория: Выкл., Автоматически (значение restic по умолчанию) или Максимально, задаётся в Настройки, Хранилище для каждого пути резервных копий и каждого именованного репозитория и в Настройки, Внешнее для каждого внешнего назначения. Резервное копирование, внешние копии и очистка пишут с ним, а набор восстановления его называет, чтобы обычный restic мог и дальше писать так же.
  • Планирование по доменам (ежедневно / еженедельно, включая многодневные наборы / каждые N дней / необработанный cron), всё редактируется в одном месте в Настройки, Расписания. Отдельный контейнер, VM, набор папок или элемент ZFS может иметь собственную периодичность, а Каждые N дней работает также для учебного восстановления, теста на подделку и еженедельной сводки.
  • Ждать, пока приложение простаивает. Контейнер может заставить свою запланированную копию ждать, пока приложение занято, не дольше заданного числа часов, и запускать её, как только приложение простаивает. Медиасервер простаивает, когда не ведёт стриминг, любой другой контейнер, когда его CPU и трафик несколько минут остаются ниже пределов из Настройки, Расписания (в сети хоста учитывается только CPU). Ожидающая копия видна в журнале активности и на контейнере с причиной и сроком. Она не держит блокировку, поэтому остальные контейнеры идут дальше. Ручные копии никогда не ждут. Участники compose-стека, чья очередь в одном запуске, ждут вместе, а ожидание после перезапуска продолжается со своим сроком. Если выключить контейнеры, все ожидающие копии отменяются, а если выключить их расписание, отменяются те, что задержали его запуски. Меньшее число часов сокращает и уже начатое ожидание.
  • Ограничения пропускной способности внешней копии. Ограничьте скорость выгрузки/загрузки restic, чтобы репликация не насыщала ваш WAN.
  • Сначала стриминг. Пока медиасервер вроде Plex, Jellyfin или Emby ведёт стриминг, внешние копии загружаются с пониженным лимитом и возвращаются к обычному через несколько минут после окончания потока. BombVault читает исходящий трафик медиасерверов из Docker. REST, S3, B2, Azure, Google Cloud, Swift и rclone по HTTP замедляются прямо во время копирования; SFTP и локальные или подключённые папки получают пониженный лимит на следующем шаге копирования. Медиасервер в сети хоста измерить нельзя. В Настройки, Внешнее.
  • Холодный и архивный класс хранения (S3). Для нативного внешнего репозитория S3 вы можете выбрать класс хранения, ограниченный уровнями, читаемыми для восстановления (Standard, Standard-IA, One Zone-IA, Intelligent-Tiering, Glacier Instant Retrieval), поэтому архивное ценообразование никогда молча не ломает восстановление. Уровни глубокого архива, которым сначала нужна асинхронная разморозка (Glacier Flexible, Deep Archive), намеренно исключены. Только нативные бэкенды S3; удалённые хранилища rclone задают свой класс в конфигурации rclone.
  • Папки резервных копий остаются копируемыми за пределы машины. После каждой резервной копии BombVault ослабляет права дерева локального репозитория до каталогов 0755 / файлов 0644 (репозитории зашифрованы, поэтому ничто не раскрывается), чтобы пользователь синхронизации не под root через SMB не оказался заблокирован. Определения восстановления живут внутри каждого репозитория, поэтому скопированная папка репозитория полностью самодостаточна.

Обзор, проверка и мониторинг

  • Пауза прямо на карточке. У каждой карточки контейнера, VM и набора папок есть Приостановить расписание, которое убирает элемент из расписания и из Backup Everything, и Возобновить расписание, чтобы вернуть его. Кнопки переключают тот же выключатель, что и Включить в расписание, поэтому они всегда согласованы. Элемент на паузе получает серый значок Расписание приостановлено, а Создать резервную копию по-прежнему работает.
  • Состояние защиты (RPO). Панель показывает зелёный / жёлтый / красный индикатор по каждому домену, сравнивая последнюю успешную резервную копию с её расписанием, поэтому просроченная резервная копия становится красной, а не прячется в журнале.
  • Тепловая карта состояния резервных копий. Календарь в стиле вкладов GitHub с ежедневными результатами резервного копирования по каждому домену, с переключателем Контейнеры / Виртуальные машины / Flash / Автобэкап / Папки.
  • Тайминг запусков повсюду. Каждая запись истории запусков читается как начало, конец (длительность), а у каждого контейнера и VM есть свой список Последние запуски на его странице.
  • Панель, которую можно перестроить. Включите режим настройки, чтобы перетащить карточки в нужный вам порядок и скрыть ненужные. Раскладка сохраняется для каждого браузера.
  • Размер репозитория и тренд дедупликации. Текущий размер репозитория, коэффициент дедупликации и число снимков по каждому домену, со спарклайном роста хранилища.
  • Учебные восстановления для проверки. BombVault периодически доказывает, что ваши резервные копии восстановимы (restic check --read-data-subset, ограниченно), и показывает бейдж Восстановимость подтверждена по каждому домену.
  • Проверка восстановления после первой копии. Когда первая резервная копия элемента готова, BombVault восстанавливает из неё выборку (до 100 файлов и 256 МиБ) во временную папку внутри папки восстановления, заставляет restic перечитать каждый файл по его хешам и сравнивает размеры с копией. Для файла, слишком большого для выборки, например диска ВМ, вместо этого перечитываются первые 64 МиБ. Карточка элемента показывает результат, сбой приходит уведомлением, а Проверить восстановление запускает ту же проверку последней копии в любой момент. Следующие копии её не повторяют.
  • Тест запуска. Проверка байтов не показывает, что приложение снова заработает. Тест запуска на карточке контейнера восстанавливает последнюю копию в изолированную копию и запускает её: имя начинается с bombvault-test-, собственная внутренняя сеть Docker без опубликованных портов и без выхода в LAN, 1 CPU и 2 ГиБ памяти, данные во временной папке внутри папки восстановления. Тест пройден, когда проверка здоровья контейнера сообщает об исправности, без неё когда первый открытый порт отвечает изнутри этой сети, а без обоих когда контейнер продолжает работать. Исходный контейнер никогда не останавливается и не изменяется, а копия, её сеть и данные удаляются после теста, даже если BombVault перезапустится посреди него. Контейнеры в сети хоста, привилегированные, с устройствами и зависящие от другого контейнера показаны как непроверяемые. Включите Тест запуска в плановых проверках восстановления, чтобы за каждый запуск проверялся один контейнер, начиная с того, что проверялся давнее всех. Результат виден на карточке и на панели. Копия не несёт ни одной метки оригинала и работает без capabilities, параметров безопасности, sysctl и cgroup parent, которые добавляет оригинал. Контейнер, которому они нужны, не проходит тест, и в результате указано, без чего работала копия.
  • Самовосстанавливающиеся операции. Доказуемо осиротевшая блокировка restic (оставленная перезапуском в середине операции) принудительно снимается и один раз повторяется, автоматически. Хранение устойчиво к идентичности (очищается по каждому элементу, невосприимчиво к изменениям путей или хоста), а сбой хранения отправляет уведомление.
  • Предупреждения, которых не видит сканирование папок. Помощник исключений отвечает на вопрос о размере. Некоторые из самых дорогих ошибок резервного копирования с размером не связаны, поэтому он также содержит предупреждения о том, как конкретное приложение хранит свои данные. То, ради которого он существует: Immich хранит альбомы, лица и даты каждой фотографии в базе данных PostgreSQL, которая работает в отдельном контейнере, поэтому файловая резервная копия контейнера Immich восстанавливает фотографии без всего этого, и восстановление выглядит удачным. Предупреждение показывается независимо от того, предлагается ли какое-либо исключение, в том числе на контейнере, у которого ничего не выбрано для сканирования, потому что оно верно в любом случае.
  • Без резервной копии (покрытие). Карточка на Панели, которая называет всё на сервере, что не покрывает ни одна автоматическая резервная копия, с причиной для каждого: вообще не добавлено в BombVault, есть, но не включено в расписание, собственное расписание выключено или расписание нигде не включено. Индикатор защиты над ней отвечает на другой вопрос, а именно, выполнились ли вовремя те резервные копии, которые запланированы, и он не видит контейнер, который никто никогда не настраивал: его нет ни в одном списке и ни в одной ошибке, поэтому ради него ничего не становится жёлтым. Контейнеры читаются из живого списка Docker, а не из собственных записей BombVault, потому что элемент без записи и есть тот, который нужно назвать. Тип резервных копий, который вы выключили, полностью исключается из подсчёта, поскольку это был ваш выбор.
  • Предпросмотр хранения. Панель рядом с настройками хранения показывает, что следующий запуск собирается удалить, до того как это произойдёт: по репозиториям и по элементам, с названными точками восстановления. Она не берёт блокировку репозитория и ничего не меняет, поэтому отвечает даже во время резервного копирования. Если хранение выключено, она так и говорит, а не показывает пустой список, репозиторий append-only помечен как таковой (хранение там не выполняется вовсе), а недоступный репозиторий называется, а не пропадает молча. В Настройки, Хранение и для локальной, и для внешней политики, каждая со своим предпросмотром.
  • Аномалии. Каждая резервная копия контейнера, ВМ, набора папок, дампа базы данных, флешки и самокопии сравнивается с собственной историей этого элемента. Проверки смотрят на новые данные запуска в сравнении с наибольшими обычными объёмами последних копий и с обычной скоростью в час; на копию, которая заново сохранила большую часть данных, включая переименованные и переписанные файлы; на размер источника и число файлов, которые restic сообщает для каждого элемента и каждого дампа; на собственное время копирования restic; на серии сбоев и периодические сбои; на проверки восстановления, которые перестали проходить; и на свободное место локальных репозиториев, репозиториев SFTP и репозиториев rclone, прогнозируемое по росту репозитория. Элемент учится на своих первых 10 копиях, а почти пустой источник, перезапись большей части данных и сбои проверяются с самого начала. При обновлении история один раз считывается из сводок снимков, которые хранит restic 0.17, поэтому существующая установка не начинает с нуля. Чувствительность (Строгая, Сбалансированная, Мягкая) и минимальная важность, при которой отправляется уведомление, задаются глобально в Настройки, Целостность и меняются для отдельного элемента. Предупреждения закрываются сами, когда причина исчезла; критические находки о потерянных данных и заполняющемся диске остаются, пока вы их не подтвердите, а подтверждённая находка не сообщается снова, пока её причина хотя бы раз не исчезнет. Отметить как ожидаемое делает новый уровень нормой после 10 копий, но никогда не отключает проверку почти пустого источника, а после изменения выбора история элемента сама начинается заново. Пока источник почти пуст, сильно уменьшился или копия заново сохранила большую часть данных, хранение оставляет старые копии этого элемента, пока вы не подтвердите находку или не отметите её как ожидаемую, а находка ссылается на последнюю хорошую копию. Уведомление уходит один раз за эпизод, а сбои и проверки восстановления, которые уже уведомляют сами, не сообщаются дважды. Чего функция не делает: у репозиториев S3, B2 и REST нет данных о свободном месте, на пользовательской общей папке Unraid свободное место относится ко всему массиву, а у копий, сделанных до restic 0.17, нет истории размеров. Элементы ZFS тоже проверяются, набор данных за набором: у каждого набора данных дерева своя история, набор, который опустел или больше не читается, считается потерей данных, и сохраняются только старые копии этого набора. Как элемент ZFS проверяется по каждому набору данных, описано в разделе Наборы данных ZFS, а ассистент может прочитать открытые аномалии через сервер MCP. Находка о размере или числе файлов источника датируется первой копией, в которой она появилась, а Сравнить с предыдущей копией показывает папки, где файлы исчезли, появились или изменились, с пометкой, когда почти всё лежит в поисковом индексе, кеше или миниатюрах, которые приложение само строит заново.
  • Рекомендуемые исключения для приложений. Для известных образов (Plex, Jellyfin, Emby, Sonarr, Radarr, Lidarr, Readarr, Prowlarr, Immich, Nextcloud, PhotoPrism и Tautulli от linuxserver, hotio, binhex или официального издателя) Помощник исключений предлагает папки, которые приложение само заполняет заново: кэши, логи, изображения предпросмотра и постеры. Каждый пункт говорит, что в нём лежит, любой можно выключить, и ничего не исключается, пока вы не нажмёте Исключить выбранное.
  • Пакет для поддержки. ZIP без секретов в один клик для отчёта об ошибке: проверка интеграции с хостом, ваша конфигурация без единого секрета, последние запуски, что запланировано дальше, и свежий журнал. Он также содержит, как прошёл последний дамп каждой базы данных, элементы ZFS с точками монтирования, которые видит контейнер, открытые аномалии и сколько существует ключей MCP (но никогда их имена). Пароли, токены, конфигурация rclone, учётные данные уведомлений и любой пароль, встроенный в расположение репозитория, удаляются, и пакет сам сообщает об этом в своём манифесте, потому что файл для поддержки никогда не должен быть принят за резервную копию конфигурации. По той же причине, что и набор для восстановления, он требует пароль входа. Журнал в нём охватывает вывод этого контейнера с момента его последнего запуска; при сбое, который перезапустил контейнер, смотреть нужно в docker logs.
  • Набор для восстановления ключа шифрования. Загрузка в один клик мастер-ключа, производного пароля restic и точных расположений репозиториев и команд, чтобы вы могли восстановить без работающего BombVault. См. Внешняя копия и восстановление.
  • Экспорт и импорт ваших настроек. Карточка Экспорт / импорт настроек на странице Настройки, Система записывает всю вашу конфигурацию (настройки доменов, внешние цели, расписания, хранение, уведомления) в переносимый файл JSON, поэтому переезд на новую машину или клонирование установки не означает повторный ручной ввод всего. Вы выбираете, включать ли учётные данные внешней копии и уведомлений; с ними файл так же чувствителен, как ваш набор для восстановления. Импорт показывает предпросмотр и запрашивает подтверждение, и он никогда не трогает ваши данные резервных копий или историю.
  • Уведомления. Webhook (Discord / Slack / Gotify / ntfy), Matrix, Healthchecks.io, эл. почта (SMTP), self-hosted сервер Apprise API и собственная система уведомлений Unraid. Политика на каждую резервную копию: никогда / при сбое / всегда. Плановый запуск множества элементов может отправить одну сводку N из M успешно. Healthchecks получает полный жизненный цикл (/start, затем успех или /fail) всякий раз, когда задан URL.
  • Еженедельная сводка. Одно сообщение в неделю по тем же каналам: число запусков, сколько новых данных резервных копий поступило, актуальна ли внешняя копия и основные сбои. По умолчанию выключена, своя периодичность задаётся в Настройки, Уведомления, так что о спокойной неделе тоже приходит сообщение.
  • Prometheus /metrics. По желанию (по умолчанию отключено, необязательный bearer-токен) для Grafana или Uptime Kuma. Публикует статус резервных копий, размеры и метки времени, без секретов или путей в метках.
  • HTTP API, Home Assistant и mDNS. Скрипты и дашборды получают API по адресу /api/v1 с именованными токенами, только для чтения или с правом запускать резервное копирование. Home Assistant находит BombVault через MQTT discovery как устройство с датчиками и, если вы это разрешите, кнопкой резервного копирования для каждого домена. А в сети BombVault объявляет себя как bombvault.local. См. API и интеграции.
  • Свободное место и недели до заполнения. Локальные репозитории, репозитории SFTP и назначения SMB или WebDAV, которые сообщают свободное место, показывают его и сколько недель осталось при текущем росте. Репозитории S3, B2 и REST пишут "Свободное место неизвестно", поскольку эти бэкенды его не сообщают.
  • Размер по папкам. В разделе «Резервные копии» контейнера, ВМ или набора папок пункт Размер по папкам показывает, какие папки и файлы занимают место в самой новой копии и сколько из этого последняя копия принесла нового или изменённого, по одному уровню за раз. BombVault читает это из индекса репозитория, не читая сами файлы, и после первого открытия обновляет после каждой копии.
  • Почему копия шла медленно. Пока идёт копия, BombVault следит за загрузкой процессора, дисков и сети. Если копия длится намного дольше обычного и одна вещь явно упёрлась в предел, запуск сообщает об этом, например «Целевой диск disk1 был загружен на 98%» или «BombVault использовал 100% лимита процессора своего контейнера». Иначе он ничего не сообщает.
  • Изменён после последней копии. Контейнер, который после последней копии пересоздали с другим образом, портами, переменными или томами, получает отметку рядом с именем. Его (i) перечисляет изменения, переменные только по имени. Это лишь заметка, она исчезает после следующей копии.

Защита от программ-вымогателей

  • Неизменяемая (append-only) внешняя копия. Пометьте внешний репозиторий как append-only, чтобы программа-вымогатель или скомпрометированный хост не могли удалить или переписать ваши резервные копии. Дальняя сторона (restic/rest-server в режиме --append-only) обеспечивает это; BombVault лишь проверяет и никогда не показывает зелёный только на основании заявления о конфигурации.
  • Тест на подделку. BombVault периодически доказывает гарантию append-only, фактически пытаясь выполнить удаление в отношении внешнего репозитория (нацеленное на несуществующий объект): отказ означает защищено, принятие означает не защищено. Неубедительный результат никогда не переворачивает сохранённый вердикт.
  • Управляемая настройка внешней копии. Мастер проводит вас от выбора бэкенда через готовый к вставке фрагмент развёртывания rest-server, тест соединения, переключатель неизменяемости и стратегию хранения.
  • Учебные DR (внешние). Восстановите реальную цель из внешнего репозитория в одноразовую песочницу, проверьте её файл за файлом и байт за байтом, затем очистите. См. Внешняя копия и восстановление.
  • Оценочная карта защиты от программ-вымогателей. Карточка на Панели с зелёной / жёлтой / красной позицией по каждому домену и чек-листом с отметками возраста; каждая красная строка ведёт прямо к исправлению. Она становится зелёной только на проверенных фактах.
  • Тревога бюджета роста. Для неизменяемой внешней копии (где старые снимки намеренно никогда не очищаются) задайте бюджет размера и получайте оповещение, прежде чем он выйдет из-под контроля.
  • Сопряжение по фразе. Экземпляры объединяются в одну группу двенадцатью словами: создайте фразу на одном, введите её на следующем. Участники в одной сети общаются напрямую, остальные через ретранслятор (проектный ретранслятор, собственный или никакой), и каждый вызов между ними защищён сквозным шифрованием. Группа переносит оценочные карточки страницы Экземпляры, предложения Mesh для внешней копии и то, что нужно получателю или источнику подтягивания, но никогда резервные данные и никогда APP_KEY. См. Внешняя копия и восстановление.
  • Страница Экземпляры. Включите Экземпляры в Настройках, и появится страница с карточкой для каждого экземпляра вашей группы, включая этот: его адрес, есть ли с ним связь, и состояние защиты каждого домена с последней резервной копией, тем же красным, жёлтым и зелёным, что показывает локальная Панель. Проверить сейчас просит участника проверить репозиторий одного домена. Ничто на этой странице не может запустить резервное копирование, восстановление или удаление на другой машине.
  • Внешняя копия через Mesh. Участник может через группу предложить своё внешнее хранилище другому участнику. Администратор другой стороны видит предложение на странице Экземпляры и принимает или отклоняет его; принятие создаёт обычный набор учётных данных и внешнюю цель. Этим путём передаются только данные для подключения, никогда данные резервных копий.
  • Панель получателя (принимающая сторона). На машине, которая принимает неизменяемые внешние копии от другого BombVault, включите переключатель Приёмник (Настройки), чтобы открыть вкладку Приёмник. Зарегистрируйте полученный репозиторий только для чтения (открытый паролем restic отправляющего экземпляра, который приходит через группу сопряжения), чтобы видеть его инвентарь снимков, сгруппированный по источникам, когда каждый источник в последний раз приходил, и запускать независимый restic check на принимающем оборудовании. Она оповещает вас, когда источник перестаёт отправлять в заданном вами окне (выключатель мертвеца) или когда проверка целостности не проходит. Строго только для чтения, поэтому она никогда не пишет в полученный репозиторий, и по умолчанию отключена. См. Внешняя копия и восстановление.
  • Подтягивание с другого экземпляра (забирающая сторона). Зеркальное отражение внешней репликации: вместо того чтобы эта машина отправляла свои снимки наружу, она забирает к себе чужие. Включите переключатель Подтягивание (Настройки), чтобы открыть вкладку Подтягивание на странице Экземпляры, выберите другой экземпляр из своей группы сопряжения и расположение его репозитория, затем укажите, какой вид резервных копий он содержит и как часто забирать. Его пароль restic приходит через группу, но никогда его APP_KEY. Дальней стороне больше ничего настраивать не нужно, и она не обязана быть запущенной. Исходный репозиторий только читается: он открывается для проверки пароля, перечисляется и указывается как источник копии, но никогда не инициализируется, не разблокируется, не очищается и не записывается. Каждая сторона хранит свои учётные данные, а источник rclone: отклоняется, потому что rclone обратился бы к нему через удалённые хранилища этого экземпляра. См. Внешняя копия и восстановление.

Обычные экспорты

  • Обычный экспорт контейнера. Кнопка Экспорт (обычный tar) для каждого контейнера записывает просматриваемую, не требующую инструментов копию рядом с репозиторием: <name>.tar.gz папок резервной копии плюс шаблон Unraid <name>.xml. Restic остаётся движком; это дополнительная удобная копия.
  • Обычный экспорт VM. У виртуальных машин тот же Экспорт (обычный tar): <name>.tar.gz образа(ов) диска плюс <name>.xml, восстанавливаемый с помощью virsh define плюс диск, без нужды в BombVault или restic.
  • Шифрование обычных экспортов (age). Экспорты находятся вне restic, поэтому по умолчанию они в открытом виде. Включите шифрование age в Настройках и добавьте одного или нескольких получателей (публичный ключ age или публичный ключ SSH). Каждый экспорт (.tar.gz контейнера и VM, их файлы-спутники .xml и ZIP flash) затем запечатывается для этих получателей, и вы расшифровываете его позже за пределами машины соответствующим закрытым ключом. В качестве правила безопасности при включённом шифровании и без заданного действительного получателя экспорт завершается ясной ошибкой вместо записи открытого текста.
  • Набор для восстановления тоже запечатывается. При той же включённой настройке набор скачивается как bombvault-recovery-kit.md.age. Он в текстовой форме ASCII-armor, а не двоичный, поэтому остаётся обычным читаемым текстом: его по-прежнему можно вставить в менеджер паролей или распечатать, ради чего набор и существует. Действует то же правило безопасности: при включённом шифровании и без пригодного получателя загрузка отклоняется, а не откатывается к выдаче мастер-ключа в открытом виде. Одно нужно сделать правильно, когда вы это включаете: чтобы открыть набор, нужен ваш закрытый ключ age, поэтому храните этот ключ там, где он не зависит от самого набора.

ИИ-ассистенты (MCP)

В BombVault встроен сервер MCP, через который ассистент вроде Claude Code или Claude Desktop может читать состояние резервных копий, покрытие, историю запусков, точки восстановления и текущую активность. С ключом, который это разрешает, ассистент может также запустить копирование одного элемента, одного домена или всего сразу и отменить копирования, которые запустил сам. Восстановление, удаление, prune и настройки остаются в веб-интерфейсе. Каждый клиент получает собственный ключ в Настройки, Интеграции, Сервер MCP; ключ показывается один раз, хранится только как отпечаток, и его можно в любой момент переименовать, заменить или отозвать. Запуски ограничены в час и на элемент, а защита хранения не даёт копиям ассистента вытеснить ваши собственные точки восстановления из политики "хранить последние N". Каждый запуск, сделанный ассистентом, помечается "через MCP" с именем ключа. См. Сервер MCP. Дампы баз данных и наборы данных ZFS входят в число элементов и точек восстановления, которые он читает, и он может вывести аномалии, замеченные BombVault.

Приложения и компаньоны

  • Приложение для Android. Все серверы вашей группы на телефоне, с журналом активности их всех на одном экране. Оно сопрягается с вашей группой по QR-коду и открывает каждый сервер уже с выполненным входом. См. Приложение для Android.
  • Принимающий сервер. Машина, принимающая внешние копии, может одним щелчком запустить rest-server в режиме append-only и предложить его другим экземплярам вашей группы, каждому со своим логином. См. Принимающий сервер.
  • Настройки, Приложения. Страница, которая начинается с приложения для Android, его APK для выпуска, на котором работает сервер, и QR-кода к нему, а затем идут карточки для каждого компаньона. Карточка ParleyPort предлагает его шаблон Unraid, копирует команду Docker, которая его запускает, и ведёт к его репозиторию и к настройкам ретранслятора в разделе Сопряжение. Карточка BombVault Widget предлагает его шаблон и репозиторий, а также устанавливает или удаляет плагин через SSH-соединение с хостом.
  • BombVault Widget. Плитка на панели Dashboard в Unraid с журналом активности BombVault и следующим запланированным запуском. Без SSH-соединения с хостом карточка даёт адрес .plg для установки в Plugins, Install Plugin, и удалить плагин там можно, как любой другой.
  • Встраиваемый журнал активности. Создайте токен только для чтения в Настройки, Интеграции, и вы получите адрес для любого дашборда, который показывает iframe, например Homepage, Organizr или Heimdall: маленькую страницу только с живым журналом активности. Токен даёт доступ к этому журналу и больше ни к чему, а Отключить сразу его отзывает. Встроенная страница доступна только на английском.

Прочее

  • Остановка идущей резервной копии. У каждой карточки, которая может запустить резервное копирование, пока запуск активен, рядом с полосой прогресса есть кнопка Отменить резервное копирование. Запуск записывается как отменённый, а не как неудачный. Остановка безопасна, потому что restic записывает снимок последним, и прерванный запуск оставляет только данные без ссылок и никакого снимка.
  • Резервное копирование многих сразу. Выберите несколько контейнеров и нажмите Создать копию выбранных. Пакет выполняется на стороне сервера, поэтому продолжает работать, даже если вы закроете вкладку или потеряете соединение. BombVault никогда не резервирует (и потому никогда не останавливает) собственный контейнер.
  • Браузер снимков со списком точек восстановления, удалением по каждому снимку и сворачиваемым деревом папок для восстановления на уровне файлов.
  • Обслуживание репозитория по доменам: Проверить (restic check), Разблокировать (снять зависшую блокировку) и Очистить (применяет политику хранения по запросу, когда она задана, иначе обычное освобождение места).
  • Прогресс проверки, проверок восстановления и очистки. Пока выполняется одна из них, журнал активности и карточка целостности показывают, докуда досчитал restic, например 12 из 47 пакетов, а когда данных для оценки достаточно, и оставшееся время этапа. Здесь restic считает пакеты, снимки и файлы индекса, а не байты, поэтому полоса показывает именно их; до первого подсчёта она движется без числа.
  • Автоматические дампы баз данных. Распознанные контейнеры PostgreSQL, MySQL и MariaDB (официальные образы, PostGIS, TimescaleDB, pgvector, pgautoupgrade, образы баз данных Immich, linuxserver, yobasystems и jc21 MariaDB, а также mysql-server от Oracle) выгружаются перед каждым резервным копированием с работающего сервера. Контейнеры, которые лишь похожи на базу данных, получают ту же настройку на своей карточке, выключенную, пока вы её не включите. Дамп течёт прямо в репозиторий и становится там отдельной точкой восстановления рядом с копией файлов; на диск он не пишется никогда. Учётные данные берутся из переменных самого контейнера, включая секреты *_FILE, и его не покидают. Каждая карточка показывает, сохраняется ли папка данных базы при остановленном контейнере, копируется ли на ходу, или не сохраняется вовсе. Неудачный дамп не роняет резервное копирование: он появляется как неудачный запуск с причиной и подсказкой, как это исправить, и отправляет уведомление. Дампы никогда не загружаются обратно сами. Скачайте дамп (как есть или сжатым), сохраните его в папку, импортируйте одним щелчком в только что запущенную базу или заберите его через CLI restic. Выключить его можно для отдельного контейнера, меткой bombvault.dbdump=false, или для всех контейнеров в Настройках. Обнаружение аномалий следит и за размером каждого дампа, а ассистент может вывести список дампов контейнера через сервер MCP.
  • Хуки до и после резервного копирования для каждого контейнера. Команды оболочки выполняются внутри контейнера (например сброс кэша на диск); неудачный пре-хук прерывает резервное копирование. Распознанные базы данных выгружаются автоматически, и хук для этого не нужен.
  • Остановка других контейнеров во время резервного копирования, с перезапуском, зависящим от работоспособности. Назовите зависимые контейнеры (например базу данных), которые нужно остановить, пока этот резервируется. После этого BombVault возвращает их в порядке depends_on из Compose и по умолчанию ждёт, пока каждый сообщит о работоспособности (или о работе, если у него нет healthcheck), прежде чем запустить контейнеры, которые от него зависят, поэтому зависимость вроде Pi-hole, базы данных или VPN-шлюза действительно поднята прежде сервисов, которым она нужна, вместо того чтобы те возвращались с connection refused. Ожидание ограничено тайм-аутом на каждый контейнер (120 секунд по умолчанию), поэтому медленный или никогда не работоспособный контейнер не может подвесить запуск; и ожидание, и тайм-аут живут в Настройки, Контейнеры (отключите ожидание для прежнего одновременного перезапуска). Тот же упорядоченный, зависящий от работоспособности перезапуск также оборачивает обновление образа после резервного копирования, поэтому в день, когда приходит обновление, зависимые удерживаются в остановленном состоянии на время пересоздания и возвращаются, с проверкой работоспособности, только когда оно завершено.
  • Шаблоны исключений для каждого контейнера. Перечислите подкаталоги, которые нужно пропустить внутри резервируемого тома, по одному в строке. Вводите пути так, как вы видите их внутри контейнера; живой предпросмотр показывает, во что разрешается каждая строка, и предупреждает, когда строка не исключит ничего.
  • Обновление после успешной резервной копии (расширенное, по умолчанию отключено). Включите это для контейнера, и BombVault загрузит новейший образ и пересоздаст его, но только когда действительно есть более новый образ, поэтому свежая точка восстановления всегда существует первой. Необязательные дополнения: уведомление на каждый обновлённый контейнер и очистка образов (базовый образ, разделяемый другими контейнерами, никогда не удаляется). После обновления BombVault также просит Unraid перепроверить статус обновления этого одного контейнера, поэтому устаревший баннер update available во вкладке Docker очищается сам, а не задерживается (обновления Unraid идут прямо через Docker API, поэтому его закэшированный статус, а на некоторых версиях закэшированный дайджест, иначе продолжал бы показывать баннер). Это по принципу максимальных усилий, никогда не влияет на резервную копию, по умолчанию включено и имеет переключатель в Настройках.
  • Восстановление в альтернативную папку для клонирования или инспекции.
  • Сравнение снимков и теги. Сравните два снимка, чтобы увидеть, что изменилось, и присваивайте снимкам теги, чтобы фильтровать их.
  • Что нового после обновления. Заметки о выпуске всплывают один раз на каждую новую версию, обслуживаются из заметок, встроенных в бинарник, поэтому диалог работает офлайн.
  • HTTPS из коробки (самоподписанный или свой собственный сертификат за обратным прокси).
  • Docker healthcheck. Контейнер сообщает о работоспособности/неработоспособности из собственного /api/health, поэтому инструмент авто-восстановления может перезапустить его, если движок когда-либо зависнет.
  • Тёмный/светлый интерфейс на 42 языках с выбором по флагу.
  • Настройки сохраняются сами. Переключите переключатель или покиньте поле, и изменение сразу записывается: элемент управления коротко вспыхивает, а если сервер отказывает, вздрагивает. Кнопка сохранения осталась в трёх местах, потому что сохранять их наполовину заполненными было бы небезопасно: поле конфигурации rclone, редактор набора учётных данных и пароль входа.
  • Тихие всплывающие сообщения. В Настройки, Общие можно приглушить рутинные подтверждения, и прерывать вас будут только сбои. Это задаётся для каждого браузера и не затрагивает уведомления.
  • Внешний вид на ваш вкус. Настройки, Внешний вид задаёт цвета (один акцентный или Режим радуги с палитрой из восьми), углы (круглые, мягкие или прямые) и анимацию (выключено, слабое, буйное или штормовое), и всё это запоминается для каждого браузера. Если система просит меньше движения, это всегда важнее.