Diese Anleitung erklärt, wie Sie ein AoE-Ziel und einen AoE-Initiator (Client) einrichten können, die beide Debian Squeeze 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.
1 Vorbemerkung
Ich verwende hier zwei Debian Squeeze-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 21380 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. # Parameters can be specified after the module name. aoe loop |
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):
[...] /usr/sbin/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 Mar 16 13:34 .
drwxr-xr-x 14 root root 3000 Mar 16 13:33 ..
c-w--w---- 1 root disk 152, 3 Mar 16 13:33 discover
brw-rw---- 1 root disk 152, 16 Mar 16 13:34 e0.1
cr--r----- 1 root disk 152, 2 Mar 16 13:33 err
c-w--w---- 1 root disk 152, 6 Mar 16 13:33 flush
c-w--w---- 1 root disk 152, 4 Mar 16 13:33 interfaces
c-w--w---- 1 root disk 152, 5 Mar 16 13:33 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: 0x00029d5c
Device Boot Start End Blocks Id System
/dev/sda1 * 1 3793 30461952 83 Linux
/dev/sda2 3793 3917 992257 5 Extended
/dev/sda5 3793 3917 992256 82 Linux swap / Solaris
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
Das Gerät enthält weder eine gültige DOS-Partitionstabelle, noch Sun, SGI oder OSF-Disklabel
Erstellen eines neuen DOS-Disklabels mit Festplattenkennung 0xa00b110d.
Änderungen bleiben nur im Speicher, bis Sie sich entscheiden, sie zu schreiben.
Danach können die vorherigen Inhalte natürlich nicht mehr wiederhergestellt werden.
Die Anzahl der Zylinder für diese Festplatte ist auf 2610 festgelegt.
Daran ist nichts falsch , aber dieser Wert ist größer als 1024,
und könnte in bestimmten Setups Probleme verursachen mit:
1) Software, die läuft beim Booten (z. B. alte Versionen von LILO)
2) Booten und Partitionieren von Software von anderen Betriebssystemen
(z. B. DOS FDISK, OS/2 FDISK)
Warnung: ungültiges Flag 0x0000 von Partitionstabelle 4 wird durch w(rite) korrigiert
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):<-- E NTER
Unter Verwendung des Standardwerts 1
Letzter Zylinder oder +Größe oder +GrößeM oder +GrößeK (1-2610, Standard 2610):<-- ENTER
Unter Verwendung 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 die Partitionstabelle neu zu lesen.
Synchronisieren von Datenträgern.
[ E-Mail-geschützt]:~#
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: 0x00029d5c
Device Boot Start End Blocks Id System
/dev/sda1 * 1 3793 30461952 83 Linux
/dev/sda2 3793 3917 992257 5 Extended
/dev/sda5 3793 3917 992256 82 Linux swap / Solaris
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: 0x0cf58b15
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/sda1 on / type ext3 (rw,errors=remount-ro)
tmpfs on /lib/init/rw type tmpfs (rw,nosuid,mode=0755)
proc on /proc type proc (rw,noexec,nosuid,nodev)
sysfs on /sys type sysfs (rw,noexec,nosuid,nodev)
udev on /dev type tmpfs (rw,mode=0755)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)
devpts on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=620)
/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/sda1 29G 806M 27G 3% /
tmpfs 249M 0 249M 0% /lib/init/rw
udev 244M 108K 244M 1% /dev
tmpfs 249M 0 249M 0% /dev/shm
/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/sda1 on / type ext3 (rw,errors=remount-ro)
tmpfs on /lib/init/rw type tmpfs (rw,nosuid,mode=0755)
proc on /proc type proc (rw,noexec,nosuid,nodev)
sysfs on /sys type sysfs (rw,noexec,nosuid,nodev)
udev on /dev type tmpfs (rw,mode=0755)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)
devpts on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=620)
/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/sda1 29G 806M 27G 3% /
tmpfs 249M 0 249M 0% /lib/init/rw
udev 244M 108K 244M 1% /dev
tmpfs 249M 0 249M 0% /dev/shm
/dev/etherd/e0.1p1 20G 172M 19G 1% /storage
[email protected]:~#
5 Links
- AoE-Protokolldefinition:http://www.coraid.com/RESOURCES/AoE-Protocol-Definition
- Debian:http://www.debian.org/