![](https://habrastorage.org/webt/d4/h6/th/d4h6thdoqdb9pcqqbaopfpcvu2e.png)
В одной из предыдущих публикаций мы уже рассказывали о концепции зонального хранения данных и о том, какие преимущества обеспечивает эта технология. Но насколько готова ваша IT-инфраструктура к ее внедрению? Хотя работа над поддержкой устройств зонального хранения в операционных системах на базе Linux началась еще в 2014 году, некоторые дистрибутивы и по сей день оказываются неспособны полноценно работать с такими накопителями. Чтобы вам было проще сориентироваться, мы подготовили сегодняшний материал, в котором подробно рассмотрены особенности имплементации зонального хранения данных в различных версиях ядер и популярных дистрибутивах Linux.
Рекомендуемые версии ядер Linux
Впервые поддержка зональных блочных устройств хранения данных появилась в ядре Linux версии 4.10. Первоначально таковая была ограничена пользовательским интерфейсом ZBD (Zoned Block Device) на уровне блоков, возможностью управления очередью последовательной записи на уровне SCSI и нативной поддержкой файловой системы F2FS. В последующих версиях ядер появились дополнительные функции и инструменты, призванные оптимизировать работу с устройствами зонального хранения данных:
- 4.13.0 — добавлен маппер зональных блочных устройств dm-zoned;
- 4.16.0 — внедрена поддержка блочной инфраструктуры с несколькими очередями;
- 5.6.0 — добавлена поддержка файловой системы zonefs, позволяющей работать с отдельными зонами зональных блочных устройств как с обычными файлами;
- 5.8.0 — представлен общий интерфейс блочного уровня, поддерживающий операции записи Zone Append (добавление зоны); появилась возможность эмуляции этих операций на уровне SCSI с помощью обычных команд записи;
- 5.9 — добавлена поддержка набора команд NVMe ZNS (Zoned Name Spaces — зональное пространство имен).
Хронологию перечисленных изменений легко проследить на представленной ниже схеме.
![](https://habrastorage.org/webt/4n/km/o9/4nkmo9m1yq6iduddhoc-j7osp6a.png)
Учитывая сказанное выше, при выборе операционной системы следует отдавать предпочтение дистрибутиву, использующему последнюю стабильную версию ядра, поскольку она будет включать в себя все имеющиеся функции и инструменты для работы с зональными блочными устройствами, а также содержать исправления всех проблем и ошибок, известных на момент релиза. Если же вы планируете использовать LTS-версии Linux, то оптимальным выбором для вас станут дистрибутивы операционных систем на базе ядер 4.14, 4.19 и 5.4, так как к ним будут гарантированно применены бэкпорты всех патчей, выпущенных для основной, разрабатываемой в настоящий момент ревизии ядра.
Поддерживаемые дистрибутивы Linux
Предлагаем вашему вниманию сравнительные таблицы, которые помогут оценить уровень поддержки зональных блочных устройств в различных Linux-дистрибутивах, поставляемых с предварительно скомпилированными двоичными ядрами.
Fedora
![](https://habrastorage.org/webt/xh/k6/xn/xhk6xnujcdh_sjfgmenthyblp2g.png)
Fedora — операционная система, разрабатываемая сообществом Fedora Project под эгидой Red Hat. Впервые поддержку интерфейса ZBD данный дистрибутив получил в версии 26. Начиная с 27-й ревизии Fedora также включает в себя dm-zoned, скомпилированный как предварительно загружаемый модуль ядра. Последняя на сегодняшний день стабильная версия Fedora 33 обзавелась поддержкой набора команд NVMe ZNS.
Дистрибутив |
Ядро |
Поддерживаемые технологии |
||
ZBD |
dm-zoned |
ZNS |
||
Fedora 26 (EOL) |
4.11 |
Да |
Нет |
Нет |
Fedora 27 (EOL) |
4.13 |
Да |
Да |
Нет |
Fedora 28 |
4.16 |
Да |
Да |
Нет |
Fedora 29 |
4.18 |
Да |
Да |
Нет |
Fedora 30 |
5.0 |
Да |
Да |
Нет |
Fedora 31 |
5.3 |
Да |
Да |
Нет |
Fedora 32 |
5.6 |
Да |
Да |
Нет |
Fedora 33 |
5.8 |
Да |
Да |
Да |
Debian
![](https://habrastorage.org/webt/gq/nx/ds/gqnxdsuyxlb607gv8k5moqmexfa.png)
Debian — одна из первых Unix-подобных операционных систем, базирующихся на ядре Linux, оказавшая значительное влияние на развитие этого типа ОС в целом. Поддержка зональных блочных устройств появилась в данном дистрибутиве начиная с 10-й версии, получившей кодовое имя Buster.
Дистрибутив |
Ядро |
Поддерживаемые технологии |
|
ZBD |
dm-zoned |
||
Debian 9 (Stretch) |
4.9 |
Нет |
Нет |
Debian 10 (Buster) |
4.19 |
Да |
Да |
Ubuntu
![](https://habrastorage.org/webt/g1/z-/yg/g1z-yg2dq5y7jvvfv7oojezobti.png)
Ubuntu — один из самых популярных бесплатных дистрибутивов Linux, код которого был изначально основан на Debian. Новые стабильные версии операционной системы выходят с периодичностью в 6 месяцев, а выпуски с долгосрочной поддержкой (LTS) — каждые два года. Впервые возможность работы с зональными блочными устройствами через ZBD была реализована в версии 17.04 Zesty Zapus с переходом на ядро 4.10, а уже в следующем выпуске была добавлена поддержка dm-zoned.
Дистрибутив |
Ядро |
Поддерживаемые технологии |
|
ZBD |
dm-zoned |
||
12.04 LTS (Precise Pangolin) |
3.2 |
Нет |
Нет |
14.04 LTS (Trusty Tahr) |
3.13 |
Нет |
Нет |
16.04 LTS (Xenial Xerus) |
4.4 |
Нет |
Нет |
17.04 (Zesty Zapus) |
4.10 |
Да |
Нет |
17.10 (Artful Aardvark) |
4.13 |
Да |
Да |
18.04 LTS (Bionic Beaver) |
4.15 |
Да |
Да |
18.10 (Cosmic Cuttlefish) |
4.18 |
Да |
Да |
19.04 (Disco Dingo) |
5.0 |
Да |
Да |
19.10 (Eoan Ermine) |
5.3 |
Да |
Да |
20.04 LTS (Focal Fossa) |
5.4 |
Да |
Да |
20.10 (Groovy Gorilla) |
5.8 |
Да |
Да |
Red Hat Enterprise Linux
![](https://habrastorage.org/webt/tf/3y/p6/tf3yp635z7_v5i_axrkmsvcjwbs.png)
Red Hat Enterprise Linux — операционная система от компании Red Hat, ориентированная на корпоративных пользователей. Ее отличительными особенностями являются расширенная коммерческая поддержка (до 10 лет с возможностью продления до 13 лет) и высокая стабильность работы, расплатой за которую являются крайне редкие глобальные обновления: даже наиболее актуальный на данный момент дистрибутив 8.3 базируется на ядре 4.180-240.
Хотя эта версия уже поддерживает ZBD и имеет в своем составе dm-zoned, в RHEL соответствующие опции по умолчанию отключены, поэтому работать с зональными устройствами «из коробки» не получится — ядро придется предварительно перекомпилировать.
Дистрибутив |
Ядро |
Поддерживаемые технологии |
|
ZBD |
dm-zoned |
||
RHEL 8 |
4.180-80 |
Нет |
Нет |
RHEL 8.1 |
4.180-147 |
Нет |
Нет |
RHEL 8.2 |
4.180-193 |
Нет |
Нет |
RHEL 8.3 |
4.180-240 |
Нет |
Нет |
Что же касается RHEL 6 и 7, то, поскольку перечисленные выпуски были основаны на ядрах 2.6.32 и 3.10 соответственно, они не способны корректно работать с зональными устройствами хранения данных.
Дистрибутив |
Ядро |
Поддерживаемые технологии |
|
ZBD |
dm-zoned |
||
RHEL 6.0 |
2.6.32-71 |
Нет |
Нет |
RHEL 6.1 |
2.6.32-131 |
Нет |
Нет |
RHEL 6.2 |
2.6.32-220 |
Нет |
Нет |
RHEL 6.3 |
2.6.32-279 |
Нет |
Нет |
RHEL 6.4 |
2.6.32-358 |
Нет |
Нет |
RHEL 6.5 |
2.6.32-431 |
Нет |
Нет |
RHEL 6.6 |
2.6.32-504 |
Нет |
Нет |
RHEL 6.7 |
2.6.32-573 |
Нет |
Нет |
RHEL 6.8 |
2.6.32-642 |
Нет |
Нет |
RHEL 6.9 |
2.6.32-696 |
Нет |
Нет |
RHEL 6.10 |
2.6.32-754 |
Нет |
Нет |
RHEL 6 ELS+ |
2.6.32-754 |
Нет |
Нет |
RHEL 7.0 |
3.10.0-123 |
Нет |
Нет |
RHEL 7.1 |
3.10.0-229 |
Нет |
Нет |
RHEL 7.2 |
3.10.0-327 |
Нет |
Нет |
RHEL 7.3 |
3.10.0-514 |
Нет |
Нет |
RHEL 7.4 |
3.10.0-693 |
Нет |
Нет |
RHEL 7.5 |
3.10.0-862 |
Нет |
Нет |
RHEL 7.6 |
3.10.0-957 |
Нет |
Нет |
RHEL 7.7 |
3.10.0-1062 |
Нет |
Нет |
RHEL 7.8 |
3.10.0-1127 |
Нет |
Нет |
RHEL 7.9 |
3.10.0-1160 |
Нет |
Нет |
CentOS
![](https://habrastorage.org/webt/at/ft/wf/atftwfgsoipyg4zyswerbx3wnds.png)
CentOS — операционная система, разрабатываемая сообществом на основе исходных кодов Red Hat Enterprise Linux. Нумерации дистрибутивов CentOS и RHEL, равно как и возможности соответствующих выпусков операционных систем, на 100% совпадают. Как и в Red Hat Enterprise Linux, поддержка зональных блочных устройств появилась в 8-й версии CentOS, однако для активации необходимых опций ядро придется самостоятельно перекомпилировать.
SUSE Linux Enterprise Server
![](https://habrastorage.org/webt/kd/u2/nc/kdu2ncycmlsktetlqxnkhibxwp4.png)
SUSE Linux Enterprise Server (SLES) — операционная система, ориентированная на корпоративных пользователей, которую разработала немецкая компания SUSE на базе одноименного дистрибутива. Основные версии SLES выходят с интервалом 2–3 года, тогда как пакеты обновлений выпускаются примерно каждые 12 месяцев. Полноценная поддержка зональных блочных устройств была добавлена в SUSE Linux Enterprise Server начиная с версии 12.4.
Дистрибутив |
Ядро |
Поддерживаемые технологии |
|
ZBD |
dm-zoned |
||
11.3 |
3.0.76 |
Нет |
Нет |
11.4 |
3.0.101 |
Нет |
Нет |
12.0 |
3.12 |
Нет |
Нет |
12.1 |
3.12 |
Нет |
Нет |
12.2 |
4.4 |
Нет |
Нет |
12.3 |
4.4 |
Нет |
Нет |
12.4 |
4.12 |
Да |
Да |
15 |
4.12 |
Да |
Да |
15.1 |
4.12.14 |
Да |
Да |
15.2 |
5.3.18 |
Да |
Да |
openSUSE
![](https://habrastorage.org/webt/jc/zf/zm/jczfzmglf1sftwoeqnvxwghce9g.png)
openSUSE (ранее — SUSE Linux и SuSE Professional) — популярный дистрибутив Linux, разработка которого спонсируется SUSE Linux GmbH. В основе концепции openSUSE лежит создание удобных инструментов с открытым исходным кодом для разработчиков программного обеспечения и системных администраторов.
openSUSE получила поддержку интерфейса ZBD, необходимого для работы с зональными блочными хранилищами, начиная с версии Leap 15.0, а с переходом на ядро 5.3 в сборке Leap 15.2 к ней добавился dm-zoned.
Дистрибутив |
Ядро |
Поддерживаемые технологии |
|
ZBD |
dm-zoned |
||
Leap 15.0 |
4.12 |
Да |
Нет |
Leap 15.1 |
4.12 |
Да |
Нет |
Leap 15.2 |
5.3 |
Да |
Да |
Tumbleweed |
5.9+ |
Да |
Да |
Поддерживает ли ваша операционная система устройства зонального хранения данных?
Как сказано выше, интерфейс для работы с зональными блочными устройствами хранения данных (Zoned Block Device, ZBD), поддерживающий стандарты T10 ZBC и T13 ZAC, был добавлен в ядро Linux начиная с версии 4.10, поэтому первое, что необходимо сделать, — проверить текущую версию ядра с помощью команды терминала uname. Например, при использовании дистрибутива Fedora 29 вывод данной команды будет выглядеть следующим образом:
uname -r
5.0.13-200.fc29.x86_64
В нашем случае используется пятая версия ядра, в которую поддержка зональных устройств хранения уже добавлена. Однако, для того чтобы подобные накопители смогли взаимодействовать с операционной системой, ядро должно быть изначально скомпилировано с активным параметром CONFIG_BLK_DEV_ZONED.
Чтобы проверить, включена ли данная опция, можно обратиться напрямую к файлу конфигурации операционной системы, расположенному в директории /boot или /, либо воспользоваться командой:
cat /boot/config-`uname -r` | grep CONFIG_BLK_DEV_ZONED
или же
cat /lib/modules/`uname -r`/config | grep CONFIG_BLK_DEV_ZONED
Для ядер, экспортирующих параметры конфигурации через виртуальную файловую систему proc, можно использовать команды:
modprobe configs
cat /proc/config.gz | gunzip | grep CONFIG_BLK_DEV_ZONED
или
modprobe configs
zcat /proc/config.gz | grep CONFIG_BLK_DEV_ZONED
Если соответствующая опция активна, вы увидите следующий вывод:
CONFIG_BLK_DEV_ZONED=y
В случае же, если в терминале отобразится
CONFIG_BLK_DEV_ZONED=n
это будет означать, что поддержка зональных блочных устройств отключена и ядро необходимо предварительно перекомпилировать. Кстати, если перечисленные команды попробовать запустить в операционной системе, использующей ядро более раннее, чем 4.10, их вывод окажется пуст.
От параметра конфигурации CONFIG_BLK_DEV_ZONED зависит поддержка эмуляции зональных блочных устройств на уровне драйвера null_blk, поддержка подсистемы SCSI для накопителей ZBC и ZAC SMR, а также доступ к набору команд зонального пространства имен, необходимых для работы с NVMe SSD. Что же касается управления порядком команд записи, то здесь все оказывается немного сложнее.
Изначально (в ядрах с 4.10 по 4.15 включительно) данная функция была реализована на уровне ядра. Однако начиная с версии 4.16 управление порядком команд записи было передано планировщикам ввода-вывода блочного уровня deadline (работает с единственной очередью команд) и mq-deadline (реализация deadline с использованием blk-mq, поддерживает множественные очереди), использование которых стало обязательным для корректной работы зональных устройств хранения. Позднее, с релизом ядра 5.0, поддержка deadline была полностью упразднена и планировщик mq-deadline стал основным решением для работы с зональными устройствами хранения.
Таким образом, если вы используете операционную систему, базирующуюся на ядре 4.16 или более позднем, вам необходимо убедиться в том, что в качестве планировщика ввода-вывода выбран deadline или mq-deadline. Для этого достаточно воспользоваться следующей командой:
cat /sys/block/sdb/queue/scheduler
[mq-deadline] kyber bfq none
Если по умолчанию используется другой планировщик, его можно сменить на нужный, введя команду:
echo deadline > /sys/block/sdb/queue/scheduler
или
echo mq-deadline > /sys/block/sdb/queue/scheduler
Теперь вы можете быть уверены в том, что используемая вами операционная система сможет адекватно взаимодействовать с зональными устройствами хранения данных.