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


8

削除する必要のある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

回答:


6

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

  • 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

これはうまくいくと思います。ただし、1つの調整を行う必要があります。/ dev / sdXXのディスクがたくさんある-すでに持っているディスクに疑問符を追加すると、/ dev / sdXXだけが返され、疑問符が1つしかない場合は/ dev /のようなものだけが返されますsdX。理にかなっています...どのように両方にサービスを提供できますか?
LVLAaron

2
私は置き換えましたか?*付き
LVLAaron

うん、それはそこでやる正しいことでした。ドライブがたくさんあるとどうなるか考えていませんでした。
マット

厳密に
言え
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.