削除する必要のある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
これがうまくいくはずのアプローチです:
除外する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