日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

利用 UNIX 腳本來管理 DS4000 磁盤陣列系統(tǒng)

瀏覽:273日期:2024-06-13 11:28:15

為什么使用 Unix 腳本來管理 DS4000

作為一個測試工程師,在我的日常工作中我經(jīng)常要花費大量的時間去完成一些很簡單但是很耗時的工作。例如,一次我想在 DS4000 上創(chuàng)建 200 個磁盤。但是由于 DS4000 沒有能夠批量創(chuàng)建磁盤的功能,我花費了 4 個小時一個一個地去創(chuàng)建。這次的經(jīng)歷使我有一種想法去創(chuàng)建一個能夠可以批量地創(chuàng)建磁盤的工具。經(jīng)過我一段時間的研究,我發(fā)現(xiàn) IBM Storage Manager 支持 CLI(Command Line Interface)功能,這就意味著我可以利用 UNIX 系統(tǒng)的腳本功能來創(chuàng)建一個可以被 IBM Storage Manager 使用的腳本。通過在 IBM Storage Manager 運行這個被創(chuàng)建的腳本,可以在無需人機交互的情況下批量的創(chuàng)建磁盤。但是作者并不保證本方法在任何情況下總是可以成功,請讀者在驗證本文的例子時注意做好相應(yīng)的備份,最好在實驗環(huán)境上進行操作。

例子腳本介紹

那么如何創(chuàng)建 IBM Storage Manager 可使用的腳本呢?IBM Storage Manager 有它自己的腳本格式。只有腳本的變量值改變而格式并不改變。所以,UNIX 腳本需要能夠讓用戶能夠定制的輸入自己的所對應(yīng)的值,如需要創(chuàng)建磁盤的數(shù)量,HBA 卡的 WWPNs 值,來生成 IBM Storage Manager 能夠使用的腳本文件??梢栽O(shè)計一個配置文件來讓用戶輸入自己對應(yīng)的變量值。下面就是個配置文件的例子:LunNumber:30 #30 個 LUNsArrayNumber:1 # 這些 LUNs 創(chuàng)建在 array 1 上LunName:sunx325b # 這些 LUNs 的名字將為 sunx325b_0, sunx325b_1 ...Capacity:0.5GB # 每個 LUNs 的容量是 0.5GBHostGroupName:sunx325b_group # 這個主機組的名字為 sunx325b_groupHostName:sunx325b # 這個主機名為 sunx325bPort0:210000e08b0e934d # 第一個 HBA 卡的 wwpn 值Port1:210000e08b0e6e50 # 第二個 HBA 卡的 wwpn 值HostType:8 # 主機類型

完成了對配置文件的定義以后,Unix 腳本可以把配置文件中用戶定義的值解析出來,并且組織成為 IBM Storage Manager 可以使用的腳本。一個比較好的解析配置文件的工具是 SED 編輯器,這是一個流式的編輯器。SED 編輯器將需要處理的文本作為輸入,經(jīng)過一系列操作以后,輸出經(jīng)過修改的文本。SED 編輯器的典型應(yīng)用就是通過模式的匹配來提取文件中的一部分內(nèi)容或者是把文件中的多個相同的字符串進行替換。UNIX 腳本可以通過使用 SED 編輯器從配置文件中得到需要的數(shù)值,并把這些值添加到能夠被 IBM Storage Manager 使用的腳本中去。

例如,下面展示了如何使用 UNIX 腳本從配置文件中獲取磁盤數(shù)量這個值。這個腳本從配置文件獲取 LunNumber 這個值,然后把這個值賦給腳本中的對應(yīng)變量 LunNumber。sed -n '/LunNumber:/'p $ConfigFile >tmplunNumber=`sed 's/LunNumber://' tmp`

例子腳本的詳細說明

下面的例子是展示如何使用 SED 編輯器生成一個 IBM Storage Manager 可以使用的腳本。這個例子中,腳本從配置文件中獲得了 ArrayNumber,LunName 和 Capacity 的值,用于生成 IBM Storage Manager 使用的生成磁盤的命令,然后把這個命令添加到 IBM Storage Manager 的腳本(crtlun.cmd)文件。x=0while [ $x -lt $lunNumber ]doy=`expr $x % 2`if [ $y -eq 0 ]thenecho "create logicalDrive array=$arrayNumber userLabel="${lunName}_${x}"capacity=$capacity owner=a;" >> crtlun.cmdelseecho "create logicalDrive array=$arrayNumber userLabel="${lunName}_${x}"capacity=$capacity owner=b;" >> crtlun.cmdfix=`expr $x + 1`done

