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

Копии и записи

Всё, что копирует BombVault, стоит в одном списке в разделе Резервные копии: контейнеры, виртуальные машины, наборы папок, флешка, наборы данных ZFS и автобэкап. Каждый из них — запись со своей страницей. Эта страница проводит по списку, по странице записи и её трём вкладкам и по настройкам, которые может иметь запись.

Список «Резервные копии» с выбранной плиткой «Контейнеры»: каждая строка показывает последние запуски полоской и одно состояние. Список «Резервные копии» с выбранной плиткой «Контейнеры»: каждая строка показывает последние запуски полоской и одно состояние.

Что сохраняет каждый раздел

Раздел Что сохраняется
Контейнеры Папка appdata и определение контейнера: образ, переменные, порты, метки и тома. Карточка Папки для резервного копирования на вкладке Настройки контейнера отмечает, какие именно папки охватывает копия, с живым счётчиком путей и списком того, что вы исключили. Данные, которые контейнер хранит вне Host Data, например в ixVolume TrueNAS или в проекте Compose в /opt, не копируются, и запуск называет пропущенные папки. Запуск называет и папку внутри Host Data, которой сейчас нет. Системные пути вроде /etc/localtime или сокета Docker данными не считаются.
Виртуальные машины Образы дисков, определение XML и UEFI NVRAM, с корректным выключением или живым снимком, по SSH. См. Копии виртуальных машин.
Flash Только Unraid. Вся USB-флешка (/boot): ОС, лицензия, конфигурация массива, общие ресурсы, сеть и конфигурация плагинов.
Автобэкап Собственный /config BombVault: база данных настроек, учётные данные мест назначения, пара SSH-ключей libvirt, ключ и закреплённые ключи хостов серверов ZFS и сертификаты, снятые через SQLite VACUUM INTO, чтобы база данных никогда не попадала в копию посреди записи.
Папки Любая папка на сервере как набор папок, например общий ресурс, ваши документы или фотоколлекция, с необязательными шаблонами исключений. У наборов папок есть расписания, хранение, внешние копии, проверки и учения по восстановлению, как и у всего остального.
Наборы данных ZFS Набор данных вместе с каждым набором под ним, прочитанный из одного снимка ZFS, чтобы все они были из одного момента, и сохранённый через restic как папка. Запись ZFS может также держать точную до блоков реплику на втором сервере ZFS. См. Наборы данных ZFS.

Любая копия идёт через restic, поэтому она инкрементная и дедуплицированная, и даже большие диски виртуальных машин не раздувают репозиторий. BombVault никогда не копирует, а значит, и не останавливает, собственный контейнер. Запуск можно безопасно остановить, потому что restic пишет свой снимок последним, так что прерванный запуск оставляет данные без ссылок и не оставляет снимка. Блокировка, оставшаяся после перезапуска посреди запуска, снимается, и запуск пробуется ещё раз, но только после того, как блокировку десять минут не обновляли.

Список

Плитки над списком выбирают вид, например Контейнеры или ZFS, и каждая плитка считает свои записи. Плитка выбирает, а не скрывает остальную часть страницы.

В каждой строке последние четырнадцать запусков записи показаны маленькими квадратами и одним состоянием, например Защищено, Не защищено, Отложено или Реплицируется. Всё остальное о ней лежит в информационной подсказке рядом с названием, а пока указатель стоит на строке, этот текст показывается в самой строке. Значок рядом с названием контейнера говорит, что после его последней копии контейнер пересоздали с другим образом, другими портами, переменными или томами. Он исчезает после следующей копии.

Три кнопки над списком сужают его:

  • Фильтры: по Расписание (Все, Запланировано, Приостановлен), по Резервное копирование (Есть копия, Без копий) и для Контейнеры и виртуальные машины по Установленные или Не установлен.
  • Сортировка: по имени, состоянию, IP, последней копии, размеру или расписанию. Каждое поле, кроме IP, сортируется в обе стороны, например Размер, сначала большие и Размер, сначала маленькие.
  • Поиск: по имени, образу или IP.

