Гид по технологиям

7. Настройка AoE-таргетов

12 min read Сеть хранения Обновлено 30 Oct 2025
AoE: настройка таргетов и примеры
AoE: настройка таргетов и примеры

Important: команды в примерах выполняются от root; если у вас нет свободных физических разделов, используйте loop-устройства (losetup) как показано далее.

О чём этот документ

Этот документ — практический набор инструкции по настройке AoE (ATA over Ethernet) таргетов на Linux. Он подходит для инженеров по хранению данных, системных администраторов и специалистов по сетям, которые хотят экспортировать блочные устройства по локальной сети с помощью различных реализаций AoE-таргета.

Кому полезно: администраторы, инженерные команды, инженеры DevOps, тестировщики хранения.

Краткий список рассмотренных реализаций:

  • kvblade
  • aoeserver
  • vblade-kernel
  • vblade (userspace)
  • ggaoed (базовая и обновлённая версии)
  • qaoed / sqaoed

Что такое AoE (в одном предложении)

AoE — простой сетевой протокол для доступа к блочным устройствам поверх Ethernet без использования IP; он делает seekable-файл или раздел доступным как удалённый диск.


Разделы и структура статьи

Каждый реализованный таргет описан единообразно: краткое описание, требования к сборке, важные правки или патчи, создание блочного устройства (dd + losetup), команда экспорта, типичные проблемы и советы по отладке.

В конце документа — дополнительные материалы: чеклисты ролей, таблица совместимости, сценарии тестирования, методика приёма, рекомендации по безопасности и возможные альтернативы AoE.


7.1 Kvblade

О kvblade

Kvblade — это модуль ядра, реализующий сторону таргета AoE. Через sysfs модулю можно указать, какие блочные устройства экспортировать по указанным сетевым интерфейсам. Для экспорта обычных файлов часто используется loopback-устройство как промежуточный слой.

Примечание: в оригинальном коде могут потребоваться мелкие правки под современные версии ядра (см. раздел “Сборка и установка”).

Сборка и установка

Загрузка архива kvblade-alpha3 в примерах выполняется командой wget (пример из исходного текста):

[root@node1 ]# wget http://downloads.sourceforge.net/aoetools/kvblade-alpha-3.tgz

Распаковка и вход в каталог:

[root@node1 ]# tar -xzvf kvblade-alpha-3.tgz [root@node1 ]# cd kvblade-alpha-3

В исходном руководстве компиляция модуля выполнялась на Fedora 7. Для современных дистрибутивов могут потребоваться незначительные изменения исходников (часто — имена заголовков ядра или символы структур). В примере было указано изменить linux/config.h -> linux/autoconf.h и ATA SERNO LEN -> ATA ID SERNO LEN в kvblade.c.

Выполните стандартные команды сборки и установки модуля:

  [root@node1 kvblade-alpha-3]# make
  [root@node1 kvblade-alpha-3]# make install
  [root@node1 kvblade-alpha-3]# insmod kvblade.ko

Проверка загрузки модуля:

  [root@node1 kvblade-alpha-3]# lsmod | grep kvblade

Пример ожидаемого вывода (в исходном документе):

  kvblade 17992 0 

Если modprobe/insmod выдаёт ошибки о несовместимости с текущим ядром, попробуйте собрать модуль с заголовками текущего ядра (пакет kernel-devel/headers) и применить минимальные правки, упомянутые выше.

Создание блочного устройства

Если нет свободного физического раздела, можно создать файл и подключить его как loop-устройство:

[root@node1 kvblade-alpha-3]# dd if=/dev/zero of=le.img bs=1M count=400 [root@node1 kvblade-alpha-3]# losetup /dev/loop0 le.img

Пояснение: dd создаёт файл размером 400 MiB, losetup связывает его с /dev/loop0.

Экспорт блочного устройства через kvblade

Запуск команды экспорта из примера:

[root@node1 kvblade-alpha-3]# ./kvadd 0 0 eth0 /dev/loop0

Где 0 0 — shelf и slot, eth0 — интерфейс, /dev/loop0 — экспортируемое устройство.

Типичные проблемы и отладка:

  • Ошибка при загрузке модуля — проверьте версии заголовков ядра.
  • Таргет видим в локальной машине, но клиенты не видят его — проверьте, что интерфейс не заблокирован брандмауэром и что сеть локальная (AoE использует кадры Ethernet, не IP).

7.2 Aoeserver

О aoeserver

Aoeserver — модуль ядра (таргет) для AoE, реализующий поведение EtherDriver Blade (Coraid). Частично основан на vblade и aoe-клиенте из ядра Linux.

