Вопрос или проблема
У меня есть 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
данные будут восстановлены в полную структуру, включая все снимки.
Дополнительные рекомендации
-
Проверка целостности: После завершения передачи всегда полезно проверить контрольную сумму для подтверждения того, что данные не были испорчены в процессе передачи. Используйте команды
zfs list
илиzfs get
для получения информации о наборе данных до и после резервного копирования. -
Безопасность передачи данных: Использование
ssh
для передачи данных шифрует ваш трафик и защищает его от потенциального перехвата. Убедитесь, что ваши учетные данные SSH безопасны. -
Регулярность резервного копирования: Создание регулярных снимков и их резервное копирование на отдельный сервер — это лучшая практика. Рассмотрите возможность автоматизации этого процесса с помощью задания cron, чтобы минимизировать риски потери данных.
Заключение
Резервное копирование всего пула ZFS на сервер с другой файловой системой требует внимательности, но выполнимо. Используя вышеизложенные шаги, вы сможете создать безопасную резервную копию, сохранив все ваши наборы данных и снимки. Это позволит вам с легкостью восстановить данные в случае возникновения каких-либо проблем во время опасных операций с вашим ZFS пулом.