Записи, которые больше не установлены, но у которых ещё есть копии, стоят отдельно в разделе Не установлен (только резервные копии). Восстановите их или удалите их копии, чтобы освободить место.

Главное действие страницы плавает внизу справа: Создать копию всего сейчас запускает проход по всем включённым разделам. В Ещё лежит остальное:

  • Выбрать начинает выбор, см. ниже.
  • Найти резервные копии читает, что хранят места назначения, и заново строит по ним записи, например после чистой установки. У контейнера без собственных данных снимка нет, и он возвращается из определения, которое хранится рядом с репозиторием. Внешние копии перестроенных разделов затем ждут, пока вы не примете их копии как копии этого сервера, см. После перестройки.
  • Соединение ZFS с этим сервером открывает SSH-тест раздела ZFS, см. Наборы данных ZFS.
  • Реплицировать всё сейчас при выбранной плитке ZFS отправляет реплику каждой записи ZFS.

Тот же список на телефоне. Тот же список на телефоне.

Выбор нескольких записей

Выбирайте строки так же, как файлы в файловом менеджере: Ctrl+щелчок, Shift+щелчок, Ctrl+A или долгое нажатие на телефоне. Выбранная строка показывает галочку вместо значка, а панель над списком считает их и предлагает Создать копию выбранных, Приостановить расписание и Возобновить расписание, Выбрать все и Снять выбор. У каждой строки есть и своё контекстное меню с её действиями.

Выбранное копируется на сервере, запись за записью, так что продолжается, даже когда вы закрываете вкладку. Чтобы восстановить несколько записей вместе, воспользуйтесь страницей «Восстановление».

Два выбранных контейнера и панель над списком. Два выбранных контейнера и панель над списком.

Добавление папки или набора данных ZFS

Контейнеры, виртуальные машины и флешка появляются сами, как только их раздел включён в Настройки, Общие. Папки и наборы данных ZFS вы выбираете сами, потому что BombVault не может угадать, какие именно вы имеете в виду. Добавить открывает Что ещё должен копировать BombVault?:

  • Одна папка перечисляет общие ресурсы, которые нашёл BombVault, и принимает любую другую папку внутри Host Data. Дайте набору папок имя, например Documents. После первой копии имя фиксируется, потому что снимки хранятся под ним.
  • Набор данных ZFS перечисляет наборы данных этого сервера. Выберите тот, что стоит в начале того, что вы хотите копировать, см. Записи и дочерние наборы данных.
  • Конфигурация системы появляется на хосте без Unraid, чей Host Data достаёт до /etc. Это начальный набор папок /etc, который вы просматриваете перед сохранением.

Исключить запись

Запись, которую вы оставляете без копии намеренно, например тестовый контейнер, можно пометить Не копировать. Тогда она перестаёт считаться незащищённой, а Больше не исключать возвращает её. Приостановить расписание — более мягкий путь: запись выходит из расписания и полного бэкапа, получает серый значок Расписание приостановлено, а Создать резервную копию по-прежнему работает. Это тот же переключатель, что и В расписании на вкладке записи «Настройки».

Страница записи

Щелчок по строке открывает страницу записи. В шапке в одной строке названы запись и её состояние, например Последняя копия 3 часа назад или Отложено, следующая попытка в 03:15, и лежат её действия: Создать резервную копию, Восстановить и в разделе Ещё редкие, такие как Экспортировать новейшую копию, Экспортировать контейнер или Экспортировать ВМ, Связать с прежней записью, Удалить все резервные копии, Удалить запись и Удалить резервные копии везде. Кнопка «назад» слева от значка ведёт к списку. Пока идёт копирование, рядом с ходом выполнения стоит Отменить резервное копирование, а отменённый запуск записывается как отменённый, а не как неудавшийся.

