Netzwerkprotokolle · 10 min read · Feb 02, 2026

Verwendung von ATA über Ethernet (AoE) auf CentOS 7 (Initiator und Ziel)

Diese Anleitung erklärt, wie Sie ein AoE-Ziel und einen AoE-Initiator (Client) einrichten können, die beide CentOS 7 ausführen. AoE steht für “ATA über Ethernet” und ist ein Protokoll für Speicherbereichsnetzwerke (SAN), das es AoE-Initiatoren ermöglicht, Speichergeräte auf dem (fremden) AoE-Ziel über normale Ethernet-Kabel zu verwenden. “Fremd” bedeutet in diesem Fall “innerhalb des gleichen LAN”, da AoE außerhalb eines LAN nicht routbar ist (dies ist ein wesentlicher Unterschied zu iSCSI). Für den AoE-Initiator sieht der entfernte Speicher wie eine normale, lokal angeschlossene Festplatte aus.

1 Vorbemerkung

Ich verwende hier zwei CentOS 7-Server:

  • server1.example.com (Initiator): IP-Adresse 192.168.1.100
  • server2.example.com (Ziel): IP-Adresse 192.168.1.101

2 Zusätzliche Repositories aktivieren

server1/server2:

Zuerst importieren wir die GPG-Schlüssel für Softwarepakete:

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

Dann aktivieren wir das EPEL-Repository auf unserem CentOS-System, da viele der Pakete, die wir im Verlauf dieses Tutorials installieren werden, im offiziellen CentOS 7-Repository nicht verfügbar sind:

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

Bearbeiten Sie /etc/yum.repos.d/epel.repo…

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

… und fügen Sie die Zeile priority=10 zum Abschnitt [epel] hinzu:

[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
[...]

Dann aktualisieren wir unsere vorhandenen Pakete auf dem System:

yum -y update

3 Laden des AoE-Kernelmoduls auf beiden Systemen

server1/server2:

Bevor wir beginnen, müssen wir sicherstellen, dass der Kernel AoE unterstützt:

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

Dies sollte etwas wie folgt anzeigen:

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

Das bedeutet, dass AoE als Kernelmodul erstellt wurde. Lassen Sie uns überprüfen, ob das Modul bereits geladen ist:

lsmod | grep aoe

Wenn Sie nichts zurückbekommen, bedeutet dies, dass es nicht geladen ist. In diesem Fall können wir es wie folgt laden:

modprobe aoe

Überprüfen wir erneut, ob das Modul geladen ist:

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

Um das Modul automatisch beim Booten des Systems zu laden, fügen wir die folgende Zeile zu /etc/rc.local hinzu:

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

4 Einrichten des Servers (Ziel) auf Server 2

server2:

Zuerst richten wir das Ziel (server2) ein:

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

Wir können ungenutzte logische Volumes, Bilddateien, Festplatten (z.B. /dev/sdb), Festplattenpartitionen (z.B. /dev/sdb1) oder RAID-Geräte (z.B. /dev/md0) für den Speicher verwenden.

In diesem Beispiel werde ich eine Bilddatei von 10 GB verwenden, die sich im Speicherordner /storage befindet.

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

Dies erstellt eine Bilddatei /storage/storage1.img mit einer Größe von 10 GB.

Wenn Sie stattdessen ein logisches Volume verwenden möchten, können Sie eines mit einer Größe von 10 GB namens storage1 in der Volume-Gruppe vg0 wie folgt erstellen:

lvcreate -L10G -n storage1 vg0

Jetzt exportieren wir unser Speichergerät wie folgt:

vbladed 0 1 ens33 /storage/storage1.img

Die erste Zahl (0) ist die Regalnummer (major), die zweite (1) die Slotnummer (minor), ändern Sie diese Zahlen nach Belieben. Jedes AoE-Gerät wird durch ein Paar major/minor identifiziert, das eindeutig sein muss (wenn Sie mehrere Geräte exportieren), wobei major zwischen 0-65535 und minor zwischen 0-255 liegt. Der Teil ens33 sagt vbladed, welches Ethernet-Gerät verwendet werden soll. Sie können die Details zu Ihren Ethernet-Geräten herausfinden, indem Sie ausführen:

ifconfig

Um den Export automatisch zu starten, wann immer Sie das Ziel booten, öffnen Sie /etc/rc.local…

nano /etc/rc.local

… und fügen Sie die folgende Zeile hinzu (nach der modprobe aoe-Zeile!):

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

5 Einrichten des Clients (Initiator) auf Server 1

server1:

Auf server1 installieren wir den Initiator. Es gibt kein Paket für CentOS 7, aber das von CentOS 6 funktioniert gut, also werden wir das hier verwenden.

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

Jetzt überprüfen wir, welche AoE-Speichergeräte verfügbar sind:

aoe-discover

Der Befehl

aoe-stat

sollte jetzt die Speichergeräte anzeigen:

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

An diesem Punkt haben wir ein neues Blockgerät auf der Client-Box mit dem Namen /dev/etherd/e0.1 verfügbar. Wenn wir uns den /dev-Baum ansehen, erscheint ein neuer Knoten:

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 ~]#

