ZFS Snapshots: Как их создавать, восстанавливать и автоматизировать

10 мин чтения - 5 мая 2026 г.

hero section cover
Содержание
  • ZFS Snapshots: Как их создавать, восстанавливать и автоматизировать
  • Как работают моментальные снимки ZFS
  • Создание моментальных снимков
  • Восстановление из моментальных снимков
  • Управление и обрезка моментальных снимков
  • Автоматизация удержания с помощью Sanoid
  • Репликация за пределы сайта с помощью zfs send
  • Замечание по защите от вымогательства
  • Видеорекомендации
  • Заключительные мысли
Поделиться

Узнайте, как создавать, восстанавливать и автоматизировать создание моментальных снимков ZFS в Linux. Охватывает команды, откат, политики сохранения и репликацию за пределами сайта с помощью Sanoid

ZFS Snapshots: Как их создавать, восстанавливать и автоматизировать

Снимок ZFS - это копия файловой системы, доступная только для чтения и созданная в режиме "точка-время". Она создается мгновенно, не занимает места до момента изменения данных и позволяет откатиться назад или восстановить файлы за считанные секунды. Если вы управляете серверами, VPS или другими ресурсами с данными, которые вы не можете позволить себе потерять, моментальные снимки должны стать частью вашего рабочего процесса.

В этой статье мы расскажем о том, как работают снимки ZFS, как их использовать и как автоматизировать их хранение, чтобы они не накапливались.

Как работают моментальные снимки ZFS

В ZFS используется модель копирования при записи (CoW). Когда вы делаете снимок, ZFS не дублирует никакие данные. Она просто записывает текущее состояние дерева указателей блоков. Новые записи идут в свободные блоки, а снимок продолжает ссылаться на оригиналы.

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

Это принципиально отличается от инструментов резервного копирования на уровне файлов, таких как rsync или tar, которые сканируют и копируют целые файлы. Если вы измените 4 КБ в файле размером 10 ГБ, rsync скопирует весь файл. ZFS сохраняет только блок размером 4 КБ.

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

Создание моментальных снимков

Необходимые условия

Вам понадобится установленная ZFS и настроенный пул. На Ubuntu 20.04+:

sudo apt update && sudo apt upgrade -y
sudo apt install zfsutils-linux -y
sudo modprobe zfs

Создайте пул. Для одного диска (типично для VPS):

sudo zpool create tank /dev/sdb

Для зеркальной установки на выделенном сервере используйте идентификаторы дисков вместо имен устройств, чтобы избежать проблем после перезагрузки:

sudo zpool create tank mirror /dev/disk/by-id/ata-DISK1 /dev/disk/by-id/ata-DISK2

Включите сжатие (LZ4 - быстрое и эффективное):

sudo zfs set compression=lz4 tank

Затем создайте наборы данных для рабочих нагрузок:

sudo zfs create tank/web
sudo zfs create tank/databases

Создание моментального снимка

Основная команда:

sudo zfs snapshot tank/web@before-update

Для имен с временной меткой (полезно при использовании cron):

sudo zfs snapshot tank/db@$(date +%Y%m%d_%H%M%S)

Для захвата всех дочерних наборов данных сразу используйте флаг recursive:

sudo zfs snapshot -r tank@daily_backup

Проверьте с помощью:

sudo zfs list -t snapshot

Восстановление из моментальных снимков

Восстановление отдельных файлов

Каждый набор данных ZFS имеет скрытый каталог .zfs/snapshot в точке монтирования. Он не отображается в ls, но вы можете перейти к нему напрямую:

ls /tank/web/.zfs/snapshot/before-update/

Чтобы восстановить один файл:

cp -p /tank/web/.zfs/snapshot/before-update/config/app.conf /tank/web/config/

Флаг -p сохраняет разрешения и временные метки.

Откат всего набора данных

Если вам нужно восстановить все данные, например, после неудачного обновления:

sudo zfs rollback tank/web@before-update

Это происходит почти мгновенно, поскольку ZFS обновляет указатели блоков, а не копирует данные. Но это разрушительно: все изменения, сделанные после моментального снимка, будут безвозвратно потеряны.

Если между целевым и текущим состоянием существуют более новые снимки, ZFS заблокирует откат. Используйте -r для принудительного отката и удаления этих промежуточных снимков:

