Existe uma maneira de alterar um id de dispositivo em / dev / disk / by-id?

3

Eu tenho um USB-HDD S2 SAMSUNG 320GB que eu uso tanto no Ubuntu 13.10 (Kernel 3.11.0-17-genérico) quanto no Fedora 17.

Funciona bem; Eu posso ler / escrever de / para eles. Embora eu esteja tendo problemas com um software que lida com pen drive e outros dispositivos USB. Este programa tenta listar os dispositivos disponíveis executando o seguinte:

ls -l /dev/disk/by-id/usb*

e não retorna nada.

Então, eu corri no terminal: ls -l /dev/disk/by-id/* e entendi:

ata-hp_DVDRAM_GT30L_KZEA6810820
ata-SAMSUNG_HM321HX_C5733G82AB0BPW
ata-WDC_WD3200BEKT-60V5T1_WD-WX81A50J4370
wwn-0x50000f00ab0b000b
wwn-0x50014ee20495cc9f

em /dev/disk/by-uuid , meu UBS-HDD é: 19ED-1878 - > ../../sdb

Meu HD externo está listado como "ata-SAMSUNG ...." e não pode ser encontrado como "usb * ...".

Eu pesquisei muito sobre isso. Descobri que editar /etc/fstab ou /boot/grub/grub.conf me ajudaria (não encontrei nada relacionado ao meu dispositivo USB em grub.conf nem fstab ). Ou algo como ZFS, zpool .. e até mesmo uma ferramenta que lida (apenas?) Com o UUID, tune2fs.

Então, é possível alterar /dev/disk/by-id/ata-SAMSUNG... para ../../by-id/usb-SAMSUNG... ? E se sim, como?

    
por Nic61629 28.02.2014 / 17:14

1 resposta

6

Ok, supondo que esse seja um problema udev (a maioria das distribuições Linux usa isso por padrão), é isso que cria os links simbólicos. Você pode corrigir isso adicionando uma nova regra. Eu darei algumas informações sobre isso, mas está amplamente ancorada na minha própria distro - Debian.

Primeiramente, você precisa descobrir onde estão suas regras. O Debian os tem em dois locais - /lib/udev/rules.d e /etc/udev/rules.d . Se esse for o caso, você deve adicionar / alterar somente os que estão em /etc , pois a alteração de outro local tem maior probabilidade de ser substituída por uma atualização.

Vá para o diretório de regras e veja se você pode encontrar o (s) arquivo (s) com as regras para criar os links em disk/by-id . O comando grep -r disk/by-id/ vai ajudar aqui (embora apenas execute-o no diretório de regras para evitar procurar outros locais). Para mim, o arquivo é /var/lib/rules.d/60-persistent-storage.rules . Aqui estão as linhas que estão criando os links the'disk / by-id / usb- * 'para mim:

ENV{DEVTYPE}=="disk",   ENV{ID_BUS}=="?*", ENV{ID_SERIAL}=="?*", \
  SYMLINK+="disk/by-id/$env{ID_BUS}-$env{ID_SERIAL}"

ENV{DEVTYPE}=="partition",  ENV{ID_BUS}=="?*", ENV{ID_SERIAL}=="?*", \
  SYMLINK+="disk/by-id/$env{ID_BUS}-$env{ID_SERIAL}-part%n"

Existem duas possibilidades aqui (além daquela em que seu sistema não usa udev ):

  1. Você não tem uma linha semelhante a essa e precisa criar uma.
  2. Você faz, mas simplesmente não funciona para o seu disco.

As linhas podem parecer sem sentido, mas basicamente as duas primeiras (realmente uma como a \ é apenas uma maneira de dividir a linha longa) são para links relacionados ao disco em si, os outros dois são para suas partições. / p>

Esperamos que a execução desse comando torne as coisas menos confusas:

udevadm info --name=/dev/sdb --query=property

Isso mostra os nomes / valores de todas as propriedades do seu dispositivo. Basicamente, tudo que a regra faz é passar por todas as propriedades de cada dispositivo e associá-las à primeira parte da linha (por exemplo, a primeira procura dispositivos com DEVTYPE=disk e não-vazia ID_BUS e ID_SERIAL ). A próxima parte cria um link simbólico com seu nome contendo ID_BUS e ID_SERIAL .

De qualquer forma, o que isto se resume é se você tem ID_BUS=usb , você provavelmente pode ir em frente e adicionar a regra acima. Caso contrário, você provavelmente precisará adicionar regras específicas para o seu dispositivo. Algo como:

ENV{ID_SERIAL}=="SAMSUNG_HM321HX_C5733G82AB0BPW", \
  SYMLINK+="disk/by-id/usb-$env{ID_SERIAL}"

ENV{ID_SERIAL}=="SAMSUNG_HM321HX_C5733G82AB0BPW", \
  SYMLINK+="disk/by-id/usb-$env{ID_SERIAL}-part%n"

Eu adivinhei o seu ID_SERIAL da questão, se o erro continuar, coloque o caminho certo.

As regras são provavelmente melhores em um arquivo próprio, algo como s2-samsung-usb.rules no diretório que você encontrou no começo.

Atualização: o abaixo provavelmente não é necessário, basta desconectar e conectar o dispositivo novamente - Como recarregar as regras do udev sem reiniciar?

Quando terminar, você poderá recarregar as regras com (desconecte seu dispositivo primeiro):

udevadm control --reload-rules

Em seguida, conecte seu dispositivo novamente. Se isso não funcionar, você pode sempre tentar reinicializar (na verdade, isso pode ser mais seguro de qualquer maneira).

    
por 28.02.2014 / 20:30