Um dieses Gerät zu verwenden, müssen wir es formatieren:

fdisk /dev/etherd/e0.1
[root@server1 ~]# fdisk /dev/etherd/e0.1  
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel  
Building a new DOS disklabel with disk identifier 0xed572fd4.  
Changes will remain in memory only, until you decide to write them.  
After that, of course, the previous content won't be recoverable.  
   
   
The number of cylinders for this disk is set to 2610.  
There is nothing wrong with that, but this is larger than 1024,  
and could in certain setups cause problems with:  
1) software that runs at boot time (e.g., old versions of LILO)  
2) booting and partitioning software from other OSs  
   (e.g., DOS FDISK, OS/2 FDISK)  
Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)  
   
Command (m for help): <-- n  
 Command action  
   e   extended  
   p   primary partition (1-4)  
 <-- p  
 Partition number (1-4): <-- 1  
First sector (2048-20479999, default 2048): <-- ENTER  
 Using default value 1  
Last sector, +sectors or +size{K,M,G} (2048-20479999, default 20479999): <-- ENTER  
Using default value 20479999  
Partition 1 of type Linux and of size 9.8 GiB is set  
   
Command (m for help): <-- t  
 Selected partition 1  
Hex code (type L to list codes): <-- L  
   
 0  Empty           1e  Hidden W95 FAT1 80  Old Minix       bf  Solaris  
 1  FAT12           24  NEC DOS         81  Minix / old 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 hidden C:  c7  Syrinx  
 5  Extended        41  PPC PReP Boot   85  Linux extended  da  Non-FS data  
 6  FAT16           42  SFS             86  NTFS volume set db  CP/M / CTOS / .  
 7  HPFS/NTFS       4d  QNX4.x         87  NTFS volume set de  Dell Utility  
 8  AIX             4e  QNX4.x 2nd part 88  Linux plaintext df  BootIt  
 9  AIX bootable    4f  QNX4.x 3rd part 8e  Linux LVM       e1  DOS access  
 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  Hidden FAT12    56  Golden Bow      a7  NeXTSTEP        f1  SpeedStor  
12  Compaq diagnost 5c  Priam Edisk     a8  Darwin UFS      f4  SpeedStor  
14  Hidden FAT16 <3 61  SpeedStor       a9  NetBSD          f2  DOS secondary  
16  Hidden FAT16    63  GNU HURD or Sys ab  Darwin boot      fb  VMware VMFS  
17  Hidden 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  Hidden W95 FAT3 70  DiskSecure Mult bb  Boot Wizard hid fe  LANstep  
1c  Hidden W95 FAT3 75  PC/IX           be  Solaris boot    ff  BBT  
Hex code (type L to list codes): <-- 83  
   
 Command (m for help): <-- w  
 The partition table has been altered!  
   
Calling ioctl() to re-read partition table.  
Syncing disks.  
[root@server1 ~]#

Danach gibt es ein neues Gerät /dev/etherd/e0.1p1, das Sie in der Ausgabe von

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 ~]#

Jetzt erstellen wir ein Dateisystem auf /dev/etherd/e0.1p1…

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

… und mounten es zu Testzwecken:

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

Sie sollten jetzt das neue Gerät in den Ausgaben von…

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

… und