這個 Unix 工具的內(nèi)容是不是很簡單?但是它卻幫助了我把原來需要幾個小時的工作減少為只需要幾分鐘就可以完成。下面讓我對我的 UNIX 腳本文件的內(nèi)容做個比較詳細的介紹。這個名字為 ds4kscript.sh 的腳本文件可以運行在 UNIX(AIX,Solaris,Linux 等)上,用于產(chǎn)生一個可以在 IBM Storage Manager 上運行的腳本。它可以用于在 DS4000 系列上創(chuàng)建和刪除 Lun、host group、host、host port,映射 Lun 等功能。

這個腳本的輸入是配置文件:config。它保存這用戶自定義的配置信息。這個腳本的輸出是一系列的腳本(這個功能在后面會加以介紹):crtlun.cmd, crthost.cmd, maplun.cmd, delmap.cmd, delhost.cmd, dellun.cmd, setup.cmd, destroy.cmd 支持的操作系統(tǒng):AIX,Solaris 和 Linux

腳本使用說明

編輯 config 文件,設(shè)置參數(shù)為用戶所需要的值。下面是一個例子,顯示了 config 文件需要包含那些項以及一些說明:LunNumber:30 #30 個 LUNsArrayNumber:1 # 這些 LUNs 創(chuàng)建在 array 1 上LunName:sunx325b # 這些 LUNs 的名字將為 sunx325b_0, sunx325b_1 ...Capacity:0.5GB # 每個 LUNs 的容量是 0.5GBHostGroupName:sunx325b_group # 這個主機組的名字為 sunx325b_groupHostName:sunx325b # 這個主機名為 sunx325bPort0:210000e08b0e934d # 第一個 HBA 卡的 wwpn 值Port1:210000e08b0e6e50 # 第二個 HBA 卡的 wwpn 值HostType:8 # 主機類型

復(fù)制 ds4kscript.sh 到和 config 相同的目錄下,執(zhí)行:chmod +x ds4kscript.sh (使用戶對 ds4kscript.sh 具有執(zhí)行權(quán)限)./ds4kscript.sh ( 執(zhí)行 ds4kscript.sh)

在 ds4kscript.sh 運行的目錄下,一系列文件將會被創(chuàng)建出來:crtlun.cmd, crthost.cmd, maplun.cmd, delmap.cmd, delhost.cmd, dellun.cmd, setup.cmd, destroy.cmd。下面逐一對這些文件的功能進行描述:

創(chuàng)建 Lun、host group、host、host port,映射 Lun。它包括了 crtlun.cmd, crthost.cmd, maplun.cmd 的所有功能,算是一個功能集合的腳本。

創(chuàng)建 Luns;

創(chuàng)建 host group、host、host port;

映射端口到 host 上;

刪除 Lun、host group、host、host port,映射 Lun。它包括了 delmap.cmd, delhost.cmd, dellun.cmd 的所有功能,算是一個功能集合的腳本;

刪除 Lun 映射

刪除 host group、host、host port

刪除 Lun

復(fù)制 setup.cmd 的內(nèi)容到 IBM Storage Manager 腳本編輯器中,然后運行它。或者用戶也可以單獨的復(fù)制 crtlun.cmd, crthost.cmd, maplun.cmd 中的內(nèi)容,來實現(xiàn)單獨的一些功能。這時 Lun 已經(jīng)在 DS4000 上建立好了,同時也映射到了主機上。

當然,同時可以執(zhí)行 destroy.cmd 內(nèi)的內(nèi)容來進行刪除操作,或者單獨地執(zhí)行 delmap.cmd, delhost.cmd, dellun.cmd 內(nèi)的內(nèi)容來清除剛才執(zhí)行的創(chuàng)建操作。

