Dispositivos de Bloco

Antes de falarmos sobre dispositivos de bloco, é importante saber o que é um sistema de arquivos.

Um sistema de arquivos é uma estrutura criada no disco rígido logo após o particionamento e permite que arquivos sejam criados, movidos, removidos, etc.

É importante frisar que, enquanto uma partição indica ao sistema operacional em que pedaço do HD as informações devem ser gravadas, um sistema de arquivo informa ao sistema operacional qual o formato que será utilizado para gravar as informações.

Exemplos de sistemas de arquivos podem ser conferidos no post Sistema de Arquivos [1].

Dispositivos de Bloco

Dispositivos de blocos, são todos os dispositivos que podem enviar/transmitir dados em blocos de tamanho fixo.

Um exemplo de dispositivo de bloco, é o HD, que pode ser IDE, SCSI, etc. Além dele, temos como exemplo de dispositivos de blocos pendrives, floppy, cdrom.

Em sistemas Windows, desde uma partição no disco rígido até um pendrive, o acesso é feito utilizando a idéia de “unidade” ou “driver”, como por exemplo unidade C: ou drive C:.

Já em sistemas GNU/Linux existe o conceito de dispositivos, e, praticamente tudo que está na máquina é tratado como sendo um dispositivo, e pode ser acessado pelo seu arquivo localizado no diretório /dev.

Por exemplo, se um determinado programa precisar ler uma informação da porta serial, basta que ele abra o arquivo /dev/ttyS0 para leitura, que é um arquivo de dispositivo especial que, quando acessado, lê o conteúdo do dispositivo em questão.

Sendo assim, podemos dizer que os arquivos de dispositivos são o nome pelo qual um determinado dispositivo é conhecido pelo sistema.

O diretório /dev contém arquivos especiais chamados de arquivos de dispositivos; nesse diretório, além dos dispositivos de bloco, encontramos os seguintes tipos de arquivos de dispositivos:

caracter – são usados como correspondentes de dispositivos cujos dados são transmitidos na forma de um caracter por vez.

fifo – também conhecido como pipe nomeado, é utilizado para realizar a comunicação entre processos em uma mesma máquina.

socket – utilizado para criar um ponto de comunicação entre processos, do tipo “cliente-servidor”.

Bem, você deve estar se perguntando: “Como vou saber qual o tipo de arquivo de dispositivo existe dentro do dev?”

Para saber qual o tipo de arquivo de dispositivo, devemos usar o comando ls com o parâmetro -l (é l de limão!) para listar com detalhes. Nos exemplo abaixo, vamos listar os arquivos de dispositivo do tipo bloco, caracter, fifo e socket:

Listando arquivos de dispositivos de bloco:

# cd /dev/

# ls -l | grep ^b
b
rw-rw—- 1 root cdrom    22,   0 2008-08-08 00:13 hda
b
rw-rw—- 1 root disk      8,   0 2008-08-08 00:13 sda

Listando arquivos de dispositivos de caracter:

# ls -l | grep ^c
crw-rw—- 1 root dialout   4,  64 2008-08-08 00:13 ttyS0
crw-rw—- 1 root dialout   4,  65 2008-08-08 00:13 ttyS1

Listando arquivos de dispositivos de fifo:

# ls -l | grep ^p
prw——- 1 root root           0 2008-08-08 00:13 initctl
prw-r—– 1 root adm            0 2008-08-08 22:05 xconsole

Listando arquivos de dispositivos de socket:

# ls -l | grep ^s
srwxrwxrwx 1 root root           0 2008-08-08 00:14 gpmctl
srw-rw-rw- 1 root root           0 2008-08-08 00:14 log

Identificando o hardware

Considerando os dispositivos SCSI conectados à máquina, o nome deles é determinado conhecendo qual controladora ele está conectado e qual partição deseja acessar. Por exemplo, /dev/sda representa todo o disco, mas a terceira partição primária desse disco, será o /dev/sda3; veja exemplo na tabela abaixo:

Usando os dispositivos

Para acessar os dados que estão em um dispositivo, no Linux usamos o conceito de montar; assim, quando colocamos um cd no computador, por exemplo, vamos ‘montar’ o cd, isto é, deixar os dados que estão no cd disponíveis para uso.

O comando utilizado para montar dispositivos é o mount, e sua sintaxe básica é:

mount        dispositivo         ponto_de_montagem

E daí, podemos utilizar o tradicional bate-papo com o comando para entender melhor a sintaxe:

montar (mount) o que? (dispositivo) onde? (ponto_de_montagem)

Como os dispositivos são tratados como arquivos, será sempre /dev/alguma_coisa!

Mas antes de montar, é preciso saber qual é dispositivo em que meu cdrom se encontra! Para descobrir isso, temos duas opções!

Quando o Linux inicializa, aparece um monte de mensagens na tela. São mensagens referentes aos hardwares encontrados (cd, hd, etc). Tudo isso passa rápido demais e não temos como analisar as mensagens.