df -h
[root@server1 ~]# df -h  
Filesystem Size Used Avail Use% Mounted on  
/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 ~]#

Sie können es so aushängen:

umount /mnt

Um das Gerät automatisch beim Booten zu mounten, z.B. im Verzeichnis /storage, erstellen wir dieses Verzeichnis…

mkdir /storage

… und fügen die folgende Zeile zu /etc/fstab hinzu:

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

Das allein reicht nicht aus, um das Gerät beim Booten zu mounten, da die AoE-Sachen nach dem Lesen von /etc/fstab geladen werden. Daher öffnen wir /etc/rc.local…

nano /etc/rc.local

… und fügen die folgenden Zeilen hinzu (nach der modprobe aoe-Zeile!):

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

Zu Testzwecken können Sie jetzt das System neu starten:

reboot

Nach dem Neustart sollte das Gerät gemountet sein:

mount
[root@server1 ~]# mount  
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime,seclabel)  
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)  
devtmpfs on /dev type devtmpfs (rw,nosuid,seclabel,size=930336k,nr_inodes=232584,mode=755)  
securityfs on /sys/kernel/security type securityfs (rw,nosuid,nodev,noexec,relatime)  
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev,seclabel)  
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,seclabel,gid=5,mode=620,ptmxmode=000)  
tmpfs on /run type tmpfs (rw,nosuid,nodev,seclabel,mode=755)  
tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,seclabel,mode=755)  
cgroup on /sys/fs/cgroup/systemd type cgroup (rw,nosuid,nodev,noexec,relatime,xattr,release_agent=/usr/lib/systemd/systemd-cgroups-agent,name=systemd)  
pstore on /sys/fs/pstore type pstore (rw,nosuid,nodev,noexec,relatime)  
cgroup on /sys/fs/cgroup/cpu,cpuacct type cgroup (rw,nosuid,nodev,noexec,relatime,cpuacct,cpu)  
cgroup on /sys/fs/cgroup/memory type cgroup (rw,nosuid,nodev,noexec,relatime,memory)  
cgroup on /sys/fs/cgroup/devices type cgroup (rw,nosuid,nodev,noexec,relatime,devices)  
cgroup on /sys/fs/cgroup/hugetlb type cgroup (rw,nosuid,nodev,noexec,relatime,hugetlb)  
cgroup on /sys/fs/cgroup/net_cls type cgroup (rw,nosuid,nodev,noexec,relatime,net_cls)  
cgroup on /sys/fs/cgroup/freezer type cgroup (rw,nosuid,nodev,noexec,relatime,freezer)  
cgroup on /sys/fs/cgroup/perf_event type cgroup (rw,nosuid,nodev,noexec,relatime,perf_event)  
cgroup on /sys/fs/cgroup/blkio type cgroup (rw,nosuid,nodev,noexec,relatime,blkio)  
cgroup on /sys/fs/cgroup/cpuset type cgroup (rw,nosuid,nodev,noexec,relatime,cpuset)  
configfs on /sys/kernel/config type configfs (rw,relatime)  
/dev/mapper/centos-root on / type xfs (rw,relatime,seclabel,attr2,inode64,noquota)  
selinuxfs on /sys/fs/selinux type selinuxfs (rw,relatime)  
systemd-1 on /proc/sys/fs/binfmt_misc type autofs (rw,nosuid,fd=30,pgrp=1,timeout=300,minproto=5,maxproto=5,direct)  
debugfs on /sys/kernel/debug type debugfs (rw,nosuid)  
mqueue on /dev/mqueue type mqueue (rw,nosuid)  
hugetlbfs on /dev/hugepages type hugetlbfs (rw,nosuid)  
/dev/sda1 on /boot type xfs (rw,nosuid)  
tmpfs on /run/user/0 type tmpfs (rw,nosuid,nodev,relatime)  
/dev/etherd/e0.1p1 on /mnt type ext4 (rw,nosuid)  
[root@server1 ~]#
df -h
[root@server1 ~]# df -h  
Filesystem Size Used Avail Use% Mounted on  
/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 Links

Share: X/Twitter LinkedIn

Erhalte neue Beiträge in deinem Posteingang.

Kein Spam. Jederzeit abmelden.