下面是 ds4kscript.sh 的詳細內(nèi)容,請注意其中的注解內(nèi)容,會幫助您的理解:下面是 ds4kscript.sh 的詳細內(nèi)容,請注意其中的注解內(nèi)容,會幫助您的理解:#ConfigFile=./configProgramName=./ds4kscript.shif [ -f $ConfigFile ]thenecho "OK" >> /dev/nullelseecho "$ConfigFile not exist!"exit -1fi# 從配置文件中依次獲取參數(shù)值sed -n '/LunNumber:/'p $ConfigFile >tmplunNumber=`sed 's/LunNumber://' tmp`echo lunNumber=$lunNumbersed -n '/ArrayNumber:/'p $ConfigFile >tmparrayNumber=`sed 's/ArrayNumber://' tmp`echo arrayNumber=$arrayNumbersed -n '/LunName:/'p $ConfigFile >tmplunName=`sed 's/LunName://' tmp`echo lunName=$lunNamesed -n '/Capacity:/'p $ConfigFile >tmpcapacity=`sed 's/Capacity://' tmp`echo capacity=$capacitysed -n '/HostGroupName:/'p $ConfigFile >tmphostGroupName=`sed 's/HostGroupName://' tmp`echo hostGroupName=$hostGroupNamesed -n '/HostName:/'p $ConfigFile >tmphostName=`sed 's/HostName://' tmp`echo hostName=$hostNamesed -n '/Port0:/'p $ConfigFile >tmpport0=`sed 's/Port0://' tmp`echo port0=$port0sed -n '/Port1:/'p $ConfigFile >tmpport1=`sed 's/Port1://' tmp`echo port1=$port1sed -n '/HostType:/'p $ConfigFile >tmphostType=`sed 's/HostType://' tmp`echo hostType=$hostType# 創(chuàng)建 IBM storage manager 使用的腳本中創(chuàng)建 Lun 的部分,并保存為 crtlun.cmd。if [ -f crtlun.cmd ]thenrm crtlun.cmdelseecho "OK" >> /dev/nullfix=0while [ $x -lt $lunNumber ]doy=`expr $x % 2`if [ $y -eq 0 ]thenecho "create logicalDrive array=$arrayNumber userLabel="${lunName}_${x}"capacity=$capacity owner=a;" >> crtlun.cmdelseecho "create logicalDrive array=$arrayNumber userLabel="${lunName}_${x}"capacity=$capacity owner=b;" >> crtlun.cmdfix=`expr $x + 1`done# 創(chuàng)建 IBM storage manager 使用的腳本中創(chuàng)建 host group,host 和 host port 的部分,并保存為 crthost.cmd。if [ -f crthost.cmd ]thenrm crthost.cmdelseecho "OK" >> /dev/nullfiecho "create hostGroup userLabel="$hostGroupName";" >>crthost.cmdecho "create host userLabel = "$hostName" hostGroup = "$hostGroupName";" >>crthost.cmdecho "create hostPort identifIEr = "$port0" userLabel = "${hostName}_hba0"host = "$hostName" hostType = $hostType;" >>crthost.cmdecho "create hostPort identifier = "$port1" userLabel = "${hostName}_hba1"host = "$hostName" hostType = $hostType;" >>crthost.cmd# 創(chuàng)建 IBM storage manager 使用的腳本中映射 Lun 的部分,并保存為 maplun.cmd。if [ -f maplun.cmd ]thenrm maplun.cmdelseecho "OK" >> /dev/nullfix=0while [ $x -lt $lunNumber ]doecho "set logicalDrive ["${lunName}_${x}"] logicalUnitNumber=$xhostGroup="$hostGroupName";" >>maplun.cmdx=`expr $x + 1`done# 創(chuàng)建 IBM storage manager 使用的腳本中刪除 Lun 映射的部分,并保存為 delmap.cmd。if [ -f delmap.cmd ]thenrm delmap.cmdelseecho "OK" >> /dev/nullfix=0while [ $x -lt $lunNumber ]doecho "remove logicalDrive ["${lunName}_${x}"] lunMappinghostGroup="$hostGroupName";" >>delmap.cmdx=`expr $x + 1`done# 創(chuàng)建 IBM storage manager 使用的腳本中刪除 Lun 的部分,并保存為 dellun.cmd。if [ -f dellun.cmd ]thenrm dellun.cmdelseecho "OK" >> /dev/nullfix=0while [ $x -lt $lunNumber ]doecho "delete logicalDrive ["${lunName}_${x}"];" >>dellun.cmdx=`expr $x + 1`done# 創(chuàng)建 IBM storage manager 使用的腳本中刪除 host port 的部分,并保存為 delhost.cmd。if [ -f delhost.cmd ]thenrm delhost.cmdelseecho "OK" >> /dev/nullfiecho "delete hostPort ["$port0"];" >>delhost.cmdecho "delete hostPort ["$port1"];" >>delhost.cmdecho "delete host ["$hostName"];" >>delhost.cmdecho "delete hostGroup ["$hostGroupName"];" >>delhost.cmd# 創(chuàng)建 IBM storage manager 使用的 2 個功能集合腳本,并分別保存為 setup.cmd 和 destroy.cmd。if [ -f setup.cmd ]thenrm setup.cmdelseecho "OK" >> /dev/nullficat crtlun.cmd >>setup.cmdcat crthost.cmd >>setup.cmdcat maplun.cmd >>setup.cmdif [ -f destroy.cmd ]thenrm destroy.cmdelseecho "OK" >> /dev/nullficat delmap.cmd >>destroy.cmdcat delhost.cmd >>destroy.cmdcat dellun.cmd >>destroy.cmd

