Capítulo 7. Nomes de Dispositivos definidos pelo Usuário

O diretório /dev/ contém arquivos virtuais que representam dispositivos. Cada arquivo virtual representa um dispositivo do sistema, tal como dispositivo de armazenamento, dispositivo USB e impressora. Estes arquivos virtuais são chamados nomes de dispositivos.

Nomes de dispositivos do tipo IDE começam com hd, e nomes de dispositivos do tipo SCSI começam com sd. O prefixo é seguido de uma letra, começando por a, representando a ordem dos discos. Por exemplo: /dev/hda é o primeiro disco rígido IDE, /dev/hdb é o segundo disco rígido IDE, /dev/hdc é o terceiro disco IDE e assim por diante.

Se o nome do dispositivo for seguido de um número, este representa o número da partição. Por exemplo: /dev/hda1 representa a primeira partição do primeiro disco IDE.

Se um disco rígido for movido fisicamente para uma localidade diferente dentro da máquina, ou se for removido ou se falhar na inicialização, alguns nomes de dispositivos serão alterados, potencialmente deixando referências inválidas nos nomes dos dispositivos. Veja o exemplo da Figura 7-1 - se um sistema tem três discos rígidos SCSI e o segundo destes discos é removido, /dev/sdc torna-se /dev/sdb, fazendo com que quaisquer referências a /dev/sdc tornem-se inválidas. Referências a /dev/sdb também tornam-se inválidas desde que seja um disco diferente.

Figura 7-1. Removendo um Disco Rígido

Todo disco rígido tem um identificador úncio associado a ele, chamado UUID. Para resolver o problema da troca de nomes dos dispositivos, devlabel considera somente nomes de dispositivos definidos pelo usuário que estejam associados a estes UUIDs. Uma ligação (link) simbólica é criada entre o nome do dispositivo definido pelo usuário e o nome real do dispositivo. Se o nome real do dispositivo for alterado, a ligação simbólica é atualizada para apontar para o mesmo disco de acordo com seu UUID. Portanto, ambos dispositivos de armazenamento, IDE e SCSI, podem ser referenciados por seus nomes definidos pelo usuário.

O devlabel também considera dispositivos hotplug de montagem automática como discos rígidos, e dispositivos USB como placas de memória para câmeras digitais. Se configurado para ser montado automaticamente, após o dispositivo ser plugado, este será montado com o nome definido pelo usuário.

7.1. Configurando o Devlabel

Nomes de dispositivos definidos pelo usuário podem ser criados baseados no nome do dispositivo, no nome da partição, ou no UUID do disco.

Use a seguinte sintaxe para adicionar um nome de dispositivo de armazenamento definido pelo usuário. O dispositivo especificado pode ser o dispositivo inteiro ou uma única partição no dispositivo.

devlabel add -d <device> -s <symlink>

Por exemplo: para adicionar uma ligação simbólica /dev/work para representar a partição /dev/hdb1, use o seguinte comando:

devlabel add -d /dev/hdb1 -s /dev/work

Se o comando for bem-sucedido, o seguinte será exibido:

Created symlink /dev/work -> /dev/hdb1
Added /dev/work to /etc/sysconfig/devlabel

Para adicionar um nome de dispositivo baseado em um UUID, use a seguinte sintaxe:

devlabel add -u <uuid> -s <symlink>

Para usar o devlabel para recuperar o UUID de um dispositivo (ou para certificar-se de que ele tenha um), use o seguinte comando:

devlabel printid -d <device>

Os nomes das ligações simbólicas deme ser únicos. Se você tentar adicionar uma ligação simbólica com um nome que já existe, o arquivo de configuração não é modificado e o seguinte será exibido:

The file /dev/work already exists.
Failure. Could not create a symlink.

Para remover uma ligação simbólica da lista do devlabel, use o seguinte comando:

devlabel remove -s <symlink>

