Сетевые технологии · 7 min read · Jan 07, 2026

Настройка ATA over Ethernet (AoE) на Debian 8 (Инициатор и Цель)

Этот учебник показывает, как настроить клиент AoE (инициатор) и сервер (цель) на Debian 8 /Jessie). Термин AoE означает “ATA over Ethernet”, который является протоколом сети хранения (SAN), позволяющим клиентам AoE использовать устройства хранения на (удаленном) сервере AoE через обычную Ethernet-сеть. “Удаленный” в данном случае означает “внутри одной локальной сети”, потому что AoE не маршрутизируется за пределами локальной сети (это основное отличие от iSCSI). Для клиента AoE (инициатора) удаленное хранилище выглядит как обычный, локально подключенный жесткий диск.

1 Предварительная заметка

Я использую здесь два сервера Debian 8:

  • server1.example.com (Инициатор): IP-адрес 192.168.1.100
  • server2.example.com (Цель): IP-адрес 192.168.1.101

2 Загрузка модуля ядра AoE на обеих системах

server1/server2:

На первом этапе мы должны убедиться, что ядро на наших серверах поддерживает ATA Over Ethernet. Выполните следующую команду от имени пользователя root.

grep ATA_OVER /boot/config-`uname -r`

Это должно отобразить что-то вроде этого:

root@server1:/tmp# grep ATA_OVER /boot/config-`uname -r`  
CONFIG_ATA_OVER_ETH=m  
root@server1:/tmp#

Это означает, что AoE был встроен как модуль ядра. Теперь мы проверим, загружен ли модуль:

lsmod | grep aoe

Если вы ничего не получите в ответ, это означает, что он не загружен. В этом случае мы можем загрузить его следующим образом:

modprobe aoe

Давайте снова проверим, загружен ли модуль:

lsmod | grep aoe
root@server1:/tmp# lsmod | grep aoe  
aoe 51917 0  
root@server1:/tmp#

Чтобы модуль загружался автоматически при загрузке системы, мы добавляем модуль aoe в /etc/modules:

nano /etc/modules
# /etc/modules: kernel modules to load at boot time.
#
# This file contains the names of kernel modules that should be loaded
# at boot time, one per line. Lines beginning with "#" are игнорируются.
# Параметры могут быть указаны после имени модуля.

aoe

3 Настройка цели (server2)

server2:

Сначала мы настраиваем цель AoE (server2):

apt-get install vblade

Мы можем использовать неиспользуемые логические тома, файлы изображений, жесткие диски (например, /dev/sdb), разделы жестких дисков (например, /dev/sdb1) или устройства RAID (например, /dev/md0) для хранения. В этом примере я буду использовать файл изображения размером 20 ГБ, который хранится в папке /storage.

mkdir /storage  
dd if=/dev/zero of=/storage/storage1.img bs=1024k count=20000

Это создает файл изображения /storage/storage1.img размером 20 ГБ.

Если вы хотите использовать логический том вместо этого, вы можете создать один размером 20 ГБ с именем storage1 в группе томов vg0 следующим образом:

lvcreate -L20G -n storage1 vg0

Теперь мы экспортируем наше устройство хранения следующим образом:

vbladed 0 1 eth0 /storage/storage1.img

Первое число (0) - это номер полки (основной), второе (1) - номер слота (вторичный), измените эти числа по своему усмотрению. Каждое устройство AoE идентифицируется парой основной/вторичной, которая должна быть уникальной (если вы экспортируете несколько устройств), с основной от 0 до 65535 и вторичной от 0 до 255. Часть eth0 указывает vbladed, какое Ethernet-устройство использовать (если ваше Ethernet-устройство - eth1, используйте eth1 - вы можете узнать о ваших Ethernet-устройствах, выполнив

ifconfig

).

Чтобы начать экспорт автоматически при загрузке цели, откройте /etc/rc.local…

nano /etc/rc.local

… и добавьте следующую строку в него (перед строкой exit 0):

[...]  
/usr/sbin/vbladed 0 1 eth0 /storage/storage1.img  
[...]  

4 Настройка клиента AoE / инициатора (server1)

server1:

На server1 мы устанавливаем инициатор:

apt-get install aoetools

Теперь мы проверим, какие устройства хранения AoE доступны:

aoe-discover

Не беспокойтесь, команда не покажет никакого вывода. Команда:

aoe-stat

должна теперь показать устройства хранения:

root@server1:/tmp# aoe-stat  
e0.1 20.971GB eth0 1024 up  
root@server1:/tmp#

