除预定列表外的所有磁盘上的“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
    

相关内容