“Echo 1> / sys / block / sdX / device / delete” su tutti i dischi tranne l'elenco predeterminato


8

Ho un elenco di dischi scsi che devo rimuovere. L'elenco è considerato nel migliore dei casi casuale e cambia di volta in volta. Voglio rimuovere tutto tranne un elenco predefinito che ho creato. Supponiamo per ora che voglio solo mantenere:

/dev/sda
/dev/sdb

Il comando che devo eseguire è:

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

Dove X è il dispositivo da rimuovere.

Non sono bravo a bash scripting quindi non so davvero da dove cominciare.

Ricapitolando, quindi non ricevo DV per non essere chiaro.

Ho bisogno di "echo 1> / sys / block / sdX / device / delete" per ogni dispositivo sdX sul sistema ad eccezione di un elenco predeterminato.

EDIT: dopo la risposta di seguito, questo è quello che ho deciso di utilizzare. "LocalDisks.txt" dovrebbe contenere righe come "/ 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

Risposte:


6

Ecco un approccio che dovrebbe funzionare:

  • Ottieni l'elenco dei sdXdispositivi da escludere

    exclude=$(cut -d/ -f3 exclude.txt)
  • Scorrere le /sys/block/sdXdirectory:

    for sysfile in /sys/block/sd? ; do
  • Estrai il sdXnome da quel percorso e crea il deletenome del file

      dev=$(basename $sysfile)
      del=$sysfile/device/delete
    
  • Controlla se sdXè presente nell'elenco escluso:

      if [[ $exclude == *$dev* ]] ; then
        echo "Device $dev excluded"
    
  • Verifica se disponi delle autorizzazioni di scrittura appropriate per il file di eliminazione

      elif [ ! -w $del ] ; then
        echo "$del does not exist or is not writable"
    
  • Elimina (non proprio)

      else
        echo "echo 1 > $del"
      fi
    
  • Hai finito!

    done

Penso che questo funzionerà. Tuttavia, devo apportare una modifica. Ho così tanti dischi che alcuni sono / dev / sdXX - se aggiungo un punto interrogativo a quello che hai già restituisce solo / dev / sdXX e se c'è solo un punto interrogativo, restituisce solo quelli come / dev / sdX. Ha senso ... Come può servire entrambi?
LVLAaron,

2
Ho sostituito il? con un *
LVLAaron

Sì, quella era la cosa giusta da fare lì. Non avevo pensato a cosa succede se hai molti dischi.
Mat

Tecnicamente mi hai dato esattamente quello che ti ho chiesto, ho specificato solo una X. :)
LVLAaron
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.