總結(jié)

從上面可以看出,整個腳本使用的技術(shù)不是很復(fù)雜,主要是利用 SED 編輯器通過模式匹配從配置文件中提取出所需要的部分,然后從新組織起來,形成一定的符合 IBM storage manager 使用的格式。其中還利用了一些簡單的正則表達式,這在很多系統(tǒng)管理的腳本中很常見,可見功能的實效性。當然,作為 SED 這個強大的編輯器,功能遠遠不止這些,這里也是希望能通過我的一些實踐和大家分享一些使用腳本的心得。最終的目的還是提高工作的效率,哪一個管理員或是相關(guān)的工程師也不希望總是做一些沒有技術(shù)含量而且重復(fù)性很大的工作,所以腳本以及 SED 編輯器,Awk 等工具都是各位很好的幫手。下面看一下所生成的兩個功能集合腳本的內(nèi)容,體驗一下成果的滋味。

setup.cmd

create logicalDrive array=1 userLabel="sunx325b_0" capacity=0.5GB owner=a;create logicalDrive array=1 userLabel="sunx325b_1" capacity=0.5GB owner=b;create logicalDrive array=1 userLabel="sunx325b_2" capacity=0.5GB owner=a;create logicalDrive array=1 userLabel="sunx325b_3" capacity=0.5GB owner=b;create logicalDrive array=1 userLabel="sunx325b_4" capacity=0.5GB owner=a;....create logicalDrive array=1 userLabel="sunx325b_26" capacity=0.5GB owner=a;create logicalDrive array=1 userLabel="sunx325b_27" capacity=0.5GB owner=b;create logicalDrive array=1 userLabel="sunx325b_28" capacity=0.5GB owner=a;create logicalDrive array=1 userLabel="sunx325b_29" capacity=0.5GB owner=b;create hostGroup userLabel="sunx325b_group";create host userLabel = "sunx325b" hostGroup = "sunx325b_group";create hostPort identifIEr = "210000e08b0e934d" userLabel = "sunx325b_hba0"host = "sunx325b" hostType = 8;create hostPort identifier = "210000e08b0e6e50" userLabel = "sunx325b_hba1"host = "sunx325b" hostType = 8;set logicalDrive ["sunx325b_0"] logicalUnitNumber=0 hostGroup="sunx325b_group";set logicalDrive ["sunx325b_1"] logicalUnitNumber=1 hostGroup="sunx325b_group";set logicalDrive ["sunx325b_2"] logicalUnitNumber=2 hostGroup="sunx325b_group";set logicalDrive ["sunx325b_3"] logicalUnitNumber=3 hostGroup="sunx325b_group";set logicalDrive ["sunx325b_4"] logicalUnitNumber=4 hostGroup="sunx325b_group";....set logicalDrive ["sunx325b_25"] logicalUnitNumber=25 hostGroup="sunx325b_group";set logicalDrive ["sunx325b_26"] logicalUnitNumber=26 hostGroup="sunx325b_group";set logicalDrive ["sunx325b_27"] logicalUnitNumber=27 hostGroup="sunx325b_group";set logicalDrive ["sunx325b_28"] logicalUnitNumber=28 hostGroup="sunx325b_group";set logicalDrive ["sunx325b_29"] logicalUnitNumber=29 hostGroup="sunx325b_group";

