So einfach funktioniert ATA over Ethernet (AOE)

Ähnlich wie bei iSCSI können mit ATA over Ethernet (AOE) Festplatten, Partitionen oder «Images» über das Netzwerk als Blockgeräte freigegeben werden. Erstaunlich dabei ist, wie einfach das geht, und auch, wie vielseitig die Anwendungen dafür sein können. Ohne grossen Aufwand kann man Raid übers Netzwerk machen und damit mehr Redundanz und auch Geschwindigkeit einbringen. Wie, zeigt Michi Zaugg in diesem Blogbeitrag.

Autor Michi Zaugg
Datum 09.04.2014
Lesezeit 5 Minuten

Ähnlich wie bei iSCSI können mit ATA over Ethernet (AOE) Festplatten, Partitionen oder «Images» (Dateien, Container auf dem Filesystem) über das Netzwerk als Blockgeräte freigegeben werden. Erstaunlich dabei ist, wie einfach das geht, und auch, wie vielseitig die Anwendungen dafür sein können. Ohne grossen Aufwand kann man Raid übers Netzwerk machen (just a commandline away 😉 ) und damit mehr Redundanz und auch Geschwindigkeit einbringen. Ohne Probleme lässt sich AOE für die Virtualisierung einsetzen.

Hier ein kurzer Einstieg zum Lesen und als eine kleine Kommandozeilen-Akrobatikübung zum Testen.

Was brauchen wir?

Optimalerweise zwei bis drei Linuxmaschinen (es könnte auch alles auf einem Host ausprobiert werden, macht aber mehr Spass, wenn dies «echt» übers Netz über mehrere Maschinen geht). Debian, Ubuntu, CentOS, eigentlich wurscht, welche Distro genommen wird, hier habe ich Debian verwendet.

Vorbereitung

Der Kernel muss AOE unterstützen. Haben wir das Modul?

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

Falls das config des Kernels fehlt:

# modprobe aoe
# lsmod | grep aoe
aoe 54175 0

Wie bei iSCSI redet man auch vom «Target» und von einem «Initiator». Das «Target» ist das Ziel, das ein Gerät freigibt. Der Initiator ist quasi der Klient, der Host, der dann das Gerät verwendet, montiert, oder was auch immer er damit anstellt 😉

Auf dem Target brauchen wir «vblade»:

# apt-get install vblade

Auf dem Initiator die Tools für AOE:

# apt-get install aoetools

 

Target

Um zu testen, kreieren wir ein Raw-File, das wir dann übers Netz freigeben. Hier sollte man darauf achten, dass man auf der Partition, auf der das File liegt, auch genügend Platz hat:

# dd if=/dev/zero of=/var/aoe/test.raw bs=1M count=1000

Dies kann man nun freigeben. Bei AOE redet man von «Shelfs» und «Slot»-Nummer. Fürs Verständnis kann man die Analogie machen, dass «Shelf»-Nummer ein Kontroller wäre und der «Slot» eine Harddisk.

# vbladed 0 1 eth0 /var/aoe/test.raw

vbladed kann auch ohne «d» gestartet werden:

# vblade 0 1 eth0 /var/aoe/test.raw

Damit läuft dies im Vordergrund, praktisch zum Debuggen, muss/kann dann aber durch ctrl-c abgebrochen werden. Mit «d» dämonisiert man das Ding.

Initiator

# aeo-discover

Findet die Geräte im Netz. Unter /dev/etherd findet sich nun ein Gerät mit dem Namen e0.1, dies kann mit fdisk partitioniert werden. Dann kann die Partition (/dev/etherd/e0.1p1) mit mkfs formatiert und eingebunden werden, z.B.:

# mkfs.ext4 /dev/etherd/e0.1p1
# mkdir /mnt/test
# mount /dev/etherd/e0.1p1 /mnt/test

Die Partition steht nun zur Verwendung bereit.

Sichern

Die Sicherheit steht, ähnlich wie bei iSCSI, nicht wirklich im Vordergrund. Es gibt aber Sicherheitsmassnahmen, die getroffen werden können. Wie? Einschränken auf eine oder mehrere MAC-Addressen:

# cat /etc/vblade.conf
# example configuration file
# network_device shelf slot file/disk/partition mac,mac[,mac]
eth0 0 1 /var/aoe/test.raw 00:DE:AD:BE:EF:00

 

Test it

Ich habe dies auf ein paar KVM-Maschinen auf dem Laptop ausprobiert, kein Wunder, dass dies keine sehr berauschende Geschwindigkeit ausgibt, die 18 MB hier sind aber sicherlich auf meine bescheidene Hardware zurückzuführen.

# dd if=/dev/zero of=/mnt/test/test.dd count=100 bs=1M oflag=direct
100+0 records in
100+0 records out
104857600 bytes (105 MB) copied, 5.75088 s, 18.2 MB/s

 

Raid it

Es sind nun alle Türen und Tore offen – AOE mit Raid zu verwenden ist eine gute Idee, welche Geschwindigkeit und Redundanz bringt. Dazu werden auf dem Initiator die mdadm Tools gebraucht (und der Kernel, was er normalerweise schon macht, muss Software Raid unterstützen).

# apt-get install mdadm

Auf dem Target (oder den Targets!) geben wir zwei «Disks» frei:

# dd if=/dev/zero of=/var/aoe/test_r1.raw bs=1M count=1000
# dd if=/dev/zero of=/var/aoe/test_r2.raw bs=1M count=1000
# vbladed 1 1 eth0 /var/aoe/test_r1.raw
# vbladed 1 2 eth0 /var/aoe/test_r2.raw

Auf dem Initiator suchen wir die «neuen» Geräte:

# aoe-discover

Nun erstellen wir ein Raid 1 über zwei Geräte:

# mdadm --create /dev/md0 --raid-devices=2 --level=1 \
/dev/etherd/e1.1 /dev/etherd/e1.2
mdadm: array /dev/md0 started.
# cat /proc/mdstat
Personalities : raid1
md0 : active raid1 etherd/e1.21 etherd/e1.10
1023936 blocks 2/2 UU
>.................... resync = 4.2% (43648/1023936)
finish=1.8min speed=8729K/sec

Das Raid synchronisiert ganz nett übers Netz.

Fazit

Ich kann und muss mich einfach wiederholen, Linux rocks! So einfach so krasse Sachen zu implementieren, und das gratis notabene, ist cool! Viel Spass beim Ausprobieren.


Über den Autor

Michi Zaugg

Michi Zaugg ist Fachbereichsleiter Linux und Unix bei Digicomp. Er arbeitet seit 12 Jahren in der Informatikbranche. Als Netzwerk- und Sicherheitsadministrator leitete er ein Netzwerkteam und studiert derzeit berufsbegleitend Informatik an der Hochschule Rapperswil (Informatik Ing. FH.). Zudem verfügt er über die LPI-Zertifizierung.