“Echo 1> / sys / block / sdX / device / delete” pada semua disk kecuali daftar yang telah ditentukan

8

Saya memiliki daftar disk scsi yang perlu saya hapus. Daftar dianggap paling acak dan berubah dari waktu ke waktu. Saya ingin menghapus semuanya kecuali daftar yang telah saya buat sebelumnya. Mari kita asumsikan untuk saat ini bahwa saya hanya ingin menyimpan:

/dev/sda
/dev/sdb

Perintah yang perlu saya jalankan adalah:

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

Di mana X adalah perangkat yang akan dihapus.

Saya tidak pandai bash scripting jadi saya tidak tahu harus mulai dari mana.

Untuk rekap jadi saya tidak mendapatkan DV'd karena tidak jelas.

Saya perlu "echo 1> / sys / block / sdX / device / delete" untuk setiap perangkat sdX pada sistem kecuali untuk daftar yang telah ditentukan.

EDIT: Setelah jawaban di bawah ini, inilah yang saya putuskan untuk digunakan. "LocalDisks.txt" harus berisi baris seperti "/ 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
sumber

Jawaban:

6

Inilah pendekatan yang seharusnya berhasil:

  • Dapatkan daftar sdXperangkat yang akan dikecualikan

    exclude=$(cut -d/ -f3 exclude.txt)
  • Iterate atas /sys/block/sdXdirektori:

    for sysfile in /sys/block/sd? ; do
  • Ekstrak sdXnama dari jalur itu, dan buat deletenama file

      dev=$(basename $sysfile)
      del=$sysfile/device/delete
  • Periksa apakah itu sdXada dalam daftar yang dikecualikan:

      if [[ $exclude == *$dev* ]] ; then
        echo "Device $dev excluded"
  • Periksa apakah Anda memiliki izin menulis yang sesuai pada file hapus

      elif [ ! -w $del ] ; then
        echo "$del does not exist or is not writable"
  • Lakukan hapus (tidak juga)

      else
        echo "echo 1 > $del"
      fi
  • Kamu sudah selesai!

    done
Tikar
sumber
Saya pikir ini akan berhasil. Namun, saya perlu melakukan satu penyesuaian. Saya memiliki banyak disk sehingga beberapa adalah / dev / sdXX - jika saya menambahkan tanda tanya pada yang sudah Anda miliki, ia hanya mengembalikan / dev / sdXX dan jika hanya ada satu tanda tanya, ia hanya mengembalikan yang seperti / dev / sdX. Masuk akal ... Bagaimana bisa melayani keduanya?
LVLAaron
2
Saya mengganti? dengan *
LVLAaron
Yap, itu hal yang benar untuk dilakukan di sana. Saya belum memikirkan apa yang terjadi jika Anda memiliki banyak drive.
Mat
Secara teknis Anda memberi saya persis apa yang saya minta, saya hanya menentukan satu X. :)
LVLAaron