Сеть хранения · 10 min read · Feb 02, 2026

Использование ATA Over Ethernet (AoE) на CentOS 7 (Инициатор и Цель)

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

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

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

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

2 Включение дополнительных репозиториев

server1/server2:

Сначала мы импортируем GPG-ключи для программного обеспечения:

rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY*

Затем мы включаем репозиторий EPEL в нашей системе CentOS, так как многие пакеты, которые мы собираемся установить в ходе этого руководства, недоступны в официальном репозитории CentOS 7:

yum -y install epel-release
yum -y install yum-priorities

Редактируем /etc/yum.repos.d/epel.repo…

nano /etc/yum.repos.d/epel.repo

… и добавляем строку priority=10 в раздел [epel]:

[epel]
name=Extra Packages for Enterprise Linux 7 - $basearch
#baseurl=http://download.fedoraproject.org/pub/epel/7/$basearch
mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-7&arch=$basearch
failovermethod=priority
enabled=1
priority=10
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
[...]

Затем мы обновляем наши существующие пакеты в системе:

yum -y update

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

server1/server2:

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

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

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

[root@server1 ~]# grep ATA_OVER /boot/config-`uname -r`  
CONFIG_ATA_OVER_ETH=m  
[root@server1 ~]#

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

lsmod | grep aoe

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

modprobe aoe

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

lsmod | grep aoe
[root@server1 ~]# lsmod | grep aoe  
aoe 54175 0  
[root@server1 ~]#

Чтобы модуль загружался автоматически при загрузке системы, мы добавляем следующую строку в /etc/rc.local:

nano /etc/rc.local
[...]
modprobe aoe
[...]

4 Настройка сервера (Цель) на сервере 2

server2:

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

rpm -i http://download.opensuse.org/repositories/home:/cyberorg:/ltsp/CentOS_7/x86_64/vblade-22-3.1.x86_64.rpm

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

В этом примере я буду использовать файл образа размером 10 ГБ, который находится в папке хранения /storage.

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

Это создаст файл образа /storage/storage1.img размером 10 ГБ.

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

lvcreate -L10G -n storage1 vg0

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

vbladed 0 1 ens33 /storage/storage1.img

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

ifconfig

).

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

nano /etc/rc.local

… и добавьте следующую строку в него (после строки modprobe aoe!):

[...]
vbladed 0 1 ens33 /storage/storage1.img
[...]

5 Настройка клиента (Инициатор) на сервере 1

server1:

На server1 мы устанавливаем инициатор. Пакета для CentOS 7 нет, но пакет из CentOS 6 работает нормально, поэтому мы будем использовать его здесь.

rpm -i http://download.opensuse.org/repositories/system:/aoetools/CentOS_CentOS-6/x86_64/aoetools-36-1.2.x86_64.rpm

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

aoe-discover

Команда

aoe-stat

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

[root@server1 ~]# aoe-stat  
e0.1 10.485GB ens33 1024 up  
[root@server1 ~]#

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

ls -la /dev/etherd/
[root@server1 ~]# ls -la /dev/etherd/  
total 0  
drwxr-xr-x. 2 root root 160 Jun 30 14:49 .  
drwxr-xr-x. 21 root root 3240 Jun 30 14:32 ..  
c-w--w----. 1 root disk 152, 3 Jun 30 14:32 discover  
brw-rw----. 1 root disk 152, 0 Jun 30 14:49 e0.1  
cr--r-----. 1 root disk 152, 2 Jun 30 14:32 err  
c-w--w----. 1 root disk 152, 6 Jun 30 14:32 flush  
c-w--w----. 1 root disk 152, 4 Jun 30 14:32 interfaces  
c-w--w----. 1 root disk 152, 5 Jun 30 14:32 revalidate  
[root@server1 ~]#

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

fdisk /dev/etherd/e0.1
[root@server1 ~]# fdisk /dev/etherd/e0.1  
Устройство не содержит ни действительной таблицы разделов DOS, ни метки диска Sun, SGI или OSF  
Создание новой таблицы разделов DOS с идентификатором диска 0xed572fd4.  
Изменения останутся в памяти только до тех пор, пока вы не решите записать их.  
После этого, конечно, предыдущий содержимое не будет восстановлено.  
  
  
Количество цилиндров для этого диска установлено на 2610.  
С этим нет ничего плохого, но это больше 1024,  
и может в определенных настройках вызвать проблемы с:  
1) программным обеспечением, которое работает во время загрузки (например, старые версии LILO)  
2) программным обеспечением для загрузки и разделения от других ОС  
   (например, DOS FDISK, OS/2 FDISK)  