sudo zfs rollback -r tank/db@20260426_090000

Хорошая привычка: перед откатом делайте снимок текущего (поврежденного) состояния, чтобы в случае необходимости иметь запасной вариант.

Метод восстановленияСкоростьРиск потери данныхЛучший для
Восстановление файлов через .zfsЗависит от размера файлаНетСлучайное удаление, восстановление одного файла
Полный откатМгновенныйВысокий (теряются все изменения после снимка)Неудачные обновления, общесистемные проблемы
Клон для тестированияМгновенныйНет (создает параллельный набор данных)Проверка перед принятием решения об откате

Управление и обрезка моментальных снимков

Снимки начинаются с нулевого размера, но растут по мере того, как под ними изменяются живые данные. Чтобы проверить использование пространства:

zfs list -t snapshot -o name,used,refer,creation

Столбец USED показывает, сколько места занято только этим снимком. REFER показывает общий размер набора данных на момент создания моментального снимка.

Чтобы удалить снимок:

sudo zfs destroy tank/web@before-update

Можно удалять и по шаблону:

sudo zfs destroy tank/web@daily-2026-04-%

Всегда сначала выполняйте сухой запуск:

sudo zfs destroy -nv tank/web@daily-%

Технически ZFS может обрабатывать миллионы снимков, но производительность падает после нескольких тысяч снимков на набор данных. Такие команды, как zfs list и zfs destroy, заметно замедляются. Следите за сохранением данных.

Автоматизация удержания с помощью Sanoid

Sanoid - это стандартный инструмент для автоматизации создания и обрезки снимков ZFS. Вы определяете политики хранения в файле sanoid.conf, а он делает все остальное.

Типичная производственная конфигурация может выглядеть следующим образом:

Тип рабочей нагрузкиПочасоваяЕжедневноЕженедельноЕжемесячно
Стандартное производство24-4830812
База данных (высокая текучесть)72301224
Журналы / низкий приоритет12-24703
Статические носители0703

Sanoid также поддерживает субчасовые снимки с помощью параметра frequently. Установив frequently = 96 и frequent_period = 15, вы будете делать снимки каждые 15 минут.

Запланируйте запуск Sanoid через cron на каждую минуту или каждые 15 минут, и он будет создавать и удалять снимки автоматически.

Репликация за пределы сайта с помощью zfs send

Снимки на одном сервере защищают от случайных изменений и программных сбоев, но не от потери оборудования. Для этого репликация за пределами площадки осуществляется с помощью zfs send и zfs receive по SSH:

zfs send tank/web@backup | ssh user@remote zfs receive backup/web

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

zfs send -i tank/web@old_snap tank/web@new_snap | ssh user@remote zfs receive backup/web

Инструмент-компаньон Sanoid, syncoid, автоматизирует этот процесс и управляет инкрементными передачами, восстановлением ошибок и ведением журнала.

Замечание по защите от вымогательства

Снимки ZFS доступны только для чтения на уровне ядра, а значит, стандартные вредоносные программы не смогут их изменить или зашифровать. Это сильный уровень защиты. Но он не пуленепробиваемый: если злоумышленник получит root-доступ, он сможет удалить снимки, прежде чем зашифровать ваши данные.

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

Видеорекомендации

Заключительные мысли

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

Если вы используете ZFS на VPS или выделенном сервере, настройте Sanoid, определите политику хранения и автоматизируйте репликацию. Настройка займет 30 минут и сэкономит часы, если что-то пойдет не так. Попробуйте это на VPS или выделенном сервере FDC.

Блог

События этой недели

Другие статьи
ZFS Snapshots: Как их создавать, восстанавливать и автоматизировать

ZFS Snapshots: Как их создавать, восстанавливать и автоматизировать

Узнайте, как создавать, восстанавливать и автоматизировать создание моментальных снимков ZFS в Linux. Охватывает команды, откат, политики сохранения и репликацию за пределами сайта с помощью Sanoid

10 мин чтения - 5 мая 2026 г.

Как установить и использовать Redis на VPS

9 мин чтения - 7 января 2026 г.

Другие статьи
background image

У вас есть вопросы или вам нужно индивидуальное решение?

icon

Гибкие варианты

icon

Глобальный охват

icon

Мгновенное развертывание

icon

Гибкие варианты

icon

Глобальный охват

icon

Мгновенное развертывание