Узнайте, является ли конкретное устройство запоминающим устройством USB

10

контекст

Я автоматизирую создание ddобраза SD-карты из существующего заводского образа. SD-карта всегда подключается через внешнее USB-устройство чтения карт и, таким образом, отображается в системе как блочное устройство SCSI /dev/sd*.

В настоящее время синтаксис моей команды: write-image DEVICEгде DEVICEнаходится блочное устройство SD-карты, например. /dev/sdd,

проблема

Я уже делаю базовую проверку, DEVICEчтобы убедиться, что она имеет форму, /dev/sd*но этого недостаточно: я боюсь, что пользователи (производственные люди, не привыкшие к Linux) делают ошибку и указывают другое, на первый взгляд, допустимое устройство, например. /dev/sda, Вы можете увидеть надвигающуюся катастрофу, тем более что моему сценарию обработки изображений требуются права суперпользователя (не для записи самого изображения, а для изменения SD-карты впоследствии, включая настройку размера раздела в зависимости от реального размера SD-карты) ...

Вопрос

Я хотел бы убедиться, что указанное устройство на самом деле является запоминающим устройством USB (или, по крайней мере, съемным), чтобы я мог защитить системные диски от случайной перегрузки. Как я могу это сделать?

Я не нашел ничего релевантного /procни в сети, ни в сети, сейчас я в растерянности.

сям
источник

Ответы:

10

Загляните в /sys/каталог. В частности, /sys/block/содержит символические ссылки для блокировки устройств в /sys/devices/.

/sys/block/sdX/removableПохоже, что для съемного устройства это будет 1, а в противном случае - 0. Это дает вам базовую проверку на съемность.

Я не уверен, есть ли лучший способ проверить, является ли это устройством USB, но readlink /sys/block/sdeвыложит что-то подобное ../devices/pci0000:00/0000:00:1d.0/usb6/6-1/6-1.2/6-1.2:1.0/host7/target7:0:0/7:0:0:0/block/sde. Проверка наличия usb*папки может работать как простая проверка.

Вы можете получить другие сведения об устройстве, такие как поставщик и модель /sys/block/sdX/device/, которые также могут пригодиться.

Дэвид Баггерман
источник