Tiếng vang trong tiếng vang 1> / sys / block / sdX / thiết bị / xóa


8

Tôi có một danh sách các đĩa scsi mà tôi cần phải loại bỏ. Danh sách này được coi là ngẫu nhiên tốt nhất và thay đổi theo thời gian. Tôi muốn xóa mọi thứ trừ một danh sách được xác định trước mà tôi đã tạo. Bây giờ hãy giả sử rằng tôi chỉ muốn giữ:

/dev/sda
/dev/sdb

Lệnh tôi cần thực thi là:

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

Trong đó X là thiết bị cần loại bỏ.

Tôi không giỏi bash scripting nên tôi thực sự không biết bắt đầu từ đâu.

Để tóm tắt lại vì vậy tôi không nhận được DV'd vì không rõ ràng.

Tôi cần "echo 1> / sys / block / sdX / device / xóa" cho mọi thiết bị sdX trên hệ thống ngoại trừ danh sách được xác định trước.

EDIT: Sau câu trả lời dưới đây, đây là những gì tôi đã quyết định sử dụng. "LocalDisks.txt" phải chứa các dòng như "/ 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

Câu trả lời:


6

Đây là một cách tiếp cận nên hoạt động:

  • Lấy danh sách các sdXthiết bị để loại trừ

    exclude=$(cut -d/ -f3 exclude.txt)
  • Lặp lại các /sys/block/sdXthư mục:

    for sysfile in /sys/block/sd? ; do
  • Trích xuất sdXtên từ đường dẫn đó và xây dựng deletetên tệp

      dev=$(basename $sysfile)
      del=$sysfile/device/delete
    
  • Kiểm tra nếu đó sdXlà trong danh sách loại trừ:

      if [[ $exclude == *$dev* ]] ; then
        echo "Device $dev excluded"
    
  • Kiểm tra xem bạn có quyền ghi thích hợp trên tệp xóa không

      elif [ ! -w $del ] ; then
        echo "$del does not exist or is not writable"
    
  • Thực hiện xóa (không thực sự)

      else
        echo "echo 1 > $del"
      fi
    
  • Bạn đã hoàn tất!

    done

Tôi nghĩ rằng điều này sẽ làm việc ra. Tuy nhiên, tôi cần phải thực hiện một điều chỉnh. Tôi có rất nhiều đĩa mà một số là / dev / sdXX - nếu tôi thêm một dấu hỏi vào cái bạn đã có thì nó chỉ trả về / dev / sdXX và nếu chỉ có một dấu hỏi, nó chỉ trả về những dấu như / dev / sdX. Làm cho ý nghĩa ... Làm thế nào nó có thể phục vụ cả hai?
LVLAaron

2
Tôi thay thế? với một *
LVLAaron

Đúng, đó là điều đúng đắn để làm ở đó. Tôi đã không nghĩ về những gì sẽ xảy ra nếu bạn có nhiều ổ đĩa.
Mat

Về mặt kỹ thuật, bạn đã cho tôi chính xác những gì tôi yêu cầu, tôi chỉ chỉ định một X. :)
LVLAaron
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.