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

Answers:


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

我确实认为这会解决。但是,我需要进行一次调整。我有很多磁盘,其中一些是/ dev / sdXX-如果我在已经有的磁盘上添加一个问号,它只会返回/ dev / sdXX,如果只有一个问号,它只会返回类似/ dev /的磁盘。 sdX。有道理...它如何同时为两者提供服务?
LVLAaron

2
我换了?带*
LVLAaron'2

是的,那是正确的做法。我没有考虑过如果您有很多驱动器会发生什么情况。
2012年

从技术上讲,您完全按照我的要求给了我,我只指定了一个X::)
LVLAaron 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.