我有一个需要删除的 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