Diese Anleitung erläutert, wie Sie ein AoE-Ziel und einen AoE-Initiator (Client) einrichten, die beide CentOS 7 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 zu verwenden auf dem (entfernten) AoE-Ziel mit normaler Ethernet-Verkabelung. „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 CentOS 7-Server:
- server1.example.com (Initiator):IP-Adresse 192.168.1.100
- server2.example.com (Ziel):IP-Adresse 192.168.1.101
2 Zusätzliche Repositories aktivieren
server1/server2:
Zuerst importieren wir die GPG-Schlüssel für Softwarepakete:
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY*
Dann aktivieren wir das EPEL-Repository auf unserem CentOS-System, da viele der Pakete, die wir im Laufe dieses Tutorials installieren werden, nicht im offiziellen CentOS 7-Repository verfügbar sind:
yum -y install epel-release
yum -y install yum-priorities
Bearbeiten Sie /etc/yum.repos.d/epel.repo...
nano /etc/yum.repos.d/epel.repo
... und fügen Sie die Zeile priority=10 zum Abschnitt [epel] hinzu:
[epel] name=Extra Packages for Enterprise Linux 7 - $basearch #baseurl=http://download.fedoraproject.org/pub/epel/7/$basearch mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-7&arch=$basearch failovermethod=priority enabled=1 priority=10 gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7 [...]
Dann aktualisieren wir unsere bestehenden Pakete auf dem System:
yum -y update
3 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 54175 0
[[email protected] ~]#
Damit das Modul automatisch geladen wird, wenn das System bootet, fügen wir die folgende Zeile zu /etc/rc.local hinzu:
nano /etc/rc.local
[...] modprobe aoe [...]
4 Einrichten des Servers (Ziel) auf Server 2
server2:
Zuerst richten wir das Ziel (server2) ein:
rpm -i http://download.opensuse.org/repositories/home:/cyberorg:/ltsp/CentOS_7/x86_64/vblade-22-3.1.x86_64.rpm
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 10 GB, die sich im Speicherordner /storage befindet.
mkdir /storage
dd if=/dev/zero of=/storage/storage1.img bs=1024k count=10000
Dadurch wird eine Bilddatei /storage/storage1.img mit einer Größe von 10 GB erstellt.
Wenn Sie stattdessen ein logisches Volume verwenden möchten, können Sie eines mit einer Größe von 10 GB namens „storage1“ in der Volume-Gruppe „vg0“ wie folgt erstellen:
lvcreate -L10G -n storage1 vg0
Jetzt exportieren wir unser Speichergerät wie folgt:
vbladed 0 1 ens33 /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 ens33-Teil teilt vbladed mit, welches Ethernet-Gerät verwendet werden soll. Sie können die Details zu Ihren Ethernet-Geräten 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 (nach der Zeile modprobe aoe!):
[...] vbladed 0 1 ens33 /storage/storage1.img [...]
5 Einrichten des Clients (Initiators) auf Server 1
server1:
Auf server1 installieren wir den Initiator. Es ist kein Paket für CentOS 7 verfügbar, aber das von CentOS 6 funktioniert gut, also werden wir es hier verwenden.
rpm -i http://download.opensuse.org/repositories/system:/aoetools/CentOS_CentOS-6/x86_64/aoetools-36-1.2.x86_64.rpm
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 10.485GB ens33 1024 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 Jun 30 14:49 .
drwxr-xr-x. 21 root root 3240 Jun 30 14:32 ..
c-w--w----. 1 root disk 152, 3 Jun 30 14:32 discover
brw-rw----. 1 root disk 152, 0 Jun 30 14:49 e0.1
cr--r-----. 1 root disk 152, 2 Jun 30 14:32 err
c-w--w----. 1 root disk 152, 6 Jun 30 14:32 flush
c-w--w----. 1 root disk 152, 4 Jun 30 14:32 interfaces
c-w--w----. 1 root disk 152, 5 Jun 30 14:32 revalidate
[[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
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0xed572fd4.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.
The number of cylinders for this disk is set to 2610.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
(e.g., DOS FDISK, OS/2 FDISK)
Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)
Command (m for help): <-- n
Command action
e extended
p primary partition (1-4)
<-- p
Partition number (1-4): <-- 1
First sector (2048-20479999, default 2048): <-- ENTER
Using default value 1
Last sector, +sectors or +size{K,M,G} (2048-20479999, default 20479999): <-- ENTER
Using default value 20479999
Partition 1 of type Linux and of size 9.8 GiB is set
Command (m for help): <-- t
Selected partition 1
Hex code (type L to list codes): <-- L
0 Empty 1e Hidden W95 FAT1 80 Old Minix bf Solaris
1 FAT12 24 NEC DOS 81 Minix / old Lin c1 DRDOS/sec (FAT-
2 XENIX root 39 Plan 9 82 Linux swap / So c4 DRDOS/sec (FAT-
3 XENIX usr 3c PartitionMagic 83 Linux c6 DRDOS/sec (FAT-
4 FAT16 <32M 40 Venix 80286 84 OS/2 hidden C: c7 Syrinx
5 Extended 41 PPC PReP Boot 85 Linux extended da Non-FS data
6 FAT16 42 SFS 86 NTFS volume set db CP/M / CTOS / .
7 HPFS/NTFS 4d QNX4.x 87 NTFS volume set de Dell Utility
8 AIX 4e QNX4.x 2nd part 88 Linux plaintext df BootIt
9 AIX bootable 4f QNX4.x 3rd part 8e Linux LVM e1 DOS access
a OS/2 Boot Manag 50 OnTrack DM 93 Amoeba e3 DOS R/O
b W95 FAT32 51 OnTrack DM6 Aux 94 Amoeba BBT e4 SpeedStor
c W95 FAT32 (LBA) 52 CP/M 9f BSD/OS eb BeOS fs
e W95 FAT16 (LBA) 53 OnTrack DM6 Aux a0 IBM Thinkpad hi ee GPT
f W95 Ext'd (LBA) 54 OnTrackDM6 a5 FreeBSD ef EFI (FAT-12/16/
10 OPUS 55 EZ-Drive a6 OpenBSD f0 Linux/PA-RISC b
11 Hidden FAT12 56 Golden Bow a7 NeXTSTEP f1 SpeedStor
12 Compaq diagnost 5c Priam Edisk a8 Darwin UFS f4 SpeedStor
14 Hidden FAT16 <3 61 SpeedStor a9 NetBSD f2 DOS secondary
16 Hidden FAT16 63 GNU HURD or Sys ab Darwin boot fb VMware VMFS
17 Hidden HPFS/NTF 64 Novell Netware b7 BSDI fs fc VMware VMKCORE
18 AST SmartSleep 65 Novell Netware b8 BSDI swap fd Linux raid auto
1b Hidden W95 FAT3 70 DiskSecure Mult bb Boot Wizard hid fe LANstep
1c Hidden W95 FAT3 75 PC/IX be Solaris boot ff BBT
Hex code (type L to list codes): <-- 83
Command (m for help): <-- w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
[[email protected] ~]#
Danach gibt es ein neues Gerät /dev/etherd/e0.1p1, das Sie in der Ausgabe von
sehen könnenls -l /dev/etherd/
[[email protected] ~]# ls -l /dev/etherd/
total 0
c-w--w----. 1 root disk 152, 3 Jun 30 14:32 discover
brw-rw----. 1 root disk 152, 0 Jun 30 14:54 e0.1
brw-rw----. 1 root disk 152, 1 Jun 30 14:54 e0.1p1
cr--r-----. 1 root disk 152, 2 Jun 30 14:32 err
c-w--w----. 1 root disk 152, 6 Jun 30 14:32 flush
c-w--w----. 1 root disk 152, 4 Jun 30 14:32 interfaces
c-w--w----. 1 root disk 152, 5 Jun 30 14:32 revalidate
[[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
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime,seclabel)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
devtmpfs on /dev type devtmpfs (rw,nosuid,seclabel,size=930336k,nr_inodes=232584,mode=755)
securityfs on /sys/kernel/security type securityfs (rw,nosuid,nodev,noexec,relatime)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev,seclabel)
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,seclabel,gid=5,mode=620,ptmxmode=000)
tmpfs on /run type tmpfs (rw,nosuid,nodev,seclabel,mode=755)
tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,seclabel,mode=755)
cgroup on /sys/fs/cgroup/systemd type cgroup (rw,nosuid,nodev,noexec,relatime,xattr,release_agent=/usr/lib/systemd/systemd-cgroups-agent,name=systemd)
pstore on /sys/fs/pstore type pstore (rw,nosuid,nodev,noexec,relatime)
cgroup on /sys/fs/cgroup/cpu,cpuacct type cgroup (rw,nosuid,nodev,noexec,relatime,cpuacct,cpu)
cgroup on /sys/fs/cgroup/memory type cgroup (rw,nosuid,nodev,noexec,relatime,memory)
cgroup on /sys/fs/cgroup/devices type cgroup (rw,nosuid,nodev,noexec,relatime,devices)
cgroup on /sys/fs/cgroup/hugetlb type cgroup (rw,nosuid,nodev,noexec,relatime,hugetlb)
cgroup on /sys/fs/cgroup/net_cls type cgroup (rw,nosuid,nodev,noexec,relatime,net_cls)
cgroup on /sys/fs/cgroup/freezer type cgroup (rw,nosuid,nodev,noexec,relatime,freezer)
cgroup on /sys/fs/cgroup/perf_event type cgroup (rw,nosuid,nodev,noexec,relatime,perf_event)
cgroup on /sys/fs/cgroup/blkio type cgroup (rw,nosuid,nodev,noexec,relatime,blkio)
cgroup on /sys/fs/cgroup/cpuset type cgroup (rw,nosuid,nodev,noexec,relatime,cpuset)
configfs on /sys/kernel/config type configfs (rw,relatime)
/dev/mapper/centos-root on / type xfs (rw,relatime,seclabel,attr2,inode64,noquota)
selinuxfs on /sys/fs/selinux type selinuxfs (rw,relatime)
systemd-1 on /proc/sys/fs/binfmt_misc type autofs (rw,relatime,fd=30,pgrp=1,timeout=300,minproto=5,maxproto=5,direct)
debugfs on /sys/kernel/debug type debugfs (rw,relatime)
mqueue on /dev/mqueue type mqueue (rw,relatime,seclabel)
hugetlbfs on /dev/hugepages type hugetlbfs (rw,relatime,seclabel)
/dev/sda1 on /boot type xfs (rw,relatime,seclabel,attr2,inode64,noquota)
tmpfs on /run/user/0 type tmpfs (rw,nosuid,nodev,relatime,seclabel,size=188060k,mode=700)
/dev/etherd/e0.1p1 on /mnt type ext4 (rw,relatime,seclabel,data=ordered)
[[email protected] ~]#
... und
df -h
[[email protected] ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 28G 1.3G 27G 5% /
devtmpfs 909M 0 909M 0% /dev
tmpfs 919M 0 919M 0% /dev/shm
tmpfs 919M 8.6M 910M 1% /run
tmpfs 919M 0 919M 0% /sys/fs/cgroup
/dev/sda1 497M 192M 306M 39% /boot
tmpfs 184M 0 184M 0% /run/user/0
/dev/etherd/e0.1p1 9.5G 37M 9.0G 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:
nano /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...
nano /etc/rc.local
... und füge folgende Zeilen hinzu (nach der Zeile modprobe aoe!):
[...] 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
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime,seclabel)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
devtmpfs on /dev type devtmpfs (rw,nosuid,seclabel,size=930336k,nr_inodes=232584,mode=755)
securityfs on /sys/kernel/security type securityfs (rw,nosuid,nodev,noexec,relatime)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev,seclabel)
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,seclabel,gid=5,mode=620,ptmxmode=000)
tmpfs on /run type tmpfs (rw,nosuid,nodev,seclabel,mode=755)
tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,seclabel,mode=755)
cgroup on /sys/fs/cgroup/systemd type cgroup (rw,nosuid,nodev,noexec,relatime,xattr,release_agent=/usr/lib/systemd/systemd-cgroups-agent,name=systemd)
pstore on /sys/fs/pstore type pstore (rw,nosuid,nodev,noexec,relatime)
cgroup on /sys/fs/cgroup/cpu,cpuacct type cgroup (rw,nosuid,nodev,noexec,relatime,cpuacct,cpu)
cgroup on /sys/fs/cgroup/memory type cgroup (rw,nosuid,nodev,noexec,relatime,memory)
cgroup on /sys/fs/cgroup/devices type cgroup (rw,nosuid,nodev,noexec,relatime,devices)
cgroup on /sys/fs/cgroup/hugetlb type cgroup (rw,nosuid,nodev,noexec,relatime,hugetlb)
cgroup on /sys/fs/cgroup/net_cls type cgroup (rw,nosuid,nodev,noexec,relatime,net_cls)
cgroup on /sys/fs/cgroup/freezer type cgroup (rw,nosuid,nodev,noexec,relatime,freezer)
cgroup on /sys/fs/cgroup/perf_event type cgroup (rw,nosuid,nodev,noexec,relatime,perf_event)
cgroup on /sys/fs/cgroup/blkio type cgroup (rw,nosuid,nodev,noexec,relatime,blkio)
cgroup on /sys/fs/cgroup/cpuset type cgroup (rw,nosuid,nodev,noexec,relatime,cpuset)
configfs on /sys/kernel/config type configfs (rw,relatime)
/dev/mapper/centos-root on / type xfs (rw,relatime,seclabel,attr2,inode64,noquota)
selinuxfs on /sys/fs/selinux type selinuxfs (rw,relatime)
systemd-1 on /proc/sys/fs/binfmt_misc type autofs (rw,relatime,fd=30,pgrp=1,timeout=300,minproto=5,maxproto=5,direct)
debugfs on /sys/kernel/debug type debugfs (rw,relatime)
mqueue on /dev/mqueue type mqueue (rw,relatime,seclabel)
hugetlbfs on /dev/hugepages type hugetlbfs (rw,relatime,seclabel)
/dev/sda1 on /boot type xfs (rw,relatime,seclabel,attr2,inode64,noquota)
tmpfs on /run/user/0 type tmpfs (rw,nosuid,nodev,relatime,seclabel,size=188060k,mode=700)
/dev/etherd/e0.1p1 on /mnt type ext4 (rw,relatime,seclabel,data=ordered)
[[email protected] ~]#
df -h
[[email protected] ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 28G 1.3G 27G 5% /
devtmpfs 909M 0 909M 0% /dev
tmpfs 919M 0 919M 0% /dev/shm
tmpfs 919M 8.6M 910M 1% /run
tmpfs 919M 0 919M 0% /sys/fs/cgroup
/dev/sda1 497M 192M 306M 39% /boot
tmpfs 184M 0 184M 0% /run/user/0
/dev/etherd/e0.1p1 9.5G 37M 9.0G 1% /mnt
[[email protected] ~]#
6 Links
- AoE-Protokolldefinition:http://www.coraid.com/RESOURCES/AoE-Protocol-Definition
- CentOS:http://www.centos.org/