A entrada é removida do arquivo de configuração e a ligação simbólica é apagada.

Para determinar o status das ligações simbólicas devlabel, use o seguinte comando:

devlabel status

Retornará um output similar a:

lrwxrwxrwx    1 root            9 Apr 29 13:20 /dev/work -> /dev/hdb1
lrwxrwxrwx    1 root            9 Apr 29 13:41 /dev/tcf -> /dev/hda1

7.1.1. Dispositivos Hotplug

Um programa chamado hotplug executa ações quando um evento do sistema, tal como a adição ou remoção de hardware, ocorre enquanto o sistema está rodando. Por exemplo: se um disco rígido ou placa de leitura de mídia USB está conectada ao sistema, o hotplug notifica os usuários registrando uma mensagem no arquivo de registro do sistema (/var/log/messages) e carrega os módulos apropriados do kernel para que o dispositivo funcione.

Quando um dispositivo PCI, USB ou IEEE 1394 (também conhecido como FireWire) é plugado, os scripts do hotplug também reiniciam o devlabel para que a mídia removível de armazenamento receba um nome de dispositivo definido pelo usuário (como /dev/usbcard), e opcionalmente pode montar o dispositivo de armazenamento automaticamente.

Após inserir o cartão de leitura USB na porta USB do computador, submeta o seguinte comando como root (onde /dev/sda1 é o nome do dispositivo para a placa de mídia e /dev/usbcard é o nome do dispositivo a utilizar, definido pelo usuário):

devlabel add -d /dev/sda1 -s /dev/usbcard --automount

Este comando adiciona uma entrada para o ponto de montagem de /etc/sysconfig/devlabel e cria uma ligação simbólica de /dev/usbcard para /dev/sda1. A opção --automount do devlabel especifica que o dispositivo deve ser automaticamente montado quando o devlabel reiniciar, se uma entrada para ele for localziada em /etc/fstab e se o dispositivo existir (se um dispositivo com o mesmo UUID for encontrado).

O updfstab é um programa que busca novos dispositivos nos canais IDE e SCSI e adiciona entradas para eles no /etc/fstab, caso elas já não existam. Também adiciona entradas para dispositivos USB desde que eles apareçam como dispositivos SCSI. Consulte a página man do updfstab para mais informações.

Quando um dispositivo USB é inserido, o hotplug roda o programa updfstab, que adiciona uma entrada no /etc/fstab para o dispositivo de armazenamento (como uma placa de mídia), se ela existir. (Se uma leitor de placa for inserido sem uma placa dentro, a entrada não será adicionada.) A linha adicionada contém o nome real do dispositivo (como /dev/sda1) e a opção kudzu. A opção kudzu diz ao Kudzu [1] que ele pode remover a linha se o dispositivo não existir. Já que a linha é requerida pelo devlabel, a opção kudzu deve ser removida para que a linha seja mantida no arquivo. Também altere o nome do dispositivo para o nome devlabel (tal como /dev/usbcard) e crie o ponto de montagem (como /mnt/usbcard).

Após modificar o arquivo, ele deve se parecer com o seguinte:

/dev/usbcard   /mnt/usbcard   auto    noauto,owner 0 0

Quando o devlabel é reiniciado, a mídia de armazenamento no dispositivo de leitura da placa USB é montada em /mnt/usbcard quando o dispositivo USB estiver plugado ao computador, por causa do --automount. O segredo é que quando o leitor da placa USB estiver plugado ao computador, a placa já deve estar no leitor. Caso contrário, o devlabel não poderá encontrar o dispositivo de armazenamento, e portanto não poderá montá-lo automaticamente.

Se o leitor da placa USB já estiver plugado sem uma placa, quando a placa for inserida, execute o comando devlabel restart como root para montar a placa de mídia.

Notas

[1]

Kudzu é uma ferramenta de detecção de hardware executada no momento da inicialização da máquina para determinar qual hardware foi removido ao adicioando ao sistema.