Console Linux - detecção programática de qual dispositivo um armazenamento USB está atribuído

5

Todas as manhãs, às 9h, ligamos um HD externo ao nosso servidor do escritório (sempre na mesma porta USB).
Todos os dias o HD é novo, mas todos são fabricados pelo mesmo fabricante (Freecom).

Todos os dias, às 12h, um script faz o backup de tudo para o HD.
O primeiro passo é montar o HD dessa maneira:

mount /dev/sdc1 /mnt/backup

O problema é que, às vezes, o arquivo do dispositivo não é / dev / sdc1, mas alguma outra coisa (por exemplo, / dev / sdd1). Ainda não consigo entender porque não estamos conectando mais nada e sempre usamos a mesma porta.

Então, meu problema é como detectar programaticamente o arquivo de dispositivo correto de uma maneira muito segura. Minha única idéia até agora é mostrar o conteúdo do diretório / dev / disk / by-id para encontrar e extrair / dev / xxx desta linha:

lrwxrwxrwx 1 root root 10 Sep 24 11:03 usb-Freecom_ToughDrive_1A90102657FF-part1 -> ../../sdc1

Alguma sugestão melhor? Alguma preocupação sobre o meu caminho?

Estou muito surpreso de como a lsusb não pode me ajudar muito.

    
por John Gardeniers 24.09.2010 / 15:45

4 respostas

5

a entrada by-id é um link, na maioria dos casos você pode simplesmente usar isso em vez de /dev/sdc1 . se não, você pode cancelar a referência com readlink

readlink -f /dev/disk/by-id/usb-Freecom_ToughDrive_1A90102657FF-part1
/dev/sdc1
    
por 24.09.2010 / 17:03
1

Você pode corrigir facilmente com as regras do udev. As regras do udev são executadas na inicialização e em vários eventos hot-plug para executar programas / serviços de tratamento especiais ou definir a nomenclatura do dispositivo. Parece que você deseja que uma regra do udev nomeie sua unidade de forma consistente para algo como / dev / backup, para que uma entrada mtab possa consistentemente montar / dev / backup em / mnt / backup (você pode até ter o dispositivo montado automaticamente se você gostaria.

Aqui está um guia antigo, mas ainda amplamente relevante, para escrever as regras do udev . Em distribuições recentes do Linux, udevinfo functionallity foi dobrada no comando udevadm . Usar um comando como esse deve ajudar você a descobrir em quais campos específicos deseja corresponder:

udevadm info -q all --path=/sys/block/sdc

Depois que você souber quais campos são suficientes para o mapeamento, crie um arquivo de regras do udev em /etc/udev/rules.d/ (observando que os arquivos de regras são avaliados na ordem natural e sua distribuição pode ter suas próprias regras armazenadas em algum lugar, como /lib/udev/rules.d/ so nome de acordo). Você desejará criar uma regra parecida com essa, que criará um link simbólico /dev/backup apontando para o nome do dispositivo:

ENV{DEVTYPE}=="disk", ID_SERIAL=="Freecom_ToughDrive_1A90102657FF", SYMLINK+="backup"
ENV{DEVTYPE}=="partition", ID_SERIAL=="Freecom_ToughDrive_1A90102657FF", SYMLINK+="backup%n"

Observação : estou supondo o número de série acima com base na lista /dev/disk/by-id/ acima. Isso pode não corresponder no campo correto ou no valor correto. Além disso, observe que isso corresponde a um número de série específico e, portanto, a um dispositivo específico, você precisará alterar isso se alterar os dispositivos.

Espero que ajude!

Abordagem simples : Como uso o udev o tempo todo para aprimorar produtos para consumo do cliente, geralmente é a primeira coisa que eu busco. O udev já está fazendo o que você deseja, criando as entradas /dev/disk/by-id exclusivas do dispositivo. Basta alterar seu /etc/mtab para montar /dev/disk/by-id/Freecom_ToughDrive_1A90102657FF-part1 at /mnt/backup . Um mount /mnt/backup no seu script será suficiente para o monte.

    
por 24.09.2010 / 19:31
0

Se você fizer

tail /var/log/messages

logo após inserir o USB, você verá qual dispositivo foi reconhecido.

    
por 24.09.2010 / 16:12
-1

Eu enfrentei o mesmo problema em uma das minhas implementações, portanto, depois de encontrar a solução, escrevi um artigo. Pode ajudar outras pessoas a encontrar dispositivos USB no Linux em caso de UDEV, que cria ou gerencia dispositivos automaticamente.

Como encontrar um dispositivo usb no linux

    
por 01.02.2013 / 11:07

Tags