На этом этапе у нас есть новое блочное устройство, доступное на клиентском компьютере с именем /dev/etherd/e0.1. Если мы посмотрим на дерево /dev, появляется новый узел:

ls -la /dev/etherd/
root@server1:/tmp# ls -la /dev/etherd/  
total 0  
drwxr-xr-x 2 root root 160 Mar 22 08:46 .  
drwxr-xr-x 19 root root 3160 Mar 22 08:34 ..  
c-w--w---- 1 root disk 152, 3 Mar 22 08:34 discover  
brw-rw---- 1 root disk 152, 0 Mar 22 08:46 e0.1  
cr--r----- 1 root disk 152, 2 Mar 22 08:34 err  
c-w--w---- 1 root disk 152, 6 Mar 22 08:34 flush  
c-w--w---- 1 root disk 152, 4 Mar 22 08:34 interfaces  
c-w--w---- 1 root disk 152, 5 Mar 22 08:34 revalidate  
root@server1:/tmp#

Чтобы использовать это устройство /dev/etherd/e0.1, мы должны отформатировать его:

fdisk /dev/etherd/e0.1
root@server1:/tmp# fdisk /dev/etherd/e0.1
Добро пожаловать в fdisk (util-linux 2.25.2).  
Изменения останутся в памяти только до тех пор, пока вы не решите их записать.  
Будьте осторожны перед использованием команды записи.
Устройство не содержит распознаваемой таблицы разделов.  
Создана новая метка диска DOS с идентификатором диска 0x2922f0be.
Команда (m для помощи): <-- n  
Тип раздела  
p основной (0 основной, 0 расширенный, 4 свободно)  
e расширенный (контейнер для логических разделов)  
Выберите (по умолчанию p): <-- p  
Номер раздела (1-4, по умолчанию 1): <-- 1  
Первый сектор (2048-40959999, по умолчанию 2048): <-- ENTER  
Последний сектор, +секторы или +размер{K,M,G,T,P} (2048-40959999, по умолчанию 40959999): <-- ENTER
Создан новый раздел 1 типа 'Linux' размером 19.5 GiB.
Команда (m для помощи): <-- w
Таблица разделов была изменена.  
Вызов ioctl() для повторного чтения таблицы разделов.  
Синхронизация дисков.

Теперь мы создаем файловую систему на /dev/etherd/e0.1p1…

mkfs.ext4 /dev/etherd/e0.1p1
root@server1:/tmp# mkfs.ext4 /dev/etherd/e0.1p1  
mke2fs 1.42.12 (29-Aug-2014)  
Создание файловой системы с 5119744 4k блоками и 1281120 индексами  
UUID файловой системы: 2342cd83-bd45-4975-96c0-b0f366b73778  
Резервные копии суперблока хранятся на блоках:  
 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,  
 4096000
Выделение таблиц групп: готово  
Запись таблиц индексных узлов: готово  
Создание журнала (32768 блоков): готово  
Запись суперблоков и информации о файловой системе: готово

… и монтируем его для тестирования:

mount /dev/etherd/e0.1p1 /mnt

Теперь вы должны увидеть новое устройство в выводах…

