Netzwerkprotokolle · 7 min read · Jan 07, 2026

Einrichten von ATA über Ethernet (AoE) auf Debian 8 (Initiator und Ziel)

Dieses Tutorial zeigt Ihnen, wie Sie einen AoE-Client (Initiator) und einen Server (Ziel) auf Debian 8 /Jessie) einrichten. Der Begriff AoE steht für “ATA über Ethernet”, ein Protokoll für Speicherbereichsnetzwerke (SAN), das es AoE-Clients ermöglicht, Speichergeräte auf dem (remote) AoE-Server über ein normales Ethernet-Netzwerk zu verwenden. “Remote” bedeutet in diesem Fall “innerhalb des gleichen LAN”, da AoE außerhalb eines LAN nicht routbar ist (dies ist ein wesentlicher Unterschied im Vergleich zu iSCSI). Für den AoE-Client (Initiator) sieht der entfernte Speicher wie eine normale, lokal angeschlossene Festplatte aus.

1 Vorbemerkung

Ich verwende hier zwei Debian 8-Server:

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

2 Laden des AoE-Kernelmoduls auf beiden Systemen

server1/server2:

Als ersten Schritt müssen wir sicherstellen, dass der Kernel auf unseren Servern ATA über Ethernet unterstützt. Führen Sie den folgenden Befehl als Root-Benutzer aus.

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

Dies sollte etwas wie folgt anzeigen:

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

Das bedeutet, dass AoE als Kernelmodul eingebaut wurde. Jetzt überprüfen wir, ob das Modul geladen ist:

lsmod | grep aoe

Wenn Sie nichts zurückbekommen, bedeutet das, 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:/tmp# lsmod | grep aoe  
aoe 51917 0  
root@server1:/tmp#

Damit das Modul beim Booten des Systems automatisch geladen wird, fügen wir das AoE-Modul zu /etc/modules hinzu:

nano /etc/modules
# /etc/modules: Kernelmodule, die beim Booten geladen werden sollen.
#
# Diese Datei enthält die Namen von Kernelmodulen, die beim Booten geladen werden sollen,
eins pro Zeile. Zeilen, die mit "#" beginnen, werden ignoriert.
# Parameter können nach dem Modulnamen angegeben werden.

aoe

3 Einrichten des Ziels (server2)

server2:

Zuerst richten wir das AoE-Ziel (server2) ein:

apt-get install vblade

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 20 GB verwenden, die im Ordner /storage gespeichert ist.

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

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

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

lvcreate -L20G -n storage1 vg0

Jetzt exportieren wir unser Speichergerät wie folgt:

vbladed 0 1 eth0 /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 eth0 sagt vbladed, welches Ethernet-Gerät verwendet werden soll (wenn Ihr Ethernet-Gerät eth1 ist, verwenden Sie eth1 - Sie können Ihre Ethernet-Geräte herausfinden, indem Sie

ifconfig

ausführen).

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 (vor der exit 0-Zeile):

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

4 Einrichten des AoE-Clients / Initiators (server1)

server1:

Auf server1 installieren wir den Initiator:

apt-get install aoetools

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

aoe-discover

Keine Sorge, der Befehl zeigt keine Ausgabe. Der Befehl:

aoe-stat

sollte jetzt die Speichergeräte anzeigen:

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

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:/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#

Um das Gerät /dev/etherd/e0.1 zu verwenden, müssen wir es formatieren:

fdisk /dev/etherd/e0.1
root@server1:/tmp# fdisk /dev/etherd/e0.1
Willkommen bei fdisk (util-linux 2.25.2).  
Änderungen bleiben nur im Speicher, bis Sie sich entscheiden, sie zu schreiben.  
Seien Sie vorsichtig, bevor Sie den Schreibbefehl verwenden.
Das Gerät enthält keine erkannte Partitionstabelle.  
Eine neue DOS-Disklabel mit der Festplattenkennung 0x2922f0be wurde erstellt.
Befehl (m für Hilfe): <-- n  
Partitionstyp  
p primär (0 primär, 0 erweitert, 4 frei)  
e erweitert (Container für logische Partitionen)  
Wählen Sie (Standard p): <-- p  
Partitionsnummer (1-4, Standard 1): <-- 1  
Erster Sektor (2048-40959999, Standard 2048): <-- ENTER  
Letzter Sektor, +Sektoren oder +Größe{K,M,G,T,P} (2048-40959999, Standard 40959999): <-- ENTER
Eine neue Partition 1 vom Typ 'Linux' und von der Größe 19.5 GiB wurde erstellt.
Befehl (m für Hilfe): <-- w
Die Partitionstabelle wurde geändert.  
Aufruf von ioctl(), um die Partitionstabelle erneut zu lesen.  
Festplatten synchronisieren.

Jetzt erstellen wir ein Dateisystem auf /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)  
Erstellen eines Dateisystems mit 5119744 4k Blöcken und 1281120 Inodes  
Dateisystem UUID: 2342cd83-bd45-4975-96c0-b0f366b73778  
Superblock-Backups gespeichert auf Blöcken:  
 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,  
 4096000
Gruppentabellen zuweisen: erledigt  
Inode-Tabellen schreiben: erledigt  
Journal erstellen (32768 Blöcke): erledigt  
Superblöcke und Dateisystembuchhaltungsinformationen schreiben: erledigt

… und mounten Sie es zu Testzwecken:

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

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

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

… und

df -h
root@server1:/tmp# df -h  
Dateisystem Größe Benutzt Verfügbar Benutzungs% Eingehängt auf  
/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#

Sie können es wie folgt aushängen:

umount /mnt

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

mkdir /storage

… und fügen Sie 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 einzuhängen, 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 Sie die folgenden Zeilen hinzu (vor der exit 0-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 eingehängt sein:

mount
root@server1:/tmp# mount  
[...snip...]  
/dev/etherd/e0.1p1 auf /storage Typ ext4 (rw,relatime,data=ordered)  
[...snip...]
df -h
root@server1:/tmp# df -h  
Dateisystem Größe Benutzt Verfügbar Benutzungs% Eingehängt auf  
/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

Jetzt können wir einen Testschreibvorgang auf der eingehängten Partition durchführen:

touch /storage/test.txt

Die Überprüfung mit dem ls-Befehl, ob die Datei geschrieben wurde:

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#

Die test.txt-Datei wurde erfolgreich auf dem Volume geschrieben, das wir von server2 eingehängt haben.

5 Links

Share: X/Twitter LinkedIn

Erhalte neue Beiträge in deinem Posteingang.

Kein Spam. Jederzeit abmelden.