Para checar as tais mensagens depois que o Linux inicializa, utilizamos o comando dmesg:

# dmesg | more

Ou então, para sermos mais específicos, podemos filtrar nossa pesquisa, procurando por ATAPI, que é o protocolo que gerencia o drive do CD-Rom:

# dmesg | grep -i atapi
hda: MATSHITADVD-RAM UJ-850S, ATAPI CD/DVD-ROM drive
hda: ATAPI 24X DVD-ROM DVD-R-RAM CD-R/RW drive, 2048kB Cache, UDMA(33)

A outra maneira, é consultar o diretório /proc, que terá a lista de todos os dispositivos que estão ativos no Linux; sabendo que o meu leitor de CD é IDE, irei entrar no diretório /proc/ide:

# cd /proc/ide/

# ls
drivers  hda  ide0

# cd hda/

# ls
capacity  driver  identify  media  model  settings

# cat model
MATSHITADVD-RAM UJ-850S

Vejam que entrei no diretório /proc/ide e consegui consultar até o modelito do meu driver 🙂 ! Sabendo qual o meu dispositivo, posso tranquilamente, montar o meu cd.

Exemplo: montar um cd (/dev/hda) em /media/cdrom:

# mount /dev/hda /media/cdrom/
mount: block device /dev/hda is write-protected, mounting read-only

Para verificar se o dispositivo foi montado corretamente, podemos usar os comandos mount e df:

# mount
/dev/hda on /media/cdrom0 type iso9660 (ro)

# df -h
Sist. Arq.            Tam   Usad Disp  Uso% Montado em
/dev/hda              6,8M  6,8M     0 100% /media/cdrom

O comando df vem de disk free; além dos dispositivos que estão montados, ele mostra o tamanho e o uso em %.

Ah, e a opção -h do comando df, é para mostrar o resultado em formato humano (M – megas, G, gigas).

Quando montamos um determinado dispositivo, no nosso exemplo o cd-rom, só poderemos retirar a mídia após desmontar a mesma. Para essa operação, usamos o comando umount:

# umount /media/cdrom

Lembrando que, para desmontar o cd, não podemo estar dentro do diretório onde o cd foi montado! Por exemplo, você montou o cd conforme nosso exemplo. Daí, para acessar o conteúdo dele, entra no diretório onde foi montado (no caso, /media/cdrom). Quando quiser desmontar, você terá que sair do diretório /media/cdrom, caso contrário, receberá mensagem que o dispositivo está ocupado!

Vejam:

# mount /dev/hda /media/cdrom/
mount: block device /dev/hda is write-protected, mounting read-only

# cd /media/cdrom

# ls -ltr
total 22
dr-xr-xr-x 1 root root 2048 2007-05-26 09:55 project9
dr-xr-xr-x 1 root root 2048 2007-05-26 09:55 project8
dr-xr-xr-x 1 root root 2048 2007-05-26 09:55 project7
dr-xr-xr-x 1 root root 2048 2007-05-26 09:55 project6
dr-xr-xr-x 1 root root 2048 2007-05-26 09:55 project10
dr-xr-xr-x 1 root root 2048 2007-05-26 09:55 temp
dr-xr-xr-x 1 root root 2048 2007-05-26 09:55 project1
dr-xr-xr-x 1 root root 2048 2007-05-26 09:55 project5
dr-xr-xr-x 1 root root 2048 2007-05-26 09:55 project4
dr-xr-xr-x 1 root root 2048 2007-05-26 09:55 project3
dr-xr-xr-x 1 root root 2048 2007-05-26 09:55 project2

# umount /media/cdrom
umount: /media/cdrom: device is busy
umount: /media/cdrom: device is busy

No exemplo acima, não consegui desmontar o cd pois estava no diretório onde montei o dispositivo. Então, para desmontar, tenho que sair do diretório e executar o comando umount novamente:

# cd
# umount /media/cdrom

Agora, detaaaalhe! O comando de montagem, da forma que mostrei, só pode ser executado como root; ou seja, para especificar o dispositivo (/dev/hda), tem que ser root, o administrador do sistema!

Caso um usuário normal do sistema precise montar o dispositivo, o mesmo deve estar especificado dentro do arquivo /etc/fstab. O arquivo fstab é o responsável por guardar e montar a tabela de partições e dispositivos.

Irei falar sobre o fstab em outro post, então, aqui só vou mostrar a linha que deve estar no fstab para que o usuário normal possa montar o cdrom:

# grep cdrom /etc/fstab
/dev/hda        /media/cdrom0   udf,iso9660 user,noauto     0       0

No exemplo acima, vimos a linha referente ao ponto de montagem do cdrom; com isso especificado dentro do arquivo, um usuário comum, só precisará digitar:

# mount /media/cdrom

E, para desmontar:

# umount /media/cdrom

[1] Sistema de Arquivos – https://ivanix.wordpress.com/2008/06/