제거해야 할 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