Сборка и установка

Исходный код в примере загружают через SVN:

[root@node1 ]# svn checkout http://aoeserver.googlecode.com/svn/trunk/ aoeserver [root@node1 ]# cd aoeserver/aoeserver

В исходнике для конкретной версии ядра авторы вручную отключали создание /proc-записей: закомментировать строки 362 и 380 в aoeproc.c как в исходных указаниях.

Сборка и установка:

[root@node1 aoeserver]# make [root@node1 aoeserver]# make install

Загрузка модуля:

[root@node1 aoeserver]# sh load.sh 

Создание блочного устройства

[root@node1 aoeserver]# dd if=/dev/zero of=file1.img bs=1M count=400
[root@node1 aoeserver]# losetup /dev/loop1 file1.img

Экспорт блочного устройства через aoeserver

[root@node1 aoeserver]# echo add /dev/loop1 0 1 eth0 > /proc/aoeserver 

Здесь 0 — shelf, 1 — slot, eth0 — интерфейс.

Советы по отладке:

  • Убедитесь, что /proc/aoeserver доступен и что модуль успешно зарегистрировал интерфейс.
  • Для диагностики сети используйте tcpdump/snoop на соответствующем интерфейсе и фильтр по EtherType AoE.

7.3 Vblade-kernel

О vblade-kernel

Vblade-kernel — реализация AoE-таргета в виде модуля ядра для семейств 2.6.*. Она обеспечивает экспорт seekable-файлов как AoE-устройств.

Сборка и установка

Пример загрузки архива (в исходниках приведён wget с путём):

[root@node1 krishna]# wget http://lpk.com.price.ru ~lelik/AoE/vblade-kernel-0.3.4.tar.gz [root@node1 krishna]# tar -xzvf vblade-kernel-0.3.4.tar.gz [root@node1 krishna]# cd vblade-kernel-0.3.4

В руководстве указано внести правки: linux/config.h -> linux/autoconf.h и заменить вызов skb_linearize(skb, GFP_ATOMIC) на skb_linearize(skb) в зависимости от наличия второго аргумента в вашем ядре.

Сборка и загрузка:

[root@node1 vblade-kernel-0.3.4]# make [root@node1 vblade-kernel-0.3.4]# insmod vb.ko

Создание блочных устройств

[root@node1 vblade-kernel-0.3.4]# dd if=/dev/zero of=file2.img bs=1M count=200
[root@node1 vblade-kernel-0.3.4]# losetup /dev/loop2 gile2.img

Примечание: в примере опечатка имени файла (gile2.img). Убедитесь, что вы используете корректное имя созданного файла (file2.img или gile2.img) при losetup.

Экспорт через vblade-kernel

Команды из примера:

[root@node1 vblade-kernel-0.3.4]# echo add do /dev/loop2 > /sys/vblade/drives [root@node1 vblade-kernel-0.3.4]# echo add eth0 0 2 32 8 > /sys/vblade/do/ports

Параметры: eth0 — интерфейс, 0 — shelf, 2 — slot, 32 — длина буфера (queue length), 8 — макс. секторов в запросе.

Debug:

  • Проверьте содержимое /sys/vblade и права доступа.
  • Если модуль грузится, но устройства не появляются у клиента, проверьте MAC-фильтрацию и локальные правила L2-сегмента.

7.4 Vblade (userspace)

О vblade (userspace)

Vblade — userspace-программа, которая делает seekable-файл доступным по AoE. В отличие от модульной реализации, userspace-демон легче переносится между дистрибутивами и не зависит от компиляции модуля для конкретной версии ядра.

Сборка и установка

Примеры команд из исходника:

[root@node1 krishna]# wget http://downloads.sourceforge.net/aoetools/vblade-19.tgz [root@node1 krishna]# tar -xzvf vblade-19.tgz [root@node1 krishna]# cd vblade-19 [root@node1 krishna]# make [root@node1 vblade-19]# make install

Создание блочного устройства

[root@node1 vblade-19]# dd if=/dev/zero of=newfile3.img bs=1M count=200
[root@node1 vblade-19]# losetup /dev/loop3 newfile3.img

Экспорт блочного устройства через vblade

[root@node1 vblade-19]# ./vbladed 0 3 eth0 /dev/loop3

Объяснение: vbladed <интерфейс> <устройство>

Преимущества userspace vblade:

  • Простота запуска и отладки.
  • Нет необходимости в пересборке под конкретное ядро.

