Linux下配置ATA-over-Ethernet存儲系統
AoE 架構
AoE 是由一家叫做 Brantley Coile Company 的公司所開發出來的一種網絡通訊協議 , 是 IP SAN 的一個成員 , 此協議可以在以太網路上訪問 ATA 標準的存儲裝置(AoE 存儲設備可以是單個的磁盤,也可以是組合為 RAID 卷的磁盤組。它們可以像磁盤那樣被分區),運用此協議的好處在于能以平價且標準的技術來實現一個存儲局域網路環境。AoE 不倚賴以太網路中網絡層以上的協議,包括 IP、UDP、TCP 等都棄舍不用,這表示 AoE 不能通過在局域網路上進行路由、繞徑,很明顯 AoE 僅打算做為存儲局域網路之用。需要注意的是,AoE 與 iSCSI 相同,皆強調自身是遠比光纖渠道(Fibre Channel)低廉的存儲局域網路布建方案,不過 AoE 標榜比 iSCSI 更簡單、更低廉,單就標準規范的技術文件而言,AoE 規格僅有 8 頁,而 iSCSI 卻為 257 頁。AoE 協議與 iSCSI協議的比較如圖 1。

圖 1. AoE 協議與 iSCSI 協議的比較
圖 1 中可明顯看出 AoE 協議的堆棧層數少于 iSCSI,因此在傳輸效益表現上 AoE 能夠比 iSCSI 更具效率。首先,ATA 在 AoE 中被當成一種硬盤用的線路協議,資料寫入硬盤后若要進行讀出,則會以一個或一個以上的塊狀型態進行回傳,且每塊的容量尺寸大小(Block size)固定一致,此可稱為傳輸區塊(Block),AoE 的技術基礎即是此種“區塊性傳輸”。接著,AoE 協議直接、簡單地將 ATA 指令(ATA command)送入低階網絡封包內,此種方式使以太網路線(ethernet cable)能有效取代 ATA 接口的接線,AoE 可以在以太網路所及的各處進行資料區塊的搬運與傳輸,而以太網路上的各端點可以是硬盤(硬盤柜)。對 ATA 標準中的 ATA 排線而言,它不用去理會自身所傳輸的是何種資料區塊,這對 AoE 標準而言也是相同,AoE 標準所用的以太網路線不用去了解它所傳輸的是何種資料區塊,用戶可以讀出、寫入任何想要的區塊資料,只不過在多數情況下,文件系統將比傳輸區塊更適合用來進行資料的組織與結構化運用。AoE 規范為開放協議,詳見 http://www.qqread.com/ArtImage/20061104/aoer9.txt。#p#
AoE 優點
在此探討 AoE 優點,主要是相對于 iSCSI 與 Fibre Channel(光纖通道)來比較,這三種共同功能即是可建立 Block-Level I/O 和 Shared Storage(共享磁盤)。
便宜
因為 Fibre Channel(光纖通道)設備一般來說都不便宜,相對的 AoE 使用 以太網 (通常是千兆以太網)作傳輸介質,這點與 iSCSI 也使用以太網來傳輸數據相當類似,這可節省不少成本。
簡單
AoE 使用 ATA 通訊方式來傳輸數據,這與 iSCSI 使用 SCSI 通訊還必須經過 TCP/IP 封包處理相比,兩者相較之下 AoE 著實簡單多了。
AoE 缺點
成熟度
以發展成熟度來看,Fibre Channel(光纖通道) 可說是成熟度***之技術,接著是 iSCSI,而 AoE 算是敬陪末座,AoE 的數據包無法使用路由器,若以中高端應用看 AoE 還有努力空間。
傳輸距離
Fibre Channel(光纖通道)在遠距傳輸有著優勢存在,而 iSCSI 使用以太網傳輸,在 TCP/IP 協議下可以通過路由器 而傳輸到遠方,AoE 在設計上沒有采用 TCP/IP,而是利用標準的以太網傳送 ATA 磁盤命令。AoE 的傳輸距離就局限在以太網能傳輸的距離。
速度
理論上會是 Fibre Channel(光纖通道)***,iSCSI 與 AoE 第二且差別不大,Fibre Channel(光纖通道) 以每秒 4Gb / 2Gb / 1Gb 速度傳輸,而 iSCSI 與 AoE 以每秒 1Gb / 100Mb (0.1Gb)傳輸速度。
安全性
Fibre Channel(光纖通道)和 iSCSI 都有多種嚴格安全認證方式,而 AoE 只有基于網卡 MAC 地址一種驗證方式,所以只能使用在可以信任的網絡。
AoE 如何在網絡上工作
基本上和 iSCSI 一樣 AoE 也分為 Target 和 Initiato 如圖 2 。

