Найти в Дзене
Easy Linux - о Linux просто

Будь мужиком, создай RAID. ZFS. Часть 4. Снапшоты. Колны. Реплики

Настоящий мужик должен родить сына, запрограммировать дерево и построить raid. зы И пожать сотку. Приветствую тебя авантюрист! Сегодня мы обсудим довольно важную и не простую тему — организацию файловых хранилищ. Каждый системный администратор и IT-специалист рано или поздно сталкивается с необходимостью изучения более сложных методов и систем для работы с дисками и создания разнообразных схем хранения данных. Использование многодисковых систем и файловых систем, отличных от стандартных NTFS, открывает множество возможностей: скорость, отказоустойчивость, гибкость, экономию места и многое другое. Мы рассмотрим одно из довольно мощных и бесплатных решений — ZFS. Структура материала Материал будет разбит на 4 статьи: Необходимый уровень знаний Уверенное знание и понимание работы носителей данных в операционных системах Linux. Уверенное знание и понимание, как работают файловые системы, что это такое и для чего. Базовые знания и умения работы с RAID-массивами. Снапшоты Снапшот — это момен

Настоящий мужик должен родить сына, запрограммировать дерево и построить raid.
зы И пожать сотку.

Приветствую тебя авантюрист! Сегодня мы обсудим довольно важную и не простую тему — организацию файловых хранилищ. Каждый системный администратор и IT-специалист рано или поздно сталкивается с необходимостью изучения более сложных методов и систем для работы с дисками и создания разнообразных схем хранения данных. Использование многодисковых систем и файловых систем, отличных от стандартных NTFS, открывает множество возможностей: скорость, отказоустойчивость, гибкость, экономию места и многое другое. Мы рассмотрим одно из довольно мощных и бесплатных решений — ZFS.

Структура материала

Материал будет разбит на 4 статьи:

  1. Рассмотрим снапшоты, клоны и реплики. Опять же с примерами.

Необходимый уровень знаний

Уверенное знание и понимание работы носителей данных в операционных системах Linux. Уверенное знание и понимание, как работают файловые системы, что это такое и для чего. Базовые знания и умения работы с RAID-массивами.

Снапшоты

Снапшот — это моментальная копия файловой системы или тома, не требующая дополнительного места на физическом диске. Пространство диска начинает использоваться только тогда, когда в снапшоте и реальных данных начинают появляться различия. До тех пор снапшот не занимает ни байт места. Учитывая, что большая часть данных в файловых «помойках» не меняется десятилетиями, это вполне удобно.

Поехали экспериментировать. Для простоты я создам простейший пул из одного виртуального устройства.

Простой пул ZFS
Простой пул ZFS

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

Создание файловых систем ZFS
Создание файловых систем ZFS

Да, я отпечатался в точке монтирования для файловой системы pool0/photo, но это нам не критично.

Замечательно, маэстро, у нас есть пул pool0 и три файловых системы (ты же помнишь, что корневая файловая система создается автоматически при создании пула). Итак, три файловых системы: /pool0, /pool0/files, /pool0/photo.

Теперь создадим файл в файловой системе /pool0/files и что-нибудь туда запишем.

Создание файла в файловой системе pool0/files
Создание файла в файловой системе pool0/files

Замечательно. У нас есть файл с именем some_file, и внутри лежит одно единственное слово Test.

Делаем снапшот нашей файловой системы. Для этого используем следующую команду.

zfs snapshot имяФайловой_системы@имя_снапшота

То есть я выполняю следующую команду.

zfs snapshot pool0/files@backup20250604

Обрати внимание на то, что в названии файловой системы не ставим слеш в начале, если поставить, будет ошибка.

Создание снапшота
Создание снапшота

Снапшот создан, сразу смотрим список снапшотов командой

zfs list -t snapshot

Как видно, снапшот создан. Теперь внесём изменения в файл some_file.

Вносим изменения в файл
Вносим изменения в файл

Теперь в нашем файле два слова. Что ж, откатим наш снапшот, для этого выполним следующую команду.

zfs rollback pool0/files@backup20250604
Откат снапшота zfs
Откат снапшота zfs

Как видно на скрине, файл был восстановлен до исходного состояния, снапшот, к слову, никуда не делся, он остается и теперь будет фиксировать изменения вновь.

Кстати, если нужно увидеть, какие данные хранит снапшот, то для этого можно зайти в каталог «.zfs» в корне файловой системы. Его не видно, но он есть.

Смотрим содержимое снапшота
Смотрим содержимое снапшота

Каталог действительно не отображается, но я легко в него зашел, и в каталоге snapshot лежат все наши снапшоты, а внутри измененные файлы.

Снапшоты можно удалять и переименовывать командами zfs destroy, zfs destroy соответственно.

Вот в целом и все, что касается снапшотов. Просто, удобно, эффективно.

Клоны

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

Итак, как и было сказано, клон делается из снапшота. Снапшот у нас уже есть, вот из него давай и сделаем клон. Для этого используем команду.

zfs clone pool0/files@backup20250604 pool0/clone_file

Здесь я указал, какой снапшот используется в качестве исходных данных, и имя файловой системы. Также тут можно поменять точку монтирования новой файловой системы.

Создание клона снапшота в ZFS
Создание клона снапшота в ZFS

Как видишь, создана новая файловая система, внутри находится тот же файл some_file. Пока я не внесу в этот файл какие-либо изменения, на диске не будет потрачено ни байта свободного места.

Кстати, так как клон — это полноценная файловая система в понимании zfs, то нам ничего не мешает сделать ее снапшот, а на основе снапшота сделать новый клон. Тем самым можно создавать ветку бекапов с возможностью получить полное состояние на момент создания клона, и при этом каждый бекап будет занимать только разницу в данных, все одинаковые данные не будут занимать дополнительно ничего. Например, у меня в реальной работе таких бекапов уже около 15, а места они занимают всего около 15% от изначальных данных. То есть 15 ПОЛНОЦЕННЫХ наборов данных по датам, а места всего 15% плюсом.

Из особенностей логично, что снапшот, на основе которого сделан клон, нельзя удалить, пока не будет удален клон. Клон можно удалить командой, как обычную файловую систему zfs.

zfs destroy pool0/clone_file

Реплики ZFS

Собственно, процесс репликации в ZFS выполняет всё то же, что и процесс репликации в других файловых системах и сервисах — это копирование данных из одного пула в другой. У тебя возникнет вполне резонный вопрос: а почему просто не скопировать данные из одного пула в другой? Ответ будет такой: скорость. Не будем вдаваться в дебри работы, в гугле можно найти ответ, почему репликация действительно предпочтительнее. Более того, репликация умеет сериализацию данных в обычный stdout. Это значит, можно сделать репликацию даже по SSH без каких-либо вспомогательных средств.

Собственно все что нужно сделать для запуска процесса репликации это запустить следующий набор команд

zfs send pool0/files@backup20250604 | zfs receive backup_pool/backup

В данном примере мы отправим наш снапшот на пул backup_pool в файловую систему backup_pool/backup. Будет создана полная копия содержимого снапшота.

Итог

Завершаю цикл статей о ZFS. Технология обширная, сходу её освоить сложно. Нужно попробовать, чтобы понять все нюансы. В статьях я постарался охватить основные моменты. Надеюсь, предоставленной мной информации достаточно, чтобы грамотно сформулировать запрос в тот же поисковик или нейронку.

Как обычно, если есть предложения и замечания, милости прошу в комментарии. Удачи, авантюрист.