Ограничения:

  • Может иметь чуть большую задержку по сравнению с модулем в ядре из-за контекстных переключений.

7.5 GGAOED

Ggaoed — AoE-таргет, использующий AIO, mmap-сокеты и другие возможности Linux для высокой производительности. Существует базовая версия (release-0.9) и обновлённая версия, адаптированная под спецификацию AoE от февраля 2009.

7.5.1 Базовая версия (ggaoed-0.9)

Требования к окружению (в оригинале):

  • glibc 2.7
  • libaio 0.3.107
  • libatomic_ops 1.2
  • glib 2.12
  • xsltproc и стили DocBook для документации

Сборка и установка:

[root@node1 ggaoed-0.9]# ./configure [root@node1 ggaoed-0.9]# make [root@node1 ggaoed-0.9]# make install

Пример файла конфигурации ggaoed.conf (формат INI-подобный):

[sdc]
path = /dev/sda2
shelf = 0
slot = 0
broadcast = true
read-only = true
queue-length=64
direct-io=true

Если у вас нет незанятой раздела /dev/sda2, можно использовать файл + losetup, как в других примерах.

Запуск ggaoed в режиме демона:

[root@node1 ggaoed-0.9]# ./ggaoed -c ggaoed.conf -d

7.5.2 Обновлённая версия ggaoed

Обновлённая версия поддерживает дополнительные возможности спецификации AoE: MAC-фильтрацию, ACL и другие улучшения.

Сборка из SVN (пример):

[root@node1 Desktop]# svn checkout http://ggaoed.googlecode.com/svn/trunk/ggaoed [root@node1 ggaoed]# cd ggaoed/ [root@node1 ggaoed]# autoreconf - - install

Иногда требуется закомментировать SUBDIRS для документации в Makefile.am (как указано в исходнике).

Пример конфигурации для обновлённой версии (файл ggaoed.conf):

# Sample ggaoed configuration file
[defaults]
pid-file = /var/run/ggaoed.pid
[eth0]
mtu = 1500
[testdev]
path = /dev/loop0
direct-io = true
queue-length = 16
shelf = 0
slot = 0
interfaces = eth0   broadcast = true
read-only = true

Создание блочного файла и маппинг:

[root@node1 ]# dd if=/dev/zero of=newfile.img bs=1M count=200 [root@node1 ]# losetup /dev/loop0 newfile.img

Запуск:

[root@node1 ]# ./ggaoed -c ggaoed.conf -d

Отладка:

  • Проверьте лог-файлы демона (или stdout при запуске без -d).
  • Убедитесь, что direct-io и queue-length настроены в соответствии с требованиями производительности вашего хоста.

7.6 Qaoed

Qaoed — многопоточный демон AoE с гибкой конфигурацией; имеет вариации qaoed и портированную под Solaris версию sqaoed.

7.6.1 Базовая версия QAOED

Сборка из SVN:

[root@node1 Desktop]# svn checkout http://qaoed.googlecode.com/svn/trunk/qaoed [root@node1 qaoed]# make

Создание блочного файла:

[root@node1 qaoed]# dd if=/dev/zero of=newfile6.img bs=1M count=200
[root@node1 qaoed]# losetup /dev/loop6 newfile6.img

Пример конфигурации (фрагмент из примера):

