Hugo Cisneiros (Eitch), hugo arroba devin ponto com ponto br
Versão 4.0, 2006

The Linux Manual

3.5. Dispositivos

Índice

3.5.1. Listagem de dispositivos
3.5.2. Montando dispositivos (Disquete, HD, CD-ROM, etc)
3.5.3. Formatando partições e dispositivos
3.5.4. Verificando se existem badblocks
3.5.5. Outras dicas sobre dispositivos

Um dispositivo é todo o componente de hardware e do sistema operacional. Um dispositivo é algo especial que é compartilhado com o kernel, ou seja, um exemplo de dispositivo são as impressoras, CD-ROMs, modems, portas, mouse, HDs, etc. No Linux, os dispositivos físicos são tratados como arquivos. Estes arquivos são um tipo especial no sistema de arquivos e se encontram no diretório /dev. Se você der um ls neste diretório, verá que existe um pouquinho de arquivos (Bota pouquinho nisso :)). Cada arquivo neste diretório corresponderá a um dispositivo de acordo com o seu tipo.

3.5.1. Listagem de dispositivos

3.5.1.1. /dev/hdxx

Aqui é correspondete as Interfaces IDEs, ou seja, tudo que tiver conectado nos cabos IDEs :) Exemplos, podemos citar HDs e CD-ROMs. O primeiro x corresponde a qual IDE e o segundo x (opcional) corresponde a partição. Veja a tabela à seguir:

Dispositivo Descrição
/dev/hda IDE Primária Master
— /dev/hda1 Partição 1 da IDE Primária Master
— /dev/hda2 Partição 2 da IDE Primária Master
/dev/hdb IDE Primária Slave
— /dev/hdb1 Partição 1 da IDE Primária Slave
— /dev/hdb2 Partição 2 da IDE Primária Slave
/dev/hdc IDE Secundária Master
— /dev/hdc1 Partição 1 da IDE Secundária Master
— /dev/hdc2 Partição 2 da IDE Secundária Master
/dev/hdd IDE Secundária Slave
— /dev/hdd1 Partição 1 da IDE Secundária Slave
— /dev/hdd2 Partição 2 da IDE Secundária Slave
/dev/hde Geralmente IDE adicional (RAID na placa-mãe, etc)
[...] E vai se extendendo.

Tabela 3.10. Listagem de dispositivos - /dev/hdxx

[Nota] Nota

Apesar de que na listagem anterior só se mostrou duas partições por IDE, pode-se ter muito mais. Usando apenas partições primárias, podemos ter de 1 a 4 (/dev/hda1 a /dev/hda4). Usando também partições extendidas, podemos ter até 254!

3.5.1.2. /dev/sdxx

Já o /dev/sdxx é a mesma coisa que os /dev/hdxx com a diferença que ao invés de ser IDE, é SCSI ou Serial-ATA. As mesmas regras servem pra esse dispositivo também.

3.5.1.3. /dev/fdX

Este dispositivo representa o drive de disquete. O x representa o número do drive começando do zero. Em outras palavras, se você tiver um drive de disquete no seu computador, o dispositivo dele vai ser /dev/fd0, se tiver mais de 1, o segundo vai ser /dev/fd1 e por aí vai.

3.5.1.4. /dev/ttyX

Se você já se logou na interface texto (console), com certeza você já utilizou este dispositivo. Eles são uma representação dos terminais de console... Por exemplo, na tela de console 1 (combinação de teclas Alt-F1), o dispositivo é o /dev/tty1. A tela 2 (Alt-F2) é o dispositivo /dev/tty2 e assim por diante. Para demonstrar isso, na interface texto e como root, o comando:

# echo "sou um console fantasma... Bu..." > /dev/tty12

Irá colocar a mensagem acima no console 12 (utilize o Alt-F12 para visualizar). Experimente!

3.5.1.5. /dev/ttySX

Portas seriais! As portas seriais são aquelas portas (já antigas) onde se liga um mouse serial, um modem, ou até um cabo serial para conectar dois computadores. Hoje em dia, as portas seriais não são tão comuns como antigamente e foram substituídas por portas PS/2 ou USB.

Fazendo uma comparação com o Windows/DOS, temos a seguinte equivalência:

Dispositivo Descrição
/dev/ttyS0 COM1 (Porta serial 1)
/dev/ttyS1 COM2 (Porta serial 2)
/dev/ttyS2 COM3 (Porta serial 3)
/dev/ttyS3 COM4 (Porta serial 4)

