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 に答える