apisocket = /tmp/qaoedsocket;   default
{
shelf = 0; /* Shelf */
slot = 6; /* Autoincremented slot numbers */
interface = eth0;
device
{
target = /dev/loop6;
}

Запуск демона:

[root@node1 qaoed]# ./qaoed -c qaoed.conf

7.6.2 SQAOED (порт на Solaris)

Sqaoed — результат портирования qaoed на Solaris путём удаления pthread-зависимостей и перестановки частей кода. Использовали для тестов на Sun T5x20/UltraSPARC платформах.

Сборка и запуск (пример):

[root@node1 sqaoed]# svn co http://svn.fubra.com/storage/sqaoed/ trunk [root@node1 sqaoed]# cd trunk/trunk [root@node1 sqaoed]# make [root@node1 sqaoed]# make install

Создание блочного файла и запуск:

[root@node1 trunk]# dd if=/dev/zero of=newfile7.img bs=1M count=200 [root@node1 trunk]# losetup /dev/loop7 newfile7.img [root@node1 trunk]# ./sqaoed eth0 /dev/loop7 0 0


Универсальные советы по сборке и отладке AoE-таргетов

  • Заголовки ядра: всегда устанавливайте пакет kernel-devel/kernel-headers соответствующий запущенному ядру перед сборкой модулей.
  • Логи и отладка: используйте dmesg/journalctl для сообщений ядра и stdout/файлы логов демонов.
  • Сетевая диагностика L2: AoE — слой Ethernet (L2), поэтому tcpdump с фильтром по EtherType AoE (0x88A2) или простая прослушка на интерфейсе eth0 полезны.
  • Брандмауэр: отключите (на время теста) iptables/nftables для локальной сети, либо разрешите соответствующие кадры.
  • Проверка со стороны клиента: на клиенте с поддержкой AoE (aoetools/aoe client) выполните aoe-discover и aoe-stat.

Роли и чеклисты (role-based checklists)

Администратор инфраструктуры:

  • Проверил наличие kernel-devel/kernel-headers
  • Создал пространство для блочного файла (dd) и связал его через losetup
  • Установил и загрузил модуль или запустил userspace-демон
  • Настроил файл конфигурации (если есть)
  • Проверил выходные данные lsmod / ps и логи демона

Сетевой инженер:

  • Проверил физическую связанность L2-сегмента
  • Проверил ARP/MAC таблицы и отсутствие фильтрации Ethernet-кадров
  • Провёл tcpdump на интерфейсе при попытке обнаружить AoE-кадры

Тестировщик/QA:

  • Убедился, что клиент видит таргет (aoe-discover)
  • Выполнил базовые IO-операции (dd, fio) и проверил целостность
  • Прогнал сценарии отказа: отключение интерфейса/перезапуск демона

Критерии приёмки (минимальные тесты)

  1. Клиент обнаруживает таргет командой aoe-discover.
  2. На клиенте появляется устройство (например /dev/etherd0 или /dev/aoe0) и его можно смонтировать/использовать.
  3. Простая запись/чтение: на таргете выполняется запись файла через клиент (dd) и затем его содержимое совпадает.
  4. При рестарте демона/модуля таргет корректно поднимается и клиенты повторно видят устройство.

Тест-кейсы и приёмочные критерии

Тест 1 — Базовый IO:

  • Действия: на клиенте обнаружить таргет, создать filesystem (mkfs.ext4) на экспортированном устройстве, смонтировать, записать файл 100 MiB, размонтировать, снова смонтировать и проверить целостность.
  • Ожидание: файл читается корректно, нет ошибок dmesg.

Тест 2 — Нагрузочное тестирование:

  • Действия: запустить fio с параметрами секвенциальной и случайной записи/чтения при разных глубинах очереди.
  • Ожидание: нет критических ошибок, стабильная работа демона.

Тест 3 — Отказоустойчивость:

  • Действия: во время IO отключить сетевой интерфейс на таргете, затем включить; проверить восстановление.
  • Ожидание: IO завершится ошибкой на клиенте, после восстановления сеть вновь доступна и устройство обнаруживается.

Ментальные модели и эвристики (mental models)

  • AoE как “локальный диск по Ethernet”: представьте, что вы подключаете внешний диск к сети на уровне канального слоя, без IP.
  • Userspace vs Kernel: модуль в ядре даёт потенциально меньшую задержку; userspace проще для быстрой развёртки и отладки.
  • Loop-устройство как тестовый стенд: всегда сначала пробуйте на файлах, прежде чем экспортировать реальные разделы/диски.

Альтернативы AoE и когда использовать другие решения (counterexamples / alternatives)

Когда AoE не подходит:

  • Межсетевые границы и маршрутизация: AoE работает на L2, если нужно межподсетьное соединение — лучше iSCSI (работает поверх IP) или NFS/SMB для файлового доступа.
  • Требуется шифрование/аутентификация на уровне транспорта — тогда iSCSI + IPSec/CHAP или Ceph/Gluster с TLS будут предпочтительнее.

Альтернативы:

  • iSCSI — блочный протокол поверх TCP/IP; проще маршрутизировать и безопаснее в WAN.
  • NVMe-oF (NVMe over Fabrics) — для высокопроизводительных сетей с поддержкой RDMA/FC.
  • NBD (Network Block Device) — простая userspace-реализация блочного доступа по TCP.

Таблица совместимости и советы миграции (compatibility / migration tips)

  • Модули ядра (kvblade, vblade-kernel, aoeserver): требуют компиляции под конкретное ядро; миграция между версиями ядра может потребовать правок.
  • Userspace демоны (vblade, qaoed, ggaoed): чаще переносятся между дистрибутивами проще и быстрее.
  • Ggaoed предлагает опции производительности (direct-io, queue-length) — при переносе на другой хост сравните параметры и профили IO.

Совет: перед миграцией проведите smoke-tests (обнаружение, монтирование, базовый IO и тест отказа).


Безопасность и приватность

  • AoE не шифрует трафик; в пределах доверенной физической сети это может быть приемлемо, но для небезопасных сегментов требуется дополнительное шифрование на уровне канала (например, VPN на L2) или переход на протоколы поверх IP с поддержкой шифрования.
  • Контроль доступа: некоторые реализации (обновлённая ggaoed) поддерживают MAC-фильтрацию и ACL. Используйте эти механизмы при необходимости ограничения доступа.
  • Изоляция VLAN: размещайте AoE-трафик в отдельном VLAN для предотвращения случайного доступа извне.

Чек-лист развёртывания (SOP / playbook)

  1. Подготовка хоста:
    • Установить kernel-headers/devel, инструменты сборки (gcc, make, autoconf) и зависимости (libaio, glib и т.д.).
  2. Создание тестового блочного файла:
    • dd if=/dev/zero of=/var/aoe/test.img bs=1M count=1024
    • losetup /dev/loop9 /var/aoe/test.img
  3. Сборка и загрузка таргета (пример для vblade):
    • make && make install
    • ./vbladed 0 9 eth0 /dev/loop9
  4. На клиенте:
    • aoe-discover
    • aoe-stat
    • mkfs.ext4 /dev/aoex.y (в зависимости от присвоения)
    • mount /dev/aoex.y /mnt/aoe
  5. Тестирование:
    • dd if=/dev/zero of=/mnt/aoe/testfile bs=1M count=100
    • umount /mnt/aoe
  6. Документация: записать shelf/slot и соответствие IP/MAC/интерфейсов в CMDB.

Частые ошибки и способы их устранения

  • “Не видно таргета на клиенте”: убедитесь, что таргет и клиент находятся в одном L2-сегменте; проверьте, что демоны/модули запущены и что NIC не блокирует нестандартные кадры.
  • “Не удаётся собрать модуль”: проверьте версию kernel-devel и измените include-строки или API-замены в исходниках, описанные в разделах к каждому таргету.
  • “Проблемы производительности”: проверьте queue-length, direct-io, настройку IRQ/NUMA и MTU интерфейса.

Короткая справка (cheat sheet)

  • Создание loop-устройства: dd + losetup
  • Экспорт через kvblade: ./kvadd
  • Экспорт через vblade (userspace): ./vbladed
  • Экспорт через aoeserver: echo add > /proc/aoeserver
  • Проверка с клиента: aoe-discover; aoe-stat

1-строчный глоссарий

  • shelf: логическая группа/контейнер в AoE (аналог шасси);
  • slot: позиция устройства в shelf;
  • loop device: привязка файла в блочное устройство (/dev/loopN);
  • direct-io: параметр, заставляющий использовать прямой I/O, минуя кэш ядра.

Резюме

  • AoE подходит для простых, высокопроизводительных решений в пределах L2-сегмента.
  • Выбор реализации зависит от требований: kernel-модули — для минимальной задержки; userspace — для простоты развёртывания.
  • Всегда тестируйте на loop-устройствах прежде чем использовать реальные диски.

Notes: держите AoE-трафик в доверенной сети или используйте дополнительные механизмы шифрования/изоляции.


Контактные заметки для внедрения (короткое объявление)

Если вы планируете внедрять AoE в production: начните с пилота в изолированном VLAN, прогоните тесты приёма, оцените производительность и подготовьте процедуру отката: остановка демона/удаление /dev/loop и восстановление сервиса с локальными дисками.


Ключевые выводы:

  • AoE — L2-протокол для блочного доступа по Ethernet.
  • Используйте loop-устройства для тестирования и отладки.
  • Для production учитывайте безопасность, VLAN и совместимость модулей ядра.
Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Троян Herodotus: как он работает и как защититься
Кибербезопасность

Троян Herodotus: как он работает и как защититься

Включить новое меню «Пуск» в Windows 11
Windows 11

Включить новое меню «Пуск» в Windows 11

Панель полей PivotTable в Excel — руководство
Excel

Панель полей PivotTable в Excel — руководство

Включить новый Пуск в Windows 11 — инструкция
Windows

Включить новый Пуск в Windows 11 — инструкция

Как убрать дубликаты Диспетчера задач Windows 11
Windows

Как убрать дубликаты Диспетчера задач Windows 11

Как просмотреть историю просмотров Reels в Instagram
Социальные сети

Как просмотреть историю просмотров Reels в Instagram