Fazendo o kernel 2.6 resolver o problema da montagem de discos USB

Você tem um monte de discos USB (USB disks, câmeras digitais que montam como Mass Storage, leitores de cartões de memória etc) e gostaria de montar cada um em seu lugar? Talvez o kernel 2.6 possa lhe ajudar...

[ Hits: 19.181 ]

Por: Cesar Cardoso em 06/06/2004


Resolvendo o problema



Dois grandes avanços no kernel 2.6 são, sem dúvidas, o subsistema USB, bem mais rápido, confiável e estável; e o suporte a hotplug. Vamos, rapidamente, utilizá-los em conjunto com o sysfs para resolvermos um problema chato como o meu, e que certamente é de muita gente.

Eu tenho um USB disk, essas "canetas" que todo mundo têm hoje em dia; tenho um Sony Clié, que permite montar o conteúdo da Memory Stick como se fosse um drive; e um leitor desses 6-em-1, que lêem SecureDigital/MultiMedia Card, SmartMedia, CompactFlash e Memory Stick. Estou sempre usando os três, e convenhamos é um saco ficar toda hora olhando no /proc pra ver quem pegou qual posição no bus SCSI. Certamente é mais fácil dar um "nome" a cada um deles, não? Mas como fazer isso???

Primeiro, é importante garantirmos que temos pelo menos três pacotes instalados:
  • sysfsutils-0.4.0 ou mais novo; (sysfsutils é um conjunto de programas para ler o diretório /sys, onde o kernel 2.6 deixa importantes informações sobre os objetos do kernel, que udev e hotplug utilizam);
  • hotplug-2004_01_05 ou mais novo;
  • udev-016 ou mais novo.

No Fedora Core 2, por exemplo, precisei baixar o sysfsutils em:
hotplug e udev estavam dentro do exigido.

Pluguei todos ao mesmo tempo e procurei um atributo que os diferenciasse. Descobri que 'model' resolveria meu problema:

# systool -vb scsi | grep model
    model               = "USB Reader-SMC"
    model               = "USB Reader-CF"
    model               = "USB Reader-SD"
    model               = "USB Reader-MS"
    model               = "ZZZZZZZZZZZZZZZï¿¿"
    model               = "PEG Mass Storage"


Daí editei o arquivo /etc/udev/udev.rules, onde estão as regras de nomeamento que udev utiliza, para entender o que eu queria:

# USB Mass Storage Clie
BUS="scsi", SYSFS{model}="PEG Mass Storage", NAME{all_partitions}="clie"
# My pen drives
BUS="scsi", SYSFS{model}="ZZZZZZZZ*", NAME{all_partitions}="pendrive"
# My reader
BUS="scsi", SYSFS{model}="USB Reader-SMC*", NAME{all_partitions}="smartmedia"
BUS="scsi", SYSFS{model}="USB Reader-CF*", NAME{all_partitions}="cf"
BUS="scsi", SYSFS{model}="USB Reader-SD*", NAME{all_partitions}="sd"
BUS="scsi", SYSFS{model}="USB Reader-MS*", NAME{all_partitions}="mstick"

NOTA: O Fedora Core 2 coloca os arquivos de regras de udev dentro do diretório /etc/udev/rules.d. Apenas criei o arquivo 10-udev.rules com o conteúdo acima. Mas o caso geral é /etc/udev/udev.rules.

O que eu fiz? Se, em /sys/bus/scsi (lembrem-se que dispositivos USB Mass Storage são vistos no bus USB), tiver algum dispositivo em que o campo 'model' for igual a, por exemplo, "PEG Mass Storage", todas as partições serão nomeadas clie. Ou seja, o udev cria /udev/clie (o dispositivo em si) e /udev/clie1 a /udev/clie15 (as partições).

Detalhe: os asteriscos depois dos nomes dos modelos foram colocados para encher o espaço, porque os nomes dos modelos têm menos de 16 caracteres.

Despluguei tudo e editei o /etc/fstab:

/udev/clie1        /remov/clie        vfat  user,noauto,owner,rw  0 0
/udev/pendrive1    /remov/pendrive    vfat  user,noauto,owner,rw  0 0
/udev/smartmedia1  /remov/smartmedia  vfat  user,noauto,owner,rw  0 0
/udev/cf1          /remov/cf          vfat  user,noauto,owner,rw  0 0
/udev/sd1          /remov/sd          vfat  user,noauto,owner,rw  0 0
/udev/mstick1      /remov/mstick      vfat  user,noauto,owner,rw  0 0

Para testar, pluguei o meu USB disk (64MB). Depois de alguns segundos:

# fdisk -l /udev/pendrive
Disk /udev/pendrive: 65 MB, 65208320 bytes
64 heads, 32 sectors/track, 62 cylinders
Units = cilindros of 2048 * 512 = 1048576 bytes
 
    Dispositivo Boot      Start   End      Blocks   Id  System
/udev/pendrive1   *     1          62       63472    6  FAT16


