ZFS Snapshots: Как их создавать, восстанавливать и автоматизировать
10 мин чтения - 5 мая 2026 г.

Узнайте, как создавать, восстанавливать и автоматизировать создание моментальных снимков 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-48 | 30 | 8 | 12 |
| База данных (высокая текучесть) | 72 | 30 | 12 | 24 |
| Журналы / низкий приоритет | 12-24 | 7 | 0 | 3 |
| Статические носители | 0 | 7 | 0 | 3 |
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 в Linux. Охватывает команды, откат, политики сохранения и репликацию за пределами сайта с помощью Sanoid
10 мин чтения - 5 мая 2026 г.
Как установить и использовать Redis на VPS
9 мин чтения - 7 января 2026 г.

У вас есть вопросы или вам нужно индивидуальное решение?
Гибкие варианты
Глобальный охват
Мгновенное развертывание
Гибкие варианты
Глобальный охват
Мгновенное развертывание