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 aoeWenn 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 aoeroot@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.
aoe3 Einrichten des Ziels (server2)
server2:
Zuerst richten wir das AoE-Ziel (server2) ein:
apt-get install vbladeWir 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=20000Dies 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 vg0Jetzt exportieren wir unser Speichergerät wie folgt:
vbladed 0 1 eth0 /storage/storage1.imgDie 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
ifconfigausfü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 aoetoolsJetzt überprüfen wir, welche AoE-Speichergeräte verfügbar sind:
aoe-discoverKeine Sorge, der Befehl zeigt keine Ausgabe. Der Befehl:
aoe-statsollte 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.1root@server1:/tmp# fdisk /dev/etherd/e0.1Willkommen 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): <-- ENTEREine neue Partition 1 vom Typ 'Linux' und von der Größe 19.5 GiB wurde erstellt.Befehl (m für Hilfe): <-- wDie 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.1p1root@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,
4096000Gruppentabellen 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 /mntSie sollten jetzt das neue Gerät in den Ausgaben von…
mountroot@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 -hroot@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 /mntUm 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 0Das 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:
rebootNach dem Neustart sollte das Gerät eingehängt sein:
mountroot@server1:/tmp# mount
[...snip...]
/dev/etherd/e0.1p1 auf /storage Typ ext4 (rw,relatime,data=ordered)
[...snip...]df -hroot@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% /storageJetzt können wir einen Testschreibvorgang auf der eingehängten Partition durchführen:
touch /storage/test.txtDie Überprüfung mit dem ls-Befehl, ob die Datei geschrieben wurde:
ls -la /storageroot@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
- AoE-Protokolldefinition: http://www.coraid.com/RESOURCES/AoE-Protocol-Definition
- Debian: http://www.debian.org/
Erhalte neue Beiträge in deinem Posteingang.
Kein Spam. Jederzeit abmelden.