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.

Как разместить модели Ollama AI на выделенных серверах
Узнайте, как размещать модели Ollama AI на выделенных серверах для обеспечения безопасности данных, масштабируемости и повышения производительности.
5 мин чтения - 8 сентября 2025 г.

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