Como você especifica pontos de montagem estáticos para unidades usb removíveis?

6

Eu tenho um monte de portas e hubs USB. Quando você conecta pen drives usb, o Linux os atribui a dispositivos de block virtual por ordem de chegada. Ele cria sdd, sde, sdf e assim por diante, independentemente de qual porta eu conecto as unidades. Copiamos arquivos para essas unidades e, quando há um erro, é impossível dizer em qual disco o erro ocorreu.

O que eu gostaria de fazer é configurar o udev para mapear dispositivos / portas de hardware físico para dispositivos virtuais específicos. Ou seja, porta 1 = > sdd, porta 2 = > sde, porta 3 = > sdf, etc. Isso me permite dizer em qual thumbdrive o erro ocorreu.

Encontrei alguns recursos (por exemplo, link ), dos quais posso dizer que isso pode ser feito. No entanto, não tenho experiência com configurações de baixo nível. Eles estão confusos para mim.

Existe outra referência que possa tornar as coisas mais claras? Ou talvez algum software que faz isso por mim? Ou uma biblioteca que facilita isso?

    
por Nick 13.08.2010 / 19:22

4 respostas

6

/dev/disk/by-path conterá nomes consistentes que serão mapeados para portas USB específicas (pelo menos na minha caixa).

Confira também /dev/disk/by-id e /dev/disk/by-uuid para acessar dispositivos específicos, independentemente do caminho usado para acessá-los.

    
por 14.08.2010 / 01:07
1

O caso de uso mais comum seria combinar com o uuid do sistema de arquivos, mas você está escrevendo dispositivos idênticos ao disco inteiro, isso não funcionará. Em vez disso, você pode combinar por modelo e número de série. Um exemplo (não testado) udev regra para isso é:

KERNEL=="sd*", ATTR{removable}=="1", ATTR{vendor}=="Yoyodine", ENV{ID_SERIAL}=="123-456-789", NAME=="disk/by-serial/scsi-$attr{vendor}-$env{ID_SERIAL}"

Para ver quais valores de ATTR existem para um determinado dispositivo agora conhecido como /dev/sdz , execute udevinfo -n /dev/sdz -a . Para ver quais são os valores de ENV , execute udevinfo -n /dev/sdz --query=env .

Se você deseja corresponder por porta em vez de número de série, procure dispositivos pai no documento citado. Eu suspeito que algo como KERNELS=="usb42" funcionaria, mas eu não tentei.

    
por 13.08.2010 / 22:48
0

Essas unidades estão sendo montadas automaticamente? Qual ferramenta você está usando para montagem automática? Você está recriando o sistema de arquivos cada vez que eles são montados, ou as partições / sistemas de arquivos são bastante estáveis?

Se você rotular os sistemas de arquivos de maneira única, geralmente poderá montar o sistema de arquivos pelo rótulo em vez do nome do dispositivo.

Quando você cria um sistema de arquivos, um UUID é atribuído ao sistema de arquivos. Você poderia colocar um rótulo de algum tipo no dispositivo USB que corresponde ao UUID.

    
por 13.08.2010 / 19:41
0

Estou usando esse hack com dois scripts Python para um propósito semelhante:

ophis@tlatoani:~$ more /usr/bin/drive.py
# !/usr/bin/env python

import os, sys

if len(sys.argv) == 2:

  label = sys.argv[1]

  os.system("drivelabels.py >/tmp/drv.txt")

  drvmap = map(lambda x:map(lambda y:y.strip(), x.split("\t")), file("/tmp/drv.txt").readlines())

  for d in drvmap:

    if d[0] == label:

      print d[1]

      sys.exit()

print "/srv"

ophis@tlatoani:~$ more /usr/bin/drivelabels.py

#!/usr/bin/env python

import os

os.system("ls -lh /dev/disk/by-label >/tmp/bylabels.txt ; df -ha >/tmp/drivemap.txt")

bylabel_text=map(lambda x:x.split(" "), file("/tmp/bylabels.txt").readlines())

l, ll = {}, {}

for byl_t in bylabel_text:

  label, dev = byl_t[len(byl_t)-3], byl_t[len(byl_t)-1]

  dev = dev[-dev.rfind("/"):].strip()

  if dev != "": l[ label ] = dev

drivemap_txt=map(lambda x:x.split(" "), file("/tmp/drivemap.txt").readlines())

for k in l.keys():

  for d in drivemap_txt:

    if d[0].strip() == "/dev/%s" % l[k]: ll[ k ] = d[-1].strip()

for assign in ll.keys(): print "%s\t%s" % (assign, ll[assign])

Isso permite que eu acesse unidades por meio do marcador:

target='drive.py STICKY'
cp -v *.tex $target

Espero que alguém ache isso útil!

    
por 26.02.2013 / 10:16