使用NetBSD構建基于iSCSI的小型SAN
發表于:2007-05-26來源:作者:點擊數:
標簽:
引言 隨著信息系統應用的復雜和多樣化,存儲越來越受到企業關注,存儲的 需求 也越來越多樣化。NetBSD在近期的HEAD(CURRENT)代碼中加入了對iSCSI服務的支持,下面就讓我們來看看如何利用NetBSD來構建一個基本的SAN(Storage Area Network)環境。 開啟iSCS
引言
隨著信息系統應用的復雜和多樣化,存儲越來越受到企業關注,存儲的需求也越來越多樣化。NetBSD在近期的HEAD(CURRENT)代碼中加入了對iSCSI服務的支持,下面就讓我們來看看如何利用NetBSD來構建一個基本的SAN(Storage Area Network)環境。
開啟iSCSI服務
首先要使用iSCSI服務,你得更新你的系統到HEAD版本,本文使用的NetBSD版本信息如下:
# uname -a
NetBSD 3.99.16 NetBSD 3.99.16 (GENERIC) #0: Sun Mar 5 09:59:31 UTC 2006 builds@works.netbsd.org:/home/builds/ab/HEAD/i386/200603050000Z-obj/home/builds/ab/HEAD/src/sys/arch/i386/compile/GENERIC i386
如果你的NetBSD版本過低,你可以到ftp://ftp.netbsd.org/pub/NetBSD-daily/HEAD下載安裝包,或者使用
cvs同步源代碼,并升級你的NetBSD,這里就不詳細介紹,具體升級方法請參見NetBSD Guide.
目前NetBSD對iSCSI的支持是用一個用戶狀態的守護進程iscsi-target來實現的,它位于/usr/sbin/iscsi- target。這里有兩個概念需要簡單的介紹一下,在服務端提供iSCSI存儲服務的存儲對像稱為target,一個服務端可以有多個target,使用 iSCSI服務的客戶端稱為initiator。
NetBSD上iSCSI的默認配置文件為/etc/iscsi/targets,它包含了每個target的描述,它的內容如下:
# $NetBSD: targets,v 1.2 2006/02/16 19:30:57 agc Exp $
#
# Structure of this file:
#
# + an extent is a straight (offset, length) pair of a file or device
# it's the lowest common storage denominator
# at least one is needed
# + a device is made up of one or more extents or other devices
# devices can be added in a hierachical manner, to enhance resilience
# + in this example, no device definitions are necessary, as the target
# will just use a simple extent for persistent storage
# + a target is made up of 1 or more devices
# The code does not support RAID1 recovery at present
# Simple file showing 1 extent, mapped straight into 1 target
# extent file or device start length
extent0 /tmp/iscsi-target0 0 100MB
# target flags storage netmask
target0 rw extent0 0.0.0.0/0
其中,extent指定了iSCSI數據的存儲位置,而target則是iSCSI提供給客戶端(initiator)的存儲點,客戶端將通過它來完成具體的存儲請求。
上面配置文件中的具體含義是:定義了一個extent存儲介質extent0,它將使用文件/tmp/iscsi-target0來存儲數據,數據存儲從文件頭部開始,容量為100MB;定義了一個target存儲點target0,權限為rw(讀和寫),它使用先前定義的存儲介質extent0來進行存儲,該存儲點允許IP段為 0.0.0.0/0 的機器訪問。
接下來是啟用iSCSI服務,在/etc/rc.conf中增加如下行:
iscsi_target=YES
接下來便可以啟動iSCSI服務了:
# /etc/rc.d/iscsi_target start
如果你的配置正確,你將會看到類似以下的啟動信息:
Starting iscsi_target.
Reading configuration from `/etc/iscsi/targets'
target0:rw:0.0.0.0/0
extent0:/tmp/iscsi-target0:0:104857600
DISK: 1 logical units (204800 blocks, 512 bytes/block), type iscsi fs
DISK: LU 0: 100 MB disk storage for "target0"
TARGET: TargetName is iqn.1994-04.org.netbsd.iscsi-target
這表示iSCSI服務已經啟動成功,是不是非常簡便呢?
客戶端連接iSCSI服務
現在iSCSI服務已經開始工作了,下面就是用客戶端連接上iSCSI,以檢測我們之前的工作是否正確。
這里我使用的客戶端是Microsoft iSCSI Initiator 2.01 x86,你可以從http://download.microsoft.com/download/a/e/9/ae91dea1-66d9-417c- ade4-92d824b871af/Initiator-2.01-QFE-908935-x86fre.exe 得到它,需要注意的是,它只支持Windows 2000 SP3及以上的Windows版本。下載完并安裝好后,你會在桌面上看到一個名為Microsoft iSCSI Initiator的圖標,雙擊打開后,可以看到Microsoft iSCSI Initiator窗口,如圖1。

圖1
點擊Discovery標簽,再點擊Add按鈕,出現增加Target Portal的對話杠,輸入你的NetBSD服務器的IP地址,然后點確定,如圖2。

圖2
這里就可以看到你的NetBSD服務器的IP已經添加到Target Portals中,點擊Targets標簽,你將看到剛才我們設置的存儲點target0,如果沒有出現,請點擊Refresh按鈕刷新,如圖3,點擊 Log On銨鈕,出現登錄框,直接點擊OK即可,如圖4。

圖3
圖4
登錄成功后,你可以看到Targts中的狀態已經變為Connected,同時NetBSD上的/var/log/messages中你也可以看到一條類似以下的initiator登錄提示信息:
Mar 30 09:07:59 iscsi-target: > Normal login from iqn.1991-05.com.microsoft:minilab on 192.168.0.9
接下來就是初始化iSCSI硬盤了。進入控制面板->管理工具->計算機管理,點擊磁盤管理,這里會出現磁盤簽署升級向導,如圖5。

圖5
點擊下一步按鈕,這里列出了要簽署的硬盤,選中它,繼續點擊下一步,出現硬盤升級列表,同樣選中它,點擊下一步完成升級。這里,計算機管理的磁盤管理器列表中會多出一個硬盤,本例中為Disk1,如圖6。

圖6
右擊它,創建新的磁盤卷。本例中創建了一個新的卷G,打開我的電腦,你便可以看到它,現在你就可以像使用本地硬盤一樣使用它。如圖7為向該硬盤(G:)中復制文件。

圖7
到此,我們便完成了iSCSI服務的建立和客戶端的連接,接下來我們繼續看看如何使用NetBSD的RAIDframe提高存儲性能和保護數據的安全性。
使用RAID5保護iSCSI數據安全
首先要確認你的Kernel是否已經包含對RAID的支持(GENERIC內核默認情況下支持RAID),方法如下:
# grep RAIDframe /var/run/dmesg.boot
如果看到:
Kernelized RAIDframe activated
說明你的內核已經開啟了RAID支持,如果沒有看到,你就需要在你的內核配置文件中加入:
options RAID_AUTOCONFIG
pseudo-device raid
并重新編譯內核。
RAIDframe使用/sbin/raidctl來對內核RAID進行管理,raidctl將讀取一個配置文件來實現對RAID設備的配置, raid配置文件分為4個部分和2個可選部分,每個部分使用START標示該部分的開始。以下是本例中的RAID配置文件 /etc/raid5.conf:
START array
1 3 1
START disks
/dev/sd0a
/dev/sd1a
/dev/sd2a
START spare
/dev/sd3a
START layout
# sectPerSU SUsPerParityUnit SUsPerReconUnit RAID_level
32 1 1 5
START queue
fifo 100
配置文件的具體意義如下:
START array
1 3 1
這里是一個array的配置,它分別表示該配置為1個RAID,3個磁盤設備,1個備用盤。
START disks
/dev/sd0a
/dev/sd1a
/dev/sd2a
這里是一個disks的配置,它列出了要加入到RAID中的硬盤設備為sd0a、sd1a、sd2a。
START spare
/dev/sd3a
這里是一個備用盤的配置,它說明sd3a將作為備用盤加入到RAID中。
START layout
# sectPerSU SUsPerParityUnit SUsPerReconUnit RAID_level
32 1 1 5
這里配置了RAID的具體細節,分別表示每個段占用32個扇區,每個校驗單位占用1個段,每個重建單位點用1個段,該RAID的級別為RAID5。
START queue
fifo 100
這里主要配置了隊列參數,使用fifo隊列,每個部分的隊列限制為100個請求。
接下來初始化RAID設備,使用/dev/raid5作為RAID設備:
# raidctl -C /etc/raid5.conf raid5
設置啟動時自動配置RAID設備:
# raidctl -A yes raid5
成功時將返回:
raid5: Autoconfigure: Yes
初始化RAID序列號,這里的序列號為22334455,可根據需要改變:
# raidctl -I 22334455 raid5
檢測RAID是否配置成功:
# raidctl -s raid5
Components:
/dev/sd0a: optimal
/dev/sd1a: optimal
/dev/sd2a: optimal
Spares:
/dev/sd3a: spare
Component label for /dev/sd0a:
Row: 0, Column: 0, Num Rows: 1, Num Columns: 3
Version: 2, Serial Number: 22334455, Mod Counter: 15
Clean: No, Status: 0
sectPerSU: 32, SUsPerPU: 1, SUsPerRU: 1
Queue size: 100, blocksize: 512, numBlocks: 2097088
RAID Level: 5
Autoconfig: Yes
Root partition: No
Last configured as: raid5
Component label for /dev/sd1a:
Row: 0, Column: 1, Num Rows: 1, Num Columns: 3
Version: 2, Serial Number: 22334455, Mod Counter: 15
Clean: No, Status: 0
sectPerSU: 32, SUsPerPU: 1, SUsPerRU: 1
Queue size: 100, blocksize: 512, numBlocks: 2097088
RAID Level: 5
Autoconfig: Yes
Root partition: No
Last configured as: raid5
Component label for /dev/sd2a:
Row: 0, Column: 2, Num Rows: 1, Num Columns: 3
Version: 2, Serial Number: 22334455, Mod Counter: 15
Clean: No, Status: 0
sectPerSU: 32, SUsPerPU: 1, SUsPerRU: 1
Queue size: 100, blocksize: 512, numBlocks: 2097088
RAID Level: 5
Autoconfig: Yes
Root partition: No
Last configured as: raid5
/dev/sd3a status is: spare. Skipping label.
Parity status: DIRTY
Reconstruction is 100% complete.
Parity Re-write is 100% complete.
Copyback is 100% complete.
上面的信息說明我們的RAID5已經配置成功,接下來是建立disklabel和創建文件系統:
# disklabel raid5
輸出:
# /dev/rraid5d:
type: RAID
disk: raid
label: fictitious
flags:
bytes/sector: 512
sectors/track: 64
tracks/cylinder: 12
sectors/cylinder: 768
cylinders: 5461
total sectors: 4194176
rpm: 3600
interleave: 1
trackskew: 0
cylinderskew: 0
headswitch: 0 # microseconds
track-to-track seek: 0 # microseconds
drivedata: 0
4 partitions:
# size offset fstype [fsize bsize cpg/sgs]
a: 4194176 0 4.2BSD 0 0 0 # (Cyl. 0 - 5461*)
d: 4194176 0 unused 0 0 # (Cyl. 0 - 5461*)
disklabel: boot block size 0
disklabel: super block size 0
創建文件系統
# newfs -O 2 /dev/raid5a
這里我們創建的是UFS2的文件系統。
接下來加載新的文件系統:
# mkdir /r5
# mount /dev/raid5a /r5
查看加載情況(這里sd0,sd1,sd2,sd3都為1G的SCSI硬盤)
# df -h
Filesystem Size Used Avail Capacity Mounted on
/dev/wd0a 497M 23M 449M 4% /
/dev/wd0e 2.2G 189M 1.9G 8% /usr
kernfs 1.0K 1.0K 0B 100% /kern
/dev/raid5a 1.9G 2.0K 1.8G 0% /r5
現在,將/etc/iscsi/targets中的配置文件改成:
# $NetBSD: targets,v 1.2 2006/02/16 19:30:57 agc Exp $
#
# Structure of this file:
#
# + an extent is a straight (offset, length) pair of a file or device
# it's the lowest common storage denominator
# at least one is needed
# + a device is made up of one or more extents or other devices
# devices can be added in a hierachical manner, to enhance resilience
# + in this example, no device definitions are necessary, as the target
# will just use a simple extent for persistent storage
# + a target is made up of 1 or more devices
# The code does not support RAID1 recovery at present
# Simple file showing 1 extent, mapped straight into 1 target
# extent file or device start length
extent0 /r5/iscsi-target0 0 1800MB
# target flags storage netmask
target0 rw extent0 0.0.0.0/0
重新啟動iSCSI服務:
# /etc/rc.d/iscsi_target restart
現在你的iSCSI數據就已經保存在我們的RAID5設備上了,一個基本的SAN就已經完成,快快體驗你的成果吧。
由于目前iSCSI在NetBSD中還處于開發階段加上筆者水平有限,所以某些功能還暫未實現,歡迎大家共同討論,分享你的新發現。
原文轉自:http://www.kjueaiud.com
老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月
|