ZFS

ZFS

Резервное копирование, встроенное в файловую систему на уровне ядра — без агентов, без накладных расходов, без потери данных

ZFS — это не просто файловая система. Это архитектура хранения, в которой резервное копирование является нативной функцией ядра, а не внешним инструментом, прикрученным сверху. Именно поэтому ZFS используется как основа во всех продуктах и решениях IgNix: NAS, виртуализация, Jail-контейнеры, ВМ bhyve — всё живёт на ZFS и всё одинаково защищено.

Как работает ZFS-снапшот

Снапшот в ZFS — это мгновенная, read-only копия состояния файловой системы в конкретный момент времени. Технически это не копирование данных: ZFS использует принцип Copy-on-Write (COW) — данные записываются в новое место, а старые блоки остаются нетронутыми. Снапшот — это просто ссылка на эти старые блоки.

Что это даёт на практике:

  • Снапшот создаётся мгновенно — буквально за миллисекунды, независимо от размера пула (хоть 100 ТБ)

  • Снапшот не занимает место до тех пор, пока данные не изменились — хранится только дельта изменений

  • Снапшот консистентен — это атомарная операция: никакого «половину записали, половину нет»

  • Откат мгновенныйzfs rollback возвращает систему в точку снапшота за секунды

Это работает для всего: обычные датасеты, Jail-контейнеры, zvol-диски виртуальных машин bhyve — механизм один и тот же. Снапшот ВМ — это снапшот zvol, на котором она живёт. Никаких агентов внутри гостевой системы не требуется.

ZFS Send/Receive — репликация как транспорт

zfs send сериализует снапшот (или инкрементальную дельту между двумя снапшотами) в поток байт. zfs receive принимает этот поток и воссоздаёт снапшот на удалённом узле.

Ключевые свойства:

  • Инкрементальная передача — после первой полной репликации передаётся только изменённые блоки между двумя снапшотами. При снапшотах каждые 15 минут объём передачи минимален

  • Шифрование в транспортеzfs send поддерживает передачу зашифрованных датасетов в raw-формате: данные дешифруются только на узле-получателе, по сети идёт шифртекст

  • Resumable send — если репликация прервалась (сбой сети, перезагрузка), она продолжается с точки останова, а не начинается заново

  • Репликация всего дерева — флаг -R передаёт датасет со всеми дочерними датасетами, снапшотами, свойствами и клонами. Принимающая сторона получает точную копию

  • Нулевой overhead на источнике — репликация читает снапшот, не трогая «живые» данные. Производительность основной системы не затрагивается

Что защищается и как
ОбъектМетод снапшотаРепликацияRPO
Файловая системаzfs snapshotzfs send -i15 мин
Jail-контейнерснапшот датасета Jailzfs send -R15 мин
ВМ bhyveснапшот zvolzfs send zvol15 мин
БД (MYSQL, PostgreSQL)freeze + снапшотzfs send -i15 мин

Дополнительные возможности ZFS, которые работают в фоне всегда

  • Scrub — фоновая проверка целостности всех данных: ZFS читает каждый блок и сверяет с контрольной суммой. Тихое повреждение данных (bit rot) обнаруживается и исправляется автоматически

  • Self-healing — при наличии зеркала или RAID-Z ZFS автоматически восстанавливает повреждённый блок из копии

  • Compressionlz4 или zstd на уровне файловой системы: снапшоты и поток репликации меньше, репликация быстрее

  • Deduplication — идентичные блоки хранятся один раз. Критично для сред с однотипными ВМ или Jail

  • Block cloning (FreeBSD 15 / ZFS 2.4) — мгновенное копирование файлов без физического дублирования блоков