本教程将向您介绍如何在Debian 8 / Jessie上设置AoE客户端(启动器)和服务器(目标))。 术语AoE代表“以太网上的ATA”,它是一种存储区域网络(SAN)协议,允许AoE客户端通过普通以太网网络在远程AoE服务器上使用存储设备。 在这种情况下,“远程”意味着“在同一个LAN内部”,因为AoE不能在LAN外部路由(这与iSCSI相比是一个主要的区别)。 对于AoE客户端(启动器),远程存储器看起来像一个正常的本地连接的硬盘驱动器。
1初步说明
我在这里使用两个Debian 8服务器:
-
server1.example.com
(Initiator):IP地址192.168.1.100
-
server2.example.com
(目标):IP地址192.168.1.101
2在两个系统上加载AoE内核模块
server1 / server2:
作为第一步,我们必须确保我们服务器上的内核支持以太网上的ATA。 以root用户身份运行以下命令。
grep ATA_OVER /boot/config-`uname -r`
这应该显示如下:
root@server1:/tmp# grep ATA_OVER /boot/config-`uname -r`
CONFIG_ATA_OVER_ETH=m
root@server1:/tmp#
这意味着AoE被内置为内核模块。 现在我们将检查模块是否加载:
lsmod | grep aoe
如果你没有回来,这意味着它没有加载。 在这种情况下,我们可以如下加载它:
modprobe aoe
如果模块加载,我们再检查一下:
lsmod | grep aoe
root@server1:/tmp# lsmod | grep aoe
aoe 51917 0
root@server1:/tmp#
要在系统启动时自动加载模块,我们将aoe
模块添加到/ etc / modules中
:
nano /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
3设置目标(server2)
server2:
首先,我们设置了AoE目标( server2
):
apt-get install vblade
我们可以使用未使用的逻辑卷,映像文件,硬盘驱动器(例如/ dev / sdb
),硬盘驱动器分区(例如/ dev / sdb1
)或RAID设备(例如/ dev / md0
)作为存储。 在这个例子中,我将使用存储在文件夹/存储中的20GB的图像文件。
mkdir /storage
dd if=/dev/zero of=/storage/storage1.img bs=1024k count=20000
这将创建大小为20GB的映像文件/storage/storage1.img
。
如果要使用逻辑卷,则可以在卷组vg0
中创建一个名为storage1
的大小为20GB的卷,如下所示:
lvcreate -L20G -n storage1 vg0
现在我们出口我们的存储设备如下:
vbladed 0 1 eth0 /storage/storage1.img
第一个号码( 0
)是货架编号(主要),第二个( 1
)socket号(次要),根据您的喜好更改这些数字。 每个AoE设备由几个主要/次要标识,必须是唯一的(如果您导出多个设备),主要在0-65535之间,次要在0-255之间。 eth0
部分告诉vbladed
哪个以太网设备要使用(如果以太网设备是eth1
,那么使用eth1
- 您可以通过运行以下方式了解以太网设备:
ifconfig
)。
要在启动目标时自动导出导出,请打开/etc/rc.local
...
nano /etc/rc.local
...并添加以下行(在退出0
行之前):
[...]
/usr/sbin/vbladed 0 1 eth0 /storage/storage1.img
[...]
4设置AoE Client / Initiator(server1)
server1:
在server1上
,我们安装启动器:
apt-get install aoetools
现在我们检查一下可用的AoE存储设备:
aoe-discover
不要担心,命令不会显示任何输出。 命令:
aoe-stat
现在应该显示存储设备:
root@server1:/tmp# aoe-stat
e0.1 20.971GB eth0 1024 up
root@server1:/tmp#
此时,我们在名为/dev/etherd/e0.1
的客户端框上提供了一个新的块设备。 如果我们看看/ dev
树,会出现一个新的节点:
ls -la /dev/etherd/
root@server1:/tmp# ls -la /dev/etherd/
total 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 Mar 22 08:46 e0.1
cr--r----- 1 root disk 152, 2 Mar 22 08:34 err
c-w--w---- 1 root disk 152, 6 Mar 22 08:34 flush
c-w--w---- 1 root disk 152, 4 Mar 22 08:34 interfaces
c-w--w---- 1 root disk 152, 5 Mar 22 08:34 revalidate
root@server1:/tmp#
要使用/dev/etherd/e0.1设备,我们必须格式化它:
fdisk /dev/etherd/e0.1
root@server1:/tmp# fdisk /dev/etherd/e0.1
Welcome to fdisk (util-linux 2.25.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Device does not contain a recognized partition table.
Created a new DOS disklabel with disk identifier 0x2922f0be.
Command (m for help): <-- n
Partition type
p primary (0 primary, 0 extended, 4 free)
e extended (container for logical partitions)
Select (default p): <-- p
Partition number (1-4, default 1): <-- 1
First sector (2048-40959999, default 2048): <-- ENTER
Last sector, +sectors or +size{K,M,G,T,P} (2048-40959999, default 40959999): <-- ENTER
Created a new partition 1 of type 'Linux' and of size 19.5 GiB.
Command (m for help): <-- w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.
现在我们在/dev/etherd/e0.1p1上创建一个文件系统
mkfs.ext4 /dev/etherd/e0.1p1
root@server1:/tmp# mkfs.ext4 /dev/etherd/e0.1p1
mke2fs 1.42.12 (29-Aug-2014)
Creating filesystem with 5119744 4k blocks and 1281120 inodes
Filesystem UUID: 2342cd83-bd45-4975-96c0-b0f366b73778
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000
Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done
...并安装它用于测试目的:
mount /dev/etherd/e0.1p1 /mnt
您现在应该在...的输出中看到新设备
mount
root@server1:/tmp# mount
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
udev on /dev type devtmpfs (rw,relatime,size=10240k,nr_inodes=125556,mode=755)
devpts on /dev/pts type 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 on /sys/kernel/security type securityfs (rw,nosuid,nodev,noexec,relatime)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)
tmpfs on /run/lock type tmpfs (rw,nosuid,nodev,noexec,relatime,size=5120k)
tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,mode=755)
cgroup on /sys/fs/cgroup/systemd type cgroup (rw,nosuid,nodev,noexec,relatime,xattr,release_agent=/lib/systemd/systemd-cgroups-agent,name=systemd)
pstore on /sys/fs/pstore type pstore (rw,nosuid,nodev,noexec,relatime)
cgroup on /sys/fs/cgroup/cpuset type cgroup (rw,nosuid,nodev,noexec,relatime,cpuset)
cgroup on /sys/fs/cgroup/cpu,cpuacct type cgroup (rw,nosuid,nodev,noexec,relatime,cpu,cpuacct)
cgroup on /sys/fs/cgroup/devices type cgroup (rw,nosuid,nodev,noexec,relatime,devices)
cgroup on /sys/fs/cgroup/freezer type cgroup (rw,nosuid,nodev,noexec,relatime,freezer)
cgroup on /sys/fs/cgroup/net_cls,net_prio type cgroup (rw,nosuid,nodev,noexec,relatime,net_cls,net_prio)
cgroup on /sys/fs/cgroup/blkio type cgroup (rw,nosuid,nodev,noexec,relatime,blkio)
cgroup on /sys/fs/cgroup/perf_event type cgroup (rw,nosuid,nodev,noexec,relatime,perf_event)
systemd-1 on /proc/sys/fs/binfmt_misc type autofs (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 type hugetlbfs (rw,relatime)
rpc_pipefs on /run/rpc_pipefs type rpc_pipefs (rw,relatime)
/dev/etherd/e0.1p1 on /mnt type ext4 (rw,relatime,data=ordered)
root@server1:/tmp#
...和
df -h
root@server1:/tmp# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 57G 1.1G 54G 2% /
udev 10M 0 10M 0% /dev
tmpfs 200M 4.6M 195M 3% /run
tmpfs 499M 0 499M 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 499M 0 499M 0% /sys/fs/cgroup
/dev/etherd/e0.1p1 20G 44M 19G 1% /mnt
root@server1:/tmp#
你可以这样卸载它:
umount /mnt
要使设备在启动时自动安装,例如在目录/存储中
,我们创建该目录...
mkdir /storage
...并将以下行添加到/ etc / fstab中
:
nano /etc/fstab
[...] /dev/etherd/e0.1p1 /storage ext4 defaults,auto,_netdev 0 0
这仅仅是在启动时安装设备是不够的,因为在读取/ etc / fstab
之后AoE的东西被加载。 因此我们打开/etc/rc.local
...
nano /etc/rc.local
...并添加以下行(在退出0
行之前):
[...] aoe-discover sleep 5 mount -a [...]
出于测试目的,您现在可以重新启动系统:
reboot
重新启动后,应安装设备:
mount
root@server1:/tmp# mount
[...snip...]
/dev/etherd/e0.1p1 on /storage type ext4 (rw,relatime,data=ordered)
[...snip...]
df -h
root@server1:/tmp# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 57G 1.1G 54G 2% /
udev 10M 0 10M 0% /dev
tmpfs 200M 4.6M 195M 3% /run
tmpfs 499M 0 499M 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 499M 0 499M 0% /sys/fs/cgroup
/dev/etherd/e0.1p1 20G 44M 19G 1% /storage
现在我们可以在挂载的分区上做一个测试写:
touch /storage/test.txt
如果文件已写入,请使用ls命令进行检查:
ls -la /storage
root@server1:/tmp# ls -la /storage
total 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 Mar 22 09:06 test.txt
root@server1:/tmp#
test.txt文件已经从我们从server2安装的卷上成功写入。
5链接
- AoE协议定义: http : //www.coraid.com/RESOURCES/AoE-Protocol-Definition
- Debian: http : //www.debian.org/