Зачем нужна ZFS?

О чём пойдёт речь

Хочу вкратце затронуть, что такое ZFS, за что я её люблю и почему советую данную ФС всем. Каждый подзаголовок – это новая причина, в отрыве от других. Так что читать можно в любом порядке или по кусочкам. Все причины перечислены в произвольном порядке, без сортировки по важности.

Простота бэкапов

Бывало ли у вас такое, что вам требовалось бэкапить файлы, которые могут измениться, удалиться, добавиться? Например, когда делается бэкап домашней директории вашего Linux окружения. ZFS позволяет сделать снимок, который в одно мгновение зафиксирует состояние файловой системы (полностью или только кусочка). Фактически это read-only файловая система. Состояние файлов в которой не изменяется. Файлы не удаляются, не добавляются, не изменяются. Это идеальное состояние для создания бэкапа. Я использую restic, но вы можете использовать любой инструмент, совместимый с вашей ОС. Ещё есть встроенная возможность отправлять целую ФС по сети, через команду вида zfs send | zfs receive. Однако я ей не пользовался (не было необходимости) и не могу рассказать подробнее про неё.

Расширяемость

Если строить примитивные RAID массивы дисков, то всё легко расширяется. Например stripe по зеркалам я могу масштабировать добавляя новые VDEV (в терминологии ZFS: виртуальное устройство) в страйп для увеличения доступного объёма и скорости чтения и записи. Или могу добавить диск/диски в существующие зеркала для увеличения надежности и скорости чтения. С недавнего времени есть возможность расширения и RAIDZ* массивов. Однако для меня классические RAID массивы были понятнее в настройке. Поэтому использую их. В моей конфигурации домашнего сервера 4 диска, в такой конфигурации:

zroot
  mirror-0
    sdd
    sdb
  mirror-1
    sda
    sde

Так я получаю 1.36ТБ места из 2-ух дисков по ~500ГБ и 2-ух по ~1000ГБ, которые нашёл где-то в шкафу. И могу расшириться ещё на любое, необходимое мне кол-во места.

Удобство

ZFS позволяет использовать 1 пул из нескольких дисков как единое пространство. Однако, мы можем выделять так называемые dataset’ы. Это фактически аналог разделов диска, только легко расширяемый. Это позволяет делить пространство на логически блоки: music, videos, backup и так далее. И по каждому из них смотреть занятое и доступное место.

Сохранность данных

В ZFS к каждому кусочку данных прикрепляется хэш-сумма, которой можно проверить правильно ли данные были считаны с диска. Благодаря этому решается проблема “bit rot”, то есть “гниение бита”, оно же деградация данных. Если естественная порча данных на диске произойдёт под управлением ext2/3/4, NTFS, FAT32 и прочих, то вам вернётся испорченный файл. А ZFS попытается либо исправить данные, пере-сохранив повреждённый участок памяти в исправленные секторы диска. Или же, если ZFS сама не может произвести исправление (то есть данные повреждены, а другое место откуда ZFS может получить фрагмент отсутствует), то файловая система об этом сообщит.

Компрессия данных

ZFS умеет прозрачно для пользователя сжимать и разжимать данные, которые она пишет на диски. За счёт этого можно получить очёнь хорошее ускорение к общей вместимости и пропускной способности системы, уменьшив время IO за счёт небольшого кол-ва CPU.

Устойчивость

С ZFS на вы можете отключать и подключать диски не выключая систему и не прекращая операции с файлами. Если отключать диски из VDEV, которые могут понести потерю N дисков (в зеркале это 1 диск, в RAIDZ1 – 1, RAIDZ2 – 2, RAIDZ3 – 3). Как пример, можно отключать диски по одному и менять их на диски большего объёма для расширения. При этом не нарушая работу всей системы и не нарушая сохранности данных

Дальнейшие рекомендации

Если вас заинтересовала ZFS: