Antigamente, existia a concorrência entre HDs IDE (que eram vistos no Linux como /dev/hdX) e HDs SCSI, vistos pelo sistema como “/dev/sdX”. O primeiro HD IDE seria detectado pelo sistema como “/dev/hda”, o segundo como “/dev/hdb” e assim por diante. Entretanto, mudanças feitas nas versões recentes do kernel derrubaram essa divisão, fazendo com que todos os HDs, independentemente de serem IDE ou SATA, passassem a ser vistos pelo sistema como “/dev/sdX”, como se fossem HDs SCSI. O HD principal passou então a ser sempre visto como “/dev/sda”.
Isso inclui até mesmo os pendrives, que são detectados pelo sistema como se fossem HDs adicionais. Ao plugar dois pendrives, o primeiro seria reconhecido como “/dev/sdb” e o segundo como “/dev/sdc”.
Antes de instalar qualquer sistema operacional, é necessário particionar o HD, criando as partições de instalação. Devido a uma limitação nos endereços que vem desde a época dos primeiros PCs, é possível criar apenas 4 partições primárias, ou até três partições primárias e uma partição estendida, que pode ser usada para criar mais partições.
Neste screenshot do Gparted, por exemplo, temos um HD dividido em 5 partições: /dev/sda1 (com uma instalação do Windows), /dev/sda2 (com uma instalação do Ubuntu), /dev/sda3 (reservada à instalação de mais uma distribuição), /dev/sda5 (swap) e /dev/sda6 (para arquivos).
A “/dev/sda4” é a partição estendida, que é criada automaticamente pelo particionador quando você usa a opção de criar uma partição lógica, como uma espécie de “container” para as demais partições. Você pode notar que o tamanho especificado pelo particionador é o das duas partições somadas:
Embora não seja obrigatória em micros com um volume suficiente de memória RAM, a partição swap é sempre recomendada, pois permite que o sistema disponha de uma área adicional para situações em que precisa de uma quantidade muito grande de memória RAM, como (por exemplo) ao editar vídeos. A memória swap pode ser usada também para mover arquivos e bibliotecas que não estão em uso, liberando mais memória RAM para uso dos programas e do cache de disco.
A propensão do sistema a utilizar memória swap é configurável através de uma opção do kernel, a “vm.swappiness”, que aceita valores de 0 a 100, sendo que um valor baixo orienta o sistema a usar swap apenas quando não houver mais memória disponível e um valor mais alto faz com que o sistema a utilize de maneira mais liberal, usando mais swap e tentando manter mais memória RAM livre para outros usos.
O default na maioria das distribuições é “60”, o que faz com que o sistema use um pouco de swap mesmo quando tem memória de sobra disponível. Você pode evitar isso alterando o valor para “20” (ou menos, de acordo com o gosto do freguês).
Para isso, execute, como root, o comando:
# sysctl vm.swappiness=20
Para que a alteração se torne permanente, edite o arquivo “/etc/sysctl.conf” e adicione a linha “vm.swappiness=20”. Este arquivo contém variáveis para o kernel, que são carregadas durante o boot. Ele pode ser usado também para salvar outras configurações, como, por exemplo, as opções para ativar o roteamento de pacotes, que são usadas ao compartilhar a conexão.
Você pode ativar uma imagem de memória swap temporária criando um arquivo com a capacidade desejada e montando-o como se fosse uma partição de memória swap. O desempenho será mais baixo do que ao usar uma partição swap real, mas ainda assim é um bom truque, que você pode usar em emergências. O primeiro passo é criar o arquivo vazio, usando o comando dd, especificando o tamanho, em kbytes. No exemplo, estou criando um arquivo com 512 MB: # dd if=/dev/zero of=swap.img bs=1024 count=512000 Ele simplesmente escreverá zeros dentro do arquivo “swap.img” (criado dentro do diretório atual), até atingir o tamanho indicado. Apesar de simples, o dd é um comando bastante poderoso, que pode ser usado para clonar HDs, destruir dados em partições e assim por diante, por isso tome sempre muito cuidado ao usá-lo. Com o arquivo criado, use o comando “mkswap” para formatá-lo e em seguida o “swapon” para que ele seja ativado: # mkswap swap.img Rodando o comando “free”, você verá que o total de memória swap terá aumentando, já que o arquivo passa a ser usado como um swap complementar. O arquivo temporário é desativado automaticamente ao reiniciar o micro, mas você pode fazê-lo a qualquer momento usando (dentro do diretório onde foi criado o arquivo) o comando “swapoff swap.img”. |
Voltando à questão das partições, o sistema nunca acessa os dados dentro da partição diretamente. Ao invés disso, ele permite que você “monte” a partição em uma determinada pasta e acesse os arquivos dentro da partição através dela, o que nos leva ao comando “mount”.
A sintaxe básica inclui o dispositivo e a pasta onde ele será acessado, como em:
# mount /dev/sdb1 /mnt/sdb1
Na hora de desmontar a partição, você pode especificar tanto o dispositivo, quando a pasta onde ele foi montado, como em:
# umount /mnt/sdb1
No caso do CD-ROM, citamos apenas o dispositivo, sem incluir a partição (já que, diferente de um HD, um CD-ROM não pode ser particionado). Você pode tanto usar o dispositivo correto, como “/dev/hdc” ou “/dev/hdd”, quanto usar o “/dev/cdrom”, um link que é criado pelo sistema apontando para a localização correta:
# mount /dev/cdrom /mnt/cdrom
Se quiser trocar o CD que está na bandeja, você deve primeiro “desmontar” o CD-ROM, com o comando “umount /mnt/cdrom“. O mesmo se aplica a pendrives e HDs externos: é sempre necessário desmontar antes de remover o dispositivo. No caso dos pendrives e HDs, desmontar é fundamental, pois as alterações não são necessariamente salvas imediatamente por causa do cache de disco. Removendo sem desmontar, existe uma probabilidade muito grande das últimas alterações serem perdidas. É muito comum as pessoas gravarem arquivos no pendrive, desplugarem logo depois (sem desmontar) e, ao tentar acessá-los depois, perceberem que os arquivos simplesmente não foram gravados.
Os pontos de montagem, ou seja, as pastas onde as partições serão montadas, podem ser configurados através do arquivo “/etc/fstab“. Quase sempre este arquivo é configurado durante a instalação do sistema, incluindo referências a todas as partições e CD-ROMs disponíveis, de forma que você pode montar as partições digitando apenas “mount /dev/sdb1” (por exemplo), sem precisar usar o comando completo.
Uma dúvida comum é a mensagem “device is busy”, que é muitas vezes exibida ao tentar desmontar um pendrive, ejetar um CD-ROM ou desmontar uma partição de arquivos do HD, como em:
# umount /mnt/sdb1
umount: /: device is busy.
Este erro acontece sempre que existe algum programa acessando a partição como, por exemplo, uma janela do gerenciador de arquivos, um player de áudio tocando músicas salvas dentro dela, ou mesmo uma janela de terminal acessando a pasta.
Você pode descobrir o culpado usando o comando “lsof“, que lista os programas que estão acessando a pasta e impedindo a desmontagem. Você pode chamá-lo tanto especificando a partição, como em “/dev/sdb1”, quanto especificando a pasta onde ela está montada, como em:
$ lsof /mnt/sdb1
Na primeira coluna da lista, você encontra o nome dos programas e na segunda coluna, o PID, que é o número do processo, que pode ser usado como último recurso para fechar o programa “na marra”, usando o comando “kill -9”.
Outra opção é usar o comando “fuser -k”, que tenta finalizar à força todos os programas que estiverem acessando a pasta. Ele não é muito recomendável, pois os resultados são mais imprevisíveis, mas ele pode ser usado em emergências quando, por exemplo, você não consegue ejetar o CD-ROM por que o sistema se recusa a desmontá-lo. Basta especificar a pasta, como em:
$ fuser -k /media/cdrom
Embora continuem sendo importantes e bastante úteis na hora de solucionar problemas ou criar configurações personalizadas, os comandos manuais são cada vez menos usados no dia a dia, devido aos sistemas de montagem automática utilizados nas distribuições.
O princípio é simples: o kernel detecta automaticamente quando novos dispositivos de armazenamento são conectados, criando os dispositivos de acesso e gerando mensagens que disparam a criação de ícones no desktop e outras funções. Ao plugar uma câmera digital em modo de transferência de dados, por exemplo, são inseridas mensagens como estas no log do sistema (que você pode ver usando o comando “dmesg”):
[254728.281982] scsi 8:0:0:0: Direct-Access Sony Sony DSC 6.00 PQ: 0 ANSI: 0 CCS
[254728.286070] sd 8:0:0:0: [sdb] 3973120 512-byte hardware sectors (2034 MB)
[254728.287330] sd 8:0:0:0: [sdb] Write Protect is off
[254728.287336] sd 8:0:0:0: [sdb] Mode Sense: 00 00 00 00
[254728.287342] sd 8:0:0:0: [sdb] Assuming drive cache: write through
[254728.298707] sd 8:0:0:0: [sdb] 3973120 512-byte hardware sectors (2034 MB)
[254728.299830] sd 8:0:0:0: [sdb] Write Protect is off
[254728.299836] sd 8:0:0:0: [sdb] Mode Sense: 00 00 00 00
[254728.299840] sd 8:0:0:0: [sdb] Assuming drive cache: write through
[254728.299850] sdb: sdb1
Pelas mensagens, é possível descobrir que foi plugada uma câmera digital da Sony, com um cartão de memória de 2 GB com uma única partição de dados, que foi detectada pelo sistema como “/dev/sdb1”. Juntamente com a geração das mensagens, o kernel cria uma pasta dentro do diretório /sys (“/sys/block/sdb/sdb1 ” no exemplo), contendo mais informações sobre o dispositivo.
Naturalmente, essas informações não interessam muito ao usuário, que está apenas querendo acessar as fotos, e não ver detalhes sobre o número de blocos do cartão ou sobre os endereços usados. Entram em cena então sistemas de detecção, que monitoram estas informações e executam as ações apropriadas.
Em distribuições antigas o trabalho era feito através de shell-scripts, mas nas atuais entra em cena o HAL (Hardware Abstraction Layer), um serviço de sistema que se encarrega de fazer o “trabalho sujo”, monitorando as informações disponibilizadas pelo kernel (e não mais simplesmente monitorando os arquivos de log) e transmitindo as informações para os aplicativos.
Ele é representado pelo serviço “hald” (que fica ativo por padrão na maior parte das distribuições atuais) e trabalha em conjunto com o serviço “dbus”, que controla a comunicação entre ele e os aplicativos. Caso esteja curioso, as informações coletadas por ele podem ser exibidas usando o comando “lshal”, que exibe a longa lista de informações que é monitorada pelos aplicativos.
Se você rodar o comando “ps aux | grep hald” em uma distribuição atual, vai perceber que existem várias ramificações do hald, responsáveis por monitorar diferentes dispositivos da máquina. O “pooling /dev/sdb (every 2 sec)” no screenshot, por exemplo, indica que ele está monitorando o dispositivo da câmera, realizando checagens a cada dois segundos:
O HAL é integrado a componentes do GNOME e do KDE, que se encarregam de mostrar mensagens quando novos dispositivos são plugados e executar outras funções. Ao plugar uma câmera digital, por exemplo, a presença de arquivos de imagem faz com que o utilitário ofereça a opção de abrí-las diretamente com um gerenciador de fotos, em vez de simplesmente mostrar os arquivos:
No caso dos cartões de memória, pendrives e outros dispositivos de armazenamento removíveis, as partições são montadas automaticamente em pastas dentro do diretório “/media” e (na maioria das distribuições) é criado um ícone no desktop, acompanhado pela abertura de uma janela do gerenciador de arquivos. Ao clicar com o botão direito sobre o ícone, você tem a opção de desmontar a partição.
As partições são montadas de forma automática conforme você clica sobre os ícones, sem que você precise fornecer a senha de root. O HAL se encarrega de ajustar as permissões de acesso, de forma que os arquivos fiquem disponíveis apenas para o seu login (os parâmetros são detalhados no arquivo “/media/.hal-mtab”). Este sistema permite também manter a segurança em servidores de terminais e outros sistemas usados por diversos usuários simultaneamente.
Você vai notar ainda que as entradas referentes às partições de dispositivos removíveis não são mais inseridas no fstab, uma vez que a montagem e a desmontagem é feita diretamente pelo HAL.
Além de ser responsável pelo acesso a dados em dispositivos removíveis, o HAL é utilizado em diversas outras funções do sistema. É ele o responsável por detectar quando um cabo de rede é plugado e transmitir a informação ao NetworkManager, para que ele possa ativar a rede automaticamente, ou por fornecer as informações sobre o hardware da máquina para que o gerenciador de drivers restritos do Ubuntu possa instalar os módulos necessários, por exemplo. |
Outro sistema que permite que as partições sejam montadas e desmontadas sem que você precise fornecer a senha de root é o “fuse”, um módulo do kernel que permite fazer uma montagem “particular”. Ele é usado por diversos aplicativos, entre eles o sshfs, que é usado para montar pastas em servidores remotos via SSH.
Concluindo, de vez em quando (sobretudo em máquinas com vários HDs ou com um HD dividido em várias partições de dados), você vai notar que o boot demora bem mais do que o normal. Se você desativar o splash (para ter acesso às mensagens exibidas no terminal), verá que a demora é causada por mensagens como esta:
/dev/sdb1 has been mounted 60 times without being checked, check forced.
Ela ocorre devido a uma precaução do sistema contra a possibilidade de perda de arquivos devido a problemas na estrutura da partição. Todos os sistemas de arquivos atuais utilizam um sistema de journaling, que armazena uma lista das alterações feitas. Sempre que a partição é montada, o sistema verifica o journal, concluindo qualquer operação pendente, um teste rápido que não é inteiramente à prova de falhas.
Para evitar a possibilidade de que pequenos problemas na estrutura da partição se acumulem até se tornarem um problema maior, o sistema executa um teste mais demorado periodicamente, sempre que a partição é montada um determinado número de vezes. Como as partições são geralmente montadas durante o boot, é nele que a demora se manifesta.
É possível aumentar ou mesmo desativar o contador (usando o comando “tune2fs”), mas isso não é muito recomendável. O melhor nesse caso é ter paciência e simplesmente deixar o sistema fazer seu trabalho.
Deixe seu comentário