Tabela 3.11. Listagem de dispositivos - /dev/ttySX

Saiba também que não se restringe a apenas 4 portas. Se por exemplo você tiver uma placa multi-serial, as portas podem ir mais 8, 16 e por aí vai. Mas esse tipo de equipamento já está fora de moda ;)

3.5.1.6. /dev/lpX

Corresponde a porta da impressora ou porta de um serviço paralelo. X é o número correspondente a porta... 0 = LPT1 por exemplo.

3.5.1.7. /dev/plipX

Esse dispositivo corresponde a uma conexão de cabo paralelo. O X será o número correspondente a porta, como no exemplo anterior.

3.5.1.8. /dev/null

Este é um dispositivo muito especial e que você poderá usar bastante. Como o nome diz, é um dispositivo nulo, ou seja, tudo que você referenciar ou redirecionar à ele, será efetivamente anulado e mandado pro inferno!

3.5.1.9. /dev/dsp

Este dispositivo faz referência ao som (utilizando o modo OSS do som no kernel, mas com uma compatibilidade do ALSA que é utilizado nos mais novos kernels). Na Seção 3.3.1.10, “cat - Exibe o conteúdo de um arquivo ou direciona-o para outro” mostra como utilizar um dispositivo como este para gravar e tocar sons!

3.5.1.10. Outros dispositivos

Os dispositivos são muitos e listar todos eles aqui não seria tão legal assim. Você pode explorar o diretório /dev procurando saber sobre eles. Se você por acaso apagou um dispositivo e quer saber como criá-lo, utilize o script /dev/MAKEDEV. Basicamente você usa este script assim:

# cd /dev
# ./MAKEDEV ttyS3

E dessa forma o dispositivo /dev/ttyS3 será criado. Para mais informações sobre a criação de dispositivos, utilize a manpage do MAKEDEV ou do mknod. Na verdade o /dev/MAKEDEV é apenas um script para intermediar o usuário e o comando mknod... O mknod é o que faz o trabalho mais árduo :)

[Nota] Nota

As distribuições Linux mais atuais utilizam um sistema de arquivos feito especialmente para os dispositivos do /dev. Este sistema se chama udev e cria os dispositivos de acordo com o que está disponível na máquina e ajuda a trabalhar com o hotplug para que a remoção e adição de dispositivos na máquina (exemplo: USB) seja mais prática.

3.5.2. Montando dispositivos (Disquete, HD, CD-ROM, etc)

Primeiro eu espero que você tenha lido sobre o que é um dispositivo. Agora vamos saber como se usar um dispositivo, ou seja, um HD, um disquete, um CD-ROM, etc. O comando que usaremos aqui é o mount, que pelo próprio nome, podemos ver que ele serve para "montar" dispositivos em um certo lugar.

Vamos falar primeiro sobre como montar um disquetinho. Supondo que temos apenas um drive de disquete, o nosso disquete estará representado no arquivo /dev/fd0. Então para montar o disquete, colocamos o disquete e executamos o seguinte comando:

# mount /dev/fd0 /diretorio_onde_o_disco_vai_ser_montado

O diretório_onde_o_disco_vai_ser_montado tem que existir e tem que estar totalmente vazio. Este diretório, que você pode nomear como quiser funciona como se você estivesse no disquete. Agora se você quer montar outro disquete, você terá que desmontar o disquete montado primeiro, para depois poder montar outro. Para desmontar, usa-se o comando umount:

# umount /dev/fd0

...ou...

# umount /diretorio_onde_o_disco_esta_montado

Agora vamos montar uma partição. É o mesmo esquema de montar o disquete, só que o arquivo do dispositivo é diferente. Para partições em um HD IDE, os nomes dos dispositivos são /dev/hdxx e para partições em um HD SCSI ou Serial-ATA, os nomes são /dev/sdxx. Se eu quero montar a partição /dev/hda2 (HD número 1, partição número 2), eu faço:

# mount /dev/hda2 /diretorio

E para desmontar, usa-se o comando umount:

# umount /dev/hda2

...ou...

# umount /diretorio

Existe também no comando mount, o parâmetro -t, que vai indicar que tipo de sistema de arquivos a partição usa (FAT32, FAT16, minix, ext2, UMSDOS, etc). Se você não colocar esta opção, o comando força uma compatibilidade para a montagem. O recomendado é colocar esta opção, pois às vezes o mount não consegue detectar qual o sistema de arquivos e gera um erro. Um exemplo do uso da opção -t seria:

# mount -t vfat /dev/hda2 /diretorio

