7. Настройка 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) и проверил целостность
- Прогнал сценарии отказа: отключение интерфейса/перезапуск демона
Критерии приёмки (минимальные тесты)
- Клиент обнаруживает таргет командой aoe-discover.
- На клиенте появляется устройство (например /dev/etherd0 или /dev/aoe0) и его можно смонтировать/использовать.
- Простая запись/чтение: на таргете выполняется запись файла через клиент (dd) и затем его содержимое совпадает.
- При рестарте демона/модуля таргет корректно поднимается и клиенты повторно видят устройство.
Тест-кейсы и приёмочные критерии
Тест 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)
- Подготовка хоста:
- Установить kernel-headers/devel, инструменты сборки (gcc, make, autoconf) и зависимости (libaio, glib и т.д.).
- Создание тестового блочного файла:
- dd if=/dev/zero of=/var/aoe/test.img bs=1M count=1024
- losetup /dev/loop9 /var/aoe/test.img
- Сборка и загрузка таргета (пример для vblade):
- make && make install
- ./vbladed 0 9 eth0 /dev/loop9
- На клиенте:
- aoe-discover
- aoe-stat
- mkfs.ext4 /dev/aoex.y (в зависимости от присвоения)
- mount /dev/aoex.y /mnt/aoe
- Тестирование:
- dd if=/dev/zero of=/mnt/aoe/testfile bs=1M count=100
- umount /mnt/aoe
- Документация: записать 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 и совместимость модулей ядра.
Похожие материалы
Троян Herodotus: как он работает и как защититься
Включить новое меню «Пуск» в Windows 11
Панель полей PivotTable в Excel — руководство
Включить новый Пуск в Windows 11 — инструкция
Как убрать дубликаты Диспетчера задач Windows 11