Когда писал
Апгрейд nas4free до 9.2.x в этой и последующих частях, я не стал делать пятый шаг - апгрейд версии zfs пула. Потому, что дорога эта в один конец и даунгрейда не бывает. Но, пару месяцев пощупав текущую сборку, апгейд я всё же сделал. И с тех пор пару недель смотрел на пул. Проблем не отметил.
Так что давайте обсудим три вопроса - нужно ли делать апгрейд, как его делать и зачем. Но сначала
Немного истории
Файловая система ZFS родилась в недрах компании SUN как свободный софт, распространяемый по CDDL лицензии. После того, как компания Oracle SUN купила, для свободных проектов SUN настали трудные времена. ZFS новые владельцы стали развивать под собственнической лицензией. В результате ZFS от Oracle стал несовместим с другими реализациями ZFS.
Свободная ветка не просто выжила, но продолжила независимое развитие. (В частности, потому, что в игру включился кое-кто побогаче Оракла с их 35 ярдами капитализации, но это другая история...). А нас интересует, что последней версией zpool, которую могут использовать и открытые системы и Оракловский Солярис, стала версия 28. И именно она использовалась в nas4free до последнего времени.
Дальше Оракл продолжает по одной добавлять функции и увеличивать счётчик (дошли до 34). А свободная версия получила номер 5000 (чтобы не пересекаться с Оракловкими версиями), причем цифра 5000 расти не будут. А новые функции будут добавляться и по желанию включаться. Для этого каждая новая фунциональность (feature) получает свой признак, флаг (flag)
Подробно
см man, на пальцах флаг может принимать три значения
- disabled, те фунциональность выключена и система, которая её не понимает, может пул монтировать на чтение и запись
- enabled, те фунциональность включена и может быть использована в любой момент. Но пока не использовалась и система, которая её не понимает, может пул монтировать на чтение и запись
- active, те фунциональность включена и уже используется. Система, которая её не понимает, пул монтировать не может (или может в режиме только для чтения в зависимости от природы не подерживаемой функциональности).
Значение может только расти, переключиться из enabled в disabled нельзя.
И вот с переходом на FreeBSD 9.2 у пользователей nas4free появился выбор - включать новый функционал или нет.
Нужно ли делать апгрейд zfs пула?
Не обязательно. Вы можете сколь угодно долго использовать старую 28 версию. Просто не получите новых функций и не сможете принять zfs receive поток с более новой версии zpool. Зато ваш пул может быть смонтирован и на открытой оси (Illumos и др форки OpenSolaris, FreeBSD, Linux) и на Oracle Solaris. Зачем - это другой вопрос...
Ну и как косметический недостаток, nas4free в описании статуса пула напоминает о возможности его апгрейда. Но помните, это операция в один конец - даунгрейд не предусмотрен.
Как делать апгрейд?
Предле всего - проверить пул, запустив scrub. Из командной строки zpool scrub Pool или из вебгуя, Disks|ZFS|Pools|Tools
Если всё в порядке - то из командной строки zpool upgrade -a или из вебгуя, Disks|ZFS|Pools|Tools
Ключ -a переводит все доступные фичи в enabled, так что они сразу могут использоваться. При апгрейде через вебгуй ключ -a используется.
И каков же новый функционал?
Можно посмотреть из командной строки, пока их в nas4free доступно три
zpool get all Pool
...
Pool feature@async_destroy enabled local
Pool feature@empty_bpobj active local
Pool feature@lz4_compress enabled local
Функциональность async_destroy позволяет удалять данные с пула и освобождать занятые блоки в фоновом режиме даже после сбоя питания (раньше требовалось пройти/проверить затрагиваемую файловую систему);
empty_bpobj уменьшает потребность в пространстве для служебной информации, что полезно при большом количестве снапшотов файловой системы.
А вот
функционал lz4_compress - интереснее простому человеку
"Отмечается, что по сравнению с ранее доступным методом сжатия
LZJB, новый метод отличается значительно возросшей производительностью при более высоком уровне сжатия.
LZ4 упаковывает подлежащие сжатию данные примерно на 50% быстрее, а распаковывает на 80% быстрее, чем LZJB. Если данные несжимаемы, например, уже сжатые архивы или мультимедиа контент, то LZ4 обгоняет LZJB по скорости сжатия более чем в три раза. Производительности одного ядра CPU достаточно, чтобы сжимать поток данных 500 MB/s и распаковывать 1.5 GB/s (использование LZ4 замедляет обращение к диску примерно на 5 микросекунд, что на порядок меньше, чем обеспечивают самые быстрые SSD-накопители).
Что касается степени сжатия, то размер упакованных с использованием LZ4 данных занимает до 10% меньше места, чем при использовании LZJB. При этом, включение прозрачного сжатия может обеспечить двухкратную экономию дискового пространства для разделов с обычными немультимедийными данными, и, соответственно, позволяет сократить интенсивность ввода/вывода с носителя. В итоге, высокая производительность LZ4 в сочетании с уменьшением интенсивности обращения к диску может привести к общему увеличению пропускной способности на системах с простаивающими ядрами CPU. LZ4 автоматически распознаёт и игнорирует не подлежащие сжатию данные, что сводит к минимуму паразитную нагрузку при наличии в хранилища несжимаемых типов данных."
Активировать сжатие для любого датасета
zfs set compression=lz4 <датасет>
Приведу для понимания дальнейшего развития
табличку с OpenZFS illumos
FreeBSD
ZFS on Linux
ZFS-OSX
async_destroy
Y
Y
Y
Y
empty_bpobj
Y
Y
Y
Y
lz4_compress
Y
Y
Y
Y
multi_vdev_crash_dump
Y
S
N
N
spacemap_histogram
Y
S
N
N
enabled_txg
Y
C
N
N
hole_birth
Y
C
N
N
extensible_dataset
Y
C
N
N
bookmarks
Y
C
N
N
Здесь: Y = реализовано, N = НЕ реализовано
по FreeBSD: Y = реализовано в -RELEASE, S = реализовано в -STABLE, C = реализовано в -CURRENT, N = НЕ реализовано