予約リストを除くすべてのディスクで「echo 1> /sys/block/sdX/device/delete」

予約リストを除くすべてのディスクで「echo 1> /sys/block/sdX/device/delete」

削除する必要がある scsi ディスクのリストがあります。このリストはせいぜいランダムと見なされ、随時変更されることがあります。私が作成した事前定義されたリストを除くすべてのアイテムを削除したいと思います。それでは、次のことを維持したいとしましょう。

/dev/sda
/dev/sdb

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

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

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

私はbashスクリプトに精通していないので、どこから始めるべきかわかりません。

明確ではないのでDVを受けないようにまとめると。

システム上のすべてのsdXデバイスに対して「echo 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

答え1

動作するアプローチは次のとおりです。

  • 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
    

関連情報