«Echo 1> / sys / block / sdX / device / delete» на всех дисках, кроме предварительно определенного списка

8

У меня есть список дисков SCSI, которые мне нужно удалить. Список считается случайным в лучшем случае и меняется время от времени. Я хочу удалить все, кроме предварительно определенного списка, который я создал. Давайте пока предположим, что я хочу сохранить только:

/dev/sda
/dev/sdb

Команда, которую мне нужно выполнить:

"echo 1 > /sys/block/sdX/device/delete"

Где X - устройство, которое нужно удалить.

Я плохо разбираюсь в bash-скриптах, поэтому не знаю, с чего начать.

Напомним, что я не получаю DV из-за неясности.

Мне нужно "echo 1> / sys / block / sdX / device / delete" для каждого устройства sdX в системе, за исключением предварительно определенного списка.

РЕДАКТИРОВАТЬ: После ответа ниже, это то, что я решил использовать. «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
LVLAaron
источник

Ответы:

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
Да, это было правильно делать там. Я не думал о том, что произойдет, если у вас много дисков.
Мат
Технически вы дали мне именно то, что я просил, я указал только один X. :)
LVLAaron