Удалить резервные копии везде разом удаляет резервные копии записи во всех местах назначения, включая внешние копии. Окно показывает каждое место и сколько копий в нём лежит, а кнопка становится доступной, когда вы введёте имя записи. Место в режиме append-only сохраняет свои копии и сообщает об этом. Запись и её настройки остаются, так что запись, которую вы больше не копируете, такой и останется, а исчезнут только её резервные копии и их история.

На странице три вкладки: Резервные копии, Настройки и Проверка.

Вкладка «Резервные копии»

Эта вкладка перечисляет снимки записи, сначала новые, с полосой на каждый день. Копия, которая лежит в нескольких местах, показана один раз с отметкой каждого места назначения, которое её хранит. Щелчок по снимку восстанавливает его, а щелчок по месту внутри снимка восстанавливает именно оттуда.

  • Места назначения называет каждое место с копиями этой записи и их число. Внешние места читаются, только когда вы нажимаете Проверка, потому что перечисление облачного хранилища занимает время. Место, в которое запись больше не копирует, стоит как Только прежние резервные копии, и из него по-прежнему можно восстановить.
  • У каждого снимка есть меню: Добавить тег или Изменить тег, Сравнить с другой копией, которое перечисляет файлы, появившиеся, исчезнувшие или изменившиеся, Экспорт в tar, zip или собственный репозиторий restic и удаление только в одном месте.
  • Дампы базы данных контейнера стоят в отдельном списке со скачиванием, сохранением в папку и импортом.

Сколько снимков остаётся, задаёт место назначения, см. Как долго хранить.

Вкладка «Резервные копии» контейнера: полоса на каждый день и места назначения, которые хранят каждый снимок. Вкладка «Резервные копии» контейнера: полоса на каждый день и места назначения, которые хранят каждый снимок.

Вкладка «Настройки»

Каждая запись начинается с Расписание и место назначения:

  • В расписании включает запись в плановые запуски или исключает её.
  • Собственный план даёт этой одной записи свой план, см. Собственный план для одной записи. Без него она работает по плану своего раздела или в полном бэкапе.
  • Ряд кнопок, Локально и по одной на каждое внешнее место назначения, говорит, куда идут копии. Следует значению по умолчанию означает, что запись идёт туда же, куда её раздел, а щелчок по ней открывает Места назначения по разделам. См. Размещение для отдельной записи.
  • Репозиторий называет место, куда пишутся копии (Сохранено на). Это место фиксируется с первой копии, а копии можно менять в любой момент.

Карточки ниже зависят от вида записи:

Вид Карточки
Контейнер Папки для резервного копирования (какие подключённые папки копируются, с Пропускать папки кеша (CACHEDIR.TAG)), Шаблоны исключений, Остановить другие контейнеры, Команды до и после, База данных, Когда приложение занято, Обновлять после успешного резервного копирования, Снимок вместо остановки, Прежние названия
ВМ ВМ с Метод (Graceful (выключение) или Живой снимок) и Только изменённые блоки, см. руководство по копированию виртуальных машин
Набор папок Папка и Шаблоны исключений
Флешка Экспорт flash в ZIP, который записывает каждую копию флешки как обычный .zip в выбранную вами папку, за один шаг, чтобы программа синхронизации никогда не увидела файл наполовину. Если в копии флешки меньше, чем должно быть, последний ZIP остаётся на месте, и запуск экспорта об этом сообщает.
Набор данных ZFS дочерние наборы данных, контейнеры для остановки и команды вокруг снимка, Реплика и Проверить доступ к снимкам, см. Наборы данных ZFS

Настройки сохраняются сами, когда вы их меняете.

Вкладка «Настройки» контейнера с «Собственный план» в первой карточке. Вкладка «Настройки» контейнера с «Собственный план» в первой карточке.