Este comando montará uma partição FAT32 em /diretorio. Agora vamos montar um CD-ROM. O mesmo esquema, só que você deve saber qual o dispositivo referente ao seu CD-ROM, que tem como nome /dev/hdx, onde x é a letra correspondente à posição do CD-ROM na IDE. Para montar um exemplo, façamos:

# mount /dev/cdrom /mnt/cdrom

Para desmontar, a mesma coisa de sempre:

# umount /dev/cdrom

...ou...

# umount /mnt/cdrom
[Nota] Nota

Se você der uma olhada no arquivo /dev/cdrom, você verá que ele não é um dispositivo e sim um link simbólico para o dispositivo correspondente ao CD-ROM (/dev/hdx). Isso quer dizer que você pode substituir o /dev/cdrom pelo /dev/hdx tranqüilamente, assim como pode também modificar o link simbólico para apontar para outro dispositivo.

Existe outro método de montagem muito mais prático do que os citados acima... É uma pré-configuração de montagem no arquivo /etc/fstab. Este arquivo contém as informações de montagem para os dispositivos e seus diretórios. Por exemplo, quando a sua distribuição inicia, ela procura no /etc/fstab para saber onde está a raiz do seu sistema e vai montar no / (raiz). Também contém informações de montagem para os diretórios especiais como o /proc e até mesmo para o uso da memória swap. Vejamos aqui o meu arquivo /etc/fstab como exemplo para estudarmos ele:

$ cat /etc/fstab

/dev/hda2        swap             swap       defaults         0  0
/dev/hda5        /                ext3       defaults         0  0
/dev/hda1        /boot            ext3       defaults         1  1
/dev/fd0         /mnt/floppy      auto       user,noauto      0  0
/dev/cdrom       /mnt/cdrom       iso9660    user,noauto,ro   0  0
none             /proc            proc       defaults         0  0
none             /dev/pts         devpts     gid=5,mode=620   0  0

Viu este exemplo? Peguemos a segunda linha. Esta segunda linha é a minha raiz, que está na partição /dev/hda5, será montada automaticamente (defaults) no diretório / (raiz) durante a inicialização. E esta partição tem o sistema de arquivos ext3. Na primeira temos a montagem da memória swap... E vejamos a linha que começa com /dev/cdrom. Aqui facilita as coisas porque os parâmetros user,noauto,ro significam que qualquer usuário pode montar o CD-ROM (user), não é montado automaticamente na inicialização (noauto) e é montado como somente leitura (ro).

Qual a diferença? O comando mount só pode ser usado pelo root, mas com essa opção no /etc/fstab, um usuário comum pode montar o CD-ROM apenas com o comando mount /mnt/cdrom, ou mount /dev/cdrom. A sintaxe deste arquivo não é muito difícil e vendo este exemplo aqui, você pode muito bem criar suas próprias configurações para dar mais praticidade no seu uso com os dispositivos no Linux!

[Cuidado] Cuidado

Mexa à vontade no /etc/fstab, mas nunca nas linhas que já vêm, pois se não o Linux pode não achar sua partição e poderá não conseguir iniciar o sistema e você terá de bootar com um bootdisk para consertar isto... Então mexa, mas pense duas vezes antes de mexer e sempre faça backups! Na verdade esse aviso serve para qualquer coisa que você faça, fazer backup é sempre uma boa prática! :)

3.5.3. Formatando partições e dispositivos

Como aprendido anteriormente, as partições e hardwares de armazenamento são representados por arquivos, que são os tais dispositivos. Levando em consideração, podemos formatar essas partições com o comando mkfs. Por exemplo, se eu quiser formatar a partição /dev/hda2 com o sistema de arquivos ext3, faço:

# mkfs -t ext3 /dev/hda2

...ou...

# mkfs.ext3 /dev/hda2

Como podem ver, o comando mkfs.ext3 é apenas um atalho para o mkfs utilizando o parâmetro -t ext3. Caso você queira formatar para o tipo FAT32, use:

# mkfs.vfat /dev/hda2

No caso de formatar um disquete, antes de criar um sistema de arquivos no seu disquete (assim como você criaria em uma partição como nos exemplos anteriores) você pode precisar formatá-lo fisicamente. Para fazer isso, usa-se o comando fdformat, da seguinte forma:

# fdformat /dev/fd0H1440

Repare que usamos o dispositivo /dev/fd0H1440, que indica um disquete de alta-capacidade de incríveis 1.4MB! Dependendo do seu disquete (a maioria é assim, se é que ainda existem disquetes), o dispositivo pode ser diferente, é só dar uma olhada no diretório /dev/.

