Внешняя копия и восстановление¶
Внешние копии ждут после пересборки
Когда шаг 4 пересобирает записи без старых настроек, внешняя репликация этих доменов приостанавливается, пока не будет подтверждено значение по умолчанию для размещения. См. Размещение для каждого элемента.
Локальные резервные копии защищают вас от потерянного контейнера или неудачного обновления. Внешняя репликация и проверенный набор для восстановления защищают вас от потери всей машины, программ-вымогателей или пожара. Эта страница охватывает репликацию во внешнее хранилище, придание этой копии защиты от подделки, доказательство того, что вы можете восстановить, и восстановление, когда самого BombVault больше нет.
Внешняя репликация¶
Сохраняйте быструю локальную резервную копию и добавьте одну или несколько внешних реплик. Задайте репозиторий для каждого домена на странице Настройки, Внешнее. BombVault реплицирует туда новые снимки через restic copy по принципу максимальных усилий, поэтому сбой внешней копии никогда не проваливает локальную резервную копию. В такой схеме локальный репозиторий остаётся основным, а внешний служит репликой, но основной репозиторий домена вовсе не обязан быть локальным; о резервном копировании прямо в S3, rest-server и т. п. вместо репликации туда см. Удалённые основные репозитории ниже.
- Несколько внешних целей на домен. Каждый домен (контейнеры, VM, flash, config, наборы файлов и наборы данных ZFS) может реплицироваться сразу в несколько внешних назначений, а не только в одно, поэтому вы можете держать, например, rest-server на машине друга и бакет S3 параллельно. Добавляйте дополнительные цели в Настройки, Внешнее, каждую со своим репозиторием, классом хранения S3, флагом append-only, хранением и бюджетом роста. Существующая настройка одной внешней копии переносится нетронутой как первая цель, и каждая цель домена реплицируется по расписанию внешней копии этого домена.
- Расписание внешней копии для каждого домена (редактируется рядом со всеми остальными расписаниями в Настройки, Расписания): оставьте его пустым, чтобы реплицировать после каждой локальной резервной копии, или задайте частоту (например
weekly Sun 03:00), чтобы отправлять во внешнее хранилище реже, чем вы резервируете локально. Кнопка Реплицировать сейчас покрывает запуски по требованию. - Хранение внешней копии живёт в Настройки, Хранение, поэтому вы можете хранить внешние копии дольше как архив. Оставьте политику со всеми нулями, чтобы никогда автоматически не обрезать внешние снимки.
- Ограничения пропускной способности (Настройки, Внешнее) ограничивают скорость выгрузки/загрузки restic, чтобы репликация не насыщала ваш WAN.
- Индикатор репликации показывает, какой домен реплицируется, пока это происходит (на его странице и на Панели). Это активный индикатор, а не полоса процентов, потому что
restic copyне выдаёт машиночитаемого прогресса.
Восстановление из любого места
Каждый контейнер, VM, набор файлов, flash и конфигурация приложения перечисляют свои резервные копии как единую хронологию по всем местам, где лежит копия. Резервная копия, скопированная в B2, появляется один раз, помеченная каждым местом, которое её хранит. Восстановление берёт первое достижимое место, начиная с репозитория, в который записан элемент, и вы можете выбрать другое место для каждой строки. Внешние места читаются только когда вы их открываете. Удаление в одном месте сначала проверяет остальные и говорит, была ли это последняя копия.
Места назначения¶
Настройки, Внешнее начинаются с блока Места назначения: это места, куда попадают внешние копии, настраиваемые один раз для всех доменов. Затем место назначения появляется кнопкой в строке Размещение каждого домена и каждого элемента. Когда его отмечают для домена в первый раз, BombVault создаёт репозиторий этого домена в папке внутри него, например rclone:onedrive:BombVault/containers. У Flash, Автобэкап и наборов данных ZFS нет строки Размещение, поэтому в их внешнем разделе вместо неё предлагается Добавить из и название места назначения.
Добавить место назначения открывает мастер из пяти шагов:
- Куда сохранять бэкапы? Каждый сервис показан со своим логотипом, в четырёх группах: сервисы хранения с бакетами S3 (Backblaze B2, Wasabi, Cloudflare R2, Hetzner Object Storage, Amazon S3 и другие), ваш собственный сервер S3 (Garage, SeaweedFS, RustFS, Silo, Ceph, JuiceFS, Versity S3 Gateway), ваш собственный сервер и общие ресурсы (rest-server, Hetzner Storage Box, SFTP, SMB, WebDAV, смонтированный путь) и облачные хранилища (OneDrive, Google Drive, Dropbox, pCloud, Nextcloud и всё остальное, что поддерживает rclone). Для каждого указано, насколько он подходит для резервных копий: облачные диски замедляются при большом числе запросов, поэтому первая копия и очистка занимают там больше времени.
- Вход в выбранный сервис. Поля зависят от сервиса: ключ доступа для S3, имя пользователя и пароль для WebDAV и SMB, пароль приложения там, где двухфакторный вход блокирует обычный пароль, открытый SSH-ключ BombVault для SFTP и Storage Box или токен для сервисов, которые входят через браузер. Для них мастер показывает команду
rclone authorize, которую нужно выполнить на компьютере с браузером; выведенный ею токен вставляется в поле. Проверить соединение проверяет вход до того, как что-либо сохранено. - Выберите папку. Мастер показывает папки на месте назначения: Новая папка создаёт новую, а свободное место показано там, где сервис его сообщает. Пустая папка надёжнее всего.
- Защита от удаления. Мастер прямо говорит, что умеет сервис. Rest-server в режиме append-only отказывает в удалении, и тест на подделку это проверяет. Бакет S3 может хранить старые версии через версионирование и блокировку объектов, что BombVault пока проверить не может. Облачный диск вообще не может отказать в удалении: кто попал на сервер, тот попал и в эту копию. Включайте Неизменяемый (append-only) только там, где удалённая сторона действительно отказывает в удалении; BombVault тогда никогда не очищает это место.
- На случай аварии. Набор для восстановления перечисляет каждое место назначения с репозиторием каждого домена под ним. Вход возвращается вместе с резервной копией настроек BombVault; на свежей установке без неё настройте место назначения заново в том же месте.
Сервисы S3 работают через собственный бэкенд S3 в restic, и именно поэтому к ним применимы класс хранения и блокировка объектов. Все остальные сервисы работают через rclone, который поставляется с BombVault, а его remote затем появляется в конфигурации rclone в Настройки, Облачный доступ. Экспорт настроек содержит места назначения; с включёнными учётными данными он содержит и их вход.
Принимающий сервер, который запускает другой экземпляр вашей группы, появляется в мастере в разделе Из вашей группы; см. Принимающий сервер.
Цель домена, созданная из места назначения, берёт его имя, расположение, учётные данные, класс хранения и переключатель неизменяемости. Хранение, сжатие и бюджет роста остаются отдельными для каждого домена, а её расположение нельзя перенести, потому что там лежит репозиторий домена. Добавить цель только для этого домена под каждым доменом по-прежнему принимает URL репозитория, введённый вручную.
Цель, введённая вручную и лежащая в папке места назначения, может присоединиться к нему. Место назначения перечисляет такие цели в разделе Уже под этим местом назначения, а Принять подвешивает одну из них под него. Цель сохраняет свой репозиторий, снимки, хранение и размещение и берёт имя, учётные данные, класс хранения и переключатель неизменяемости места назначения. BombVault сначала проверяет, что вход места назначения открывает репозиторий, и отказывается ставить цель append-only под место назначения, которое не append-only. Если принять основную цель домена, поле off-site этого домена очищается.
Размещение для каждого элемента¶
У каждой карточки контейнера, VM и набора файлов есть строка Размещение из кнопок: Локально и по одной кнопке на каждую внешнюю цель домена, а следом места назначения, под которыми у домена ещё нет цели. Подсвеченные кнопки получают резервные копии элемента.
- Когда Локально подсвечено, элемент записывается в репозиторий, показанный под Сохранено на, и копируется в каждую другую подсвеченную цель. Погасите цель, и она перестанет получать от этого элемента что-либо новое. Одно только Локально никуда не копирует, это подходит для данных, у которых уже есть вторая копия, например для общего ресурса, который живёт на NAS.
- Когда Локально погашено, элемент записывается прямо в прямой репозиторий первой подсвеченной цели и оттуда копируется в остальные подсвеченные цели. В первый раз диалог создаёт этот прямой репозиторий.
- Кнопка места назначения создаёт цель домена под этим местом назначения и подсвечивает её только для этого элемента. Все остальные элементы начинают без копии там.
- Одна кнопка всегда остаётся подсвеченной, потому что резервной копии нужно куда-то попасть. Чтобы исключить что-то из резервного копирования, добавьте это в исключения.
Расположение фиксируется с первой резервной копии элемента, потому что BombVault никогда не переносит резервные копии между репозиториями. Копии можно менять в любое время. Цель, которая перестаёт получать элемент, сохраняет уже имеющиеся у неё копии и обрезает их по собственному хранению при следующем внешнем запуске домена; Удалить в B2 на карточке удаляет их немедленно. Когда часть этих копий не существует больше нигде, подтверждение перечисляет их по дате и просит имя элемента. Из целей только для добавления удалить нельзя.
Под строкой карточка сообщает, куда идёт элемент и что там на самом деле есть: сколько объектов его хранит, когда каждую цель видели в последний раз, и соблюдается ли 3-2-1. Объект — это сервер с исходными данными, каждая внешняя цель и каждый репозиторий, помеченный Вне помещения. BombVault проверяет копии и объекты; часть «два носителя» правила 3-2-1 он не проверяет.
Размещение по умолчанию¶
Настройки, Хранилище, Размещение по умолчанию содержит одну строку на домен с теми же кнопками. Копии сразу же применяются к каждому элементу без собственного выбора, а также к папкам проектов стеков Compose. Расположение применяется к новому элементу при его первой резервной копии; его изменение не переносит ни одной резервной копии. Перед сохранением строка называет каждую цель, которая приобретает или теряет элементы, и сколько это снимков. Применить к элементам без резервных копий возвращает к значению по умолчанию каждый элемент, у которого ещё нет резервной копии.
Новая внешняя цель получает каждый элемент, который не установлен на Локально. Диалог, который её добавляет, сообщает, сколько это элементов и, где известно, сколько это истории, а также предлагает исключить элементы, уже исключённые из других целей.
Прямые репозитории¶
Выключение Локально для элемента, так что его домом становится цель без прямого репозитория, открывает диалог с предлагаемым расположением рядом с целью, например s3:https://s3.eu-central-003.backblazeb2.com/bucket/containers-direct, и тестом соединения, который ничего не создаёт. Создать и использовать создаёт репозиторий и направляет элемент в него. Прямой репозиторий перенимает ключ цели, класс хранения, лимиты, настройку append-only и хранение, и меняется вместе с ними; карточка Репозитории показывает его только для чтения. Когда новый ключ цели не может его открыть, прямой репозиторий сохраняет тот ключ, что у него есть, и сохранение сообщает об этом. Элемент на прямом репозитории копируется оттуда в остальные подсвеченные цели, но никогда в цель, которой принадлежит этот репозиторий. Его снимки несут тег bv:direct, и каждый другой проход хранения их сохраняет, поэтому прямой репозиторий, потерявший связь со своей целью, никогда не устаревает по локальным правилам. К B2 обращаются через его конечную точку S3, вводя идентификатор ключа и ключ приложения в качестве учётных данных S3; ключ, ограниченный собственной папкой цели, не может обратиться к папке рядом с ней, поэтому ограничьте ключ папкой на уровень выше цели.
Вне помещения¶
Именованный репозиторий можно пометить как Вне помещения на карточке Репозитории. Удалённые репозитории начинают помеченными; отключите это для rest-server в том же здании. Отметка учитывается только для объектов и 3-2-1 на карточках. Она не меняет ни одной копии.
После пересборки¶
Выборы копирования живут в собственных настройках BombVault. После пересборки через «Найти резервные копии» без восстановленного /config они исчезают, и копирование всего заново отправило бы в B2 элементы, которые вы оставили в стороне. Поэтому внешняя репликация каждого пересобранного домена приостанавливается. Панель показывает это жёлтым, а Размещение по умолчанию предлагает Подтвердить значение по умолчанию с предпросмотром того, что скопирует следующий запуск, и именами в резервных копиях, у которых нет записи, которые можно там же исключить. Только подтверждение завершает паузу; импорт файла настроек возвращает правила и значения по умолчанию, но не завершает её.
Удалённые основные репозитории¶
Путь резервной копии домена (Настройки, Хранилище) не ограничен локальной папкой: направьте его прямо на удалённый репозиторий restic (s3:..., rest:http://host:8000/repo, sftp:пользователь@host:/repo, rclone:remote:bucket/путь), и BombVault будет копировать прямо туда, без отдельной локальной копии и без шага репликации. Это по-настоящему другая форма, нежели внешняя репликация выше: там основным является локальный репозиторий, а внешний служит его архивом по мере возможности; здесь удалённый репозиторий и есть основной, и он единственная копия, пока вы не настроите для этого домена ещё и внешнюю репликацию (или второй удалённый репозиторий).
У каждого из шести полей пути (Контейнеры, Виртуальные машины, Flash, Автобэкап, Папки, Наборы данных ZFS) прямо рядом стоит переключатель Локально / Удалённо:
- Локально показывает привычный обзор папок.
- Удалённо меняет его на простое поле URL и кнопку, открывающую то же окно проверки соединения и учётных данных, каким пользуются внешние назначения, но настроенное для этого основного репозитория. Оттуда вы получаете:
- Проверку соединения с настоящим путём, прежде чем на него полагаться.
- Ограничения полосы (отдача и приём), чтобы плановая копия в удалённый основной репозиторий не забивала ваш канал WAN: те же ключи restic
--limit-uploadи--limit-download, что использует внешняя репликация, применённые к самой копии. - Защиту append-only (неизменяемость), проверяемую тем же активным тестом на вмешательство (настоящая проба DELETE на дальней стороне), который получают внешние назначения. Когда она включена, BombVault отказывается сам чистить репозиторий: за ним нет отдельной локальной копии, поэтому учётные данные на этой машине не должны быть способны удалить единственную копию резервных данных.
- Сигнал бюджета роста, взятый из того же тренда размера репозитория, который карточка Хранилище и так отслеживает.
Ничего из этого не обязательно: вручную вписанный удалённый путь без сохранённых настроек безопасности копирует ровно так же, как и раньше (полоса не ограничена, чистка разрешена, сигнала бюджета нет). Диалог безопасности нужен на тот случай, когда вам нужна та же защита, что получает внешняя копия, без создания отдельного внешнего назначения только ради этого.
Учётные данные облака и REST общие
Удалённый основной репозиторий проходит проверку теми же учётными данными S3/REST, что заданы в разделе Настройки, Облачный доступ, Общие облачные учётные данные. Отдельного хранилища учётных данных для основных репозиториев нет.
SMB и WebDAV без монтирования на хосте¶
В Настройки, Облачный доступ, rclone есть форма для общего ресурса Windows или Samba и для сервера WebDAV (Nextcloud, ownCloud, SharePoint или любого другого). Заполните короткое имя, хост и общий ресурс (SMB) или URL и тип сервера (WebDAV), пользователя и пароль, и BombVault сам запишет раздел rclone. rclone сам обфусцирует пароль перед сохранением; если добавить назначение с уже существующим именем, этот раздел заменяется, а не появляется второй.
Форма отвечает готовым расположением, например rclone:nas:backups. Впишите его в Путь резервных копий или во внешнее назначение и при желании добавьте подпапку (rclone:nas:backups/bombvault). Общий ресурс является первым сегментом пути, а не частью имени.
Этот путь лучше, чем монтировать общий ресурс в Unraid: restic не советует держать репозиторий на смонтированном ресурсе CIFS, а здесь ничего не монтируется. NFS в форме нет, потому что ни у restic, ни у rclone нет бэкенда NFS; для NFS смонтируйте экспорт на хосте и укажите на него Путь резервных копий.
Неизменяемая (append-only) внешняя копия¶
Пометьте внешний репозиторий как append-only, чтобы программа-вымогатель или скомпрометированный хост не могли удалить или переписать ваши резервные копии. Дальняя сторона (restic/rest-server, работающий в режиме --append-only) обеспечивает это. BombVault лишь проверяет это и никогда не показывает зелёный только на основании заявления о конфигурации.
Мастер управляемой настройки внешней копии проводит вас от выбора бэкенда (rest-server / rclone / S3) через готовый к вставке фрагмент развёртывания rest-server, тест соединения, переключатель неизменяемости (который сразу запускает тест на подделку) и стратегию хранения, поэтому append-only внешняя копия достижима без ручного редактирования конфигов.
Успешное удаление в /locks/ ожидаемо
Append-only не означает, что удалить больше ничего нельзя. restic должен создавать и снимать собственные блокировки, поэтому /locks/ намеренно остаётся доступным для записи и удаления. Снимки и стоящие за ними данные, то есть именно то, на что нацелен шифровальщик, удалить невозможно. Если вы сами проверите удалённую сторону, успешное удаление в /locks/ является правильным поведением, а не дырой в защите.
Неизменяемые репозитории никогда не очищаются с этой машины
Неизменяемая внешняя копия намеренно никогда не очищает старые снимки. Задайте для неё тревогу бюджета роста, чтобы вас оповестили, прежде чем размер репозитория выйдет из-под контроля.
Тест на подделку¶
BombVault периодически доказывает гарантию append-only, фактически пытаясь выполнить удаление в отношении внешнего репозитория, нацеленное на несуществующий объект:
- Отказ означает защищено.
- Принятие означает не защищено.
- Неубедительный результат (сервер недоступен, ошибка аутентификации) никогда не переворачивает сохранённый вердикт.
Настоящий переворот из защищённого в незащищённое запускает одно оповещение.
Учебные DR¶
BombVault предлагает два уровня доказательства того, что ваши резервные копии действительно восстановимы, а не просто присутствуют.
- Учебные восстановления для проверки (локальные). BombVault периодически выполняет
restic check --read-data-subset(ограниченно, никогда не полное восстановление, забивающее диск) и показывает бейдж Восстановимость подтверждена по каждому домену. Частота живёт в Настройки, Расписания; бейдж в Настройки, Целостность. - Учебные DR (внешние). BombVault восстанавливает реальную цель из внешнего репозитория в одноразовую песочницу, проверяет её файл за файлом и байт за байтом, затем очищает. Это доказывает, что вы можете восстановить из внешнего хранилища, а не только то, что репозиторий отвечает.
Оценочная карта защиты от программ-вымогателей на Панели сводит это в зелёную / жёлтую / красную позицию по каждому домену, с чек-листом с отметками возраста (внешняя копия настроена, append-only проверено, репликация актуальна, учебное восстановление пройдено, шифрование включено, стратегия очистки задана). Каждая красная строка ведёт прямо к исправлению, и карточка становится зелёной только на проверенных фактах.
Сопряжение экземпляров¶
Получатели, источники подтягивания, страница Экземпляры и внешний Mesh — все они говорят с другим BombVault. Делают они это как участники одной группы сопряжения, а экземпляр вступает в группу двенадцатью словами.
На первом экземпляре откройте Настройки → Сопряжение и на карточках сопряжения нажмите Сгенерировать фразу. Появятся двенадцать слов в окне с кнопкой Копировать. На каждом следующем экземпляре откройте то же место, нажмите Ввести фразу и вставьте слова или введите их вручную, либо нажмите Вставить в этом окне. Слово, которого нет в списке, страница называет вместе с его местом уже при наборе, а последнее слово несёт контрольную сумму, поэтому опечатка или переставленное слово ловятся ещё до того, как что-либо сопрягается. Генерируйте фразу только на одном экземпляре: два экземпляра, на каждом из которых создана своя фраза, образуют две отдельные группы. Если минуту никто не откликается, вкладка предлагает два выхода: показать слова снова, чтобы ввести их там, или ввести слова другого экземпляра и присоединиться к его группе за один шаг. Сопряжение работает и без пароля входа, но задайте его: без него любой, кто может открыть этот веб-интерфейс, может прочитать слова и получить через группу пароль restic каждого экземпляра в ней. Карточка сопряжения сообщает об этом, пока пароль не задан. С паролем повторный показ фразы запросит его. Покинуть группу выводит экземпляр обратно.
Любой, кто знает слова, может вступить в группу, так что относитесь к ним как к паролю.
Как участники находят друг друга. Каждый экземпляр узнаёт собственный адрес в сети из вашего браузера в момент входа, он показан на карточке Relay как Этот экземпляр в вашей сети; поправьте его там, если впереди стоит обратный прокси или нестандартный порт. В одной сети участники объявляют этот адрес через multicast и говорят друг с другом напрямую, а там, где multicast не может пройти через сеть контейнера, например через сеть bridge по умолчанию в Docker, экземпляр вместо этого ищет остальных в своей подсети подписанным запросом, ответить на который может только участник группы, поэтому сопряжение всё равно завершается за секунды без Relay. Если ничего не находится, Не можете его найти? под карточкой сопряжения принимает один адрес вручную, для другой подсети или нестандартного порта. Экземпляры в разных сетях идут через Relay, выбираемый на той же вкладке:
- Relay проекта (по умолчанию):
parleyport.halleluja.design, тот же Relay, которым пользуется и KnightLoader. Настраивать нечего. - Собственный Relay: контейнер ParleyPort из Unraid Community Apps, либо один из ваших экземпляров, уже доступный снаружи, с включённым Работать как Relay. Этот экземпляр отвечает тогда на
/relay/connectпо своему собственному адресу, за обратным прокси и сертификатом, которые у него уже есть, и впускает только вашу группу. Введите адрес Relay на каждом экземпляре, который должен его использовать. - Без Relay: участники находят друг друга автоматически в одной сети и больше нигде.
Что видит Relay. Каждый вызов между участниками запечатан AES-256-GCM под ключом, выведенным из двенадцати слов, и этот ключ никогда не покидает ваши экземпляры. Relay узнаёт хеш, группирующий соединения, для какого экземпляра предназначено сообщение, каков его размер и когда оно проходит. Прямой вызов в локальной сети запечатан так же и вдобавок подписан, поэтому ничто не зависит от самоподписанного сертификата, который выдаёт экземпляр.
Что проходит через группу. Оценочные карточки на странице Экземпляры, запрос проверить один домен прямо сейчас, предложения Mesh для внешней копии, и то, что нужно получателю или источнику подтягивания: адреса репозиториев другого экземпляра и его пароль restic. Резервные данные так никогда не идут, они по-прежнему идут прямо к бэкендам restic. И APP_KEY тоже нет: пароль restic открывает только репозитории того экземпляра и ничего больше, ни его сохранённые секреты, ни сессии, ни коды восстановления.
Записи с времён до сопряжения. Экземпляры, добавленные токеном fleet, а также получатели и источники подтягивания, настроенные по APP_KEY другого экземпляра, остаются после обновления и помечаются Сопрячь заново. Получатели и источники подтягивания продолжают работать: при первом запуске BombVault заменяет каждый сохранённый APP_KEY выведенным из него паролем restic. Сопрягите оба экземпляра, затем отредактируйте запись и выберите её экземпляр. Такой экземпляр перенимает свою старую карточку, как только в группе появляется экземпляр с тем же именем.
Единственное место, которое всё ещё принимает APP_KEY вручную, это Восстановление из репозитория другого BombVault, для случая, когда другой экземпляр исчез и больше не может ответить ни в одной группе.
Панель получателя (принимающая сторона)¶

Принимающая сторона, наблюдаемая только на чтение, с проверкой целостности на этой машине.
Всё выше, это отправляющая сторона. На машине, которая принимает неизменяемые внешние копии от другого BombVault, панель получателя даёт вам независимый мониторинг этих репозиториев только для чтения на принимающем оборудовании, поэтому молчаливый сбой на дальнем конце не остаётся незамеченным.
Включите переключатель Приёмник в Настройках, чтобы открыть вкладку Приёмник. По умолчанию она отключена; включайте её только на машине, которая действительно принимает неизменяемые внешние резервные копии. Затем зарегистрируйте полученный репозиторий (только для чтения, открытый паролем restic отправляющего экземпляра, который он получает через группу сопряжения), чтобы получить:
- Инвентарь снимков, сгруппированный по источникам, чтобы вы могли точно видеть, какие контейнеры, VM и наборы файлов прибыли.
- Последнее получение по каждому источнику, чтобы вы знали, насколько свеж каждый из них.
- Независимый запуск
restic checkна принимающем оборудовании, чтобы целостность проверялась там, где данные фактически лежат, а не только на отправителе. - Выключатель мертвеца: оповещение, когда источник перестаёт отправлять в заданном вами окне.
- Оповещения о целостности: оповещение, когда проверка на принимающей стороне не проходит.
Получатель строго только для чтения. Он никогда не пишет в полученный репозиторий, поэтому никогда не может нарушить гарантию append-only, на которую полагается отправитель.
Принимающий сервер¶
Принимающая машина может также запускать rest-server, на который копируют остальные. Настроить принимающий сервер вверху вкладки Приёмник запрашивает папку на общем ресурсе, а Новая папка создаёт её, и порт (8000, если его не занимает другой контейнер). После этого BombVault:
- отказывается продолжать, если контейнер с именем
rest-serverуже существует или порт занят другим контейнером; - загружает
restic/rest-serverи запускает его через сокет Docker в режиме append-only с приватными репозиториями и файлом логинов в этой папке; - записывает его шаблон Unraid на flash-накопитель, так что контейнер остаётся доступным для редактирования на вкладке Docker, либо предлагает шаблон на скачивание, если flash-накопитель недоступен;
- запускает против него тест на вмешательство и показывает, отказывает ли он в удалении.
Экземпляры вашей группы затем находят сервер в мастере целей в разделе Из вашей группы под именем принимающей машины. Каждый экземпляр получает собственный логин при первом выборе сервера и пишет только в свою папку на нём. Карточка перечисляет эти логины, а Отозвать логин убирает один из них; то, что этот экземпляр уже скопировал, остаётся в папке. При настройке создаётся также один логин для кого-то вне группы, пароль которого карточка показывает один раз.
Экземпляр, который достигает принимающей машины только через Relay, не может использовать сервер, потому что Relay не передаёт резервные копии. Сначала добавьте адрес принимающей машины в разделе Настройки, Сопряжение. Если BombVault работает на собственном IP-адресе (например, на br0), заполните Адрес для партнёров, потому что сервер слушает на адресе хоста.
Полный пример: две машины Unraid, от начала до конца¶
Выше описаны отдельные части. Здесь одна законченная установка с настоящими значениями, потому что части проще собрать, увидев их собранными хотя бы раз.
Две машины: TOWER держит контейнеры и отправляет копии, VAULT принимает их и обеспечивает неизменяемость. Подставьте свои имена, адреса и пути общих ресурсов.
1. На VAULT поднимите сервер в режиме append-only. В BombVault на TOWER откройте Настройки → Внешнее → Настроить, выберите rest-server и создайте рецепт. Скопируйте вкладку Шаблон Unraid (XML), сохраните её на VAULT как /boot/config/plugins/dockerMan/templates-user/my-rest-server.xml, затем Docker → Add Container и выберите rest-server из списка шаблонов. Перед запуском впишите показанную строку htpasswd на VAULT в /mnt/user/appdata/rest-server/.htpasswd. Одноразовый пароль показывается один раз и нигде не хранится: скопируйте его сейчас. Эта строка несёт тот же пароль, уже хешированный bcrypt: открытый текст идёт в учётные данные REST на TOWER, хешированная строка — в .htpasswd на VAULT. Хешировать вам ничего не нужно.
Оставьте `--append-only` в поле OPTIONS. В этом весь смысл: без него VAULT снова обычный общий ресурс.
2. На TOWER направьте туда внешний репозиторий. Адрес репозитория следует образцу, который печатает рецепт:
rest:http://VAULT:8000/bombvault-containers/containers
Первый сегмент пути — пользователь htpasswd, второй — репозиторий. Введите созданные логин и пароль как учётные данные REST для назначения и запустите проверку соединения.
3. На TOWER включите «Неизменяемое». Проверка на подмену запускается сразу и должна сообщить защищено. Что означают ответы:
| Результат | Что произошло |
|---|---|
| защищено | VAULT отклонил удаление. Это единственное успешное состояние. |
| НЕ защищено | VAULT принял удаление. --append-only отсутствует или был убран. |
| неопределённо | Ни то, ни другое. Обычно адрес не тот, который использует сам restic, или изменились учётные данные. Ничего не записывается и никакой сигнал не подаётся. |
4. На VAULT смотрите, что приходит. Сопрягите обе машины (Сопряжение экземпляров), включите Настройки → Общие → Приёмник, откройте вкладку Приёмник и зарегистрируйте репозиторий только для чтения, указав TOWER как отправляющий экземпляр.
Расположение — это путь внутри контейнера, записанный относительно точки монтирования хоста
Введите user/appdata/rest-server/bombvault-containers/containers, а не /mnt/user/appdata/…. BombVault работает в контейнере, где /mnt хоста примонтирован в другом месте; абсолютного пути хоста там не существует. Если вы его вставите, BombVault теперь подскажет нужный относительный путь.
VAULT получает пароль restic от TOWER через группу при сохранении; ключ вводить вручную не нужно.
5. При желании сделайте это взаимно. Повторите те же пять шагов в обратную сторону: rest-server на TOWER, принимающий копию с VAULT. Тогда каждая машина обеспечивает неизменяемость для другой, и ни одна не может удалить копии другой.
Управляемое восстановление¶
Отдельная вкладка Восстановление проводит свежую или пересобранную установку через сценарий аварии, в одном месте:
- Сначала восстанавливает собственные настройки BombVault, поэтому пути резервных копий, внешние цели и учётные данные, которые нужны остальному потоку, приходят предзаполненными (применяются через самоперезапуск по сокету Docker, поэтому работающая база данных настроек никогда не перезаписывается под открытым дескриптором).
- Проверяет, что BombVault может прочитать ваши резервные копии (подводный камень с ключом шифрования сразу впереди).
- Позволяет вам указать на ваш существующий репозиторий (локальный или внешний).
- Находит контейнеры, VM, наборы файлов и наборы данных ZFS, хранящиеся в нём.
- Восстанавливает контейнеры и VM за один раз (оставляя остановленными, чтобы вы запускали их обдуманно) и показывает наборы файлов и элементы ZFS, которые восстанавливаются по одному; элементы ZFS возвращаются выключенными. Набор для восстановления в одном клике.
Плановая миграция против аварии
Управляемое восстановление восстанавливает собственные настройки BombVault из резервной копии. Для планового переезда на новую машину вы можете вместо этого перенести конфигурацию напрямую с помощью карточки Экспорт / импорт настроек (переносимый файл JSON). См. Конфигурация.
Восстановление из репозитория другого BombVault¶
Отдельная карточка на вкладке Восстановление открывает репозиторий другого экземпляра BombVault (общий ресурс, смонтированный под /mnt, или удалённый URL) с APP_KEY этого экземпляра, в одноразовой сессии только для чтения. Просматривайте хранящиеся там контейнеры, VM и наборы файлов, выберите снимок и восстановите его, и восстановленный объект становится обычным локальным контейнером, VM или набором файлов. Ничто никогда не записывается в другой репозиторий, а ваши собственные настройки резервного копирования остаются нетронутыми (сессия живёт в памяти и истекает сама собой). Перемещение контейнера с сервера A на сервер B не означает перенаправление настроек репозитория и их откат после. Эта карточка одноразовая: она открывает сессию, восстанавливает выбранное и забывает другой экземпляр. Если же вам нужна постоянная схема, при которой эта машина по расписанию забирает снимки другого экземпляра в собственный репозиторий, это вкладка Подтягивание на странице Экземпляры.
Под строкой контейнера, чьей сети нет на этом сервере, например сети br0 из Unraid на обычном Docker-хосте, появляется выбор сети. BombVault создаёт его в выбранной сети вместе с остальными сетями. Фиксированный IP-адрес и MAC-адрес принадлежали старой сети и отбрасываются, поэтому их выдаёт новая сеть.
Набор для восстановления ключа шифрования¶
Это та часть, которая делает аварийное восстановление возможным даже когда нет работающего BombVault.
Один клик загружает мастер-ключ, производный пароль restic и точные расположения репозиториев и команды, поэтому вы можете восстановить прямо с помощью CLI restic на любой машине. Напоминание на Панели пилит вас, пока вы его не сохраните.
Храните набор для восстановления вне сервера
Набор содержит секрет, который расшифровывает ваши резервные копии. Держите его в надёжном месте отдельно от сервера (менеджер паролей, распечатанная копия в сейфе). Если вы потеряете и BombVault, и APP_KEY без набора для восстановления, ваши зашифрованные резервные копии не могут быть восстановлены.
Самый новый снимок не всегда тот, который нужно восстанавливать
Начиная с restic 0.17, restic snapshots показывает размер каждого снимка. После потери данных самым новым может оказаться опустошённый снимок, поэтому не восстанавливайте снимок, который намного меньше предыдущих. После шифровальщика это может быть зашифрованный снимок обычного размера. Если BombVault ещё работает, сначала загляните на его страницу Аномалии: там указана последняя хорошая копия. Для восстановления не нужны данные BombVault об аномалиях, а пауза хранения лишь оставляет больше снимков.
Запечатывание набора¶
Если вы включили шифрование age для обычных экспортов (Настройки), набор тоже запечатывается им и скачивается как bombvault-recovery-kit.md.age. Он в текстовой форме ASCII-armor, а не двоичный, поэтому остаётся обычным текстом: вставить его в менеджер паролей или распечатать можно точно так же, как раньше, просто без вашего ключа содержимое не прочитать.
Не храните ключ age внутри набора
Чтобы открыть запечатанный набор, нужен ваш закрытый ключ age. Храните его там, где он не зависит от самого набора, иначе восстанавливать придётся две вещи вместо одной. Запечатывание оправдано, когда набор хранится там, что вы не полностью контролируете (общий менеджер паролей, облачные заметки, распечатка в офисе); набор в вашем собственном сейфе уже защищён сейфом.
При включённом шифровании и без настроенного пригодного получателя загрузка просто отклоняется. BombVault никогда не откатывается к выдаче мастер-ключа в открытом виде.
Если набора нет под рукой¶
Пароль нигде не хранится, он вычисляется из APP_KEY. Имея ключ и оболочку, вы можете воспроизвести его сами:
printf 'bombvault:restic-repo' \
| openssl dgst -sha256 -mac HMAC -macopt hexkey:$APP_KEY -r \
| cut -d' ' -f1
Это HMAC-SHA256 по фиксированной строке bombvault:restic-repo, ключом служат сырые байты шестнадцатеричного APP_KEY, результат печатается как 64 строчных шестнадцатеричных символа. То же значение есть в наборе как выведенный пароль restic; это на тот день, когда набор окажется не там, где вы.
Для полученного репозитория берите ключ ОТПРАВЛЯЮЩЕГО экземпляра
Репозиторий, попавший сюда через внешнюю репликацию, создала отправившая его машина своим собственным APP_KEY. Вывод из ключа принимающей машины даёт пароль, который restic отвергает, и это выглядит ровно как повреждённый репозиторий, не будучи им. Это обычная причина, по которой restic check на полученном репозитории снова и снова спрашивает пароль.
Поскольку определения восстановления живут внутри каждого репозитория (<repo>/def, <repo>/vm-def), скопированная папка репозитория полностью самодостаточна, поэтому набор плюс репозиторий, это всё, что нужно для восстановления на голом железе.
Как достать дамп базы данных обратно¶
Дамп базы данных это отдельная точка восстановления в репозитории контейнеров, с меткой dbdump:<container> и единственным файлом /dbdump/<container>.sql. BombVault показывает, скачивает и импортирует их в разделе Резервные копии; ниже те же шаги с одним restic, на день, когда BombVault под рукой нет.
restic -r <repo> snapshots --tag dbdump:<container>
restic -r <repo> dump --tag dbdump:<container> latest /dbdump/<container>.sql > <container>.sql
Метки dbversion: и dbname: на каждом дампе говорят, из какой версии сервера он взят и какие базы в нём. Полный файл заканчивается строкой -- PostgreSQL database cluster dump complete или -- Dump completed.
Импортируйте его в контейнер той же или более новой версии (PostgreSQL) либо той же основной версии (MySQL и MariaDB), один раз запущенный с пустой папкой данных, чтобы он себя развернул. Клиент базы данных на хосте не нужен, он есть в контейнере:
docker exec -i <container> sh -c 'exec psql -X -U "${POSTGRES_USER:-postgres}" -d postgres' < <container>.sql
docker exec -i <container> sh -c 'exec mariadb -uroot -p"$MARIADB_ROOT_PASSWORD"' < <container>.sql
docker exec -i <container> sh -c 'exec mysql -uroot -p"$MYSQL_ROOT_PASSWORD"' < <container>.sql
Для одной базы из полного дампа MySQL и MariaDB принимают --one-database <name> в команде клиента. В дампе PostgreSQL на каждую базу приходится свой раздел, начинающийся строкой \connect <name>: скопируйте нужный раздел в отдельный файл и импортируйте его с -d <name> после создания базы.
Дамп, снятый под root, несёт с собой пользователей сервера
Полный дамп MySQL или MariaDB, снятый под root, содержит системную базу mysql, поэтому его импорт заменяет учётные записи нового сервера, включая пароль root, на записи из дампа. В PostgreSQL сообщение role ... already exists про пользователя, созданного самим контейнером, ожидаемо и безвредно.