Вкладка «Проверка»

  • Проверки показывает проверку восстановления, которая идёт после первой копии. Проверить восстановление запускает её снова на новейшей копии: BombVault восстанавливает выборку до 100 файлов и 256 МиБ во временную папку и заставляет restic прочитать каждый файл обратно и сверить с его хешами.
  • Тест запуска у контейнера восстанавливает новейшую копию в изолированную копию и запускает её: имя начинается с bombvault-test-, собственная внутренняя сеть Docker без опубликованных портов и без выхода в локальную сеть, 1 CPU и 2 ГиБ памяти. Тест проходит, когда копия сообщает, что здорова, отвечает на первом открытом порту или, если нет ни того, ни другого, продолжает работать. Оригинал никогда не затрагивается, а копия, её сеть и её данные потом удаляются, в том числе после перезапуска посреди теста. Контейнеры в сети хоста, привилегированные, с устройствами и те, которым нужен другой контейнер, помечаются как не поддающиеся проверке. Тест запуска в Настройки, Проверка, Автоматические проверки проверяет по одному контейнеру за запуск, начиная с того, который проверяли давнее всех.
  • Аномалии задают чувствительность этой записи и уровень уведомлений и показывают её открытые находки.
  • Размер по папкам показывает, что занимает место в новейшей копии и сколько из этого принесла последняя копия, по одному уровню за раз.
  • Последние запуски перечисляют последние запуски с началом, концом и длительностью. Щелчок показывает подробности.

Вкладка «Проверка» контейнера с открытым «Размер по папкам». Вкладка «Проверка» контейнера с открытым «Размер по папкам».

Шаблоны исключений

Карточка Шаблоны исключений принимает по одному шаблону в строке. Вводите пути так, как вы видите их внутри контейнера, например /config/Library/Application Support/Plex Media Server/Cache, или простое имя вроде .git, которое совпадает на любой глубине. Для набора папок вводите путь так, как его знает хост, например /mnt/user/data/cache. Предпросмотр под полем показывает, чему соответствует каждая строка, и предупреждает, если строка ничему не соответствует или исключила бы всё. Строка / или * или строка, называющая целую копируемую папку, игнорируется, так что исключение никогда не опустошит копию. Чтобы пропустить папку целиком, лучше снимите её отметку в Папки для резервного копирования.

Для известных образов, таких как Plex, Jellyfin, Sonarr, Radarr, Immich и Nextcloud, карточка предлагает папки, которые приложение заполняет заново само, например кэши, журналы и миниатюры. Ничего не исключается, пока вы не нажмёте Исключить выбранное.

Та же карточка несёт предупреждения, которых сканирование папок увидеть не может. Например, Immich хранит свои альбомы, лица и даты в базе данных PostgreSQL в отдельном контейнере, поэтому файловая копия одного только контейнера Immich восстановит снимки без всего этого, а восстановление будет выглядеть удавшимся. Копируйте и контейнер с базой данных.

Дампы баз данных

Контейнеры PostgreSQL, MySQL и MariaDB, которые узнаёт BombVault, перед каждой копией выгружаются с работающего сервера в собственную точку восстановления рядом с файлами. Это охватывает официальные образы, PostGIS, TimescaleDB, pgvector, pgautoupgrade, образы баз данных Immich, образы MariaDB от linuxserver, yobasystems и jc21 и mysql-server от Oracle. Контейнер, который только похож на базу данных, получает ту же возможность, выключенную, пока вы её не выберете.

Дамп идёт прямо в репозиторий и никогда не записывается на диск. Учётные данные берутся из собственных переменных контейнера, включая секреты *_FILE, и никогда его не покидают. Карточка База данных на вкладке контейнера «Настройки» говорит, сохраняется ли папка данных при остановке, копируется ли на ходу или не сохраняется, и включает или выключает дамп для этого контейнера. Метка bombvault.dbdump=false делает то же самое и главнее карточки. Автоматические дампы баз данных в Настройки, Общие переключает это для всех сразу.

Неудавшийся дамп не проваливает копию. Он появляется как отдельный неудавшийся запуск с причиной и отправляет уведомление. Дампы никогда не загружаются обратно сами: скачайте один, обычный или сжатый, сохраните в папку или импортируйте в только что запущенную базу данных одним щелчком на вкладке Резервные копии. Как вернуть дамп без BombVault, см. Как вернуть дамп базы данных. Если дамп не удался, см. Дамп базы данных не удался.

