Dieses Tutorial zeigt Ihnen, wie Sie einen AoE-Client (Initiator) und -Server (Ziel) unter Debian 8 /Jessie einrichten. Der Begriff AoE steht für „ATA over Ethernet“, ein Storage Area Network (SAN)-Protokoll, 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 desselben LANs“, da AoE außerhalb eines LANs nicht geroutet werden kann (dies ist ein wesentlicher Unterschied zu iSCSI). Für den AoE-Client (Initiator) sieht der Remotespeicher 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 Sie das AoE-Kernel-Modul auf beiden Systemen
server1/server2:
Als ersten Schritt müssen wir sicherstellen, dass der Kernel auf unseren Servern ATA Over Ethernet unterstützt. Führen Sie den folgenden Befehl als Root-Benutzer aus.
grep ATA_OVER /boot/config-`uname -r`
Dies sollte etwa so aussehen:
[E-Mail-geschützt]:/tmp# grep ATA_OVER /boot/config-`uname -r`
CONFIG_ATA_OVER_ETH=m
[E-Mail-geschützt]:/tmp#
Das bedeutet, dass AoE als Kernel-Modul eingebaut wurde. Jetzt prüfen wir, ob das Modul 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
Lassen Sie uns noch einmal prüfen, ob das Modul geladen ist:
lsmod | grep aoe
[email protected]:/tmp# lsmod | grep aoe
aoe 51917 0
[email protected]:/tmp#
Damit das Modul beim Booten des Systems automatisch geladen wird, fügen wir das aoe-Modul zu /etc/modules:
hinzunano /etc/modules
# /etc/modules:beim Booten zu ladende Kernel-Module.## Diese Datei enthält die Namen der Kernel-Module, die beim Booten# geladen werden sollen, eines 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, Image-Dateien, Festplatten (z. B. /dev/sdb), Festplattenpartitionen (z. B. /dev/sdb1) oder RAID-Geräte (z. B. /dev/md0) für die Speicherung verwenden. In diesem Beispiel verwende ich eine Bilddatei von 20 GB, die im Ordner /storage gespeichert ist.
mkdir /storage
dd if=/dev/zero of=/storage/storage1.img bs=1024k count=20000
Dadurch wird die Image-Datei /storage/storage1.img mit einer Größe von 20 GB erstellt.
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 (groß), die zweite (1) die Fachnummer (klein), ändern Sie diese Nummern nach Ihren Wünschen. 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 eth0-Teil teilt vbladed mit, 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
ausführenifconfig
).
Um den Export automatisch zu starten, wenn Sie das Ziel booten, öffnen Sie /etc/rc.local...
nano /etc/rc.local
... und fügen Sie die folgende Zeile hinzu (vor der Zeile exit 0):
[...]/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 prüfen wir, welche AoE-Speichergeräte verfügbar sind:
aoe-discover
Keine Sorge, der Befehl zeigt keine Ausgabe an. Der Befehl:
aoe-stat
sollte nun die Speichergeräte anzeigen:
[email protected]:/tmp# aoe-stat
e0.1 20.971GB eth0 1024 up
[email protected]:/tmp#
An diesem Punkt haben wir ein neues Blockgerät mit dem Namen /dev/etherd/e0.1 auf der Client-Box verfügbar. Wenn wir uns den /dev-Baum ansehen, erscheint ein neuer Knoten:
ls -la /dev/etherd/
[email protected]:/tmp# ls -la /dev/etherd/
insgesamt 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 Mär 22 08:46 e0.1
cr--r----- 1 root disk 152, 2 Mär 22 08:34 err
c-w--w---- 1 Root-Festplatte 152, 6. März 22 08:34 Flush
c-w--w---- 1 Root-Festplatte 152, 4. März 22 08:34 Schnittstellen
c-w--w---- 1 Root Disk 152, 5. März 22 08:34 Revalidieren
[email protected]:/tmp#
Um dieses /dev/etherd/e0.1-Gerät zu verwenden, müssen wir es formatieren:
fdisk /dev/etherd/e0.1
[E-Mail-geschützt]:/tmp# fdisk /dev/etherd/e0.1
Willkommen bei fdisk (util-linux 2.25.2).
Änderungen bleiben nur im Arbeitsspeicher, bis Sie sich entscheiden, sie zu schreiben.
Seien Sie vorsichtig, bevor Sie den Schreibbefehl verwenden.
Gerät enthält keine erkannte Partitionstabelle.
Neues DOS-Disklabel mit Disk-ID 0x2922f0be 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)
/>Auswählen (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
Erstellte eine neue Partition 1 des Typs „Linux“ und der Größe 19,5 GiB.
Befehl (m für Hilfe):<-- w
Die Partitionstabelle wurde geändert.
Aufruf von ioctl() zum erneuten Lesen der Partitionstabelle.
Synchronisieren von Datenträgern.
Jetzt erstellen wir ein Dateisystem auf /dev/etherd/e0.1p1...
mkfs.ext4 /dev/etherd/e0.1p1
[email protected]:/tmp# mkfs.ext4 /dev/etherd/e0.1p1
mke2fs 1.42.12 (29. August 2014)
Dateisystem mit 5119744 4k-Blöcken und 1281120 Inodes erstellen
Dateisystem-UUID:2342cd83-bd45-4975-96c0-b0f366b73778
Superblock-Backups gespeichert in Blöcken:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605642, 8,26532, 8,26532, 8,0 /> 4096000
Gruppentabellen zuweisen:fertig
Inode-Tabellen schreiben:fertig
Journal erstellen (32768 Blöcke):fertig
Superblocks und Dateisystem-Accounting-Informationen schreiben:fertig
... und zu Testzwecken mounten:
Mount /dev/etherd/e0.1p1 /mnt
Sie sollten nun das neue Gerät in den Ausgaben von...
seheneinhängen
[email protected]:/tmp# mount
sysfs auf /sys geben Sie sysfs (rw,nosuid,nodev,noexec,relatime) ein
proc auf /proc geben Sie proc (rw,nosuid,nodev, noexec,relatime)
udev auf /dev geben Sie devtmpfs (rw,relatime,size=10240k,nr_inodes=125556,mode=755)
devpts auf /dev/pts geben Sie devpts (rw,nosuid,noexec, relatime,gid=5,mode=620,ptmxmode=000)
tmpfs on /run type tmpfs (rw,nosuid,relatime,size=204220k,mode=755)
/dev/sda1 on /type ext4 (rw,relatime,errors=remount-ro,data=ordered)
securityfs auf /sys/kernel/security type securityfs (rw,nosuid,nodev,noexec,relatime)
tmpfs auf /dev/ shm tippe tmpfs (rw,nosuid,nodev)
tmpfs auf /run/lock tippe tmpfs (rw,nosuid,nodev,noexec,relatime,size=5120k)
tmpfs auf /sys/fs/cgroup tippe tmpfs (ro,nosuid,nodev,noexec,mode=755)
cgroup auf /sys/fs/cgroup/systemd geben Sie cgroup (rw,nosuid,nodev,noexec,relatime,xattr,release_agent=/lib/systemd/ systemd-cgroups-agent,name=systemd)
pstore auf /sys/fs/pstore geben Sie 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 gib cgroup (rw,nosuid,nodev,noexec,relatime,freezer)
cgroup auf /sys/fs/cgroup/net_cls,net_prio gib cgroup (rw,nosuid,nodev,noexec,relatime ,net_cls,net_prio)
cgroup auf /sys/fs/cgroup/blkio geben Sie cgroup (rw,nosuid,nodev,noexec,relatime,blkio)
cgroup auf /sys/fs/cgroup/perf_event geben Sie cgroup ein (rw,nosuid,nodev,noexec,relatime,perf_event)
systemd-1 auf /proc/sys/fs/binfmt_misc geben Sie autofs ein (rw,relatime,fd=23,pgrp=1,timeout=300,minproto=5,maxproto=5,direct)
mqueue on /dev/mqueue type mqueue (rw,relatime)
debugfs on /sys/kernel/debug type debugfs (rw,relatime)
hugetlbfs on /dev/hugepages geben Sie hugetlbfs (rw,relatime)
rpc_pipefs auf /r ein un/rpc_pipefs tippe rpc_pipefs (rw,relatime)
/dev/etherd/e0.1p1 auf /mnt tippe ext4 (rw,relatime,data=ordered)
[email protected]:/tmp#... und
df -h[email protected]:/tmp# df -h
Verwendete Dateisystemgröße Avail Use% Mounted on
/dev/sda1 57G 1.1G 54G 2% /
udev 10M 0 10M 0 % /dev
tmpfs 200 Mio. 4,6 Mio. 195 Mio. 3 % /run
tmpfs 499 Mio. 0 499 Mio. 0 % /dev/shm
tmpfs 5,0 Mio. 0 5,0 Mio. 0 % /run/lock
tmpfs 499M 0 499M 0% /sys/fs/cgroup
/dev/etherd/e0.1p1 20G 44M 19G 1% /mnt
[email protected]:/tmp#Sie können es wie folgt aushängen:
umount /mntDamit das Gerät beim Booten automatisch gemountet wird, z. 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 0Dies allein reicht nicht aus, um das Gerät beim Booten gemountet zu haben, da das AoE-Zeug geladen wird, nachdem /etc/fstab gelesen wurde. Dazu öffnen wir /etc/rc.local...
nano /etc/rc.local... und fügen Sie die folgenden Zeilen hinzu (vor der Zeile exit 0):
[...]aoe-discoversleep 5mount -a[...]Zu Testzwecken können Sie nun das System neu starten:
NeustartNach dem Neustart sollte das Gerät gemountet sein:
einhängen[email protected]:/tmp# mount
[...snip...]
/dev/etherd/e0.1p1 on /storage type ext4 (rw,relatime,data=ordered )
[...schnipsen...]df -h[email protected]:/tmp# df -h
Verwendete Dateisystemgröße Avail Use% Mounted on
/dev/sda1 57G 1.1G 54G 2% /
udev 10M 0 10M 0 % /dev
tmpfs 200 Mio. 4,6 Mio. 195 Mio. 3 % /run
tmpfs 499 Mio. 0 499 Mio. 0 % /dev/shm
tmpfs 5,0 Mio. 0 5,0 Mio. 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 gemounteten Partition durchführen:
berühre /storage/test.txtPrüfen Sie mit dem Befehl ls, ob die Datei geschrieben wurde:
ls -la /storage[email protected]:/tmp# ls -la /storage
insgesamt 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 Mär 22 09:06 test.txt
[email protected]:/tmp#Die Datei test.txt wurde erfolgreich auf das Volume geschrieben, das wir von Server2 gemountet haben.
5 Links
- AoE-Protokolldefinition:http://www.coraid.com/RESOURCES/AoE-Protocol-Definition
- Debian:http://www.debian.org/