圖 2. AoE 存儲協議工作流程
1. AoE Initiator 以廣播 (broadcasts) 的方式在網絡傳送包含 AoE 配置信息尋找 AoE target 端 . 這些廣播 Initiators 會定期的傳送 .
2. AoE targets 端接收到 Initiator 所指定信息后 , 會將 AoE 有效的 storage volumes 傳送給 Initiator 端 .3. AoE Initiator 傳送給 Target 端的 AoE 信息會夾帶一個唯一的 tag 用來辨識是由哪個 Initiator 給 Target 端的 . 而完整的信息還會包含 ATA 磁盤的指令 . 4. AoE targets 會依據 tag 來響應給特定的 Initiator 端并執行 AoE messages 所包含的 disk read/write 指令 .5. 如果 Initiator 傳送給 Target 端的信息沒響應時會重新傳送這信息 .#p#
兩個術語
在 Aoe 體系結構模式中通常有兩個角色 Target 與 Initiator 分別敘述如下:
Target
稱為 Target 的通常是存儲設備(Storage Device),也就是存放數據的磁盤(AoE 存儲設備可以是單個的磁盤,也可以是組合為 RAID 卷的磁盤組。它們可以像磁盤那樣被分區,以磁盤陣列居多)。
Initiator
Initiator 的主要功能是提供計算機主機聯機到 Target 作磁盤存取。
Linux 配置 AoE 模塊
Linux 操作系統支持 Linux 自 2.6.11 版(2005 年 3 月 1 日發布)之后的核心即具備 AoE 的功能。Linux AoE target ip 地址192.168.0.16 ,以 Ubuntu 10.04 版本為例,Linux AoE Initiatorip 地址192.168.0.13 ,以 RHEL 5.5 版本為例。以下操作在 Linux AoE target 和Linux AoE Initiator 都要運行一遍。
查看內核是否正常 AoE
進入內核所在目錄運行命令:# make menuconfig
在 Block devices 下查看 ATA over Ethernet support 確保支持如圖 3 。

