Diese Anleitung erklärt, wie Sie ein AoE-Ziel und einen AoE-Initiator (Client) einrichten können, die beide Ubuntu 12.10 ausführen. AoE steht für „ATA over Ethernet“ und ist ein Storage Area Network (SAN)-Protokoll, das es AoE-Initiatoren ermöglicht, Speichergeräte auf dem (entfernten) AoE-Ziel mit normaler Ethernet-Verkabelung 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-Initiator sieht der Remote-Speicher wie eine normale, lokal angeschlossene Festplatte aus.
Ich gebe keine Garantie dafür, dass dies bei Ihnen funktioniert!
1 Vorbemerkung
Ich verwende hier zwei Ubuntu 12.10-Server:
- server1.example.com (Initiator):IP-Adresse 192.168.0.100
- server2.example.com (Ziel):IP-Adresse 192.168.0.101
2 Laden des aoe-kernel-moduls 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 etwa so aussehen:
[email protected]:~# grep ATA_OVER /boot/config-`uname -r`
CONFIG_ATA_OVER_ETH=m
[email protected]:~#
Das bedeutet, dass AoE als Kernel-Modul gebaut wurde. Prüfen wir, 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
Lassen Sie uns noch einmal prüfen, ob das Modul geladen ist:
lsmod | grep aoe
[email protected]:~# lsmod | grep aoe
aoe 26960 0
[email protected]:~#
Damit das Modul beim Booten des Systems automatisch geladen wird, fügen wir das aoe-Modul zu /etc/modules:
hinzuvi /etc/modules
# /etc/modules: kernel modules to load at boot time. # # This file contains the names of kernel modules that should be loaded # at boot time, one per line. Lines beginning with "#" are ignored. loop lp rtc aoe |
3 Einrichten des Ziels (server2)
server2:
Zuerst richten wir das 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 erstelle ich ein logisches Volume mit 20 GB namens storage1 in der Volume-Gruppe vg0:
lvcreate -L20G -n storage1 vg0
(Wenn Sie eine Bilddatei verwenden möchten, können Sie diese wie folgt erstellen:
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.
)
Jetzt exportieren wir unser Speichergerät wie folgt:
vbladed 0 1 eth0 /dev/vg0/storage1
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...
vi /etc/rc.local
... und fügen Sie die folgende Zeile hinzu (vor der Zeile exit 0):
[...] vbladed 0 1 eth0 /dev/vg0/storage1 [...] |
4 Einrichten des 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
Der Befehl
aoe-stat
sollte nun die Speichergeräte anzeigen:
[email protected]:~# aoe-stat
e0.1 21.474GB eth0 up
[email protected]:~#
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]:~# ls -la /dev/etherd/
total 0
drwxr-xr-x 2 root root 160 2012-10-01 16:24 .
drwxr-xr-x 16 root root 3800 2012-10-01 16:21 ..
c-w--w---- 1 root disk 152, 3 2012-10-01 16:21 discover
brw-rw---- 1 root disk 152, 16 2012-10-01 16:24 e0.1
cr--r----- 1 root disk 152, 2 2012-10-01 16:21 err
c-w--w---- 1 root disk 152, 6 2012-10-01 16:21 flush
c-w--w---- 1 root disk 152, 4 2012-10-01 16:21 interfaces
c-w--w---- 1 root disk 152, 5 2012-10-01 16:21 revalidate
[email protected]:~#
In der Ausgabe von
fdisk -l
Sie sollten jetzt auch die neue Festplatte finden:
[email protected]:~# fdisk -l
Disk /dev/sda: 32.2 GB, 32212254720 bytes
255 heads, 63 sectors/track, 3916 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00016be9
Device Boot Start End Blocks Id System
/dev/sda1 * 1 32 248832 83 Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2 32 3917 31205377 5 Extended
/dev/sda5 32 3917 31205376 8e Linux LVM
Disk /dev/etherd/e0.1: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
Disk /dev/etherd/e0.1 doesn't contain a valid partition table
[email protected]:~#
Um dieses Gerät zu verwenden, müssen wir es formatieren:
fdisk /dev/etherd/e0.1
[email protected]:~# fdisk /dev/etherd/e0.1
Gerät enthält weder eine gültige DOS-Partitionstabelle, noch Sun, SGI oder OSF-Disklabel
Erstellen eines neuen DOS-Disklabels mit Festplattenkennung 0x3093ae28.
Änderungen bleiben nur im Arbeitsspeicher, bis Sie sich entscheiden, sie zu schreiben.
Danach können die vorherigen Inhalte natürlich nicht wiederhergestellt werden.
Warnung:Ungültiges Flag 0x0000 der Partitionstabelle 4 wird von w(rite) korrigiert
WARNUNG:Der DOS-kompatible Modus ist veraltet. Es wird dringend empfohlen,
den Modus auszuschalten (Befehl 'c') und Anzeigeeinheiten auf
Sektoren zu ändern (Befehl 'u').
Befehl (m für Hilfe):<-- n
Befehl Aktion
e erweitert
p primäre Partition (1-4)
<-- p
Partitionsnummer (1-4): <- - 1
Erster Zylinder (1-2610, Standard 1): <-- ENTER
Verwenden des Standardwerts 1
Letzter Zylinder, +Zylinder oder +Größe{K,M,G} (1 -2610, Standard 2610): <-- ENTER
Verwenden des Standardwerts 2610
Befehl (m für Hilfe): <-- t
Ausgewählte Partition 1
Hex code (geben Sie L ein, um Codes aufzulisten): <-- 83
Befehl (m für Hilfe): <-- w
Die Partitionstabelle wurde geändert!
Aufruf von ioctl(), um Partitionstabelle erneut zu lesen.
Datenträger werden synchronisiert.
[email protected]:~#
Danach die Ausgabe von
fdisk -l
sollte wie folgt aussehen:
[email protected]:~# fdisk -l
Disk /dev/sda: 32.2 GB, 32212254720 bytes
255 heads, 63 sectors/track, 3916 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00016be9
Device Boot Start End Blocks Id System
/dev/sda1 * 1 32 248832 83 Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2 32 3917 31205377 5 Extended
/dev/sda5 32 3917 31205376 8e Linux LVM
Disk /dev/etherd/e0.1: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x3093ae28
Device Boot Start End Blocks Id System
/dev/etherd/e0.1p1 1 2610 20964793+ 83 Linux
[email protected]:~#
Jetzt erstellen wir ein Dateisystem auf /dev/etherd/e0.1p1...
mkfs.ext4 /dev/etherd/e0.1p1
... und zu Testzwecken mounten:
mount /dev/etherd/e0.1p1 /mnt
Sie sollten nun das neue Gerät in den Ausgaben von...
sehenmount
[email protected]:~# mount
/dev/mapper/server1-root on / type ext4 (rw,errors=remount-ro)
proc on /proc type proc (rw,noexec,nosuid,nodev)
none on /sys type sysfs (rw,noexec,nosuid,nodev)
none on /sys/fs/fuse/connections type fusectl (rw)
none on /sys/kernel/debug type debugfs (rw)
none on /sys/kernel/security type securityfs (rw)
none on /dev type devtmpfs (rw,mode=0755)
none on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=0620)
none on /dev/shm type tmpfs (rw,nosuid,nodev)
none on /var/run type tmpfs (rw,nosuid,mode=0755)
none on /var/lock type tmpfs (rw,noexec,nosuid,nodev)
none on /lib/init/rw type tmpfs (rw,nosuid,mode=0755)
none on /var/lib/ureadahead/debugfs type debugfs (rw,relatime)
/dev/sda1 on /boot type ext2 (rw)
/dev/etherd/e0.1p1 on /mnt type ext4 (rw)
[email protected]:~#
... und
df -h
[email protected]:~# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/server1-root
18G 838M 16G 5% /
none 243M 180K 242M 1% /dev
none 247M 0 247M 0% /dev/shm
none 247M 32K 247M 1% /var/run
none 247M 0 247M 0% /var/lock
none 247M 0 247M 0% /lib/init/rw
none 18G 838M 16G 5% /var/lib/ureadahead/debugfs
/dev/sda1 228M 17M 199M 8% /boot
/dev/etherd/e0.1p1 20G 172M 19G 1% /mnt
[email protected]:~#
Sie können es wie folgt aushängen:
umount /mnt
Damit 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:
vi /etc/fstab
[...] /dev/etherd/e0.1p1 /storage ext4 defaults,auto,_netdev 0 0 |
Dies 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...
vi /etc/rc.local
... und fügen Sie die folgenden Zeilen hinzu (vor der Zeile exit 0):
[...] aoe-discover sleep 5 mount -a [...] |
Zu Testzwecken können Sie nun das System neu starten:
reboot
Nach dem Neustart sollte das Gerät gemountet sein:
mount
[email protected]:~# mount
/dev/mapper/server1-root on / type ext4 (rw,errors=remount-ro)
proc on /proc type proc (rw,noexec,nosuid,nodev)
none on /sys type sysfs (rw,noexec,nosuid,nodev)
none on /sys/fs/fuse/connections type fusectl (rw)
none on /sys/kernel/debug type debugfs (rw)
none on /sys/kernel/security type securityfs (rw)
none on /dev type devtmpfs (rw,mode=0755)
none on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=0620)
none on /dev/shm type tmpfs (rw,nosuid,nodev)
none on /var/run type tmpfs (rw,nosuid,mode=0755)
none on /var/lock type tmpfs (rw,noexec,nosuid,nodev)
none on /lib/init/rw type tmpfs (rw,nosuid,mode=0755)
none on /var/lib/ureadahead/debugfs type debugfs (rw,relatime)
/dev/sda1 on /boot type ext2 (rw)
/dev/etherd/e0.1p1 on /storage type ext4 (rw,_netdev)
[email protected]:~#
df -h
[email protected]:~# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/server1-root
18G 838M 16G 5% /
none 243M 180K 242M 1% /dev
none 247M 0 247M 0% /dev/shm
none 247M 32K 247M 1% /var/run
none 247M 0 247M 0% /var/lock
none 247M 0 247M 0% /lib/init/rw
none 18G 838M 16G 5% /var/lib/ureadahead/debugfs
/dev/sda1 228M 17M 199M 8% /boot
/dev/etherd/e0.1p1 20G 172M 19G 1% /storage
[email protected]:~#
5 Links
- AoE-Protokolldefinition:http://www.coraid.com/RESOURCES/AoE-Protocol-Definition
- Ubuntu:http://www.ubuntu.com/