- Вопрос или проблема
- Ответ или решение
- Резервное копирование и восстановление данных Nextcloud: Полное руководство
- 1. Понимание структуры Nextcloud
- 2. Резервное копирование данных Nextcloud
- 2.1. Подготовка к резервному копированию
- 3. Восстановление данных Nextcloud
- 4. Версионное резервное копирование
- 5. Ручное восстановление отдельных файлов
- Заключение
Вопрос или проблема
Когда несколько пользователей взаимодействуют с установкой Nextcloud, существует возможность ошибок. Потенциально, член семьи может удалить старое изображение или коллега может случайно отметить задачу или событие в календаре, что приведет к проблемам для других пользователей.
Когда доступны полные снимки файловой системы или резервные копии всей директории Nextcloud, их можно использовать для восстановления старого состояния всего сервера. Это нормально в случае полного сбоя системы.
Однако проблема возникает, если проблема замечается только через некоторое время, и за это время пользователи изменили другие данные. Тогда необходимо выбрать между восстановлением старых данных и уничтожением всех достижений или сохранением текущего состояния.
Документация Nextcloud описывает только способ восстановления всей установки.
Существует ли способ автоматически и более разумно создавать резервные копии всех данных Nextcloud (файлы, сообщения, календари, задачи и т. д.), чтобы они могли быть восстановлены независимо? (Может быть, даже в онлайн-состоянии?)
Восстановление онлайн-состояния действительно потребует полной резервной копии диска (которая, конечно, может быть выполнена инкрементально).
Конечно, вещи, которые действительно изменяются в результате взаимодействия пользователя, это
- база данных (содержащая всю информацию о пользователях, метаданные файлов, разрешения…)
- хранилище данных
- сам Nextcloud (поскольку он может быть обновлен).
Мы можем «решить» 3. просто требуя полной резервной копии всех трех каждый раз, когда вы создаете резервную копию nextcloud (форматы баз данных могут быть несовместимы с предыдущими версиями).
В типичном контейнеризованном настройке nextcloud у вас будет два или три контейнера:
- контейнер базы данных “DB”, который необходимо запустить первым (обычно работает postgresql)
- контейнер, который фактически запускает nextcloud “NC”, который подключается к базе данных в DB, и имеет директорию данных, смонтированную как внешний том “V”
- (обратный прокси-сервер для того, чтобы легко скрыть nextcloud за HTTPS и выделить обработку SSL-сертификата от контейнера nextcloud)
Теперь регулярная резервная копия будет состоять из
- остановки nextcloud, или по крайней мере «заморозки» NC, или полной остановки NC
- создания резервной копии V (которая может быть выполнена аккуратно и инкрементально – любая современная утилита резервного копирования это сделает),
- указания вашей базе данных создать резервную копию (
pg_backup_start
), которая начнет резервное копирование в согласованном состоянии (база данных гарантирует, что новые операции не влияют на состояние, которое будет сохранено) - сразу после инициализации шага 3, чтобы восстановить функциональность, перезапустить nextcloud (или разморозить, или перезапустить NC)
- заставить базу данных записать дамп в файл (
pg_backup_stop
); убедитесь, что вы знаете, какая резервная копия данных принадлежит какой резервной копии базы данных (это должно быть ясно по времени и дате)
В целом, поскольку сам контейнер nextcloud все равно не будет очень большим, так как он не содержит ни самих данных, ни базы данных, также имеет смысл просто сохранить его вместе с резервными копиями данных и баз данных.
Восстановление может быть выполнено затем на совершенно другой (виртуальной) машине, запустив копию контейнера базы данных, восстановив резервную копию базы данных, тем временем распаковав резервную копию данных, а затем, после того как база данных будет запущена, запустив контейнер nextcloud с подключенными данными.
На самом деле, поскольку окружения контейнеров (podman, но также Docker) позволяют вам осуществлять независимую сеть, вы можете иметь столько серверов баз данных, сколько хотите; вместе с файловой системой, которую вы используете для тома данных и которая поддерживает снимки (ZFS, btrfs и такие вещи, как снимки LVM + тонкое распределение XFS, bcachefs…), вы можете исследовать старое состояние параллельно с вашим текущим состоянием, не мешая им.
Календарь, Сообщения и т. д.
В теории дамп базы данных должен создавать элементы календаря и т. д. с одним или несколькими запросами INSERT.
Вам только нужно найти правильные INSERT и попытаться повторно вставить их в текущую базу данных. (Я бы сделал резервную копию текущего состояния, прежде чем попробовать это).
На мой взгляд, корзина и версии предлагают хорошие варианты для восстановления данных для пользователей.
Файлы и Корзина
По умолчанию корзина активирована. Когда файл удаляется пользователем, он попадает в корзину. Вы можете указать срок хранения файлов в корзине в config/config.php
с записью: trashbin_retention_obligation' => 'auto, 128',
(посмотрите в руководстве для подробностей). Однако, если доступное пространство/квота пользователя опускается ниже 50%, она может быть очищена раньше, или если администратор выполняет occ trashbin:expire;occ trashbin:cleanup
вручную. (или по выбору пользователей)
Я не использую календарь, может быть, удаленные элементы календаря также попадают в корзину и могут быть восстановлены – я не знаю.
Файлы и Версии
Еще одна вещь – это приложение “version nextcloud”, которое добавляет возможность восстанавливать старые версии файла. Срок может быть установлен с помощью 'versions_retention_obligation' => 'auto, 128',
в config.php
. Включите его в разделе приложений nextcloud. Я не использовал это приложение, должно быть похоже на теневые копии.
Восстановление отдельных файлов
Пока вы не используете шифрование и используете только локальные учетные записи, данные пользователей хранятся в директории nextcloud/data/username
. Если вы подключены к Active Directory / OpenLDAP, директория будет nextcloud/data/uuid
, UUID можно разрешить в базе данных. (SELECT ldap_dn FROM oc_ldap_user_mapping WHERE owncloud_name="$U_ID"
)
Файлы можно восстановить вручную из резервной копии пользовательской директории и скопировать в текущую пользовательскую директорию данных. Убедитесь, что все файлы просканированы с помощью occ files:scan
после этого.
Если шифрование включено – 🙂 удачи.
Ответ или решение
Резервное копирование и восстановление данных Nextcloud: Полное руководство
В современном мире, где несколько пользователей взаимодействуют с системой Nextcloud, потенциальные ошибки могут произойти в любой момент. Будь то случайное удаление старых файлов или неправильное изменение задач, важно иметь надежные стратегии резервного копирования и восстановления данных. Данное руководство предлагает детализированное объяснение методов резервного копирования и восстановления данных Nextcloud, основываясь на принципах версионности и снятия снимков.
1. Понимание структуры Nextcloud
Nextcloud состоит из трех ключевых компонентов, которые необходимо учитывать при резервном копировании:
- База данных: Хранит всю информацию о пользователях, метаданные файлов и права доступа.
- Хранилище данных: Содержит файлы и папки пользователей.
- Приложение Nextcloud: Запускается и управляет пользователями и данными.
2. Резервное копирование данных Nextcloud
Чтобы создать надежную стратегию резервного копирования, следуйте следующим этапам:
2.1. Подготовка к резервному копированию
-
Остановка Nextcloud: Перед началом резервного копирования рекомендуется либо остановить приложение, либо заморозить его состояние, чтобы избежать изменений в данных во время процесса.
-
Резервное копирование хранилища данных: Используйте современный инструмент резервного копирования, который поддерживает инкрементальные копии. Это позволит вам сохранить только измененные данные, что значительно сэкономит время и пространство.
-
Резервное копирование базы данных:
- Запустите команду для начала резервного копирования в PostgreSQL (например, с помощью команды
pg_backup_start
), чтобы убедиться, что все операции, происходящие в это время, не изменяют состояние резервной копии. - После выполнения резервного копирования остановите процесс с помощью
pg_backup_stop
.
- Запустите команду для начала резервного копирования в PostgreSQL (например, с помощью команды
-
Резервное копирование приложения Nextcloud: Хотя контейнер приложения не занимает много места, рекомендуется сохранить его вместе с данными и резервной копией базы данных. Это поможет восстановить идентичное состояние приложения.
3. Восстановление данных Nextcloud
Для восстановления данных, воспользуйтесь следующими шагами:
-
Создание копии резервной базы данных: Воссоздайте окружение базы данных, восстановив созданную ранее резервную копию.
-
Восстановление данных: Распакуйте резервную копию хранилища данных и убедитесь, что все данные восстановлены.
-
Запуск Nextcloud: После того как база данных и хранилище данных восстановлены, запустите контейнер Nextcloud с правильным монтированием данных.
4. Версионное резервное копирование
Чтобы избежать проблем из-за случайных изменений или удалений пользователей, важно внедрить механизм версионного резервного копирования:
-
Использование приложения "Версии": Позволяет пользователям восстанавливать более старые версии файлов. Настройки возраста хранения версий можно изменить в
config/config.php
с помощью параметра'versions_retention_obligation' => 'auto, 128'
. -
Корзина (Trashbin): По умолчанию корзина активирована в Nextcloud. При удалении файлов они перемещаются в корзину, где остаются на определенный период. Можно настроить время хранения файлов в корзине в
config/config.php
с параметром'trashbin_retention_obligation' => 'auto, 128'
.
5. Ручное восстановление отдельных файлов
Если необходимо восстановить конкретные файлы:
-
Найдите резервный каталог пользователя, который хранит данные в
nextcloud/data/username
(илиnextcloud/data/uuid
, если используется LDAP). -
Скопируйте необходимые файлы обратно в текущую директорию пользователя.
-
После копирования выполните команду
occ files:scan
, чтобы обновить состояние файловой системы в Nextcloud.
Заключение
Внедрение стратегии резервного копирования и восстановления данных в Nextcloud критически важно для минимизации потерь в результате ошибок пользователей. Разумное использование механизма версионного резервного копирования, а также функциональности корзины позволяет восстановить данные с минимальными потерями. Регулярное резервное копирование всех компонентов системы с учётом инкрементальных копий не только защитит ваши данные, но и обеспечит их доступность в любой момент.