Выпуск ZFSonLinux 0.6.5, реализации ZFS для ядра Linux

Состоялся релиз ZFSonLinux 0.6.5, реализации файловой системы ZFS, оформленной в виде модуля для ядра Linux. Готовые установочные пакеты подготовлены для основных дистрибутивов Linux, включая Debian, Ubuntu, Fedora, RHEL/CentOS. Кроме того, модуль ZFSonLinux уже входит в состав дистрибутивов Gentoo, Sabayon Linux и ALT Linux.

В рамках ZFSonLinux подготовлена реализация компонентов ZFS, связанных как с работой файловой системы, так и с функционированием менеджера томов. В частности, реализованы компоненты: SPA (Storage Pool Allocator), DMU (Data Management Unit), ZVOL (ZFS Emulated Volume) и ZPL (ZFS POSIX Layer). Дополнительно проектом обеспечена возможность использования ZFS в качестве бэкенда для кластерной файловой системы Lustre. Наработки проекта основаны на оригинальном коде ZFS, импортированном из проекта OpenSolaris и расширенном улучшениями и исправлениями от сообщества Illumos. Реализованная в ZFSonLinux версия пула и файловой системы совместима с ZFS из состава Illumos и FreeBSD. Проект развивается при участии сотрудников Ливерморской национальной лаборатории по контракту с Министерством энергетики США.

Код распространяется под свободной лицензией CDDL, которая несовместима с GPLv2, что не позволяет добиться интеграции ZFSonLinux в состав основной ветки ядра Linux, так как смешивание кода под лицензиями GPLv2 и CDDL недопустимо. Для обхода данной лицензионной несовместимости было решено распространять продукт целиком под лицензией CDDL в виде отдельно загружаемого модуля, который поставляется отдельно от ядра. Стабильность кодовой базы ZFSonLinux оценивается как сопоставимая с другими ФС для Linux.

Основные изменения:

  • Обеспечение совместимости с ядрами Linux 4.1 и 4.2. В качестве минимально поддерживаемой версии заявлено ядро Linux 2.6.32;
  • Поддержка временных опций монтирования (Temporary Mount Properties), задаваемых на этапе выполнения команды «zfs mount» (например, «zfs mount-o remount, noatime раздел»);
  • Возможность доступа к снапшотам в директории .zfs/snapshot через NFS;
  • Реализация новых флагов подключаемой функциональности (feature flags):
    • large_blocks — позволяет использовать наборы данных (dataset), размером больше 128 Кб. Размер блока можно выставить в диапазоне от 512 байт до 16 Мб (максимальный размер блока ограничивается лимитом zfs_max_recordsize, который по умолчанию установлен в 1 Мб). При использовании больших блоков следует иметь в ввиду, что при использовании механизма COW (Copy on Write) изменение даже одного байта в блоке приведёт к перезаписи на новое место всего блока. Большие блоки также могут привести к повышению задержек при вводе/выводе.
    • filesystem_limits — для задания ограничений на файловую систему и снапшоты, например, для определённой области в ФС можно выставить лимит на число создаваемых снапшотов;
  • Проведена оптимизация производительности:
    • В zvol пропускная способность увеличена более чем на 50%, а задержки сокращены на 20%.
    • В zil для ядер Linux до выпуска 2.6.40 задержки сокращены в 10 раз.
    • На 5–10% улучшена производительность пулов, заполненных на 90%.
    • Сокращено время удаления очень больших файлов;
    • Увеличена эффективность кэширования за счёт уменьшения конкуренции блокировок.
    • Улучшена эвристика управления размером кэша.
    • Ускорено высвобождение отданных под кэш буферов при непредвиденной нехватки памяти.
  • Возможность оценки размера отправляемого потока при использовании закладки (bookmark) в качестве источника;
  • Размер зарезервированного дискового пространства увеличен с 1.6% до 3.3% от общего размера пула (изменить можно опцией spa_slop_shift);
  • Административным командам разрешено использовать зарезервированное дисковое пространство;
  • Возможность отправки из ZEDLET-ов (FS Event Daemon Linkage for Executable Tasks) уведомлений на email и через сервис pushbullet;
  • В vdev_id.conf добавлена опция 'slot' для указания используемого номера слота;
  • В команду «zpool export» добавлена опция »-a» для размонтирования и экспорта всех импортированных пулов;
  • В команду «zpool iostat» добавлена опция »-y» для пропуска первого набора загрузочной статистики;
  • В zdb добавлена возможность открытия корневого набора (root dataset), вывода числа связанных блоков (ganged blocks), показа детальной информации по объектам («zdb -ddddd»);
  • В команде «zstreamdump -d» обеспечен показ содержимого блоков;
  • Загрузка модулей ZFS теперь осуществляется при помощи systemd или скриптов sysv init. Отныне модули нужно загружать явно — запуск утилит zfs/zpool не приводит к автоматической загрузке модулей (старое поведение можно вернуть через установку переменной окружения ZFS_MODULE_LOADING=yes, которая будет удалена в одном из будущих выпусков);
  • Унифицированы скрипты инициализации для SYSV и Gentoo OpenRC. Ранее доступная функциональность разнесена по скриптам zfs-import, zfs-mount, zfs-share и zfs-zed, что позволяет отдельно контролировать каждый компонент;
  • В качестве предлагаемого по умолчанию метода сжатия задействован lz4;
  • Использование операций mkdir/rmdir/mv в директории .zfs/snapshot по умолчанию запрещено и требует явного включения чрез опцию zfs_admin_snapshot.

© OpenNet