# cat /proc/scsi/scsi
Attached devices:
Host: scsi7 Channel: 00 Id: 00 Lun: 00
  Vendor: ZZZZZZZZ Model: ZZZZZZZZZZZZZZZ  Rev:
  Type:   Direct-Access                    ANSI SCSI revision: 02


Agora liguei o meu Clié com um cartão de 32MB, coloquei no cradle e liguei o programa que exporta o cartão Memory Stick como se fosse um disco:

# fdisk -l /udev/clie
Disk /udev/clie: 32 MB, 32473088 bytes
4 heads, 16 sectors/track, 991 cylinders
Units = cilindros of 64 * 512 = 32768 bytes
 
Dispositivo Boot      Start         End      Blocks   Id  System
/udev/clie1   *           1         990       31670+   1  FAT12


# cat /proc/scsi/scsi
Attached devices:
Host: scsi7 Channel: 00 Id: 00 Lun: 00
  Vendor: ZZZZZZZZ Model: ZZZZZZZZZZZZZZZ  Rev:
  Type:   Direct-Access                    ANSI SCSI revision: 02
Host: scsi8 Channel: 00 Id: 00 Lun: 00
  Vendor: Sony     Model: PEG Mass Storage Rev: 0100
  Type:   Direct-Access                    ANSI SCSI revision: 02


Para completar, pluguei o meu 6-em-1 e coloquei uma Memory Stick de 64MB. Observem que a ordem em que pluguei desta vez foi diferente da vez anterior.

# fdisk -l /udev/mstick
Disk /udev/mstick: 64 MB, 64946176 bytes
8 heads, 16 sectors/track, 991 cylinders
Units = cilindros of 128 * 512 = 65536 bytes
 
  Dispositivo Boot      Start         End      Blocks   Id  System
/udev/mstick1   *           1         990       63340+   1  FAT12


# cat /proc/scsi/scsi
Attached devices:
Host: scsi7 Channel: 00 Id: 00 Lun: 00
  Vendor: ZZZZZZZZ Model: ZZZZZZZZZZZZZZZ  Rev:
  Type:   Direct-Access                    ANSI SCSI revision: 02
Host: scsi8 Channel: 00 Id: 00 Lun: 00
  Vendor: Sony     Model: PEG Mass Storage Rev: 0100
  Type:   Direct-Access                    ANSI SCSI revision: 02
Host: scsi9 Channel: 00 Id: 00 Lun: 00
  Vendor: Generic  Model: USB Reader-SMC   Rev: 2002
  Type:   Direct-Access                    ANSI SCSI revision: 02
Host: scsi9 Channel: 00 Id: 00 Lun: 01
  Vendor: Generic  Model: USB Reader-CF    Rev: 2002
  Type:   Direct-Access                    ANSI SCSI revision: 02
Host: scsi9 Channel: 00 Id: 00 Lun: 02
  Vendor: Generic  Model: USB Reader-SD    Rev: 2002
  Type:   Direct-Access                    ANSI SCSI revision: 02
Host: scsi9 Channel: 00 Id: 00 Lun: 03
  Vendor: Generic  Model: USB Reader-MS    Rev: 2002
  Type:   Direct-Access                    ANSI SCSI revision: 02


Daí foi simplesmente mandar o Nautilus montar o meu novo /etc/fstab. Na figura abaixo está o resultado:


Clique para ampliar.

E funciona! :)

Referência:

   

Páginas do artigo
   1. Resolvendo o problema
Outros artigos deste autor

Para não se perder no mundo da memória Flash

Rumo a um pinguim móvel

Distros nacionais em evolução: visão do Definity Linux CURRENT e do Kurumin beta

Utilizando os scripts SystemV a seu favor

Criando um pinguim móvel com Fedora Core 1 e Siemens M50

Leitura recomendada

Mouse para destros e canhotos

Servidor SSH - Prático e Seguro

Facilitando o acesso a disquetes e memory keys (PenDrives) no Kurumin

Instalando o Arch Linux passo a passo

Traceroute com ICMP e TCP

  
Comentários
[1] Comentário enviado por lordello em 06/06/2004 - 23:45h

Excelente artigo cara, já tinha ouvido falar muito bem do udev.
Um sistema que costumo usar é o devfs do próprio kernel, ele é meio louco, ele deixa o /dev vazio, depois ele vai criando os dispositivos dinamicamente, eu espetei o camera do meu irmão aqui e o devfs já crou um /dev/sda1, mas achei o udev mais prático por poder não fixar a partição, isso resolve a montagem de discos zip, pois já vi alguns com partição sda1 ao invéz do padrão sda4.
Falou procê!

[2] Comentário enviado por renatoriolino em 12/07/2004 - 16:45h

Comentando o comentário do lordeelo :)

Os ZIPs por padrão usam sda4 mesmo com o sistema de arquivo FAT, você pode reformata-lo que ainda continuará usando sda4, mas como um disco rígido de verdade, você pode particiona-lo com o fdisk. Por motivos de compatibilidade com o Windows é bom sempre usar a 4 partição... já tive problemas de leitura por causa disso.

[]'s

Renato


Contribuir com comentário