Как найти прикрепленные диски, внутренние или внешние?

Я использовал приведенную ниже команду, но она не указывает, является ли диск внутренним или внешним.

$ lshw -C disk

По сути, я хочу узнать, идет ли диск от каких-либо внешних источников, таких как SCSI или SAN, или что-то в этом роде, или это диск установлен на сервере физически.

Заранее спасибо и извиняюсь или плохой английский.

1 ответ

Судя по поиску в Интернете, моя первая попытка была:

      for dev in $(lsblk -ndo name)
do
    printf "$dev: "
    udevadm info --query property /dev/$dev | sed -n 's/ID_BUS=^//p'
done

который показал, что внешний жесткий диск, который я подключил с помощью USB-кабеля, был помечен как «ata», а не «usb», как я ожидал. Итак, я порылся в выводе запроса, чтобы найти какой-нибудь другой метод, и придумал следующее:

      for dev in $(lsblk -ndo name)
do
    udevadm info -q property /dev/$dev | 
        sed -n "s|^DEVPATH=|$dev/|p" |
        cut -d/ -f1,6 | tr / :
done

Основываясь на результатах моей конкретной конфигурации , я написал эту функцию Bash:

      is-internal-disk(){
    case $(udevadm info -q path $1 | cut -d/ -f5)
        ata*) return true ;;
        *)    return false ;;
    esac
}

Я верю, что это надежно, потому чтопоказывает свойство для каждого диска, и кажется вполне безопасным предположить, что пятое поле всегда содержит ответ (надеюсь, кто-нибудь сможет это прокомментировать).

Если вы хотите узнать, какое внешнее устройство является простой картой памяти (не жестким диском или твердотельным накопителем), вам нужен еще один метод, но я не уверен, какой из этих двух лучше в долгосрочной перспективе:

      is-memory-stick(){
#   udevadm info -q property $1 | grep -q '^ID_BUS=usb$'
    udevadm info -q property $1 | grep -q '^ID_DRIVE_THUMB=1$'
}
Другие вопросы по тегам