Команды и другие контейнеры

  • Команды до и после выполняются внутри контейнера через sh -c, например чтобы сбросить кэш на диск. Команда перед копией, завершившаяся ошибкой, прерывает копирование. Команда перед копией, завершившаяся с кодом 75, вместо этого откладывает плановую копию, см. ниже.
  • Остановить другие контейнеры называет контейнеры, которые нужно остановить на время копирования этого, например его базу данных. Потом они запускаются снова в порядке depends_on из Compose, и по умолчанию каждый должен сообщить, что здоров, прежде чем запустится следующий. Ожидание и его тайм-аут лежат в Перезапуск после резервного копирования в карточке Порядок в Настройки, Расписание.
  • Контейнер, который делит пространство имён сети, PID или IPC с останавливаемым контейнером через --net=container: или network_mode: service: из Compose, останавливается и запускается вместе с ним, даже если его нет в списке, и запускается после контейнера, к которому присоединён. Перезапущенный контейнер получает новую сеть, а у контейнера, оставшегося работать в старой сети, был бы только loopback. Сам список остаётся таким, каким вы его задали. Если такой контейнер не удалось остановить, запуск сообщает, что у него нет сети, пока его не перезапустят. Это касается и собственного контейнера BombVault, который никогда не останавливает сам себя и не может быть в списке.
  • Контейнер, который потом не заработал снова, называется в запуске и в уведомлении, даже если сама копия не удалась.

Когда приложение занято

Копия останавливает свой контейнер, поэтому плановая может ждать, пока кто-то пользуется приложением, и сама пробовать снова. Карточка Когда приложение занято на вкладке контейнера «Настройки» настраивает это:

  • Проверка активности перед плановой копией спрашивает Plex, Jellyfin или Emby, смотрит ли кто-нибудь. Plex спрашивается с токеном из его собственного Preferences.xml, поэтому вводить ничего не нужно. Jellyfin и Emby принимают Ключ API, созданный на панели сервера в разделе API keys.
  • Не учитывать приостановленные сеансы через (мин) позволяет фильму, поставленному на паузу на ночь, перестать учитываться.
  • Копировать, если сервер не отвечает решает, что происходит, когда сервер спросить нельзя: если включено, копия запускается, и журнал об этом пишет. Если выключено, она ждёт, будто кто-то смотрит.
  • Ждать, пока контейнер отправляет данные нужно для приложений без такой проверки, например игрового сервера или загрузчика. Копия ждёт, пока контейнер отправил больше, чем Занят от (KiB/s), при любом замере за последние Тихо в течение (мин) минут.
  • Повторять каждые (мин), Пробовать только в окне времени с Пробовать между и Ждать не дольше (часов) задают, как идут попытки.
  • В конце ожидания либо сдаётся, и тогда копия показывается в Требует внимания с Повторить, либо Всё равно копировать.

Ждущая копия записывается как Отложено, янтарным, а остальной запуск продолжается. Обзор, список и запись показывают её со следующей попыткой, а оповещение о просрочке и состояние защиты ждут её до срока. Вы получаете одно уведомление, когда она отложена, и одно, когда она заканчивается, а не по одному на попытку. Попытка ждёт, пока идёт другая копия, а ожидание продолжается после перезапуска. Копия, которую вы запускаете сами, всегда идёт сразу, будь то Создать резервную копию, Повторить, выбор, API или MCP, а та, что проходит, заканчивает ожидание, которое было в ходе.

На вкладке контейнера «Настройки» есть и более старый, простой способ: Ждать, пока приложение простаивает с Ждать не дольше (часов). Копия начинается, как только приложение простаивает, что определяет карточка Простой перед копией в Настройки, Расписание. Участники стека Compose, которым пора в одном и том же запуске, ждут вместе, а ждущая копия не держит блокировку, поэтому остальные контейнеры идут вперёд.

