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)
这是一种应该有效的方法:
获取sdX
要排除的设备列表
exclude=$(cut -d/ -f3 exclude.txt)
Run Code Online (Sandbox Code Playgroud)遍历/sys/block/sdX
目录:
for sysfile in /sys/block/sd? ; do
Run Code Online (Sandbox Code Playgroud)sdX
从该路径中提取名称,并构建delete
文件名
dev=$(basename $sysfile)
del=$sysfile/device/delete
Run Code Online (Sandbox Code Playgroud)检查它sdX
是否在排除列表中:
if [[ $exclude == *$dev* ]] ; then
echo "Device $dev excluded"
Run Code Online (Sandbox Code Playgroud)检查您是否对删除文件具有适当的写权限
elif [ ! -w $del ] ; then
echo "$del does not exist or is not writable"
Run Code Online (Sandbox Code Playgroud)删除(不是真的)
else
echo "echo 1 > $del"
fi
Run Code Online (Sandbox Code Playgroud)你完成了!
done
Run Code Online (Sandbox Code Playgroud) 归档时间: |
|
查看次数: |
16963 次 |
最近记录: |