Depois é só criar o sistema de arquivos como nos outros exemplos:

# mkfs.vfat /dev/fd0

3.5.4. Verificando se existem badblocks

Quem mexe com computador sabe muito bem que HDs são problemáticos... Às vezes até demais! Uma vez ou outra, acaba aparecendo os chamados badblocks, que são defeitos físicos no HD, que impossibilitam escrita/leitura de dados nestes blocos. No Linux, a gente consegue verificar se um dispositivo tem badblocks ou não através do comando:

# badblocks /dev/hda1

Onde /dev/hda1 é o dispositivo que você deseja verificar. Se você usar a opção -o arquivo.txt, o comando badblocks irá escrever os dados dos badblocks no arquivo arquivo.txt. Este arquivo poderá ser usado para um truquezinho. :)

[Importante] Importante

Lembre-se que este tipo de comando é extremamente delicado. Nunca use a opção -w por exemplo :) Sempre quando for rodar este comando em algum HD do seu sistema, tente deixar este dispositivo desmontado e sem uso. No pior dos casos, tente deixar apenas como somente-leitura. Fica muito mais fácil e prático você fazer isso a partir de um LiveCD.

[Nota] Caso!

Agora imagine uma vez, eu estava em casa tranquilo e tive que instalar uma máquina Dual-boot, com Windows e Linux. Como é de costume, geralmente instalo o Windows primeiro, pra depois instalar o Linux... Senão a instalação do Windows acaba removendo o gerenciador de boot pra inicializar apenas no Windows (uma verdadeira bosta). O engraçado é que primeiro eu não conseguia de jeito nenhum instalar o Windows, pois ele não estava reconhecendo o HD! Depois tentei utilizar o driver que vinha na placa mãe, mas a instalação do Windows não aceitava CD, só disquete! Que pena né? Então peguei um LiveCD com Linux, copiei os drivers do HD para o disquete e comecei a instalar o Windows no HD.

Ok, no meio da instalação ele diz que não pode continuar, pois ocorreu um erro no HD e era pra re-fazer tudo. Que erro eu não sei, só o Bill Gates devia saber. Re-fiz tudo de novo e deu o mesmo erro. Então usei de novo um LiveCD com Linux e mandei verificar o HD... Achou 3 badblocks no meio da instalação, então os isolei da partição Windows e mandei instalar de novo. Dessa vez foi tudo legal (tirando depois que tive que instalar os 427,5 drivers de coisas do computador).

Quando chegou na parte do Linux, coloquei o CD de instalação e fui instalando numa boa, sem dar erro nenhum e em alguns minutinhos tudo estava instalado e funcionando. Nem precisei dos drivers que vinham nos CDs junto com o computador. Maravilha! E no final, lembram-se dos badblocks? Pois é, agora vem a parte divertida, o que diabos eu fiz com os badblocks? É aí que entra o objetivo de contar este caso :)

O sistema de arquivos do Linux, o ext3, tem uma opção muito interessante, que é marcar os badblocks do HD para não serem usados, assim você não corre o risco de se ferrar por ter usado estes badblocks no meio de uma partição :) Para fazer isso, basta utilizar o seguinte comando:

# e2fsck -c /dev/hda1

Este comando irá rodar o comando badblocks, identificar todos os badblocks da partição e marcá-los como ruins para nunca serem usados. Simples não? :)

3.5.5. Outras dicas sobre dispositivos

As mensagens de boot/kernel podem ajudar bastante na identificação dos dispositivos. Até mesmo para dispositivos USB que você pluga ou despluga, pode ser bastante útil. O bom do Linux é que ele te informa tudo o que está acontecendo, com detalhes, assim você tem um controle melhor sobre o que você usa. Então para obter essas informações utilize o comando:

# dmesg

Para saber o hardware da sua máquina, utilize o comando:

# lspci

Adicione o parâmetro -v para maiores detalhes sobre cada dispositivo. Para saber sobre os dispositivos USB que você tem funcionando no computador, use o comando:

# lsusb

Caso você precise saber dos módulos do kernel, que contém os drivers necessários para funcionar seus dispositivos (na maioria das vezes), então você lista com o comando:

# lsmod

Toda vez que quiser ver as partições de um certo HD, use o fdisk para mostrar, lembrando sempre de só mandar listar as partições (fdisk -l /dev/dispositivo), sem mexer no disco e estragar os dados :)