web-dev-qa-db-ja.com

事前に定義されたリストを除くすべてのディスクで「echo 1> / sys / block / sdX / device / delete」

削除する必要のあるSCSIディスクのリストがあります。リストはせいぜいランダムであり、時々変更されます。作成した定義済みのリスト以外のすべてを削除したい。とりあえず保持したいだけだとしましょう:

/dev/sda
/dev/sdb

私が実行する必要があるコマンドは次のとおりです。

"echo 1 > /sys/block/sdX/device/delete"

Xは削除するデバイスです。

私はbashスクリプトが得意ではないので、どこから始めればいいのか本当にわかりません。

要約すると、明確でないためにDVされないようにします。

事前に定義されたリストを除いて、システム上のすべてのsdXデバイスに対して「エコー1>/sys/block/sdX/device/delete」を実行する必要があります。

編集:以下の答えの後、これは私が使用することに決めたものです。 「LocalDisks.txt」には「/ dev/sda」のような行が含まれている必要があります

#!/bin/bash
exclude=$(cut -d/ -f3 LocalDisks.txt)

for sysfile in /sys/block/sd* ; do

dev=$(basename $sysfile)
del=$sysfile/device/delete

if [[ $exclude == *$dev* ]] ; then
    echo "Device $dev excluded"

Elif [ ! -w $del ] ; then
    echo "$del does not exist or is not writable"

else
    echo 1 > $del
fi

done
8
LVLAaron

これがうまくいくはずのアプローチです:

  • 除外するsdXデバイスのリストを取得します

    exclude=$(cut -d/ -f3 exclude.txt)
    
  • /sys/block/sdXディレクトリ:

    for sysfile in /sys/block/sd? ; do
    
  • そのパスからsdX名を抽出し、deleteファイル名を作成します

      dev=$(basename $sysfile)
      del=$sysfile/device/delete
    
  • sdXが除外リストに含まれているかどうかを確認します。

      if [[ $exclude == *$dev* ]] ; then
        echo "Device $dev excluded"
    
  • 削除ファイルに対する適切な書き込み権限があるかどうかを確認してください

      Elif [ ! -w $del ] ; then
        echo "$del does not exist or is not writable"
    
  • 削除します(実際にはありません)

      else
        echo "echo 1 > $del"
      fi
    
  • 完了です!

    done
    
6
Mat