圖 3. 確保 AoE 選項支持
或者運行命令:
# grep ATA_OVER /boot/config-`uname -r`
如果顯示:CONFIG_ATA_OVER_ETH=m
也表示內核支持 AoE 。
加載 AoE 模塊
#modprobe aoe
使用 lsmod 命令查看一下:
# lsmod | grep aoe aoe 60385 0
編輯 /etc/modules 文件讓系統自動加載 AoE 模塊
# /etc/modules: kernel modules to load at boot time loop lp rtc aoe
#p#
配置 Linux AoE Target
安裝 vblade 軟件
vblade 有虛擬(Virtual)刀片(Blade)之意。
#aptitude install vblade
vblade 主要的參數 :
vblade [ -m mac[,mac...] ] shelf slot netif filename
shelf: 在 AoE Inititaor 端時所呈現硬盤裝置名稱方式 .AoE Target 將硬盤排列方式像是以書架的方式來呈現 . 這里的 Shelf 就是指定哪一個機架 (major AoE address)。
slot: slot 就是指定哪個機架的哪一個地方 (minor AoE address) 。
netif: 如果系統包含多個網絡裝置時我們可以指定由哪一個以太網 分享 AoE 傳輸。
filename: AoE Target 端要分享的裝置是物理硬盤或是鏡像文件 (image)。
mac: 因為 iSCSI 是通過 IP 為基礎所以可以指定限定由哪些 IP 來存取 , 但是 AoE 不通過 IP 層所以要限制就只能透過鎖定 mac 地址。
建立鏡像文件
#mkdir /storage # dd if=/dev/zero of=/storage/storage1.img bs=1024k count=300 300+0 records in 300+0 records out 314572800 bytes (315 MB) copied, 3.13268 seconds, 100 MB/s
使用鏡像文件
#vbladed 0 1 eth0 /storage/storage1.img
***個參數 1 為
第二個參數 2 是
第三個參數 eth0 是 AoE 網絡接口
第四個參數 /storage/storage1.img 是分享出去的設備
4 修改啟動文件
vi /etc/rc.local
在 exit 0 前加一行 :
[...] vbladed 0 1 eth0 /storage/storage1.img
配置 Linux AoE Initiator
安裝軟件
#wget http://ftp.heanet.ie/disk1/sourceforge/a/project/ao/aoetools/vblade/19/vblade-19.tgz |-------10--------20--------30--------40--------50--------60--------70--------80--------9| |-------- XML error: The previous line is longer than the max of 90 characters ---------| #tar vxfz vblade-19.tgz #cd vblade-19 #make ;make install #yum install aoetools
啟動 Aoe 設備發現
AoE 提供一個查詢 AoE 磁盤工具 aoe-stat 收錄在 aoetools 套件包中,這個軟件可以用來觀察 / 查詢網絡上 AoE 磁盤。aoe-discover 工具用來發現 AoE 設備。另外 AoE 核心模塊提供 aoe_iflist 參數,可以特別指明 AoE 網絡接口,例如:使用指令 modprobe aoe aoe_iflist=eth0 即特別指明 eth0 才是 AoE 網絡,這樣若是 eth10 接口有 AoE 磁盤也不會檢測到。如圖 4 所示。
#aoe-discover #modprobe aoe aoe_iflist=eth0 #aoe-stat
圖 4. 啟動 Aoe 設備發現

這里發現了剛才建立的 storage1.img 文件下面使用 fdisk – l 查看一下圖 5 。
圖 5. 使用 fdisk – l 查看一下

這里同樣發現了設備,但是還無法使用。下面我可以使用 fdsik、mkfs、mount 三個命令進行分區、格式化、掛載工作。
使用 fdisk /dev/etherd/e1.0 來分區磁盤,以下只示范切單一主區:
按下 n 新增扇區 Enter,再按下 p 新增主要扇區 enter,按下 Enter 新增 partition 1,按下 Enter 設定 partition 1 使用***磁柱開始、Enter 設定 partition 1 使用***磁柱結束,***按下 w 寫入磁盤信息。
下面使用命令格式化成 Ext3 格式:
#mkfs -j /dev/etherd/e1.0
或使用命令格式化成 ReiserFS 格式:
#mkreiserfs /dev/etherd/e1.0
下面是用命令掛載分區:
#mount /dev/etherd/e1.0
下面就可以使用遠程的磁盤了。
性能測試:架構好 AoE 后當然要測試看看他的效能,使用命令:hdparm -t /dev/etherd/e1.0 來測試 I/O 效能,一般來說,100Mbit/s 網絡連接速度理想值是 12.5 MB/s,實際值是 10 MB/s,若是 GbE 網絡則更為快速。
處于安全考慮應當在沒有必要使用時卸載 AoE 模塊:
#rmmod aoe
總結
本文介紹 Linux 下配置 ATA-over-Ethernet(AoE) 存儲系統的過程,同時比較 AoE 和 iSCSI 和 FC 優缺點。可以看到 AoE 在局域網環境下可以構建低成本的存儲環境。不過相比 iSCSI 存儲環境相比安全性稍差。
原文:http://www.ibm.com/developerworks/cn/linux/l-cn-aoe/index.html?ca=drs-
【編輯推薦】