2013-10-17 151 views
1
I have a config 
[LogicalUnit1] UnitInquiry "NFSN00Y5IP51ZL" LUN0 /mnt/extent0 64MB 
[LogicalUnit2] UnitInquiry "NFSN00N49CQL28" LUN0 /mnt/extent1 64MB 
[LogicalUnit3] UnitInquiry "NFSNBRGQOCXK" LUN0 /mnt/extent4 10MB 
[LogicalUnit4] UnitInquiry "NFSNE7IXADFJ" LUN0 /mnt/extent5 25MB 

其通過bash腳本讀取,使用AWK我解析文件,並得到變量慶典AWK文件比較

awk '/UnitInquiry/ {print $1, $3, $5, $6}' $ctld_config | while read a b c d ; do 
     if [ -f $a ] 
     then 
       ctladm create -b block -o file=$c -S $b -d $a 
       ctladm devlist -v > $lun_config 
     else 
       truncate -s $d $c ; ctladm create -b block -o file=$c -S $b -d $a 
     fi 

這將正確初始化在啓動時的LUN,但是如果我增加一個LUN,然後它會再次重建所有這些,我怎麼能比什麼跑,到什麼配置,只重新初始化那些尚未住,有一個命令列出的設備

ctladm devlist -v 
LUN Backend  Size (Blocks) BS Serial Number Device ID  
    0 block    131072 512 "NFSN00Y5IP51ZL [LogicalUnit1] 
     lun_type=0 
     num_threads=14 
     file=/mnt/extent0 
    1 block    131072 512 "NFSN00N49CQL28 [LogicalUnit2] 
     lun_type=0 
     num_threads=14 
     file=/mnt/extent1 
    2 block     20480 512 "NFSNBRGQOCXK" [LogicalUnit3] 
     lun_type=0 
     num_threads=14 
     file=/mnt/extent4 
    3 block     51200 512 "NFSNE7IXADFJ" [LogicalUnit4] 
     lun_type=0 
     num_threads=14 
     file=/mnt/extent5 

回答

3

爲什麼不把後以下:

ctladm devlist -v | grep -q "$a" && continue 

這將

  • 運行顯示當前有源器件
  • 檢查,如果你想註冊的LogicalUnit名稱已列出的命令,如果是...
  • 跳過循環的其餘部分。

$a如果(邏輯單元名稱)不是唯一的足夠的,也可以爲grep另一個更唯一的標識符,例如序列號。

+0

不錯,多數民衆贊成偉大的...現在想辦法如何刪除不再配置的配置中的LUN :) – user2888268