Предупреждение: недействительный флаг 0x0000 таблицы разделов 4 будет исправлен w(rite)  
  
Команда (m для помощи): <-- n  
 Команда действия  
   e   расширенный  
   p   основной раздел (1-4)  
 <-- p  
 Номер раздела (1-4): <-- 1  
Первый сектор (2048-20479999, по умолчанию 2048): <-- ENTER  
 Используя значение по умолчанию 1  
Последний сектор, +секторы или +размер{K,M,G} (2048-20479999, по умолчанию 20479999): <-- ENTER  
Используя значение по умолчанию 20479999  
Раздел 1 типа Linux и размером 9.8 GiB установлен  
  
Команда (m для помощи): <-- t  
 Выбранный раздел 1  
Шестнадцатеричный код (тип L для списка кодов): <-- L  
  
 0  Пустой           1e  Скрытый W95 FAT1 80  Старый Minix       bf  Solaris  
 1  FAT12           24  NEC DOS         81  Minix / старый Lin c1  DRDOS/sec (FAT-  
 2  XENIX root      39  Plan 9          82  Linux swap / So c4  DRDOS/sec (FAT-  
 3  XENIX usr       3c  PartitionMagic   83  Linux           c6  DRDOS/sec (FAT-  
 4  FAT16 <32M      40  Venix 80286     84  OS/2 скрытый C:  c7  Syrinx  
 5  Расширенный      41  PPC PReP Boot   85  Linux расширенный  da  Non-FS данные  
 6  FAT16           42  SFS             86  NTFS объем  db  CP/M / CTOS / .  
 7  HPFS/NTFS       4d  QNX4.x         87  NTFS объем  de  Dell Utility  
 8  AIX             4e  QNX4.x 2nd part 88  Linux plaintext df  BootIt  
 9  AIX загрузочный   4f  QNX4.x 3rd part 8e  Linux LVM       e1  DOS доступ  
 a  OS/2 Boot Manag 50  OnTrack DM      93  Amoeba          e3  DOS R/O  
 b  W95 FAT32       51  OnTrack DM6 Aux 94  Amoeba BBT      e4  SpeedStor  
 c  W95 FAT32 (LBA) 52  CP/M            9f  BSD/OS          eb  BeOS fs  
 e  W95 FAT16 (LBA) 53  OnTrack DM6 Aux a0  IBM Thinkpad hi ee  GPT  
 f  W95 Ext'd (LBA) 54  OnTrackDM6      a5  FreeBSD         ef  EFI (FAT-12/16/  
10  OPUS            55  EZ-Drive        a6  OpenBSD         f0  Linux/PA-RISC b  
11  Скрытый FAT12   56  Golden Bow      a7  NeXTSTEP       f1  SpeedStor  
12  Compaq диагност 5c  Priam Edisk     a8  Darwin UFS      f4  SpeedStor  
14  Скрытый FAT16 <3 61  SpeedStor       a9  NetBSD          f2  DOS вторичный  
16  Скрытый FAT16   63  GNU HURD или Sys ab  Darwin boot     fb  VMware VMFS  
17  Скрытый HPFS/NTF 64  Novell Netware  b7  BSDI fs        fc  VMware VMKCORE  
18  AST SmartSleep  65  Novell Netware  b8  BSDI swap       fd  Linux raid auto  
1b  Скрытый W95 FAT3 70  DiskSecure Mult bb  Boot Wizard hid fe  LANstep  
1c  Скрытый W95 FAT3 75  PC/IX           be  Solaris boot    ff  BBT  
Шестнадцатеричный код (тип L для списка кодов): <-- 83  
  
 Команда (m для помощи): <-- w  
 Таблица разделов была изменена!  
  
Вызов ioctl() для повторного чтения таблицы разделов.  
Синхронизация дисков.  
[root@server1 ~]#

После этого появляется новое устройство /dev/etherd/e0.1p1, которое вы можете увидеть в выводе

ls -l /dev/etherd/
[root@server1 ~]# ls -l /dev/etherd/  
total 0  
c-w--w----. 1 root disk 152, 3 Jun 30 14:32 discover  
brw-rw----. 1 root disk 152, 0 Jun 30 14:54 e0.1  
brw-rw----. 1 root disk 152, 1 Jun 30 14:54 e0.1p1  
cr--r-----. 1 root disk 152, 2 Jun 30 14:32 err  
c-w--w----. 1 root disk 152, 6 Jun 30 14:32 flush  
c-w--w----. 1 root disk 152, 4 Jun 30 14:32 interfaces  
c-w--w----. 1 root disk 152, 5 Jun 30 14:32 revalidate  
[root@server1 ~]#

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

mkfs.ext4 /dev/etherd/e0.1p1

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

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

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

mount
[root@server1 ~]# mount  
sysfs на /sys тип sysfs (rw,nosuid,nodev,noexec,relatime,seclabel)  
proc на /proc тип proc (rw,nosuid,nodev,noexec,relatime)  
devtmpfs на /dev тип devtmpfs (rw,nosuid,seclabel,size=930336k,nr_inodes=232584,mode=755)  
securityfs на /sys/kernel/security тип securityfs (rw,nosuid,nodev,noexec,relatime)  
tmpfs на /dev/shm тип tmpfs (rw,nosuid,nodev,seclabel)  
devpts на /dev/pts тип devpts (rw,nosuid,noexec,relatime,seclabel,gid=5,mode=620,ptmxmode=000)  
tmpfs на /run тип tmpfs (rw,nosuid,nodev,seclabel,mode=755)  
tmpfs на /sys/fs/cgroup тип tmpfs (ro,nosuid,nodev,noexec,seclabel,mode=755)  
cgroup на /sys/fs/cgroup/systemd тип cgroup (rw,nosuid,nodev,noexec,relatime,xattr,release_agent=/usr/lib/systemd/systemd-cgroups-agent,name=systemd)  
pstore на /sys/fs/pstore тип pstore (rw,nosuid,nodev,noexec,relatime)  
cgroup на /sys/fs/cgroup/cpu,cpuacct тип cgroup (rw,nosuid,nodev,noexec,relatime,cpuacct,cpu)  
cgroup на /sys/fs/cgroup/memory тип cgroup (rw,nosuid,nodev,noexec,relatime,memory)  
cgroup на /sys/fs/cgroup/devices тип cgroup (rw,nosuid,nodev,noexec,relatime,devices)  
cgroup на /sys/fs/cgroup/hugetlb тип cgroup (rw,nosuid,nodev,noexec,relatime,hugetlb)  
cgroup на /sys/fs/cgroup/net_cls тип cgroup (rw,nosuid,nodev,noexec,relatime,net_cls)  
cgroup на /sys/fs/cgroup/freezer тип cgroup (rw,nosuid,nodev,noexec,relatime,freezer)  
cgroup на /sys/fs/cgroup/perf_event тип cgroup (rw,nosuid,nodev,noexec,relatime,perf_event)  
cgroup на /sys/fs/cgroup/blkio тип cgroup (rw,nosuid,nodev,noexec,relatime,blkio)  
cgroup на /sys/fs/cgroup/cpuset тип cgroup (rw,nosuid,nodev,noexec,relatime,cpuset)  
configfs на /sys/kernel/config тип configfs (rw,relatime)  
/dev/mapper/centos-root на / тип xfs (rw,relatime,seclabel,attr2,inode64,noquota)  
selinuxfs на /sys/fs/selinux тип selinuxfs (rw,relatime)  
systemd-1 на /proc/sys/fs/binfmt_misc тип autofs (rw,relatime,fd=30,pgrp=1,timeout=300,minproto=5,maxproto=5,direct)  
debugfs на /sys/kernel/debug тип debugfs (rw,relatime)  
mqueue на /dev/mqueue тип mqueue (rw,relatime,seclabel)  
hugetlbfs на /dev/hugepages тип hugetlbfs (rw,relatime,seclabel)  
/dev/sda1 на /boot тип xfs (rw,relatime,seclabel,attr2,inode64,noquota)  
tmpfs на /run/user/0 тип tmpfs (rw,nosuid,nodev,relatime,seclabel,size=188060k,mode=700)  
/dev/etherd/e0.1p1 на /mnt тип ext4 (rw,relatime,seclabel,data=ordered)  
[root@server1 ~]#

… и

df -h
[root@server1 ~]# df -h  
Файловая система Размер Использовано Доступно Использовано% Смонтировано на  
/dev/mapper/centos-root 28G 1.3G 27G 5% /  
devtmpfs 909M 0 909M 0% /dev  
tmpfs 919M 0 919M 0% /dev/shm  
tmpfs 919M 8.6M 910M 1% /run  
tmpfs 919M 0 919M 0% /sys/fs/cgroup  
/dev/sda1 497M 192M 306M 39% /boot  
tmpfs 184M 0 184M 0% /run/user/0  
/dev/etherd/e0.1p1 9.5G 37M 9.0G 1% /mnt  
[root@server1 ~]#

Вы можете размонтировать его так:

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

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

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

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

reboot

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

mount
[root@server1 ~]# mount  
sysfs на /sys тип sysfs (rw,nosuid,nodev,noexec,relatime,seclabel)  
proc на /proc тип proc (rw,nosuid,nodev,noexec,relatime)  
devtmpfs на /dev тип devtmpfs (rw,nosuid,seclabel,size=930336k,nr_inodes=232584,mode=755)  
securityfs на /sys/kernel/security тип securityfs (rw,nosuid,nodev,noexec,relatime)  
tmpfs на /dev/shm тип tmpfs (rw,nosuid,nodev,seclabel)  
devpts на /dev/pts тип devpts (rw,nosuid,noexec,relatime,seclabel,gid=5,mode=620,ptmxmode=000)  
tmpfs на /run тип tmpfs (rw,nosuid,nodev,seclabel,mode=755)  
tmpfs на /sys/fs/cgroup тип tmpfs (ro,nosuid,nodev,noexec,seclabel,mode=755)  
cgroup на /sys/fs/cgroup/systemd тип cgroup (rw,nosuid,nodev,noexec,relatime,xattr,release_agent=/usr/lib/systemd/systemd-cgroups-agent,name=systemd)  
pstore на /sys/fs/pstore тип pstore (rw,nosuid,nodev,noexec,relatime)  
cgroup на /sys/fs/cgroup/cpu,cpuacct тип cgroup (rw,nosuid,nodev,noexec,relatime,cpuacct,cpu)  
cgroup на /sys/fs/cgroup/memory тип cgroup (rw,nosuid,nodev,noexec,relatime,memory)  
cgroup на /sys/fs/cgroup/devices тип cgroup (rw,nosuid,nodev,noexec,relatime,devices)  
cgroup на /sys/fs/cgroup/hugetlb тип cgroup (rw,nosuid,nodev,noexec,relatime,hugetlb)  
cgroup на /sys/fs/cgroup/net_cls тип cgroup (rw,nosuid,nodev,noexec,relatime,net_cls)  
cgroup на /sys/fs/cgroup/freezer тип cgroup (rw,nosuid,nodev,noexec,relatime,freezer)  
cgroup на /sys/fs/cgroup/perf_event тип cgroup (rw,nosuid,nodev,noexec,relatime,perf_event)  
cgroup на /sys/fs/cgroup/blkio тип cgroup (rw,nosuid,nodev,noexec,relatime,blkio)  
cgroup на /sys/fs/cgroup/cpuset тип cgroup (rw,nosuid,nodev,noexec,relatime,cpuset)  
configfs на /sys/kernel/config тип configfs (rw,relatime)  
/dev/mapper/centos-root на / тип xfs (rw,relatime,seclabel,attr2,inode64,noquota)  
selinuxfs на /sys/fs/selinux тип selinuxfs (rw,relatime)  
systemd-1 на /proc/sys/fs/binfmt_misc тип autofs (rw,nosuid,fd=30,pgrp=1,timeout=300,minproto=5,maxproto=5,direct)  
debugfs на /sys/kernel/debug тип debugfs (rw,nosuid)  
mqueue на /dev/mqueue тип mqueue (rw,nosuid,seclabel)  
hugetlbfs на /dev/hugepages тип hugetlbfs (rw,nosuid,seclabel)  
/dev/sda1 на /boot тип xfs (rw,nosuid,seclabel,attr2,inode64,noquota)  
tmpfs на /run/user/0 тип tmpfs (rw,nosuid,nodev,relatime,seclabel,size=188060k,mode=700)  
/dev/etherd/e0.1p1 на /mnt тип ext4 (rw,nosuid,seclabel,data=ordered)  
[root@server1 ~]#
df -h
[root@server1 ~]# df -h  
Файловая система Размер Использовано Доступно Использовано% Смонтировано на  
/dev/mapper/centos-root 28G 1.3G 27G 5% /  
devtmpfs 909M 0 909M 0% /dev  
tmpfs 919M 0 919M 0% /dev/shm  
tmpfs 919M 8.6M 910M 1% /run  
tmpfs 919M 0 919M 0% /sys/fs/cgroup  
/dev/sda1 497M 192M 306M 39% /boot  
tmpfs 184M 0 184M 0% /run/user/0  
/dev/etherd/e0.1p1 9.5G 37M 9.0G 1% /mnt  
[root@server1 ~]#

6 Ссылки

Share: X/Twitter LinkedIn

Get new posts in your inbox

No spam. Unsubscribe anytime.