“echo 1 > /sys/block/sdX/device/delete” 在除预定列表之外的所有磁盘上

LVL*_*ron 8 shell-script scsi hard-disk

我有一个需要删除的 scsi 磁盘列表。该列表最多被认为是随机的,并且会不时更改。我想删除除我创建的预定义列表之外的所有内容。现在让我们假设我只想保留:

/dev/sda
/dev/sdb
Run Code Online (Sandbox Code Playgroud)

我需要执行的命令是:

"echo 1 > /sys/block/sdX/device/delete"
Run Code Online (Sandbox Code Playgroud)

其中 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
Run Code Online (Sandbox Code Playgroud)

Mat*_*Mat 6

这是一种应该有效的方法:

  • 我替换了?带 * (2认同)