Карточка «Когда приложение занято» контейнера Plex с настроенной проверкой активности. Карточка «Когда приложение занято» контейнера Plex с настроенной проверкой активности.

Пример: Plex ждёт, пока кто-то смотрит

Полный бэкап идёт каждую ночь в 03:00. Никто не должен видеть, как фильм останавливается из-за того, что Plex выключили ради копии, но копия всё же должна пройти до утра.

  1. Откройте Резервные копии, затем запись plex, затем её вкладку Настройки.
  2. В Когда приложение занято выберите в Проверка активности Plex. Вводить ничего не нужно.
  3. Задайте Не учитывать приостановленные сеансы через (мин) равным 30, чтобы фильм, поставленный на паузу в полночь, переставал учитываться в половине первого.
  4. Оставьте Копировать, если сервер не отвечает включённым.
  5. Задайте Повторять каждые (мин) равным 15.
  6. Включите Пробовать только в окне времени и задайте Пробовать между 22:00 и 06:00.
  7. Задайте Ждать не дольше (часов) равным 3, а В конце ожидания значением Всё равно копировать.

Что происходит в ночь, когда в 03:00 кто-то ещё смотрит: BombVault спрашивает Plex, находит идущий сеанс и записывает копию как Отложено со следующей попыткой в 03:15. Остальные контейнеры запуска копируются как обычно. Когда фильм заканчивается в 04:10, попытка в 04:15 находит Plex свободным и копирует его, а ожидание заканчивается одним уведомлением. Если бы фильм ещё шёл в 06:00, ожидание дошло бы до конца и Plex всё равно был бы скопирован, так что его копии никогда не отстают больше чем на три часа.

Для собственной проверки сделайте так, чтобы Команда перед копией завершалась с кодом 75, пока приложение занято, например [ "$(cat /tmp/players)" = 0 ] || exit 75. Больше признаков и решений в разделе Устранение неполадок.

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

restic остаётся движком, но экспорт даёт вам копию, которой не нужны ни BombVault, ни restic.

  • Экспортировать контейнер и Экспортировать ВМ в разделе Ещё на странице записи пишут копию в том виде, как она есть сейчас, рядом с репозиторием: копируемые папки контейнера и его шаблон Unraid или образы дисков виртуальной машины и её определение, которые восстанавливаются через virsh define.
  • Экспорт у снимка записывает сохранённую копию в папку экспорта на сервере как tar, zip или собственный репозиторий restic и может взять один снимок или все. Копия флешки и автобэкап содержат ключи, поэтому для их экспорта нужны пароль для входа и вход на самом экземпляре.

По умолчанию экспорты — обычные файлы. Шифровать экспорты с помощью age в Настройки, Система запечатывает их, включая ZIP флешки, для перечисленных вами получателей, каждый из которых открытый ключ age или открытый ключ SSH. Позже вы расшифровываете их вне сервера соответствующим закрытым ключом. Если шифрование включено, а допустимого получателя нет, экспорт завершается понятной ошибкой и никогда не записывает обычные файлы.

Что рассказывает запуск

  • Время. Каждый запуск показывает начало, конец и длительность, а у каждой записи есть свои Последние запуски.
  • Почему копия была медленной. Пока идёт копирование, BombVault следит, насколько заняты процессор, диски и сеть. Когда копия занимает намного дольше обычного и что-то одно явно упёрлось в предел, запуск об этом говорит, например «Целевой диск disk1 был занят на 98%». Иначе он ничего не говорит.
  • Ход проверок и очисток. Журнал активности и карточка Проверить резервные копии показывают, сколько restic уже сосчитал, например 12 из 47 пакетов, с оставшимся временем этого шага, когда данных достаточно для оценки.
  • Файлы, которые не удалось прочитать. Копия, которая прошла, но что-то пропустила, окрашивает свою строку в оранжевый и называет, что пропущено.