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
brw-rw—- 1 root cdrom 22, 0 2008-08-08 00:13 hda
brw-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/