"Echo 1> / sys / block / sdX / device / delete" en todos los discos, excepto en la lista predeterminada


8

Tengo una lista de discos scsi que necesito eliminar. La lista se considera aleatoria en el mejor de los casos y cambia de vez en cuando. Quiero eliminar todo excepto una lista predefinida que he creado. Asumamos por ahora que solo quiero mantener:

/dev/sda
/dev/sdb

El comando que necesito ejecutar es:

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

Donde X es el dispositivo que se eliminará.

No soy bueno en bash scripting, así que realmente no sé por dónde empezar.

Para recapitular, así no recibo DV'd por no ser claro.

Necesito "echo 1> / sys / block / sdX / device / delete" para cada dispositivo sdX en el sistema, excepto para una lista predeterminada.

EDITAR: Después de la respuesta a continuación, esto es lo que he decidido usar. "LocalDisks.txt" debería contener líneas como "/ 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

Respuestas:


6

Aquí hay un enfoque que debería funcionar:

  • Obtenga la lista de sdXdispositivos para excluir

    exclude=$(cut -d/ -f3 exclude.txt)
  • Iterar sobre los /sys/block/sdXdirectorios:

    for sysfile in /sys/block/sd? ; do
  • Extraiga el sdXnombre de esa ruta y cree el deletenombre del archivo

      dev=$(basename $sysfile)
      del=$sysfile/device/delete
    
  • Compruebe si eso sdXestá en la lista de excluidos:

      if [[ $exclude == *$dev* ]] ; then
        echo "Device $dev excluded"
    
  • Compruebe si tiene los permisos de escritura adecuados en el archivo de eliminación

      elif [ ! -w $del ] ; then
        echo "$del does not exist or is not writable"
    
  • Haz la eliminación (no realmente)

      else
        echo "echo 1 > $del"
      fi
    
  • Ya terminaste!

    done

Creo que esto funcionará. Sin embargo, necesito hacer un ajuste. Tengo tantos discos que algunos son / dev / sdXX: si agrego un signo de interrogación al que ya tiene, solo devuelve / dev / sdXX y si solo hay un signo de interrogación, solo devuelve los que aparecen como / dev / sdX. Tiene sentido ... ¿Cómo puede servir a ambos?
— LVLAaron

2
Reemplacé el? con un *
— LVLAaron

Sí, eso era lo correcto para hacer allí. No había pensado en lo que sucede si tienes muchas unidades.
— Mat

Técnicamente me diste exactamente lo que pedí, solo especifiqué una X. :)
— LVLAaron
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.