Découvrez si un appareil spécifique est un stockage de masse USB

10

Le contexte

J'automatise l'imagerie de la carte SD à partir d'une ddimage d'usine existante . La carte SD est toujours connectée via un lecteur de carte USB externe et apparaît donc dans le système comme un périphérique bloc SCSI /dev/sd*.

Actuellement, la syntaxe de ma commande est: write-image DEVICEDEVICEest le périphérique de bloc de carte SD, par exemple. /dev/sdd.

Problème

Je fais déjà une vérification de base DEVICEpour vérifier qu'il est de la forme /dev/sd*mais cela ne suffit pas: je crains que les utilisateurs (les gens de la production non habitués à Linux) se trompent et spécifient un autre périphérique apparemment valide, par exemple. /dev/sda. Vous pouvez voir la catastrophe imminente, d'autant plus que mon script d'imagerie a besoin des privilèges root (non pas pour écrire l'image elle-même, mais pour modifier la carte SD par la suite, y compris en ajustant la taille d'une partition en fonction de la taille réelle de la carte SD) ...

Question

Je voudrais vérifier que le périphérique spécifié est en fait un stockage de masse USB (ou tout au moins un périphérique amovible) afin que je puisse protéger les disques système contre la corbeille accidentellement. Comment puis je faire ça?

Je n'ai rien trouvé de pertinent sur /procou sur le web, je suis tout à fait perdu maintenant.

syam
la source

Réponses:

10

Jetez un œil sous le /sys/répertoire. En particulier, /sys/block/contient des liens symboliques pour bloquer les périphériques dans /sys/devices/.

/sys/block/sdX/removablesemble qu'il se lira comme 1 pour un périphérique amovible, et 0 sinon. Cela vous donne un contrôle de base pour l'amovibilité.

Je ne sais pas s'il y a une meilleure façon de vérifier s'il s'agit d'un périphérique USB, mais readlink /sys/block/sdecrachera quelque chose comme ../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. Vérifier si celui-ci contient un usb*dossier peut fonctionner comme une simple vérification.

Vous pouvez obtenir d'autres détails sur l'appareil, tels que le fournisseur et le modèle /sys/block/sdX/device/, qui pourraient également être utiles.

David Baggerman
la source