101.1 - Linux - Arquitetura de Sistema
Dispositivos de armazenamento
A exceção a esse padrão ocorre com cartões
de memória (cartões SD) e dispositivos NVMe (SSD conectados ao barramento PCI Express). Para os
cartões SD, os caminhos /dev/mmcblk0p1, /dev/mmcblk0p2 etc. são usados para a primeira e a
segunda partições do dispositivo identificado primeiro e /dev/mmcblk1p1, /dev/mmcblk1p2, etc.
identificam a primeira e a segunda partições do dispositivo identificado em segundo lugar. Os
dispositivos NVMe recebem o prefixo nvme, como em /dev/nvme0n1p1 e /dev/nvme0n1p2.
As partições são listadas em ordem numérica. Os
caminhos /dev/sda1, /dev/sda2, etc. são usados para a primeira e a segunda partições do dispositivo
de bloco identificado primeiro e /dev/sdb1, /dev/sdb2, etc. identificam a primeira e a segunda
partições do dispositivo de bloco identificado a seguir.
A partir da versão 2.4 do kernel Linux em diante, a maioria dos dispositivos de armazenamento
passou a ser identificada como dispositivos SCSI, independentemente do tipo de hardware. Os
dispositivos de bloco IDE, SSD e USB são prefixados com sd. Para os discos IDE, o prefixo sd é usado,
mas a terceira letra é escolhida dependendo da unidade ser mestre ou escrava (no primeiro canal
IDE, o mestre será sda e o escravo será sdb).
Os dispositivos de CD/DVD e de disquete, por exemplo, receberão nomes específicos em
/dev: uma unidade de CD/DVD conectada ao segundo canal IDE será identificada como /dev/hdc
(/dev/hda e /dev/hdb são reservados para os dispositivos mestre e escravo no primeiro canal IDE) e
uma unidade de disquete antiga será identificada como /dev/fdO, /dev/fd1, etc
No Linux, os dispositivos de armazenamento são genericamente chamados de dispositivos de bloco,
porque os dados que contêm são lidos em blocos de dados armazenados em buffer com diferentes
tamanhos e posições. Cada dispositivo de bloco é identificado por um arquivo no diretório /dev,
sendo que o nome do arquivo depende do tipo de dispositivo (IDE, SATA, SCSI, etc.) e de suas
partições.
Arquivos de informação e de dispositivo
À medida que novos dispositivos são detectados, o udev pesquisa uma regra correspondente nas
regras predefinidas armazenadas no diretório /etc/udev/rules.d/. As regras mais importantes são fornecidas pela distribuição, mas é possível adicionar novas para casos específicos.
Nas distribuições Linux atuais, o udev é responsável pela identificação e configuração dos
dispositivos já presentes durante a inicialização da máquina (detecção coldplug) e dos dispositivos
identificados enquanto o sistema está em execução (detecção hotplug). O Udev utiliza o SysFS, o
pseudosistema de arquivos montado em /sys para informações relacionadas ao hardware.
Os dispositivos removíveis são manipulados pelo subsistema udev, que cria os dispositivos
correspondentes em /dev. O kernel do Linux captura o evento de detecção de hardware e o passa
para o processo udev, que por sua vez identifica o dispositivo e cria dinamicamente os arquivos
correspondentes em /dev, usando regras predefinidas.
Outro diretório diretamente relacionado aos dispositivos em um sistema Linux padrão é o /dev. Cada
arquivo dentro de /dev é associado a um dispositivo do sistema, particularmente dispositivos de
armazenamento. Um disco rígido IDE legado, por exemplo, quando conectado ao primeiro canal IDE
da placa-mãe, é representado pelo arquivo /dev/hda. Cada partição desse disco será identificada por
/dev/hda1, /dev/hda2 e assim por diante, até a última partição encontrada.
Os arquivos dentro do diretório /sys têm funções semelhantes às do /proc. No entanto, o diretório
/sys tem o objetivo específico de armazenar informações do dispositivo e dados do kernel
relacionados ao hardware, ao passo que /proc também contém informações sobre diversas estruturas
de dados do kernel, incluindo processos em execução e configurações.
Esses sistemas de arquivos não se destinam ao armazenamento convencional de arquivos
e, portanto, são chamados de pseudosistemas de arquivos e existem apenas enquanto o sistema
estiver em execução. O diretório /proc contém arquivos com informações sobre processos em
execução e recursos de hardware. Alguns dos arquivos importantes em /proc para a inspeção de
hardware são:
/proc/dma
Lista os canais registrados de DMA (acesso direto à memória) em uso.
/proc/ioports
Lista as regiões de portas de Entrada/Saída registradas atualmente e em uso.
/proc/interrupts
Uma lista de números de interrupções por dispositivo de entrada e saída em cada CPU.
/proc/cpuinfo
Lista informações detalhadas sobre a(s) CPU(s) encontradas pelo sistema operacional.
Os comandos lspci, lsusb e lsmod atuam como front-ends para ler as informações de hardware
armazenadas pelo sistema operacional. Este tipo de informação é mantido em arquivos especiais nos
diretórios /proc e /sys. Esses diretórios são pontos de montagem para sistemas de arquivos que não
estão presentes em uma partição de dispositivo, mas somente no espaço de RAM usado pelo kernel
para armazenar a configuração do tempo de execução e informações sobre os processos em
execução.
Inspeção de dispositivos no Linux
Existem duas maneiras básicas de identificar recursos de hardware em um sistema Linux: usar comandos especializados ou consultar arquivos específicos em
sistemas de arquivos especiais.
Comandos para inspeção
modinfo o comando modinfo mostra uma descrição, o
arquivo, o autor, a licença, a identificação, as dependências e os parâmetros disponíveis para o
módulo fornecido.
A opção -p fará com que o comando modinfo exiba todos os parâmetros disponíveis e ignore as outras informações: modinfo -p nouveau
Para que os parâmetros personalizados de um módulo se tornem persistentes,
inclua-os no arquivo /etc/modprobe.conf ou em arquivos individuais com a extensão .conf no
diretório /etc/modprobe.d/`.
modprobe O comando modprobe pode ser usado para carregar e descarregar módulos do kernel:
Se um módulo estiver causando problemas, o arquivo /etc/modprobe.d/blacklist.conf pode ser
usado. Por exemplo, para impedir o carregamento automático do módulo nouveau, a linha blacklist
nouveau deve ser adicionada ao arquivo /etc/modprobe.d/blacklist.conf.
para descarregar um módulo e seus módulos relacionados,
desde que não estejam sendo usados por um processo em execução, use o comando modprobe -r. modprobe -r snd-hda-intel
lsmod É comum que haja um grande conjunto de módulos de kernel carregados em um sistema Linux padrão a qualquer momento. Para interagir com eles, o melhor jeito é usar os comandos fornecidos pelo pacote kmod, um conjunto de ferramentas para realizar tarefas comuns com os módulos do kernel Linux, como inserir, remover, listar, verificar propriedades, resolver dependências e aliases.
O comando lsmod, por exemplo, mostra todos os módulos carregados no momento: lsmod
lsusb
Lista os dispositivos USB (Universal Serial Bus) atualmente conectados à máquina. Embora
existam dispositivos USB para praticamente qualquer finalidade imaginável, a interface USB é
amplamente usada para conectar dispositivos de entrada — teclados, dispositivos apontadores — e
mídias de armazenamento removíveis.
Para verificar qual dispositivo está
usando o módulo btusb, presente na lista anterior, os números de Bus e Dev devem ser fornecidos à
opção -s do comando lsusb: lsusb -s 01:20
Com a opção -t, o comando lsusb mostra os mapeamentos do dispositivo USB atual na forma de
árvore hierárquica: lsusb -t
Como no
caso do lspci, a opção -v exibe uma saída mais detalhada. Um dispositivo específico pode ser
selecionado para inspeção, bastando fornecer seu ID com a opção -d: lsusb -v -d 1781:0c9f
O comando lsusb é semelhante a lspci, mas lista exclusivamente as informações relativas à USB: lsusb
lspci
Mostra todos os dispositivos atualmente conectados ao barramento PCI (Peripheral Component
Interconnect). Os dispositivos PCI podem ser um componente conectado à placa-mãe, como um
controlador de disco, ou uma placa de expansão instalada em um slot PCI, como uma placa de
vídeo externa.
Outra maneira de verificar qual módulo do kernel está sendo usado para o dispositivo especificado
seria usar a opção -k, disponível nas versões mais recentes do lspci: lspci -s 01:00.0 -k
O comando lspci mostra mais detalhes sobre
um dispositivo específico se seu endereço for fornecido com a opção -s, acompanhada da opção -v: lspci -s 04:02.0 -v
A seguinte saída do comando lspci, por exemplo, mostra alguns dispositivos identificados: lspci
Identificar e editar configurações de hardware
Utilitário de configuração (firmware)
Com as teclas del e de função f2 e f12, invocamos o utilitário de configuração
Se a máquina estiver equipada com vários dispositivos de armazenamento, é importante definir qual
deles possui o carregador de inicialização correto e deve ser o primeiro na ordem de inicialização do
dispositivo. O sistema operacional pode não carregar se o dispositivo incorreto aparecer primeiro na
lista de verificações de inicialização da BIOS.
Algumas CPUs oferecem recursos que às vezes não são
necessários para aquela instalação específica, podendo assim ser desativados. Isso reduz o consumo
de energia e contribui para aumentar a proteção do sistema, já que os recursos da CPU que
contenham bugs conhecidos também podem ser desativados.
Existem tecnologias de RAM, por exemplo, que são compatíveis com taxas de
transferência de dados mais rápidas do que os valores padrão, e portanto é recomendável alterá-los
para os valores especificados pelo fabricante
UEFI (Unified Extensible Firmware Interface)
BIOS (Basic Input/Output System)
No utilitário de configuração da BIOS, é possível ativar e desativar os periféricos integrados, ativar a
proteção básica contra erros e alterar configurações de hardware como o IRQ (solicitação de
interrupção) e o DMA (acesso direto à memória).