modprobe e lsmod: Gerenciando Modulos do Kernel
O Que Voce Vai Aprender
- Como usar
lsmodpara ver quais modulos estao atualmente carregados - Como usar
modprobepara carregar e descarregar modulos com suas dependencias - O fluxo de trabalho pratico para
modinfo,blackliste carregamento no boot
Resumo Rapido
- Ver estado ->
lsmod(somente leitura, formata/proc/modules) - Carregar / remover ->
modprobe(resolve dependencias; eviteinsmod/rmmoddiretamente) - Configurar ->
/etc/modprobe.d/*.conf(opcoes, blacklist) e/etc/modules-load.d/*.conf(carregar no boot)
Premissas
- Funciona da mesma forma no Ubuntu e nos sistemas da familia RHEL
- Arquivos de modulos ficam em
/lib/modules/$(uname -r)/ - Carregar / remover modulos geralmente requer
root(sudo)
O Que E o lsmod?
Conclusao: lsmod e um comando somente leitura que lista os modulos do kernel atualmente carregados. Ele simplesmente formata o conteudo de
/proc/modules.
$ lsmod
Module Size Used by nf_conntrack 172032 2 nf_nat,xt_conntrack xfs 2068480 1 vfat 24576 1
O que as colunas significam:
- Module: o nome do modulo
- Size: tamanho na memoria (bytes)
- Used by: a contagem de referencias seguida dos modulos que dependem dele
Um modulo cuja contagem de Used by nao e 0 esta em uso por outros e nao pode ser removido assim. Descarregue os dependentes primeiro, ou deixe modprobe -r resolver as dependencias por voce.
Para apenas verificar se um modulo esta carregado, combine com grep:
$ lsmod | grep nf_conntrack
O Que o modprobe Pode Fazer?
Conclusao: modprobe carrega e descarrega modulos enquanto resolve automaticamente as dependencias, diferente dos comandos de nivel mais baixo insmod e rmmod.
Carregar um modulo
$ sudo modprobe nf_conntrack
Quaisquer modulos dos quais ele depende sao carregados primeiro, automaticamente. Voce passa apenas o nome do modulo, sem necessidade do caminho .ko.
Descarregar um modulo (-r)
$ sudo modprobe -r nf_conntrack
-r (--remove) remove o alvo mais quaisquer modulos de dependencia que somente ele estava usando. Falha se o modulo ainda esta em uso (Used by diferente de zero).
Visualizar o que aconteceria (-n -v)
$ modprobe -n -v nf_conntrack
insmod /lib/modules/6.8.0-106-generic/kernel/net/netfilter/nf_conntrack.ko.zst
-n (--dry-run) nao carrega nada de fato; combinado com -v (--verbose) imprime os passos que seriam executados. Util antes de fazer de verdade.
modprobe busca em /lib/modules/$(uname -r)/. Um erro Module not found frequentemente significa uma incompatibilidade de versao entre o kernel em execucao e os modulos instalados (por exemplo, o kernel foi atualizado mas o sistema nao foi reiniciado).
Qual a Diferenca do insmod / rmmod?
Conclusao: insmod e rmmod operam em um unico arquivo .ko diretamente e nao fazem resolucao de dependencias, entao na pratica voce usa modprobe.
| Operacao | Recomendado (resolve deps) | Baixo nivel (sem deps) |
|---|---|---|
| Carregar | modprobe mod |
insmod /path/mod.ko |
| Descarregar | modprobe -r mod |
rmmod mod |
| Nomeacao | nome do modulo | caminho completo (insmod) |
insmod nao carrega dependencias, entao falha com erros como Unknown symbol quando elas estao faltando. Use modprobe a menos que tenha um motivo especifico para nao usar.
Inspecionando um Modulo com modinfo
Conclusao: modinfo mostra o caminho do arquivo, descricao, dependencias e parametros configuraveis de um modulo -- use para investigar antes de carregar.
$ modinfo nf_conntrack
filename: /lib/modules/6.8.0-106-generic/.../nf_conntrack.ko.zst license: GPL description: Netfilter connection tracking core depends: nf_defrag_ipv4,nf_defrag_ipv6,libcrc32c parm: expect_hashsize:uint
Linhas que valem anotar:
- depends: modulos de dependencia (o que
modproberesolve automaticamente) - parm: parametros que voce pode passar no momento do carregamento
- filename: o caminho real do
.ko(confirme que corresponde ao kernel em execucao)
Carregar com um parametro temporariamente:
$ sudo modprobe nf_conntrack expect_hashsize=2048
Como Tornar Parametros ou Blacklists Persistentes?
Conclusao: Configuracoes persistentes vao em
/etc/modprobe.d/*.conf--optionspara parametros eblacklistpara suprimir carregamento automatico.
Persistir um parametro (options)
/etc/modprobe.d/nf_conntrack.conf:
options nf_conntrack expect_hashsize=2048
Desabilitar um modulo (blacklist)
Quando voce quer suprimir o carregamento automatico de um modulo (por exemplo, para parar um driver conflitante).
/etc/modprobe.d/blacklist-mymod.conf:
blacklist mymod
blacklist nao impede que um modulo seja carregado como dependencia de outro modulo. Para bloquear completamente, adicione tambem install mymod /bin/true. E para parar um modulo embutido no initramfs, regenere-o com sudo update-initramfs -u (familia Debian).
Carregar no boot
Liste os nomes dos modulos (um por linha) em /etc/modules-load.d/mymod.conf, e systemd-modules-load.service os carrega no boot.
nf_conntrack
Para Que Serve o depmod?
Conclusao: depmod gera o mapa de dependencias de modulos (
modules.dep) no qual o modprobe se baseia para resolver dependencias.
Quando voce adiciona um novo .ko em /lib/modules/$(uname -r)/ ou atualiza o kernel, atualize o mapa de dependencias.
$ sudo depmod -a
Isso normalmente e executado automaticamente durante o gerenciamento de pacotes (apt / dnf) e atualizacoes do kernel, entao voce so executa manualmente apos instalar um modulo compilado customizado.
Solucao de Problemas
Conclusao: A maioria das falhas sao incompatibilidade de versao, em uso, ou privilegios insuficientes. A mensagem de erro indica qual.
| Sintoma | Causa provavel | Solucao |
|---|---|---|
Module not found |
Incompatibilidade de kernel / nao instalado | Verifique uname -r -> reinicie / depmod -a |
Module ... is in use |
Used by diferente de zero |
Pare os dependentes, ou use modprobe -r (nao rmmod) |
Operation not permitted |
Privilegios insuficientes | Adicione sudo |
Unknown symbol in module |
Deps nao resolvidas (ao usar insmod) | Use modprobe / execute depmod -a |
Erros do lado do kernel durante carregamento / descarregamento aparecem no dmesg.
$ sudo dmesg | tail
Resumo: Separar Inspecao da Acao
Conclusao: Inspecione com lsmod / modinfo, aja com modprobe, e mantenha configuracoes persistentes em /etc/modprobe.d/ e /etc/modules-load.d/.
- Inspecionar ->
lsmod(listar) /modinfo(detalhes) - Agir ->
modprobe(carregar) /modprobe -r(remover) - Configurar ->
options(parametros) /blacklist(desabilitar) /modules-load.d(no boot) - Quando travado -> refine com
dmesgemodprobe -n -v