mount
root@server1:/tmp# mount  
sysfs на /sys тип sysfs (rw,nosuid,nodev,noexec,relatime)  
proc на /proc тип proc (rw,nosuid,nodev,noexec,relatime)  
udev на /dev тип devtmpfs (rw,relatime,size=10240k,nr_inodes=125556,mode=755)  
devpts на /dev/pts тип devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000)  
tmpfs на /run тип tmpfs (rw,nosuid,relatime,size=204220k,mode=755)  
/dev/sda1 на / тип ext4 (rw,relatime,errors=remount-ro,data=ordered)  
securityfs на /sys/kernel/security тип securityfs (rw,nosuid,nodev,noexec,relatime)  
tmpfs на /dev/shm тип tmpfs (rw,nosuid,nodev)  
tmpfs на /run/lock тип tmpfs (rw,nosuid,nodev,noexec,relatime,size=5120k)  
tmpfs на /sys/fs/cgroup тип tmpfs (ro,nosuid,nodev,noexec,mode=755)  
cgroup на /sys/fs/cgroup/systemd тип cgroup (rw,nosuid,nodev,noexec,relatime,xattr,release_agent=/lib/systemd/systemd-cgroups-agent,name=systemd)  
pstore на /sys/fs/pstore тип pstore (rw,nosuid,nodev,noexec,relatime)  
cgroup на /sys/fs/cgroup/cpuset тип cgroup (rw,nosuid,nodev,noexec,relatime,cpuset)  
cgroup на /sys/fs/cgroup/cpu,cpuacct тип cgroup (rw,nosuid,nodev,noexec,relatime,cpu,cpuacct)  
cgroup на /sys/fs/cgroup/devices тип cgroup (rw,nosuid,nodev,noexec,relatime,devices)  
cgroup на /sys/fs/cgroup/freezer тип cgroup (rw,nosuid,nodev,noexec,relatime,freezer)  
cgroup на /sys/fs/cgroup/net_cls,net_prio тип cgroup (rw,nosuid,nodev,noexec,relatime,net_cls,net_prio)  
cgroup на /sys/fs/cgroup/blkio тип cgroup (rw,nosuid,nodev,noexec,relatime,blkio)  
cgroup на /sys/fs/cgroup/perf_event тип cgroup (rw,nosuid,nodev,noexec,relatime,perf_event)  
systemd-1 на /proc/sys/fs/binfmt_misc тип autofs (rw,relatime,fd=23,pgrp=1,timeout=300,minproto=5,maxproto=5,direct)  
mqueue на /dev/mqueue тип mqueue (rw,relatime)  
debugfs на /sys/kernel/debug тип debugfs (rw,relatime)  
hugetlbfs на /dev/hugepages тип hugetlbfs (rw,relatime)  
rpc_pipefs на /run/rpc_pipefs тип rpc_pipefs (rw,relatime)  
/dev/etherd/e0.1p1 на /mnt тип ext4 (rw,relatime,data=ordered)  
root@server1:/tmp#

… и

df -h
root@server1:/tmp# df -h  
Файловая система Размер Использовано Доступно Использовано% Смонтировано на  
/dev/sda1 57G 1.1G 54G 2% /  
udev 10M 0 10M 0% /dev  
tmpfs 200M 4.6M 195M 3% /run  
tmpfs 499M 0 499M 0% /dev/shm  
tmpfs 5.0M 0 5.0M 0% /run/lock  
tmpfs 499M 0 499M 0% /sys/fs/cgroup  
/dev/etherd/e0.1p1 20G 44M 19G 1% /mnt  
root@server1:/tmp#

Вы можете размонтировать его следующим образом:

umount /mnt

Чтобы устройство монтировалось автоматически при загрузке, например, в директории /storage, мы создаем эту директорию…

mkdir /storage

… и добавляем следующую строку в /etc/fstab:

nano /etc/fstab
[...]  
/dev/etherd/e0.1p1       /storage        ext4    defaults,auto,_netdev 0 0

Этого недостаточно, чтобы устройство монтировалось при загрузке, потому что AoE загружается после чтения /etc/fstab. Поэтому мы открываем /etc/rc.local…

nano /etc/rc.local

… и добавляем следующие строки в него (перед строкой exit 0):

[...]  
aoe-discover  
sleep 5  
mount -a  
[...]  

Для тестирования вы можете перезагрузить систему:

reboot

После перезагрузки устройство должно быть смонтировано:

mount
root@server1:/tmp# mount  
[...snip...]  
/dev/etherd/e0.1p1 на /storage тип ext4 (rw,relatime,data=ordered)  
[...snip...]
df -h
root@server1:/tmp# df -h  
Файловая система Размер Использовано Доступно Использовано% Смонтировано на  
/dev/sda1 57G 1.1G 54G 2% /  
udev 10M 0 10M 0% /dev  
tmpfs 200M 4.6M 195M 3% /run  
tmpfs 499M 0 499M 0% /dev/shm  
tmpfs 5.0M 0 5.0M 0% /run/lock  
tmpfs 499M 0 499M 0% /sys/fs/cgroup  
/dev/etherd/e0.1p1 20G 44M 19G 1% /storage

Теперь мы можем сделать тестовую запись на смонтированном разделе:

touch /storage/test.txt

Проверьте с помощью команды ls, была ли запись выполнена:

ls -la /storage
root@server1:/tmp# ls -la /storage  
total 24  
drwxr-xr-x 3 root root 4096 Mar 22 09:06 .  
drwxr-xr-x 23 root root 4096 Mar 22 09:05 ..  
drwx------ 2 root root 16384 Mar 22 09:00 lost+found  
-rw-r--r-- 1 root root 0 Mar 22 09:06 test.txt  
root@server1:/tmp#

Файл test.txt был успешно записан на том, который мы смонтировали с server2.

5 Ссылки

Share: X/Twitter LinkedIn

Get new posts in your inbox

No spam. Unsubscribe anytime.