Use o UUID nas regras do udev e monte a unidade usb em / media / $ UUID

9

Eu quero montar a unidade usb em /media com base no UUID do disco. Como posso usar o UUID de uma unidade USB em um arquivo de regras do udev e o que é uma regra do udev para montar a unidade usb com o número UUID como o nome da pasta.

O comando blkid gera o UUID de um disco, mas apenas na montagem.

    
por Talespin_Kit 20.11.2012 / 15:30

2 respostas

9

Mesmo que os UUIDs não sejam diretamente acessíveis pelo udev, pelo menos no Fedora e no Ubuntu eles são definidos como variáveis de ambiente ( ENV ). Você pode ler todas as variáveis de ambiente de um dispositivo chamando udevadm info /dev/sdc . Por exemplo. para um NTFS em uma unidade externa eu recebo:

$ udevadm info /dev/sdc2
P: /devices/pci0000:00/0000:00:14.0/usb4/4-2/4-2:1.0/host7/target7:0:0/7:0:0:0/block/sdc/sdc2
N: sdc2
[…]
E: ID_FS_TYPE=ntfs
E: ID_FS_USAGE=filesystem
E: ID_FS_UUID=4A6F2ABC1232FA37
[…]

Tudo com um E: na frente é definido como uma variável de ambiente.

Correspondendo com UUIDs

Você pode compará-lo com ENV{ID_FS_UUID}=="4A6F2ABC1232FA37" . Como primeiro filtro, eu jogo com KERNEL=="sd?2" para ter certeza de que estou lidando apenas com dispositivos de bloco com o número de partição correto. A regra completa ficaria assim:

KERNEL=="sd?2", ENV{ID_FS_UUID}=="4A6F2ABC1232FA37", RUN+="/usr/bin/logger --tag my-manual-usb-mount Mounting the device with UUID 4A6F2ABC1232FA37", RUN+="/usr/bin/mount [Your mount options here]"

O comando logger é útil para afirmar que a regra é realmente executada. Em seguida, você deve verificar se a regra não contém erros de sintaxe com udevadm test /dev/sdc2 . Seu arquivo de regras deve estar listado na saída e nenhuma mensagem de erro deve aparecer ao lado dele. Agora você pode acionar todas as regras do seu dispositivo para verificar se sua regra funciona conforme o planejado: sudo udevadm trigger /dev/sdc2 . Se a sua regra corresponder, você encontrará a mensagem de log personalizada no log do sistema ( /var/log/syslog ou via journalctl -b ).

Editar: ali_m apontou que as variáveis de ambiente são definidas por regras anteriores e, portanto, apenas de forma acessível se o arquivo .rules tiver um ordenação lexicográfica suficientemente alta . Começar com "60" deve ser o suficiente. Pessoalmente eu começo minhas regras com "zz" (se possível) para distingui-las de regras pré-definidas em um relance.

Usando UUIDs no comando RUN e em outro lugar

O Udev tem uma variável bastante poderosa e atribui a sintaxe de substituição . Especificamente, todas as ocorrências de $env{ID_FS_UUID} serão substituídas pelo UUID da unidade. Então, para montar um dispositivo em /media/ UUID você pode usar esta regra:

KERNEL=="sd??", RUN+="/usr/bin/mkdir /media/$env{ID_FS_UUID}", RUN+="/usr/bin/mount $devpath /media/$env{ID_FS_UUID}"

Você provavelmente deseja configurar os udisks, porém, é especializado para o espaço do problema que você deseja resolver. Veja link como ponto de partida.

Meu caso de uso real para a montagem de dispositivos com udev em vez de /etc/fstab ou udisks é montar sistemas de arquivos zfs que possuem algumas idiossincrasias, tornando-os inadequados às ferramentas usuais.

    
por 28.09.2014 / 10:43
0

Há uma solução aproximada em minha mente. Defina uma entrada fstab de cooresponding que seja identificada por UUID. E nas regras do udev, execute mount -a toda vez que houver um novo dispositivo sd * adicionado.

    
por 18.12.2012 / 04:15

Tags