destroy.cmd

remove logicalDrive ["sunx325b_0"] lunMapping hostGroup="sunx325b_group";remove logicalDrive ["sunx325b_1"] lunMapping hostGroup="sunx325b_group";remove logicalDrive ["sunx325b_2"] lunMapping hostGroup="sunx325b_group";remove logicalDrive ["sunx325b_3"] lunMapping hostGroup="sunx325b_group";remove logicalDrive ["sunx325b_4"] lunMapping hostGroup="sunx325b_group";....remove logicalDrive ["sunx325b_25"] lunMapping hostGroup="sunx325b_group";remove logicalDrive ["sunx325b_26"] lunMapping hostGroup="sunx325b_group";remove logicalDrive ["sunx325b_27"] lunMapping hostGroup="sunx325b_group";remove logicalDrive ["sunx325b_28"] lunMapping hostGroup="sunx325b_group";remove logicalDrive ["sunx325b_29"] lunMapping hostGroup="sunx325b_group";delete hostPort ["210000e08b0e934d"];delete hostPort ["210000e08b0e6e50"];delete host ["sunx325b"];delete hostGroup ["sunx325b_group"];delete logicalDrive ["sunx325b_0"];delete logicalDrive ["sunx325b_1"];delete logicalDrive ["sunx325b_2"];delete logicalDrive ["sunx325b_3"];delete logicalDrive ["sunx325b_4"];delete logicalDrive ["sunx325b_5"];....delete logicalDrive ["sunx325b_25"];delete logicalDrive ["sunx325b_26"];delete logicalDrive ["sunx325b_27"];delete logicalDrive ["sunx325b_28"];delete logicalDrive ["sunx325b_29"];

