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 '/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
4

1 回答 1

3

为什么不在后面添加以下内容then

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

这将

  • 运行显示当前活动设备的命令
  • 检查您要注册的LogicalUnit名称是否已经列出,如果是...
  • 跳过循环的其余部分。

如果$a(逻辑单元名称)不够唯一,您还可以grep使用另一个更唯一的标识符,例如序列号。

于 2013-10-17T06:00:32.497 回答