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: 20.269 ]

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

Linux, USB-IrDA, T300 on the rocks

Rumo a um pinguim móvel

NPTL, Exec-Shield e outros palavrões que fazem seus programas crasharem

As incríveis aventuras de um RedHat 9 migrando para kernel 2.6

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

Leitura recomendada

Adaptador Bluetooth no Slackware

Integrando Bind com Active Directory (AD)

Instalação completa do CACIC no Slackware 12.2

Instalação do Asterisk no Debian Lenny

Arch Linux - Instalação sem complicação

  
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




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts