Descubra se um dispositivo específico é um armazenamento em massa USB

10

Contexto

Estou automatizando a criação de imagens do cartão SD a partir de uma ddimagem de fábrica existente . O cartão SD está sempre conectado através de um leitor de cartão USB externo e, portanto, aparece no sistema como um dispositivo de bloco SCSI /dev/sd*.

Atualmente, a sintaxe do meu comando é: write-image DEVICEonde DEVICEestá o dispositivo de bloqueio do cartão SD, por exemplo. /dev/sdd.

Problema

Eu já estou fazendo uma verificação básica DEVICEpara verificar se está no formato, /dev/sd*mas isso não é suficiente: eu temo que os usuários (pessoal de produção não acostumado ao Linux) cometam um erro e especifiquem outro dispositivo aparentemente válido, por exemplo. /dev/sda. Você pode ver a catástrofe iminente, especialmente porque o meu script de imagem precisa de privilégios de root (não para gravar a imagem em si, lembre-se, mas para modificar o cartão SD posteriormente, incluindo o ajuste do tamanho de uma partição dependendo do tamanho real do cartão SD) ...

Questão

Gostaria de verificar se o dispositivo especificado é realmente algum armazenamento em massa USB (ou pelo menos um dispositivo removível), para que eu possa proteger os discos do sistema contra o lixo acidental. Como eu posso fazer isso?

Não encontrei nada relevante na /procou na web, estou bastante perdido agora.

syam
fonte

Respostas:

10

Dê uma olhada no /sys/diretório Em particular, /sys/block/contém links simbólicos para bloquear dispositivos /sys/devices/.

/sys/block/sdX/removableparece que ele será lido como 1 para um dispositivo removível e 0 caso contrário. Isso fornece uma verificação básica da capacidade de remoção.

Não sei se há uma maneira melhor de verificar se é um dispositivo USB, mas readlink /sys/block/sdecuspi algo assim ../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. Verificar se contém uma usb*pasta pode funcionar como uma verificação simples.

Você pode obter outros detalhes do dispositivo, como fornecedor e modelo /sys/block/sdX/device/, que também podem ser úteis.

David Baggerman
fonte