Резервное копирование всего пула ZFS на другую файловую систему

Вопрос или проблема

У меня есть zpool с примерно 6 ТБ данных на нем (включая снимки для дочерних наборов данных). Для важной информации у меня уже есть резервные копии на уровне файловой системы. Так как мне нужно выполнить некоторые довольно “опасные” операции (т.е. миграция этого пула), я хочу сделать резервную копию всего пула на другой сервер.

В идеальном мире я бы использовал send и recv (как здесь). К сожалению, этот сервер основан на btrfs, и нет возможности установить zfs. При исследовании люди рекомендуют просто использовать rsync (например, здесь), но насколько я вижу, я вернусь к уровню файловой системы и, что более важно, я не уверен, останутся ли уже существующие снимки наборов данных целыми. Я в основном хочу просто “заморозить” весь пул с помощью снимка, отправить его на удаленный сервер и в случае, если что-то пойдет не так, восстановить пул в предыдущее состояние (желательно одной командой).

Поэтому я ищу решение для резервного копирования целого zfs на другой сервер с другой файловой системой, сохранив все наборы данных и снимки нетронутыми

Вы можете посмотреть как сделать одностороннее зеркалирование целого zfs пула на другой zfs пул

В основном, что я делаю (локальная резервная копия):

# zfs list
NAME                USED  AVAIL  REFER  MOUNTPOINT
zroot               530G   377G    96K  none
zroot/ROOT         78.2G   377G    96K  none
zroot/ROOT/gentoo  78.2G   377G  76.8G  /
zroot/data          405G   377G    96K  none
zroot/data/extra    202G   377G   202G  /extra
zroot/data/home     202G   377G   200G  /home
zroot/var          47.7G   377G  47.7G  /var

# zfs create zroot.backup
# zfs send zroot | zfs recv -Fdu zroot.backup
# zfs send zroot/ROOT | zfs recv -Fdu zroot.backup/ROOT
# ...

Ответ или решение

Для выполнения резервного копирования всего пула ZFS на другой сервер с различной файловой системой (в данном случае btrfs) необходимо учитывать несколько аспектов, чтобы гарантировать сохранность всех данных и сделать процесс как можно более безопасным. В данной инструкции мы рассмотрим, как использовать команды ZFS для создания снимков и отправки данных, а также методы для обеспечения целостности информации во время переноса.

Шаг 1: Создание снимков

Перед началом резервного копирования важно создать снимки всех дочерних наборов данных, результатов которых вы хотите сохранить. Это позволит "заморозить" состояние файловой системы на момент создания снимков. Используйте следующую команду для создания снимков:

# zfs snapshot -r zroot@backup_snapshot

Параметр -r обеспечит создание снимков рекурсивно для всех дочерних наборов данных. Таким образом, все ваши данные будут зафиксированы в одном состоянии.

Шаг 2: Передача данных на другой сервер

Так как вы используете сервер с файловой системой btrfs, прямое использование zfs send и zfs recv не будет возможным. Вместо этого мы будем использовать zfs send для создания копии данных и ssh для передачи их на удаленный сервер, где будет создан временный файл. Однако, обеспечить восстановление полной структуры с помощью rsync не получится — нельзя сохранять нативные снимки.

Отправка данных:

Выполните следующую команду для передачи всех данных на другой сервер:

# zfs send -R zroot@backup_snapshot | ssh user@btrfs-server "cat > /path/to/backup.zfs"
  • -R позволяет отправлять данные вместе с метаданными, включая состояние наборов данных и снимков.
  • user@btrfs-server — это учетные данные доступа к вашему целевому серверу.
  • /path/to/backup.zfs — путь к файлу, который будет создан на сервере btrfs.

Шаг 3: Восстановление данных

Чтобы восстановить данные с резервной копией, выполните следующие шаги на сервере, где у вас установлен ZFS:

# cat /path/to/backup.zfs | zfs recv -Fdu zroot

Обратите внимание, что при восстановлении с помощью zfs recv данные будут восстановлены в полную структуру, включая все снимки.

Дополнительные рекомендации

  1. Проверка целостности: После завершения передачи всегда полезно проверить контрольную сумму для подтверждения того, что данные не были испорчены в процессе передачи. Используйте команды zfs list или zfs get для получения информации о наборе данных до и после резервного копирования.

  2. Безопасность передачи данных: Использование ssh для передачи данных шифрует ваш трафик и защищает его от потенциального перехвата. Убедитесь, что ваши учетные данные SSH безопасны.

  3. Регулярность резервного копирования: Создание регулярных снимков и их резервное копирование на отдельный сервер — это лучшая практика. Рассмотрите возможность автоматизации этого процесса с помощью задания cron, чтобы минимизировать риски потери данных.

Заключение

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

Оцените материал
Добавить комментарий

Капча загружается...