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

10

Contexto

Estou automatizando a criação de imagens de cartões SD a partir de uma imagem% factory dd existente. O cartão SD é 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 DEVICE onde DEVICE é o dispositivo de bloco do cartão SD, por exemplo. /dev/sdd .

Problema

Eu já estou fazendo uma verificação básica em DEVICE para verificar se ele está no formato /dev/sd* , mas isso não é suficiente: temo que os usuários (pessoas de produção não acostumados ao Linux) cometam erros e especifiquem outro dispositivo válido, por exemplo. %código%. Você pode ver a iminente catástrofe, especialmente porque meu script de criação de imagem precisa de privilégios de root (não para escrever a imagem em si, mas para modificar o cartão SD posteriormente, incluindo o tamanho da partição dependendo do tamanho real do cartão SD) ...

Pergunta

Eu gostaria de verificar se o dispositivo especificado é, na verdade, algum armazenamento em massa USB (ou, no mínimo, um dispositivo removível) para que eu possa proteger os discos do sistema de serem descartados acidentalmente. Como posso fazer isso?

Não encontrei nada de relevante em /dev/sda ou na Web, estou com muita perda agora.

    
por syam 27.06.2013 / 13:38

1 resposta

10

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

/sys/block/sdX/removable parece que será 1 para um dispositivo removível e 0 para o contrário. Isso lhe dá uma verificação básica para remoção.

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

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

    
por 27.06.2013 / 14:06