標簽: Unix系統(tǒng)
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
91大神在线观看线路一区| 亚洲欧洲美洲国产香蕉| 亚洲精品乱码日韩| 在线观看亚洲精品福利片| 日韩av成人高清| 国产精品久久久久久久久久齐齐 | 久久国产精品毛片| 视频一区二区中文字幕| 亚洲激精日韩激精欧美精品| 视频一区视频二区中文字幕| 青青青国产精品| 精品久久久网| 国产国产精品| 欧美色综合网| 欧美精品资源| 亚洲乱码一区| 国产一区日韩| re久久精品视频| 欧美日韩夜夜| 天堂网av成人| 国产日韩一区| 婷婷精品视频| 久久国产麻豆精品| 亚洲爱爱视频| 日韩av一二三| 欧美久久天堂| 日韩激情啪啪| 91精品国产乱码久久久久久久 | 欧美sss在线视频| 午夜精品影视国产一区在线麻豆| 精品免费视频| 久久亚洲图片| 日韩在线观看一区| 日本亚洲不卡| 欧美+日本+国产+在线a∨观看| 日本一区二区三区中文字幕| 久久精品国产99国产| 女主播福利一区| 久久精品天堂| 日韩欧美美女在线观看| 人人精品亚洲| 国产欧美在线| 免费日韩视频| 91精品啪在线观看国产18| 欧美啪啪一区| 国产精品日韩久久久| 成人亚洲一区二区| 日韩精品中文字幕吗一区二区| 欧美成人基地 | 国产精品福利在线观看播放| 在线精品观看| 99久久99视频只有精品| 国产亚洲观看| 亚洲毛片视频| 99riav国产精品| 群体交乱之放荡娇妻一区二区| 欧美另类中文字幕 | 亚洲欧美日韩高清在线| 中文一区一区三区高中清不卡免费| 四虎精品永久免费| 欧美日韩国产在线一区| 欧美日韩国产v| 精品中文字幕一区二区三区四区| 亚洲人亚洲人色久| 热久久免费视频| 亚洲在线电影| 91久久黄色| 免费黄色成人| 日韩精品欧美激情一区二区| 久久精品国产99| 国产日韩一区二区三免费高清| 视频一区视频二区中文| 欧美~级网站不卡| 久久精品高清| 国产99精品一区| 久久久久久久久久久9不雅视频| 成人亚洲一区二区| 高清在线一区| 成人黄色av| 91日韩欧美| 国产h片在线观看| 久久尤物视频| 美女性感视频久久| 久久久久久久久成人| 日韩精品高清不卡| 一区二区三区国产盗摄| 亚洲一区二区三区四区电影| 水野朝阳av一区二区三区| 黄色日韩精品| 男女精品网站| 蜜桃av一区二区在线观看| 蜜桃一区二区三区在线| 亚洲日韩中文字幕一区| 亚洲欧洲国产精品一区| 亚洲人成网站在线在线观看| 免费成人av在线播放| 欧美中文日韩| 视频一区中文字幕精品| 欧美一区激情| 亚洲精品国产精品粉嫩| 日韩在线网址| 国产精品一区毛片| 精品久久久久久久| 日韩精品麻豆| 欧美午夜不卡| 亚洲有吗中文字幕| 国产精品麻豆成人av电影艾秋| 精品一区二区三区中文字幕| 成人在线视频区| 成人av二区| 中文字幕av亚洲精品一部二部| 久久精品99国产精品日本| 老司机免费视频一区二区| 亚洲一级少妇| 丝袜国产日韩另类美女| 日韩一区二区三区精品视频第3页 日韩一区二区三区免费视频 | 日本不卡视频在线| 久久一区亚洲| 激情五月色综合国产精品| 免费在线观看日韩欧美| 国产精品对白久久久久粗| 日本一区二区高清不卡| 激情久久久久久| 日韩高清三区| 精品国产18久久久久久二百| 亚洲高清不卡| 日韩精品91亚洲二区在线观看| 国产精久久久| 国户精品久久久久久久久久久不卡| 免费成人在线影院| 精品深夜福利视频| 国产视频一区在线观看一区免费| 久久精品99久久久| 欧美日韩尤物久久| 日韩国产在线观看| 日韩国产一区二区| 亚洲欧美在线综合| 国产精品伦理久久久久久| 红桃视频国产一区| 国产精品v一区二区三区| 91精品亚洲| 国产精品va视频| 午夜一级久久| 国产福利电影在线播放| 亚洲精品韩国| 日韩毛片在线| 国产精品密蕾丝视频下载| 精品在线99| 精品黄色一级片| 亚洲日本国产| 久久久水蜜桃av免费网站| 日韩二区三区四区| 欧美va亚洲va日韩∨a综合色| 国产乱码精品| 日韩一级欧洲| 精品色999| 日韩亚洲精品在线观看| 丝袜av一区| 国产精品亚洲欧美| 三级亚洲高清视频| 麻豆成人在线观看| 亚洲综合色婷婷在线观看| 99精品网站| 精品高清久久| 国产亚洲精品美女久久| 午夜在线一区二区| 日韩欧美精品| 久久福利在线| 日韩精品一区二区三区中文字幕| 欧美亚洲国产精品久久| 久久不卡国产精品一区二区| 99在线|亚洲一区二区| 日韩久久精品网| 麻豆国产91在线播放| 日韩高清电影免费| 美女国产精品| 一本色道久久精品| 激情综合自拍| 久久蜜桃av| 国产超碰精品| 精品99在线| 精品国产a一区二区三区v免费| 日本午夜精品久久久久| 蜜芽一区二区三区| 亚洲国产一区二区三区在线播放| 国产精品成人一区二区不卡| 国产精品黄网站| 青青伊人久久| 人人爱人人干婷婷丁香亚洲| 亚洲精品免费观看| 视频一区二区不卡| 国产精品腿扒开做爽爽爽挤奶网站| 成人欧美一区二区三区的电影| 美女视频黄免费的久久| 国产精品一二| 国产欧美自拍| 国产精品久久久久久妇女| 欧美日韩亚洲一区在线观看| 日韩激情精品| 欧美精品影院|